Hallo
ich benötige nochmal eure Hilfe. Ich möchte von außen den Arduino neu starten können, indem ich per serieller Schnittstelle den Befehl 'R' sende. Der Watchdog springt auch an, aber dann blinkt die LED an Pin 13 schnell und nur ein Strom abschalten hilft. Durch google hab ich bisher schon finden können, das mit dem Neustart auch die Zeit für den WD auf den kürzesten Wert gesetzt wird, aber wie erreiche ich einen normalen Start?
wdt_disable(); am Anfang der setup Prozedur hat auch nicht geholfen.
Hier der Code
#include <avr/wdt.h> // für Watchdog
char sKB; // Serial übertragenenr Kennbuchstabe
unsigned long lWatchdogEingang = 0; // letzte Nachricht von außen
void setup()
{
// Aktiviere Watchdog mit 8s Zeitkonstante
// =======================================
wdt_enable(WDTO_8S);
pinMode(LED_BUILTIN, OUTPUT);
Serial.begin(9600);
// Signalisieren, dass der Arduino neu gestartet wurde;
Serial.println(F("Test-Sketch"));
digitalWrite(LED_BUILTIN, HIGH);
delay(500);
digitalWrite(LED_BUILTIN, LOW);
delay(500);
digitalWrite(LED_BUILTIN, HIGH);
delay(500);
digitalWrite(LED_BUILTIN, LOW);
Serial.println(F(";Setup fertig"));
}
// Loop
// ====
void loop()
{
// internen Watchdog Streicheln
wdt_reset();
Serial.println(F("loop"));
digitalWrite(LED_BUILTIN, HIGH);
delay(200);
digitalWrite(LED_BUILTIN, LOW);
delay(200);
digitalWrite(LED_BUILTIN, HIGH);
delay(200);
digitalWrite(LED_BUILTIN, LOW);
}
void serialEvent() {
sKB = (char)Serial.read();
evalSerialData();
}
void evalSerialData()
{
switch (sKB) {
case 'R':
Serial.print(F("SoftwareReset"));
// nach 8S beisst der Watchdog zu
delay(9000);
break;
}
sKB = ' ';
}
Vielen Dank für eure Unterstützung und viele Grüße
Frank