Arduino — торговая марка аппаратно-программных средств для построения и прототипирования простых систем. Из этого следует вывод, что есть техническая часть сборки плат Arduino и программная Arduino IDE. В программной части можно прошивать плату на определённые действия. То есть мы подключаем какие-то компоненты к нашей плате и прошиваем её на определённые действия.
Скетчи – программные коды используемые для прошивки платы. Они остаются после прошивки в памяти самой Arduino, то есть платы. Бывает так, что скетч нужно убрать и поставить другой и данное действие называется сбросом или Reset Arduino.
Часто возникает вопрос, как сбросить Arduino. Есть несколько простых способов сделать это на аппаратном уровне:
- С помощью кнопки сброса
- С помощью пина Reset
- С помощью внешней кнопки сброса
И также на программном уровне:
- С помощью функции сброса
- Методом сторожевого таймера
Любой из этих методов может повредить плату, так что применять их нужно с осторожностью. Сейчас разберёмся как не допустить ошибок.
Для начала, что такое сброс? Сброс платы Arduino аналогичен отключению и повторному подключению платы.
Перезагрузка Arduino похожа на перезагрузку вашего компьютера. Когда вы перезагружаете его, он завершает все запущенные процессы и вновь запускает систему.
Зачем вам сбрасывать настройки? Не всегда всё может пойти, как задумано, и функция сброса поможет вашей Arduino начать выполнение программы заново.
Причины сброса
- Чтобы избавиться от внутренних ошибок.
Код, запущенный вами может неправильно работать из-за ошибки в Arduino. Сброс поможет избавиться от любых внутренних ошибок. - Чтобы выйти из бесконечного цикла.
Бывает, что ваша программа перестаёт отвечать в середине процесса. Скорее всего, она попала в бесконечный цикл и без помощи не может его прервать. Нужно сбросить плату, чтобы выйти из цикла, это является одной из самых распространённых причин использования опции сброса. - Чтобы устранить ошибки.
Сброс – первое, что приходит на ум программисту, когда он работает на Arduino. Зачастую, это всегда решает проблему.
Аппаратные способы сброса
Начнём с первых трёх способов.
- С помощью кнопки сброса.
На плате Arduino UNO есть маленькая оранжевая кнопка. Нажатие на неё – самый лёгкий способ сбросить плату Arduino. - Использовать Reset pin.
Если внимательно посмотреть на плату, то вы увидите контакт сброса. Он находится рядом с контактами питания
Вам лишь нужно правильно подключить всё и поэтому всё отмечено на рисунке.
Как это работает:
Подключите контакт сброса к одному из контактов ввода-вывода на плате и загрузите кода который сбрасывает вашу плату.
void setup() { // оставляем пустым }
void loop()
{
mySetup();
while (//здесь тестовое условия выхода из приложения)
{
// код цикла приложения здесь
}
}
void mySetup() { //…инициируем здесь}
В коде вам нужно установить контакт цифрового ввода-вывода на высокий уровень и объявить его как выходной контакт. То есть когда программа начнёт выполняться, вышеуказанный контакт сгенерирует выход высокого логического уровня и подаст его на контакт RESET, который сбросит Arduino.
Настройка внешней кнопки сброса
Если вы не можете дотянуться до кнопки сброса на плате Arduino или если на вашей плате установлен экран, вам нужно настроить внешнюю кнопку сброса. Всё что вам нужно это: макетная плата, кнопка и пара перемычек вместе с платой Arduino.
Подача низкого напряжения в течении короткого времени на контакт RESET приведёт к сбросу Arduino UNO. Это значит что необходимо лишь подать низкое напряжение на контакт RESET с помощью кнопки.
Для этого вам нужно подключить кнопку в нормально открытом состоянии, при этом одна сторона должна быть подключена к контакту RESET, а другая — к GND. В нормальном положении контакт RESET будет высоким, но как только вы нажмете кнопку, он соединится с контактом GND и, следовательно, будет иметь низкий логический уровень.
Данный способ поможет перезагрузить Arduino без необходимости загружать какой-либо код на плату.
Программный сброс. Использование функции сброса
В этом способе всё гораздо проще. Если вам нужно ресетнуть Arduino, то просто нужен небольшой код:
void(* resetFunc) (void) = 0;
Чтобы сбросить Arduino просто вызовите эту функцию:
resetFunc();
Если быть точным, то это не сброс, а обычный перевод стека в начало программного кода, иначе говоря в нулевой адрес. Объясняя проще, программа начинает выполняться с самого начала, при этом не влияя на установки МКК на момент исполнения.
Метод сторожевого таймера
Еще один отличный способ сбросить настройки платы Arduino — использовать метод сторожевого таймера. Этот метод использует библиотеку сторожевого таймера для сброса Arduino в случае, если программа не отвечает должным образом, и этот метод рекомендуется производителем чипа AVR. Таким образом, это один из наиболее предпочтительных способов сброса настроек плат Arduino.
Заголовочный файл должен быть включен для работы сторожевого таймера.
Во-первых, таймер должен быть включен. Продолжительность таймера может варьироваться от 15 миллисекунд до 8 секунд, в зависимости от вашего приложения. Например, если вам нужно установить таймер на 30 секунд, вы напишите wdt_enable(WDTO_30ms).
Точно так же вы можете изменить количество секунд и написать их вместо «30 мс». Таймер работает, перезагружая микроконтроллер, если выполнение программы занимает больше времени, чем обычно.
Например, если основная программа должна выполняться 40 мс, сторожевой таймер настроен таким образом, что если основная программа выполняется более 40 мс, микроконтроллер будет сброшен. Если программа работает нормально, она сбросит сторожевой таймер до того, как он коснется нуля. Если программа зависает в цикле и не может сбросить сторожевой таймер, то в этом случае генерируется прерывание, которое сбрасывает Arduino.
Итоги
Теперь, когда вы знаете, что нужно для сброса платы Arduino, вы можете легко сбросить настройки Arduino, если она застряла в бесконечном цикле или перестала отвечать. Вам лишь нужно убедиться, что вы выполняете всё правильно.