Merhaba arkadaşlar bir arkadaşımdan projem için kod yazması konusunda destek almıştım ancak kodda hatalar var istikrarlı çalışmıyor. Aşağıda paylaşıyorum destek olanlara şimdiden teşekkürler. Projem Arduino ile tablet açma kapama üzerine; kontak açınca d5 e negatif tetik gidiyor ve tablete açma komutu gidiyor ancak d3 de 5v giriş olmasına rağmen yani tableti 0.45 saniye gitmesi gereken tetik 4 saniye gidiyor sanki hala kapalı algılıyor bazen ise hep kapalı gibi algılıyor
//Ayarlar; #define kapamaSuresi 12 //Kontak kapandıktan sonra nekadar sürede tablet tam kapatılsın.(saat) #define sayac_onoff 1 //kontak kapanınca yukarıdaki süreden sonra tablet kapansın mı?(1=açık, 0=kapalı)
void loop() { k_durum = digitalRead(kntk); //kontak durumunun oku ve değişkene kaydet. whl_girdi = 0; //kontağa bağlı while döngüsüne hiç girilmedi veya çıkıldı ise değeri 0 yap. yeniZaman = millis(); //yenizaman değişkenine güncel sayaç zamanını kaydet.
while(k_durum == LOW) //kontak açılınca negatif sinyal gelecek ve döngü başlayacak. { if(whl_girdi == 0 && t_durum == HIGH) //tablet açık algılandı ise 0,45 sn butona güç ver. { digitalWrite(but,HIGH); delay(450); digitalWrite(but,LOW); } if(whl_girdi == 0 && t_durum == LOW) //tablet kapalı algılandı ise 4 sn butona güç ver. { digitalWrite(but,HIGH); delay(4000); digitalWrite(but,LOW); }
k_durum = digitalRead(kntk); //kontak durumu değişkenini güncelle. if(k_durum == HIGH || sicaklik <45)//kontak kapalı veya sıcaklık 45C altında ise fanı kapat. { digitalWrite(fan_h,LOW); digitalWrite(fan_l,LOW); } else if(sicaklik>45 && sicaklik <65)//sıcaklık 45C ve 65C arasında ise fanı yavaş hızında çalıştır. { digitalWrite(fan_h,LOW); digitalWrite(fan_l,HIGH); } else if(sicaklik>65) //sıcaklık 65C denn yüksek ise fanı hızlı hızında çalıştır. { digitalWrite(fan_h,HIGH); digitalWrite(fan_l,LOW); } r_durum = digitalRead(r_in);//geri vites durum değişkenini güncelle. if(r_durum == LOW) //geri vites algılandığında, +5v çıkış ver. { digitalWrite(r_out,HIGH); } else //geri viteste değil ise çıkış gücünü kes. digitalWrite(r_out,LOW);
if(k_durum == HIGH) //kontak kapalı algılandı ise fanı durdur 8 saniye bekle ve 0.45 sn butona güç ver. { delay(8000); digitalWrite(but,HIGH); delay(450); digitalWrite(but,LOW); } whl_girdi = 1; //buton fonksiyonlarının tek sefer çalışması için değişkenlere döngüye girildiğini bildiren değişken. //sıcaklık hesaplamaları. lm35_deger = analogRead(lm35); //analog girişteki ham değeri değer değişkenine kaydet. lm35_v = lm35_deger* (5000/1024.0); //ham değerin voltaj karşılığını hesapla. sicaklik = lm35_v/10.0; //her 10mV = 1C
kapandiZaman == millis(); //döngüden çıkarken kontak kapama zamanını kaydet. } if(zamanDurum == 1 && yeniZaman-kapandiZaman > kapamaSuresi_h) //milisaniye cinsinden tabletin tam kapanması için geçen süre. digitalWrite(but,HIGH); delay(11000); digitalWrite(but,LOW); }
DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.
Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.
Merhaba. Mesajın bu hâliyle sorunu anlamak zor, tablet modeli ve devre şemaları eklerseniz daha iyi olur. Ayrıca varsa örnek aldığınız projelerin fotoğraflarını, videolarını veya proje sayfalarını da ekleyin. Kolay gelsin.
Projem Arduino ile tablet açma kapama üzerine;
kontak açınca d5 e negatif tetik gidiyor ve tablete açma komutu gidiyor ancak d3 de 5v giriş olmasına rağmen yani tableti 0.45 saniye gitmesi gereken tetik 4 saniye gidiyor sanki hala kapalı algılıyor bazen ise hep kapalı gibi algılıyor
//Ayarlar;
#define kapamaSuresi 12 //Kontak kapandıktan sonra nekadar sürede tablet tam kapatılsın.(saat)
#define sayac_onoff 1 //kontak kapanınca yukarıdaki süreden sonra tablet kapansın mı?(1=açık, 0=kapalı)
//pin tanımlamaları;
#define lm35 A0
#define r_out 2
#define t_alg 3
#define but 4
#define kntk 5
#define r_in 6
#define fan_h 7
#define fan_l 8
int lm35_deger; //analog pinden okunan ham değer.
float lm35_v; //ham değerin voltaj olarak karşılığı.
float sicaklik; //lm35 veri sayfasında belirtilen her bir derecede 10mV gerilimden hesplanan sıcaklık değeri.
bool t_durum; //tablet açık/kapalı durumu.
bool k_durum; //kontak açık/kapalı durumu.
bool r_durum; //geri vites durumu.
bool whl_girdi; //döngü içerisinde her seferinde tablet tuşuna basılmaması için değişkenimiz.
unsigned long kapandiZaman = 0; //kontağın kapandığı sayaç zamanını kaydeden değişken.
unsigned long yeniZaman; //güncel sayaç zamanını kaydettiğimiz değişken.
int kapamaSuresi_h;
bool zamanDurum = sayac_onoff;
void setup()
{
//pin tanımlama ve ayarları;
pinMode(lm35,INPUT); //LM35
pinMode(r_out,OUTPUT); //GERİ VİTES ÇIKIŞ
pinMode(t_alg,INPUT); //TABLET AÇIK ALGILAMA
pinMode(but,OUTPUT); //BUTON ÇIKIŞ
pinMode(kntk,INPUT_PULLUP); //KONTAK ALGILAMA
pinMode(r_in,INPUT_PULLUP); //GERİ VİTES ALGILAMA
pinMode(fan_h,OUTPUT); //FAN HIZLI ÇIKIŞ
pinMode(fan_l,OUTPUT); //FAN YAVAŞ ÇIKIŞ
//çıkışlarımızın ve değişkenlerin varsayılan değerleri;
digitalWrite(r_out,LOW); digitalWrite(but,LOW); digitalWrite(fan_h,LOW); digitalWrite(fan_l,LOW);
k_durum = 1;
r_durum = 1;
whl_girdi = 0;
t_durum = digitalRead(t_alg); //tablet açık/kapalı durumunu oku ve t_durum değişkenine kaydet.
kapamaSuresi_h = kapamaSuresi*60000;// saat cinsinde kaydedilen kapama süresini milisaniye cinsine çevirme.
}
void loop() {
k_durum = digitalRead(kntk); //kontak durumunun oku ve değişkene kaydet.
whl_girdi = 0; //kontağa bağlı while döngüsüne hiç girilmedi veya çıkıldı ise değeri 0 yap.
yeniZaman = millis(); //yenizaman değişkenine güncel sayaç zamanını kaydet.
while(k_durum == LOW) //kontak açılınca negatif sinyal gelecek ve döngü başlayacak.
{
if(whl_girdi == 0 && t_durum == HIGH) //tablet açık algılandı ise 0,45 sn butona güç ver.
{
digitalWrite(but,HIGH); delay(450); digitalWrite(but,LOW);
}
if(whl_girdi == 0 && t_durum == LOW) //tablet kapalı algılandı ise 4 sn butona güç ver.
{
digitalWrite(but,HIGH); delay(4000); digitalWrite(but,LOW);
}
k_durum = digitalRead(kntk); //kontak durumu değişkenini güncelle.
if(k_durum == HIGH || sicaklik <45)//kontak kapalı veya sıcaklık 45C altında ise fanı kapat.
{
digitalWrite(fan_h,LOW);
digitalWrite(fan_l,LOW);
}
else if(sicaklik>45 && sicaklik <65)//sıcaklık 45C ve 65C arasında ise fanı yavaş hızında çalıştır.
{
digitalWrite(fan_h,LOW);
digitalWrite(fan_l,HIGH);
}
else if(sicaklik>65) //sıcaklık 65C denn yüksek ise fanı hızlı hızında çalıştır.
{
digitalWrite(fan_h,HIGH);
digitalWrite(fan_l,LOW);
}
r_durum = digitalRead(r_in);//geri vites durum değişkenini güncelle.
if(r_durum == LOW) //geri vites algılandığında, +5v çıkış ver.
{
digitalWrite(r_out,HIGH);
}
else //geri viteste değil ise çıkış gücünü kes.
digitalWrite(r_out,LOW);
if(k_durum == HIGH) //kontak kapalı algılandı ise fanı durdur 8 saniye bekle ve 0.45 sn butona güç ver.
{
delay(8000);
digitalWrite(but,HIGH); delay(450); digitalWrite(but,LOW);
}
whl_girdi = 1; //buton fonksiyonlarının tek sefer çalışması için değişkenlere döngüye girildiğini bildiren değişken.
//sıcaklık hesaplamaları.
lm35_deger = analogRead(lm35); //analog girişteki ham değeri değer değişkenine kaydet.
lm35_v = lm35_deger* (5000/1024.0); //ham değerin voltaj karşılığını hesapla.
sicaklik = lm35_v/10.0; //her 10mV = 1C
kapandiZaman == millis(); //döngüden çıkarken kontak kapama zamanını kaydet.
}
if(zamanDurum == 1 && yeniZaman-kapandiZaman > kapamaSuresi_h) //milisaniye cinsinden tabletin tam kapanması için geçen süre.
digitalWrite(but,HIGH); delay(11000); digitalWrite(but,LOW);
}
DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.
Üye Ol Şimdi DeğilÜye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.
< Bu mesaj bu kişi tarafından değiştirildi ergunka07 -- 2 Aralık 2024; 12:9:17 >
< Bu ileti mobil sürüm kullanılarak atıldı >