6 Ways to Stop an Arduino Running (resets, loops and more)
An Arduino can be stopped from running by unplugging the power, pressing the reset button, triggering an external reset, or by executing certain commands in a sketch such as sleep. Any of these approaches can be used to stop an LED blinking, stop a sketch running, or generally stop any Arduino program from processing data.
In this guide I’ve put together a list of all the different ways you can stop an Arduino running, including some out-of-the-box ideas such as using the watchdog timer.
1. Turn off the power by unplugging the Arduino safely
An Arduino can be safely disconnected from a power supply typically at any time. When disconnected, it will stop running its current program and lose nearly all of its memory. Only data saved to the EEPROM and program memory will be preserved. When power is restored, the Arduino will commence running its last sketch from the setup() function.
The only situation so far I’ve found unsafe to unplug an Arduino is when it’s being programmed. Even then, I have removed the power when the IDE is programming it and it seems to still be OK. I imagine if you’re uploading a new bootloader, that might be a time to be careful about unplugging it.
When the power is restored to an Arduino:
- It runs the setup() function again
- All variables and data are gone (unless saved safely – see below)
- Any peripherals will have to be set up again
Variables and data can be safely saved when the power is shut off by using the EEPROM, which does not lose memory when power to the Arduino is disconnected. EEPROM is a section of memory that is not lost when an Arduino is reset or loses power. It can be thought of as a small SD card for an Arduino.
Please enable JavaScript
There is a limit on how many times the EEPROM can be written to: Approximately 100,000 writes per address. I’ve never seen what happens when this limit is exceeded, though I imagine the Arduino will eventually get to the point where writing to the used-up address does nothing.
Want to know more about how to use the different types of memory on an Arduino (EEPROM, flash, etc.)? Check out the guide I wrote here: chipwired.com/arduino-memory-amount-guide
Here’s some basic code to save a measurement to the first byte of EEPROM:
If it seems like the Arduino is hanging or crashing, check out my guide on different ways an Arduino can crash or hang (I did them to my own Arduino to show you what can happen), it’s over here: chipwired.com/arduino-crash-hang-guide/
2. Reset the Arduino via the button (or code)
Pressing the reset button on an Arduino stops the microcontroller executing code by activating its external reset pin. Once the reset button is released, the Arduino microcontroller will start running its last sketch from the setup() function. As the button does not disconnect power from the board, peripherals such as the WiFi chip, will still be in their last state and should be initialised again.
Similarly to removing the power, any data that’s not in the EEPROM or program memory will be lost when the microcontroller is reset.
It is also possible to trigger this reset using code in a sketch. From the research I conducted, it seems the best way to do this is to use the watchdog timer.
An example of how to reset an Arduino from a sketch (using the watchdog timer) is included below:
3. Stop a loop from running by using break
If your Arduino gets stuck in an infinite loop that you need to stop running, there is a command that can be used in a sketch to break free of the loop.
An Arduino can break from a loop using the break keyword. When writing a sketch that uses an infinite loop, including the break keyword will give the Arduino a path to exit the loop. This does not apply to the loop() function which can be broken using the return keyword.
Here’s an example of how to break an infinite loop:
4. Trap an Arduino in a loop to stop it executing other code
If your goal is to stop the Arduino executing something else, such as if you want it to wait while a peripheral is getting ready, you can trip the Arduino in an infinite loop.
To make an infinite loop in Arduino, use one of the following:
Either of these loops will never exit. To have the Arduino exit the loop, the break keyword can be used.
An Arduino can stop executing its current sketch forever by being put into an infinite loop. As an Arduino is typically always running within an infinite (the loop() function), using an infinite loop is typically only required while waiting for something.
5. Put the Arduino to sleep with Sleep Mode
An Arduino can stop running most of its functions and significantly reduce its power consumption by entering Sleep Mode. The method to wake up the Arduino can be chosen before putting it in sleep mode; typically an Arduino is configured to wake up by timer or by external interrupt.
A variety of sleep modes are available depending on which board you’re using. A sample of code I tested on my UNO WiFi Rev 2 is included below on how to put it to sleep:
I had to read the code of the sleep library to figure out the sleep mode constants to use, it seems to be:
- For idle (slight reduction in power): SLEEP_MODE_IDLE
- For standby (more reduction in power): SLEEP_MODE_STANDBY
- For power-down (most reduction in power): SLEEP_MODE_PWR_DOWN
When I ran the earlier code snipped with IDLE or STANDBY sleep modes, the LED still blinked. Only SLEEP_MODE_PWR_DOWN stopped code from running (the LEDs no longer blinked when the Arduino was put to sleep).
If you’re interested in how much power an Arduino uses while it’s in sleep mode, this is one of the tests I conducted when figuring out how much power an Arduino actually uses. Check out my test results here for more details: chipwired.com/arduino-power-use
6. Use an external relay to cut the power
It is possible to connect the Arduino’s own power supply to a relay, and then control that relay from an Arduino sketch. This allows the Arduino to turn itself off or reset itself using a relay it controls.
To use a relay to reset an Arduino:
- Connect the power supply to the back contacts of the relay, so that the energising the relay coil breaks the Arduino power supply circuit
- Connect the coil to one of the output pins on the Arduino
- Configure the sketch to start the output pin as LOW, and then set it to HIGH when you want to reset the Arduino
Disclaimer: I haven’t tried this myself! Please get in touch and let me know if this actually works for you. The steps above are based on my knowledge of relay circuits and Arduino capability, and not the result of an experiment I’ve run.
The Arduino output pins may toggle between high and low when the chip first turns on, so I’d recommend trying a slow to pick configuration. These may also be referred to as “timed open” relays.
References
Here are the references I use to put this together
Chris likes to experiment with Arduino code – sometimes that means it gets stuck! These are some of the ways to get it stuck on purpose, and to reset it whenever it does get stuck.
Engineer and electronics enthusiast. Enjoys solving problems with electronics and programming.
When working with small computers it can be important to monitor the amount of memory and storage space that is available to the programs running on the device. Small and embedded computers often.
«If it fits, it works» — this is not a philosophy that I’ve found to put your Raspberry Pi project at risk of not working. Even though the Raspberry Pi uses a USB connector for its power source, it.
About
Unleashing the power of small computers. I believe cheap small computers have incredible potential and I want to help unleash that potential with you.
Hi! My name’s Chris, I’m an engineer, a consultant, and I enjoy getting things done with electronics. I’m here to help you unlock the value of small computers and embedded computer systems. report this ad
report this ad
How To Stop a Running Program in Arduino
In this tutorial, you will learn how to stop a running Arduino program and why you need the Arduino reset.
You will learn different hardware and software methods to reset the Arduino boards.
Hardware components
Arduino Uno Rev3 | x1 | Amazon |
Arduino Mega (Optional) | x1 | Amazon |
LED | x1 | Amazon |
220Ω Resistor | x1 | Amazon |
USB cable type A/B | x1 | Amazon |
Software
Makerguides.com is a participant in the Amazon Services LLC Associates Program, an affiliate advertising program designed to provide a means for sites to earn advertising fees by advertising and linking to products on Amazon.com.
Why Would You Need To Stop An Arduino Program?
The purpose of stopping an Arduino Program could be to stop an Arduino program from building new projects, stop annoying loops, or fix an error in your code.
In my experience, I find that loops can run forever because the programmer forgot to include an exit condition, or their code has an error that prevents the loop from ending.
As a result, it may be hard to escape the loop if you don’t stop the program as a whole.
-> Learn more about How Easy Is It To Learn Arduino here.
How do I stop my Arduino from running?
An Arduino program can be stopped using either hardware or software:
1. Using Hardware
Stopping a program using hardware is perhaps the simplest and quickest option, and you have 2 main options:
1) How do I start and stop Arduino safely?
Arduino Uno can safely unplug from the power supply at any time. When you plug or reconnect the power, the Hardware will start as it is, without any data loss.
So, you can start and stop your Arduino board without any hesitation.
2) Reset the Arduino via the button
The Arduino program will stop when you press the RESET button. After resetting the Arduino board, all variables can define and initialize the peripherals, and the rest of the code runs as it is.
With hardware methods, you can stop the Arduino program manually, and it will again start executing the main program after powering up.
So, if there is any unnecessary infinite loop in your code, then again, the program will be stuck in that infinite loop, and hardware methods are not suitable for such a problem.
2. Using Software
To overcome the limitation of hardware methods, you can also stop a program running in Arduino using software, which you may need to do if your program is stuck in a loop.
What’s The Purpose Of An Arduino Loop In The First Place?
An Arduino loop performs very repetitive tasks for you quickly, which is very helpful. This loop can save your time and effort.
The Arduino IDE uses the default loop, which is the void loop. It is necessary to include it in the code.
Arduino Code with loop for repetitive task
How The Code Works
Step 1:
Firstly, I declare and initialize the counter.
Step 2:
In the setup() function, Initialize the serial terminal to a 9600 baud rate.
Step 3:
In the void loop() function, the counter increments one by one and updates after one second.
Also, print a message on the serial terminal.
Output On The Serial Terminal
This counter value is constantly updated. But, in some cases, less value is required; it is impossible to control this loop in this situation.
-> Read our guide about What You Can Build with Adruino.
How Do You Stop A Loop In Arduino?
1. Is there a stop function in the Arduino?
Arduino IDE has an exit(); function to stop the loops.
Arduino Code with exit() function to stop the loops
How The exit() Function Code Works
Here, in the above code, I have used the exit() function to get out of the loop.
Output On The Serial Terminal
2. Stop the void loop() Using the Infinite Loop
There are three different ways to use an infinite loop in your void() function:
Arduino Code to stop the loop with infinite for or while loop
How The Infinite For or While Loop Code Works
Step 1:
Firstly, declare the variable and initialize it with 10.
Step 2:
In the setup() function, Initialize the serial terminal.
In the void loop() function, start the counter. And print a message on the serial terminal.
After for ( ; ; ) < /* empty */ >using break the loop.
Same as for loop, you can use while (1) < /* empty */ >and while (true) < /* empty */ >loop.
Use the while (1) < /* empty */ >and while (true) < /* empty */ > loop instead of the
for ( ; ; ) < /* empty */ >loop inside the above code.
Output for ( ; ; ) loop
Output while (1) loop
Output while (true) loop
You can see the output and observe; by including one of these, you are effectively giving the illusion that the Arduino is not running.
3. Stop the void loop() Using Both the If Statement and Boolean.
You can control your loops using a boolean and an if statement. A boolean holds only two values: true and false.
Arduino Code to stop the loop with the if statement
How The if Statement Code Works
Step 1:
First, I defined the variable boolean Counter_Check and declared the counter variable.
In the setup() function, Initialize the serial terminal.
Step 3:
In the void loop(), check the condition that if the Counter_Check value is true, then the counter value is printed on the serial terminal.
After the condition, I make the Counter_Check value false. So, stop the void loop.
Output On The Serial Terminal
4. Stop Arduino Module Using Sleep Mode
Sleep mode can be used for a controlled pause or a complete task lock.
The method to wake up the Arduino can be chosen before putting it in sleep mode; typically, an Arduino is configured to wake up by a timer or an external interrupt.
You can learn more about the sleep mode from ATmega328 datasheet and refer to topic no. 14.
Installing the required Arduino libraries
Using sleep mode with Arduino IDE, you can use an already built library, Sleep_n0m1. Follow the below-mentioned steps to install the library.
Step 1: Go to the Tools > Manage Libraries to open the library manager in Arduino IDE.
Step 2: Now, in the search box, type “Sleep_n0m1.h”. Install a library and use it.
Arduino Code for sleep mode
How The Sleep Mode Code Works
Step 1: First, I have included the necessary header files Sleep_n0m1.h.
Step 2: Initialize the counter variable and Rest_Time variable.
Step 3:
In the setup() function, Initialize the serial terminal. Set the sleep time in milliseconds.
Step 4:
In the void loop() function, start the count for a second, increment the counter, and wait for 1 second.
Step 5:
I have used this condition if the counter counts the second. It counts for up to 3 seconds. After the counter, I make 0.
Using sleep.pwrDownMode() and sleep.sleepDelay(sleepTime) function, The CPU goes to sleep mode for 50,000 ms.
Output On The Serial Terminal
5. Using External Reset To Restart the Arduino Board
The Arduino turns to reset itself using an External reset.
Wiring Diagram for external Reset
Step 1: Connect the LEDs cathode (-) to a GND pin of the Arduino.
Step 2: Plug the Anode (+) of the LED to 220 Ohm resistor to digital pin 10 of the Arduino.
Step 3: Connect the Arduino pin 4 to the Reset pin.
Now, Ready to use this wiring diagram.
Arduino Code for external Reset
How The External Reset Code Works
Step 1: I defined the LED Arduino Pin 10. and Reset the pin to Arduino pin 4.
Step 2:
In the setup() function, Using pinMode(); function, LED and reset pin set as OUTPUT mode. Initialize the serial terminal.
Step 3:
In the void loop(), toggle the LED and, after 1 second, reset the Arduino. After resetting the Arduino, the next line will not execute. Because of Before this line, Arduino goes to reset.
Output On The Serial Terminal
6. Stop the Arduino Using Watchdog Timer Method
The ATmega328P has a Watchdog Timer (WDT).
This feature is useful to help the system recover from a situation where the system hangs due to errors in the code written or due to conditions that may arise due to hardware issues.
The WDT needs to be configured according to your application.
Arduino Code to stop loop using the watchdog timer
How The Watchdog Timer Code Works
Step 1: I am using the AVR WDT library. Initialize the variable counter.
Step 2:
Initialize serial terminal and first disable WDT. I used a delay of 3 seconds. The program won’t reset here because the watchdog is disabled.
Step 3: Now, the WDT with a timeout of 1 second is enabled. If the program doesn’t reset this timer within every 1 second, then the watchdog will get triggered and restart the Arduino.
Step 4:
Counter values are sent to the serial monitor and reset to the watchdog every second in the loop.
Then, the program enters into an infinite while loop.
Over here, since there is no WDT, it will get triggered and restart the Arduino.
Output On The Serial Terminal
–> Check out our guide to the Top 12 Best Arduino Online Courses
Conclusion
In this tutorial, I have discussed why you may need to stop an Arduino program and provided multiple ways that you can do this using either hardware or software.
Arduino IDE has an in-built function library to stop Arduino programs, and I have shared with you multiple bits of code you can utilize depending on your aims.
I hope you found this article informative, and I would love to know what project you plan on building or have already made with the Arduino.
If you have any queries or suggestions or think things are missing in this tutorial, please comment below.
Note that comments are held for moderation to prevent spam.