Чтобы перезагрузить Arduino без нажатия кнопки Reset, существует три варианта — мы рассмотрим их все в этом обзоре. Перезапуск Arduino необходим при зависании микроконтроллера или при использовании радио модуля nRF24L01, например, когда приемопередатчик теряет связь и перестает работать. Перезапуск радиопередатчиков затруднителен, но перезапуск платы Arduino при зависании не представляет проблемы.
СОДЕРЖАНИЕ
Необходимые компоненты:
- Arduino Uno / Arduino Nano / Arduino Mega
- резистор
- макетная плата
- коннекторы
Дополнительные материалы на эту тему:
Аппаратный сброс микроконтроллера Ардуино возвращает все параметры платы к значениям по умолчанию, т.е. все переменные сбрасываются к исходным значениям, а все активные порты деактивируются и устанавливаются заново. Жесткий сброс (hard reset arduino uno) — это реальный сброс, который происходит при нажатии кнопки RESET. Но этот сброс можно вызвать и из кода, подав сигнал низкого уровня на pin Reset Arduino.
Перезагрузка Ардуино аппаратным способом

В следующем примере программы в начале работы скетча важно установить высокий уровень сигнала на выводе 12, иначе произойдет сброс микроконтроллера (hard reset arduino nano). В этом примере будет происходить аппаратный сброс микроконтроллера каждые 10 секунд (период можно изменить). Соберите схему на макетной плате, как показано на изображении выше и загрузите следующую программу в плату Ардуино Уно.
Скетч для аппаратной перезагрузки Ардуино
unsigned long timer;
void setup() {
digitalWrite(12, HIGH);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
Serial.begin(9600);
delay(100);
Serial.println("start");
timer = millis();
}
void loop() {
// встроенный светодиод на 13 пине
// будет мигать при каждой перезагрузке
digitalWrite(13, HIGH);
if (millis() - timer > 10000) {
Serial.println("reboot");
delay(100);
digitalWrite(12, LOW);
}
}
Перезагрузка Ардуино программным способом

Мягкий сброс (soft reset arduino) — это не настоящий сброс программы, а просто переход к началу кода (по нулевому адресу). Другими словами, код начинает выполняться с самого начала, не затрагивая параметры Arduino на момент сброса. Например, если на момент сброса микроконтроллера на каком-либо выходе было установлено значение «HIGH», то после перезагрузки оно не вернется в значение «LOW», а останется «HIGH».
Скетч для программной перезагрузки Ардуино
unsigned long timer;
void setup() {
pinMode(13, OUTPUT);
Serial.begin(9600);
delay(100);
Serial.println("start");
timer = millis();
}
void loop() {
// встроенный светодиод на 13 пине
// НЕ будет мигать при каждой перезагрузке
digitalWrite(13, HIGH);
if (millis() - timer > 10000) {
Serial.println("reboot");
delay(100);
asm volatile("jmp 0x00");
}
}
Для использования Watchdog необходимо включить файл avr/wdt.h, а затем вызвать функцию wdt_enable(). Сторожевой таймер представляет собой встроенный таймер (до 8 секунд), который может быть запущен или сброшен. Как только таймер достигает нуля, контроллер выдает сигнал сброса, и устройство самостоятельно сбрасывается. Если программа выполняется слишком долго, сторожевой таймер перезагрузит Arduino.
Скетч перезагрузки Ардуино командой Watchdog
#include "avr/wdt.h"
unsigned long timer;
void setup() {
wdt_disable();
Serial.begin(9600);
delay(100);
Serial.println("start");
timer = millis();
wdt_enable(WDTO_4S);
/* можно выбрать одно из нескольких значений
15mS WDTO_15MS
30mS WDTO_30MS
60mS WDTO_60MS
120mS WDTO_120MS
250mS WDTO_250MS
500mS WDTO_500MS
1S WDTO_1S
2S WDTO_2S
4S WDTO_4S
8S WDTO_8S
*/
}
void loop() {
// wdt_reset();
if (millis() - timer > 10000) {
Serial.println("reboot");
delay(1000);
}
}
Заключение. На трех примерах мы рассмотрели, как программно (arduino software reset) и аппаратно (hard reset arduino mega 2560) сбросить плату Arduino Uno или Arduino Nano. Помните, что при использовании аппаратного сброса нужно быть осторожным и устанавливать правильные значения перед перезагрузкой микроконтроллера. Если вам нужен настоящий сброс, используйте жесткую перезагрузку (arduino reset pin).

Не, не катит.
Прокрутил все рекомендованные варианты,
— задержка по выводу в монитор только в «Скетч для программной перезагрузки Ардуино», но не перезагрузка платы.
— а:
> » Скетч для аппаратной перезагрузки Ардуино» и
> «Скетч перезагрузки Ардуино командой Watchdog»
вообще … ???
Тщательней надо, тщательней.
Душнила
аппаратный сброс данным способом не пройдет… Ардуинка уйдет в вечный сброс, пока не отключить электричество… Нужна схема одновибратора
Спасибо! Программный сброс Arduino Nano помог от зависаний после использования комбинации функций IR-декодирования и звука (tone)