kolay gelsin
arduino projemde boy ve kiloyu ölçüp yazdırıyorum. Normalde program çalışıyor. ancak bir saat bazen de iki saat bekledikten sonra ölçüm yapıyorum ölçümü yapıyor ancak yazdır butonuna bastığım zaman yazdırmıyor ve ölçüm sonucu ekranda kalıyor. whatchdog yüklemeden önce fişi çekene kadar sonuç ekranda kalıyordu. şimdi whatchdog ile resetliyor. kodu internetten bulup yazmıştım. kodun ilgili kısmı şu şekilde. yardımcı olursanız çok sevinirim.
measureHeight();
measureWeight();
delay(1000);
measureHeight();
measureWeight();
delay(1000);
wdt_reset();
turnOffDisplays();
delay(500);
displayHeight();
displayWeight();
delay(500);
turnOffDisplays();
delay(500);
displayHeight();
displayWeight();
wdt_reset();
previousTimeButton=millis();
do
{
currentTimeButton=millis();
if (currentTimeButton-previousTimeButton>=buttonInterval)
{
//5000ms geçti
yazdirSureBitti=true;
break;
}
} while(digitalRead(yazdirPin)==HIGH);
//Buton basma için zaman geçti
if (yazdirSureBitti==false)
{
print();
}
yazdirSureBitti=false; //
wdt_reset();
}
Ornek kodu ve nasil kullanim yapildigini anlatan turkce kaynak eklemistim. Ona bakarak (yazdigim kisa ornek koda gore) yapman lazim. Biraz kurcala. Ayrica her pine interrupt eklemezsin ama 2 ye olur. Biraz kurcala yaparsin. Bişey değil
pin 7 jeton makinasına bağlı jeton atınca tartıyor. pin 7 ye interrupt ekleyebibilir misiniz
benim kod için ekleme yapabilmeniz mümkün mü pin 2 için 🙂
bence bu uygulamada watchdog dan önce uzun süre bekleme sırasında arduinoyu yormama adına ölçe işlemini bir interrupt ile başlatman daha doğru olur. interrupt: arduino üzerindeki özel pinlere tanımlanan interrupt fonksiyonu sayesinde bu pinlerbağlı buton tıklandığında normal loop döngüsü rutininden çıkıp sizin belirlediğiniz fonksiyonu başlatır. loop döngüsünün içi boş olsa bile interrup başlatıldığında belirlediğiniz işlemleri yapar.
Örnek kullanımı:
const byte ledPin = 13; const byte interruptPin = 2; volatile byte state = LOW; void setup() { pinMode(ledPin, OUTPUT); pinMode(interruptPin, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(interruptPin), blink, CHANGE); } void loop() { digitalWrite(ledPin, state); } void blink() { state = !state; }
faydalı linkler
- http://www.elektrobot.net/arduino-ile-interrupt-kullanimi-ve-uygulamalari/
- https://www.arduino.cc/reference/en/language/functions/external-interrupts/attachinterrupt/
- https://www.allaboutcircuits.com/technical-articles/using-interrupts-on-arduino/