+2 голосов
Мне нужно при определенном условии сбрасывать плату, чтобы скетч начался заново. Как  это реализовать? Может есть какая-нибудь функция, которая это делает?
(925 баллов) 40 74 103

2 Ответы

+2 голосов
 
Лучший ответ

Пример:
Прошейте плату Uno следующим скетчем:

// макрос который будет производить перезагрузку платы Ардуино
#define Reset() asm("JMP 0")

void setup() {
// встроеный в плату светодиод мигает три раза
// показывая что плата загружается
pinMode(13,OUTPUT);
digitalWrite(13,HIGH);
delay(500);
digitalWrite(13,LOW);
delay(500);
digitalWrite(13,HIGH);
delay(500);
digitalWrite(13,LOW);
delay(500);
digitalWrite(13,HIGH);
delay(500);
digitalWrite(13,LOW);
delay(500);

// пин к которому подключена кнопка
// которая будет производить сброс платы Ардуино
pinMode(2,INPUT_PULLUP);

}

void loop() {
// при нажатии на кнопку (PIN2 соеденить GND)
// вызывается макрос который перезагрузит плату Ардуино  
if (!digitalRead(2)==HIGH) Reset();
delay(1);
}

При подаче питания встроенный светодиод вспыхнет три раза - показывая что плата загружается.
Подключите кнопку к PIN2 которая будет соединять его c GND. (или просто кратковременно соедините PIN2 с GND перемычкой). Это вызовет перезагрузку платы, встроенный светодиод снова мигнет 3 раза - т.е. выполняется блок setup{}

(1.2 тыс. баллов) 7 26 51
выбран
переход на нулевой адрес это переход на нулевой адрес, а не сброс.
Вопрос звучал "....чтобы скетч начался заново" - про Аппаратный сброс речи не было.
+2 голосов
Есть два варианта:

1. С помощью вачдога. Но будет минимальная выдержка времени в 8 мс.

2. Завести пин RESET на одну из ног GPIO и эту ногу программно прижать к земле.
(2.7 тыс. баллов) 10 29 55
Добро пожаловать на Бредборд! Сайт вопросов и ответов на тему Arduino, Raspberry Pi и хоббийной электроники в целом. Цель Бредборда — быть максимально полезным. Поэтому мы строго следим за соблюдением правил, боремся с холиворами и оффтопиком.

    За этот месяц ещё никого.

    ...