Для того, щоб перезавантажити ваш Arduino не натискаючи кнопку Reset, існує два варіанти. Нижче розглянуті обидва. Для їх реалізації буде потрібно мінімум додаткової електричної обв'язки.
Використовуємо провід, підключений до 12 контакту
В цьому випадку світлодіод на 13 піне Arduino (можна використовувати і вбудований світлодіод), блимає. 12 пін підключається до контакту Reset за допомогою одного провідника.
Без додаткових хитрувань на програмному рівні не обійтися, так як на початку роботи нашого скетчу, все Піни на Arduino приймають значення LOW. В результаті ми відключимо наш контролер. Але! Трюк полягає в тому, що перше, що відбувається в межах функції setup (): ми подаємо HIGH на контакт 12, який викликає наш пін reset (digitalWrite (resetPin, HIGH), і таким чином забезпечує сигнал HIGH на контакті Arduino RESET.
int led = 13; // пін 13 буде працювати в якості Піна OUTPUT
int resetPin = 12;
// функція setup отработате один раз, після того як ви натиснете reset:
// инициализируем цифровий пін як вихід
Serial.begin (9600); // инициализируем підключення по серійному порту
Serial.println ( "reset"); // відображаємо рядок reset, щоб знати, що була проведена перезавантаження і
// знову відпрацьовує функція setup
// цикл loop відпрацьовує знову і знову:
digitalWrite (led, HIGH); // запалюємо світлодіод (HIGH - це подача напруга)
delay (1000); // чекаємо одну секунду
digitalWrite (led, LOW); // відключаємо світлодіод, подавши команду LOW
delay (1000); // чекаємо одну секунду
Serial.println ( "this never happens");
// цього ніколи не станеться, так як Arduino перезавантажується
Використовуємо виключно програмну перезавантаження
У прикладі, який наведений нижче, вам не знадобиться ніякого додаткового підключення. Ми просто инициализируем функцію reset і після викликаємо reset.
resetFunc (); // викликаємо reset
Вся програма для перезавантаження Arduino:
// функція setup відпрацьовує один раз після натискання reset:
// инициализируем цифровий пін як вихід.
Serial.begin (9600); // инициализируем серійний порт
void (* resetFunc) (void) = 0; // оголошуємо функцію reset
// цей цикл відпрацьовується знову і знову:
digitalWrite (led, HIGH); // включаємо світлодіод
delay (1000); // чекаємо секунду
digitalWrite (led, LOW); // відключаємо світлодіод, подаючи команду LOW
delay (1000); // чекаємо одну секунду
resetFunc (); // викликаємо reset
Для чого можна використовувати програмну перезавантаження Arduino?
Перезавантаження Arduino на програмному рівні можна використовувати при роботі з nRF24L01 + 2.4 Гц трансівером (з використанням бібліотеки RF24 library). Цей скетч відмінно підходить в тих випадках, коли трансивер втрачає зв'язок і перестає працювати. Забезпечити перезавантаження модулів радіопередавачів 2.4G Гц досить складно, а ось перезавантажити ваш Arduino Uno або Arduino Pro Mini не складе проблем. Ваша програма повинна відпрацювати приблизно наступне: "Якщо протягом 100 мс не було отримано пакета даних, Arduino повинен перезавантажитися". В результаті модулі радіопередавачів автоматично перепідключатися і зв'язок налагоджується!
ARDUINO-DIY.COM - це інформаційний ресурс з кращими інструкціями і туторіали по використанню контролерів Arduino.
Завжди раді конструктивної співпраці. З усіма питаннями, побажаннями і пропозиціями звертайтеся на пошту [email protected].