Как перезагрузить Arduino (программный рестарт)
После нажатия на кнопку RESET, а также по сигналу DTR микросхемы FT232R на плате Arduino Duemilanove или по сигналу на выводе D7 микросхемы ATmega8U2 платы Arduino Uno, управление передаётся загрузчику (bootloader) Arduino, расположенному в верхних 2 КБ памяти программ (Flash) (адрес 0x7800 для микроконтроллера ATmega328p). Загрузчик проверяет, есть ли связь с Arduino IDE, а затем передаёт управление по адресу 0x0000 памяти программ, где расположен код скетча.
Таким образом, чтобы перезагрузить Arduino программным способом (теплый рестарт или soft reset), достаточно добавить в скетч функцию программного сброса:
void softReset() { asm volatile ("jmp 0"); }
Вызов этой функции приведёт к программному рестарту скетча Arduino.