If you want to RESET Arduino from the beginning without manually pressing the RESET button, there are a few ways. Here are two ways, using minimal wiring / circuitry.
Step 1: Using 1 wire connected to the RESET pin
1. electronically, using only 1 wire connecting an OUTPUT pin (12 in this example) to the RESET pin. (see the circuit)
In this example, pin 13, connected to the internal LED pin 13 is blinking. Pin 12 gets connected to the RESET pin by one wire.
-Typically, this would be a problem because when the application starts up, all pins get pulled LOW. This would therefore disable Arduino from every running. BUT, the trick is: in setup() function, the FIRST thing that happens is we write HIGH to the pin 12, which is called our reset pin (digitalWrite(resetPin, HIGH), thereby pulling the Arduino RESET pin HIGH.
int led = 13;//pin 13 as OUTPUT LED pin int resetPin = 12; // the setup routine runs once when you press reset: void setup() { digitalWrite(resetPin, HIGH); delay(200); // initialize the digital pin as an output. pinMode(led, OUTPUT); pinMode(resetPin, OUTPUT); Serial.begin(9600);//initialize Serial Port Serial.println("reset");//print reset to know the program has been reset and //the setup function happened delay(200); } // the loop routine runs over and over again forever: void loop() { delay(10); digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level) Serial.println("on"); delay(1000); // wait for a second digitalWrite(led, LOW); // turn the LED off by making the voltage LOW Serial.println("off"); delay(1000); // wait for a second Serial.println("resetting"); delay(10); digitalWrite(resetPin, LOW); Serial.println("this never happens"); //this never happens because Arduino resets }
Step 2: Using just software
In this example, you do not need any extra wiring. We initialize the reset function, then call reset.
void(* resetFunc) (void) = 0;//declare reset function at address 0
…
resetFunc(); //call reset
int led = 13;
// the setup routine runs once when you press reset:
void setup() {
// initialize the digital pin as an output.
pinMode(led, OUTPUT);
Serial.begin(9600);//initialize the serial port
}
void(* resetFunc) (void) = 0; //declare reset function @ address 0
// the loop routine runs over and over again forever:
void loop() {
digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level)
Serial.println(“on”);
delay(1000); // wait for a second
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
Serial.println(“off”);
delay(1000); // wait for a second
Serial.println(“resetting”);
resetFunc(); //call reset
delay(100);
Serial.println(“never happens”);
}
Source: Two ways to reset arduino in software