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ı) //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); } < 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ı > |
Bildirim