Arduino Nano per Software resetten

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);
}
Advertisements

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s