Will man auf dem Arduino UNO/Nano/Mini nicht extra einen Kanal für den Reset belegen, so gibt es auch mindestens zwei Möglichkeit ihn per Software zu resetten. Die einfachste ist eine Funktion zu definieren, die auf Adresse null zeigt:
Das kann man einmal so machen
void software_Reset() { asm volatile (" jmp 0"); }
oder so
void(* resetFunc) (void) = 0; void software_Reset() { resetFunc(); }
Da aber der Arduino auch einen Watchdog hat, gibt es noch eine elegantere Lösung, vorallem weil die oberen doch etwas fragwürdig sind.
#include <avr/wdt.h> void softwareReset( ) { wdt_enable( WDTO_15MS); } void setup() { MCUSR = 0; wdt_disable(); pinMode(13, OUTPUT); Serial.begin(9600); while (!Serial) { } Serial.println("start"); } void loop() { if (Serial.available() > 0) { char a = Serial.read(); Serial.println(a); if ( a == 'b') { softwareReset(); Serial.println("reset"); } } digitalWrite(13, HIGH); delay(1000); digitalWrite(13, LOW); delay(1000); }