Как сбросить ардуино нано к заводским настройкам
Перейти к содержимому

Как сбросить ардуино нано к заводским настройкам

  • автор:

Как сбросить Arduino до нуля 3 способа

0 12

Другое

Arduino — торговая марка аппаратно-программных средств для построения и прототипирования простых систем. Из этого следует вывод, что есть техническая часть сборки плат Arduino и программная Arduino IDE. В программной части можно прошивать плату на определённые действия. То есть мы подключаем какие-то компоненты к нашей плате и прошиваем её на определённые действия.

Скетчи – программные коды используемые для прошивки платы. Они остаются после прошивки в памяти самой Arduino, то есть платы. Бывает так, что скетч нужно убрать и поставить другой и данное действие называется сбросом или Reset Arduino.

0 12

Часто возникает вопрос, как сбросить Arduino. Есть несколько простых способов сделать это на аппаратном уровне:

  1. С помощью кнопки сброса
  2. С помощью пина Reset
  3. С помощью внешней кнопки сброса

И также на программном уровне:

  1. С помощью функции сброса
  2. Методом сторожевого таймера

Любой из этих методов может повредить плату, так что применять их нужно с осторожностью. Сейчас разберёмся как не допустить ошибок.

2 8

Для начала, что такое сброс? Сброс платы Arduino аналогичен отключению и повторному подключению платы.

Перезагрузка Arduino похожа на перезагрузку вашего компьютера. Когда вы перезагружаете его, он завершает все запущенные процессы и вновь запускает систему.

Зачем вам сбрасывать настройки? Не всегда всё может пойти, как задумано, и функция сброса поможет вашей Arduino начать выполнение программы заново.

Причины сброса

0 11

  1. Чтобы избавиться от внутренних ошибок.
    Код, запущенный вами может неправильно работать из-за ошибки в Arduino. Сброс поможет избавиться от любых внутренних ошибок.
  2. Чтобы выйти из бесконечного цикла.
    Бывает, что ваша программа перестаёт отвечать в середине процесса. Скорее всего, она попала в бесконечный цикл и без помощи не может его прервать. Нужно сбросить плату, чтобы выйти из цикла, это является одной из самых распространённых причин использования опции сброса.
  3. Чтобы устранить ошибки.
    Сброс – первое, что приходит на ум программисту, когда он работает на Arduino. Зачастую, это всегда решает проблему.

Аппаратные способы сброса

Начнём с первых трёх способов.

  1. С помощью кнопки сброса.
    На плате Arduino UNO есть маленькая оранжевая кнопка. Нажатие на неё – самый лёгкий способ сбросить плату Arduino.
  2. Использовать Reset pin.
    Если внимательно посмотреть на плату, то вы увидите контакт сброса. Он находится рядом с контактами питания

3 8

Вам лишь нужно правильно подключить всё и поэтому всё отмечено на рисунке.

Как это работает:

Подключите контакт сброса к одному из контактов ввода-вывода на плате и загрузите кода который сбрасывает вашу плату.

В коде вам нужно установить контакт цифрового ввода-вывода на высокий уровень и объявить его как выходной контакт. То есть когда программа начнёт выполняться, вышеуказанный контакт сгенерирует выход высокого логического уровня и подаст его на контакт RESET, который сбросит Arduino.

Настройка внешней кнопки сброса

Если вы не можете дотянуться до кнопки сброса на плате Arduino или если на вашей плате установлен экран, вам нужно настроить внешнюю кнопку сброса. Всё что вам нужно это: макетная плата, кнопка и пара перемычек вместе с платой Arduino.

3 9

Подача низкого напряжения в течении короткого времени на контакт 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, если она застряла в бесконечном цикле или перестала отвечать. Вам лишь нужно убедиться, что вы выполняете всё правильно.

Программы arduino nano v 3.0. Блог › Опыт изучения Arduino. Пост очередной. Аппаратный

Arduino Nano — это полнофункциональное миниатюрное устройство на базе микроконтроллера ATmega328 (Arduino Nano 3.0) или ATmega168 (Arduino Nano 2.x), адаптированное для использования с макетными платами. По функциональности устройство похоже на Arduino Duemilanove, и отличается от него размерами, отсутствием разъема питания, а также другим типом (Mini-B) USB-кабеля. Arduino Nano разработано и выпускается фирмой Gravitech.

Схема и исходный проект

Связь

ATmega168 и ATmega328 в Arduino Nano выпускается с прошитым загрузчиком, позволяющим загружать в микроконтроллер новые программы без необходимости использования внешнего программатора. Взаимодействие с ним осуществляется по оригинальному протоколу STK500 ( , ).

Автоматический (программный) сброс

Чтобы каждый раз перед загрузкой программы не требовалось нажимать кнопку сброса, Arduino Nano спроектирован таким образом, который позволяет осуществлять его сброс программно с подключенного компьютера. Один из выводов микросхемы FT232RL, участвующий в управлении потоком данных (DTR), соединен с выводом RESET микроконтроллера ATmega168 или ATmega328 через конденсатор номиналом 100 нФ. Когда на линии DTR появляется ноль, вывод RESET также переходит в низкий уровень на время, достаточное для перезагрузки микроконтроллера. Данная особенность используется для того, чтобы можно было прошивать микроконтроллер всего одним нажатием кнопки в среде программирования Ардуино. Такая архитектура позволяет уменьшить таймаут загрузчика, поскольку процесс прошивки всегда синхронизирован со спадом сигнала на линии DTR. Такая архитектура позволяет уменьшить таймаут загрузчика, поскольку процесс прошивки всегда синхронизирован со спадом сигнала на линии DTR.

Однако эта система может приводить и к другим последствиям. При подключении Arduino Nano к компьютерам, работающим на Mac OS X или Linux, его микроконтроллер будет сбрасываться при каждом соединении программного обеспечения с платой. После сброса на Arduino Nano активизируется загрузчик на время около полсекунды. Несмотря на то, что загрузчик запрограммирован игнорировать посторонние данные (т.е. все данные, не касающиеся процесса прошивки новой программы), он может перехватить несколько первых байт данных из посылки, отправляемой плате сразу после установки соединения. Соответственно, если в программе, работающей на Ардуино, предусмотрено получение от компьютера каких-либо настроек или других данных при первом запуске, убедитесь, что программное обеспечение, с которым взаимодействует Ардуино, осуществляет отправку спустя секунду после установки соединения.

Платформа Nano, построенная на микроконтроллере ATmega328 (Arduino Nano 3.0) или ATmega168 (Arduino Nano 2.x), имеет небольшие размеры и может использоваться в лабораторных работах.

Плата Arduino Nano

Arduino Nano может получать питание через подключение USB Mini-B, или от нерегулируемого 6–20 В (вывод 30) или регулируемого 5 В (вывод 27), внешнего источника питания. Автоматически выбирается источник с самым высоким напряжением.

Характеристики платы Arduino Nano

ATmega168 или ATmega328

Входное напряжение (предельное)

14 (6 из которых могут использоваться как выходы ШИМ)

Постоянный ток через вход/выход

Постоянный ток для вывода 3,3 В

16 Кбайт (ATmega168) или 32 Кбайт (ATmega328), при этом 2 Кбайт используются для загрузчика

1 Кбайт (ATmega168) или 2 Кбайт (ATmega328)

Общие сведения

Arduino Nano — это полнофункциональное миниатюрное устройство на базе микроконтроллера ATmega328 (Arduino Nano 3.0) или ATmega168 (Arduino Nano 2.x), адаптированное для использования с макетными платами. По функциональности устройство похоже на Arduino Duemilanove, и отличается от него размерами, отсутствием разъема питания, а также другим типом (Mini-B) USB-кабеля. Arduino Nano разработано и выпускается фирмой Gravitech.

Схема и исходный проект

Помимо перечисленных на плате существует еще несколько выводов:

  • AREF. Опорное напряжение для аналоговых входов. Может задействоваться функцией .
  • Reset. Формирование низкого уровня (LOW) на этом выводе приведет к перезагрузке микроконтроллера. Обычно этот вывод служит для функционирования кнопки сброса на платах расширения

Связь

Arduino Nano предоставляет ряд возможностей для осуществления связи с компьютером, еще одним Ардуино или другими микроконтроллерами. В ATmega168 и ATmega328 есть приемопередатчик UART, позволяющий осуществлять связь по последовательным интерфейсам посредством цифровых выводов 0 (RX) и 1 (TX). Микросхема FTDI FT232RL обеспечивает связь приемопередатчика с USB-портом компьютера, и при подключении к ПК позволяет Ардуино определяться как виртуальный COM-порт (драйвера FTDI включены в пакет программного обеспечения Ардуино). В пакет программного обеспечения Ардуино также входит специальная программа, позволяющая считывать и отправлять на Ардуино простые текстовые данные. При передаче данных компьютеру через USB на плате будут мигать светодиоды RX и TX. (При последовательной передаче данных посредством выводов 0 и 1 данные светодиоды не задействуются).

Автоматический (программный) сброс

Чтобы каждый раз перед загрузкой программы не требовалось нажимать кнопку сброса, Arduino Nano спроектирован таким образом, который позволяет осуществлять его сброс программно с подключенного компьютера. Один из выводов микросхемы FT232RL, участвующий в управлении потоком данных (DTR), соединен с выводом RESET микроконтроллера ATmega168 или ATmega328 через конденсатор номиналом 100 нФ. Когда на линии DTR появляется ноль, вывод RESET также переходит в низкий уровень на время, достаточное для перезагрузки микроконтроллера. Данная особенность используется для того, чтобы можно было прошивать микроконтроллер всего одним нажатием кнопки в среде программирования Ардуино. Такая архитектура позволяет уменьшить таймаут загрузчика, поскольку процесс прошивки всегда синхронизирован со спадом сигнала на линии DTR. Такая архитектура позволяет уменьшить таймаут загрузчика, поскольку процесс прошивки всегда синхронизирован со спадом сигнала на линии DTR.

Однако эта система может приводить и к другим последствиям. При подключении Arduino Nano к компьютерам, работающим на Mac OS X или Linux, его микроконтроллер будет сбрасываться при каждом соединении программного обеспечения с платой. После сброса на Arduino Nano активизируется загрузчик на время около полсекунды. Несмотря на то, что загрузчик запрограммирован игнорировать посторонние данные (т.е. все данные, не касающиеся процесса прошивки новой программы), он может перехватить несколько первых байт данных из посылки, отправляемой плате сразу после установки соединения. Соответственно, если в программе, работающей на Ардуино, предусмотрено получение от компьютера каких-либо настроек или других данных при первом запуске, убедитесь, что программное обеспечение, с которым взаимодействует Ардуино, осуществляет отправку спустя секунду после установки соединения.

Основные версии плат Arduino представлены следующими моделями:

Общие сведения

Платформа Nano, построенная на микроконтроллере ATmega328 (Arduino Nano 3.0) или ATmega168 (Arduino Nano 2.x), имеет небольшие размеры и может использоваться в лабораторных работах. Она имеет схожую с Arduino Duemilanove функциональность, однако отличается сборкой. Отличие заключается в отсутствии силового разъема постоянного тока и работе через кабель Mini-B USB. Nano разработана и продается компанией Gravitech.

Принципиальные схемы и исходные данные

Связь

На платформе Arduino Nano установлено несколько устройств для осуществления связи с компьютером, другими устройствами Arduino или микроконтроллерами. ATmega168 и ATmega328 поддерживают последовательный интерфейс UART TTL (5 В), осуществляемый выводами 0 (RX) и 1 (TX). Установленная на плате микросхема FTDI FT232RL направляет данный интерфейс через USB, а драйверы FTDI (включены в программу Arduino) предоставляют виртуальный COM порт программе на компьютере. Мониторинг последовательной шины (Serial Monitor) программы Arduino позволяет посылать и получать текстовые данные при подключении к платформе. Светодиоды RX и TX на платформе будут мигать при передаче данных через микросхему FTDI или USB подключение (но не при использовании последовательной передачи через выводы 0 и 1).

Библиотекой SoftwareSerial возможно создать последовательную передачу данных через любой из цифровых выводов Nano.

ATmega168 и ATmega328 поддерживают интерфейсы I2C (TWI) и SPI. В Arduino включена библиотека Wire для удобства использования шины I2C. Более подробная информация находится в документации. Для использования интерфейса SPI обратитесь к техническим данным микроконтроллеров ATmega168 и ATmega328.

Программирование

Платформа программируется посредством ПО Arduino. Из меню Tools > Board выбирается «Arduino Diecimila, Duemilanove или Nano w/ ATmega168» или «Arduino Duemilanove или Nano w/ ATmega328» (согласно установленному микроконтроллеру). Подробная информация находится в справочнике и инструкциях.

Микроконтроллеры ATmega168 и ATmega328 поставляются с записанным загрузчиком, облегчающим запись новых программ без использования внешних программаторов. Связь осуществляется оригинальным протоколом STK500.

Имеется возможность не использовать загрузчик и запрограммировать микроконтроллер через выводы блока ICSP (внутрисхемное программирование). Подробная информация находится в данной инструкции.

Автоматическая (программная) перезагрузка

Nano разработана таким образом, чтобы перед записью нового кода перезагрузка осуществлялась самой программой, а не нажатием кнопки на платформе. Одна из линий FT232RL, управляющих потоком данных (DTR), подключена к выводу перезагрузки микроконтроллеров ATmega168 или ATmega328 через конденсатор 100 нФ. Активация данной линии, т.е. подача сигнала низкого уровня, перезагружает микроконтроллер. Программа Arduino, используя данную функцию, загружает код одним нажатием кнопки Upload в самой среде программирования. Подача сигнала низкого уровня по линии DTR скоординирована с началом записи кода, что сокращает таймаут загрузчика.

Функция имеет еще одно применение. Перезагрузка Nano происходит каждый раз при подключении к программе Arduino на компьютере с ОС Mac X или Linux (через USB). Следующие полсекунды после перезагрузки работает загрузчик. Во время программирования происходит задержка нескольких первых байтов кода во избежание получения платформой некорректных данных (всех, кроме кода новой программы). Если производится разовая отладка скетча, записанного в платформу, или ввод каких-либо других данных при первом запуске, необходимо убедиться, что программа на компьютере ожидает в течение секунды перед передачей данных.

В середине 2013 года я приобрёл плату Arduino Nano версии 3.0. Ясно, что плата построена по схожей с полноценной ардуино уно платформе, но есть и нюансы. Попробуем в этой статье разобраться в них

Платформа Arduino Nano 3.0 построена на микроконтроллере ATmega328, имеет небольшие размеры и может использоваться в разных проектах. Nano разработана и продается компанией Gravitech. Ниже привожу технические характеристики:

Микроконтроллер — ATmega328
Рабочее напряжение — 5 В
Входное напряжение (рекомендуемое) — 7-12 В
Входное напряжение (предельное) — 6-20 В
Цифровые Входы/Выходы — 14 (6 из них могут использоваться как выходы ШИМ)
Аналоговые входы — 8
Постоянный ток через вход/выход — 40 мА
Флеш-память — 32 Кб (при этом 2 Кб используются для загрузчика)
ОЗУ — 2 Кб
EEPROM — 1 Кб
Тактовая частота — 16 МГц
Размеры — 1.85 см x 4.3 см

Arduino Nano получает питание через разъем Mini-B USB, а также от нерегулируемого 6-20 В (вывод 30) или регулируемого 5 В (вывод 27) внешнего источника питания. Автоматически выбирается источник с самым высоким напряжением.

Все 14 цифровых выводов (используя функции pinMode(), digitalWrite(), и digitalRead()) могут настраиваться как вход или выход. Выводы работают при напряжении 5 В. Каждый вывод имеет нагрузочный резистор (стандартно отключен) 20-50 кОм и может пропускать до 40 мА.

Возможно несколько способов связи с компьютером или другими устройствами и микроконтроллерами. ATmega328 поддерживает последовательный интерфейс UART TTL (5 В) через выводы 0 (RX) и 1 (TX). Микросхема FTDI FT232RL направляет данный интерфейс через USB, а драйверы FTDI предоставляют виртуальный COM порт программе ардуино на компьютере. Светодиоды RX и TX на платформе мигают при передаче данных только через микросхему FTDI или USB подключение.

Платформа программируется посредством ПО Arduino , свежую версию которого можно скачать с официального сайта .

Но перед этим необходимо чтобы устройство определилось на вашем компьютере. Вот в этом моменте у меня и возникли сложности. При подключении Ардуино через USB шнур к компьютеру, в системе (Windows 7) платформа определилась как UART устройство. При этом автоматически драйвера не установились (драйвера можно скачать с сайта производителя чипов FTDI). Пришлось это сделать вручную. Для этого в диспетчере устройств надо выбрать неопознанное устройство. В свойствах выбрать пункт установить или обновить драйвер, а далее выбрать из списка уже установленных драйверов производителя FTDI модель USB serial converter. После установки драйвера появилось составное Usb устройство, и осталось только установить драйвер на порты COM и LTP. Точно таким же образом я выбрал драйвер того же производителя, и после этого моя Ардуина стала доступна для заливки скетчей.

Для проверки работоспособности откроем приложение для Arduino. На вкладке сервис (Tools), в меню плата (board) выбираем Arduino Nano w/ATmega328. Теперь скопируйте этот скетч себе в программу и нажмите кнопку загрузить.

После того как скетч скомпилируется и загрузится в ардуино, светодиод на плате начнет моргать повторяя сигнал SOS азбуки морзе. Это будет означать что настройка прошла успешно.

Вот так выглядит Arduino nano:

Существует несколько версий плат nano. Есть версия 2.X, а есть версия 3.0. Отличаются эти версии самим микроконтроллером. В младшей версии этой ардуинки используется чип ATmega168. Этот чип обладает меньшим объемом flash-памяти, энергонезависимой памяти, а так же пониженной тактовой частотой. Так как цена разных версий Arduino nano практически не отличается мы не будем рассматривать младшую из них.

Arduino nano v 3.0

Эта версия снабжена микроконтроллером ATmega328. В отличии от своего младшего собрата, он имеет вдвое большие объемы энергонезависимой и flash памяти. И может похвастаться тактовой частотой в 16 МГц.

Купить Arduino nano v 3.0

  • Качество практически не отличается от оригинальных плат, произведенных в Италии.
  • Цена в разы ниже. Итальянская ардуино нано стоит около 10$, а в Китае этот микроконтроллер обойдется в 2-2,5$
  • В российских магазинах наценка составляет 100-500%. При этом очень часто под видом оригинальной платы могут продавать китайские, да еще и очень низкого качества.
  • На алиэкспрессе вы легко можете найти надежных продавцов с хорошими отзывами.
  • Вы можете воспользоваться скидочными купонами и кэшбэк сервисами.

Характеристики

  • Микроконтроллер: ATmega328
  • Предельное напряжение питания: 5-20 В
  • Рекомендуемое напряжение питания: 7-12 В
  • Цифровых вводов/выводов: 14
  • ШИМ: 6 цифровых пинов могут быть использованы как выводы ШИМ
  • Аналоговые выводы: 8
  • Максимальная сила тока: 40 mAh с одного вывода и 500 mAh со всех выводов.
  • Flash память: 32 кб
  • SRAM: 2 кб
  • EEPROM: 1 кб
  • Тактовая частота: 16 МГц

Подключение питания к Arduino nano

Этот микроконтроллер можно питать через порт mini-USB от компьютера, паувербанка или от адаптера, подключенного в розетку.Так же пин +5V является не только выводом, но и вводом. Можно подавать ток на него и все это будет работать только при условии, что напряжение подаваемого тока строго равно пяти вольтам!
Еще можно подавать постоянный ток с напряжением от 6 до 20 вольт на пин VIN. Это предельные значения! При подачи напряжения 20 вольт на плате будет сильно греться стабилизатор напряжения. Рекомендуемое напряжение для питания через пин VIN — от 7 до 12 вольт.

Распиновка Arduino Nano v 3.0

Как уже было написано выше, плата имеет 14 цифровых пинов. На плате они помечены с ведущей буквой «D» (digital или цифровой). Они могут быть как входом так и выходом. Рабочее напряжение этих пинов составляет 5 В. Каждый из них имеет подтягивающий резистор и поданное на один из этих пинов напряжения ниже 5 вольт все равно будет считаться как 5 вольт (логическая единица).

Аналоговые пины на плате помечены ведущей «A». Эти пины являются входами и не имеют подтягивающих резисторов. Они измеряют поступающее на них напряжение и возвращают значение от 0 до 1024 при использовании функции analogRead(). Эти пины измеряют напряжение с точностью до 0,005 В.

Широтно-импульсная модуляция (ШИМ) Arduino nano

Если внимательно посмотреть на плату то можно увидеть значок тильды (

) рядом с некоторыми цифровыми пинами. Этот значок означает, что данный пин может быть использован как выход ШИМ. На некоторых платах ардуино этого значка нет так как производители не всегда находят место для этого символа на плате. У Arduino nano есть 6 выводов ШИМ, это пины D3, D5, D6, D9, D10 и D11. Для использования ШИМ у Arduino есть специальная функция analogWrite().

Другие пины:

  • rx0 и tx1 используются для передачи данных по последовательному интерфейсу.
  • Выводы D10 (SS), D11 (MOSI), D12 (MISO), D13 (SCK) рассчитаны для связи по интерфейсу SPI.
  • Так же на выводе D13 имеется встроенный в плату светодиод.
  • А4 (SDA) и А5 (SCL) могут использоваться для связи с другими устройствами по шине I2C. Подробнее про этот интерфейс вы можете почитать на википедии . В среде разработке Arduino IDE есть встроенная библиотека «wire.h» для более легкой работы с I2C.

Физические характеристики

Arduino Nano имеет следующие размеры: длина 42 мм и ширина 19 мм. Однако разъем USB немного выпирает за пределы печатной платы. Arduino Nano весит всего около 12 грамм. Плата имеет 4 отверстия для возможности ее закрепления на поверхности. Расстояние между выводами равняется 2,54 мм.

5 Simple Ways to Reset Arduino

Uploading numerous lines of code with multiple loops in it might cause many errors. The only option for debugging such errors is often reset the Arduino. As I’ve done it multiple times, I’ll walk you through 5 simple ways to reset Arduino.

So, what are these 5 simple ways to reset Arduino? Whether through hardware: 1) using the reset button; 2) reset pin; 3) an external reset button; Or through software: 4) using the reset function; or 5) the watchdog timer method.

But those methods need to be implemented with great care, or you might wreck the entire board. By the end of this article, you’ll able to properly reset your Arduino without having to buy a new one.

If you’re using reset to stop an Arduino running, there are other ways to stop it from running its sketch. I wrote a guide on how to do this here: chipwired.com/stop-arduino-running/

What Is Arduino Reset?

Resetting your Arduino board is similar to unplugging it and then plugging it back in again.

When you reset your Arduino board, it starts executing the code from the first line of the program you have uploaded by clearing everything present in the ROM previously.

It is similar to pressing the restart button on your PC. When you restart your computer, it immediately ends all the processes which were running and starts the system again.

The reset option in Arduino allows your board to restart by resetting the AVR microcontroller chip embedded in it.

Why Should You Reset Your Arduino?

Things might not always go as planned, and the reset function will allow your Arduino to start executing the program from the very start.

1. To get rid of internal bugs

The code you have been trying to run might not be working because of an error in your Arduino. The reset option allows you to get rid of any internal bugs of your board.

2. To get out from infinite loops

If your Arduino board has stopped responding in the middle of the execution of a program, it means it’s probably stuck in an infinite loop, and it cannot get out of it on its own.

You need to reset your Arduino board for it to exit that loop, which is one of the main reasons why people use the reset option.

3. To troubleshoot errors

Resetting is the first option that pops into a programmer’s mind when they are executing an Arduino based program. It is the first step in troubleshooting errors, and most of the time, resetting the Arduino board solves the problem.

If you’re interested in all the ways your Arduino can hang, crash, or stop running, I recently wrote a whole guide to all of that here: chipwired.com/arduino-crash-hang-guide/

How to Reset Your Arduino?

We can divide the methods of resetting Arduino in two types – hardware and software, which means that you can either reset your Arduino through the board or using the Arduino IDE.

Or sometimes, you might need to try both of these methods to make sure your Arduino program runs flawlessly.

Resetting Arduino Through Hardware

You can reset your Arduino through hardware, i.e., by using your Arduino board. Here are some simple ways to do this:

1. Using the Reset Button

See that little orange button mounted on your Arduino UNO board? Pushing it is the simplest way to reset an Arduino board.

Or if you have some other board, you would still be able to see a tiny button embedded on it. That’s the reset button. Pushing this button will stop everything that’s going on with your Arduino board and take the execution back to the first line of your code.

2. Using the Reset Pin

If you look at your Arduino board closely, you will notice a reset pin present on it right beside the power pins.

arduino-reset-pin

One can use this pin (marked on red color) to reset the Arduino board. All you need to do is make the right connections, the reason why I marked two of them.

Here’s how the reset Arduino using the pin works:

  1. Connect the reset pin to one of the digital I/O pins on the board (preferably the 3.5 on my experience).
  2. Upload a code that resets your Arduino board. This one below should do the trick:

In the code, you need to set the digital I/O pin (which you have connected to the RESET pin, in this case, pin 3.5) to high and declare it as an output pin.

This means, when the program starts executing, pin 3.5 will generate a high logic level output and feed it into the RESET pin, which will reset the Arduino, and it will begin running the code from the first line.

If the above code doesn’t work for your case, you can find a couple more samples of codes used to reset Arduino using the RESET here (check on the comments section to see one of them with a schematic diagram of the Arduino board as well).

3. Setting Up an External Reset Button

In case you are unable to reach the reset button of your Arduino board, or if there’s a shield placed on top of your board, then you need to set up an external reset button. All you need is a breadboard, a push button, and a pair of jumper wires along with your Arduino board.

Applying a low voltage for a least 2 microseconds to the RESET pin will reset the Arduino UNO, according to its datasheet, which means that you need to apply a low voltage to the RESET pin using the push button.

For this, you need to connect the push button in its normally open state with one side connected to the RESET pin and the other side to GND. In its normal position, the RESET pin will be high, but as soon as you press the button, it will connect to the GND pin and hence will be at a low logic level.

This technic will reset the Arduino without the need to upload any code to the board. Visit this website for a more detailed guide to setting up an external reset button for your Arduino board.

Resetting Arduino Through Software

In case your Arduino board is unreachable to the extent that you cannot make any external connections to it, then you need to know how to reset your Arduino board using the Arduino IDE.

Here are some simple ways which can help you reset your Arduino board through software.

4. Using the Reset Function

The easiest way to reset Arduino through programming is to use the built-in reset function resetFunc(), which is available in the Arduino libraries. All you need to do is write the code and call the reset function at address location 0.

This code will reset your Arduino board and start executing the program from the first line of code.

This method is the simplest of all since it needs no external circuitry, only a function has to be called, and you’re good to go.

If you need to check out a sample Arduino program that uses the reset function, then click here.

5. The Watchdog Timer Method

Another great way to reset your Arduino board is to use the watchdog timer method. This method uses the watchdog library to reset Arduino in case the program is not responding as it should, and it’s recommended by the AVR chip manufacturer. Thus, it’s one of the most preferred ways of resetting Arduino boards.

The header file must be included for the watchdog timer to work.

First, a timer needs to be enabled. The timer duration can vary from 15 milliseconds to 8 seconds, depending on your application. For instance, if you need to set up a timer of 30 seconds, then you’ll write wdt_enable(WDTO_30ms).

Similarly, you can vary the number of seconds and write them in place of ‘30ms’. The timer works by resetting the microcontroller if the program takes more time to execute than it usually should.

For instance, if the main program should take 40 ms to run, the watchdog timer is set up such that if the main program takes more than 40 ms to execute, then the microcontroller will be reset.

If the program functions normally, it will reset the watchdog timer before it touches zero. If the program hangs in a loop and is unable to reset the watchdog timer, then, in that case, an interrupt is generated which resets the Arduino.

For a more detailed explanation and a sample code of the watchdog timer, visit this website.

So, Are You Ready to Reset Your Arduino?

Now that you know what it takes to reset an Arduino board, you can easily reset your Arduino if it’s stuck in an infinite loop, or it has stopped responding.

This article has equipped you with both hardware and software resetting methods. All you need to do is make sure you’re executing the techniques correctly.

Let me know in the comments below if you’ve tried any of the methods I laid out in here. Did they work well in your case?

If not, then also let us know in the comment section so we can give you some useful tips!

Engineer and electronics enthusiast. Enjoys solving problems with electronics and programming.

How can I "reset" an Arduino board?

I’ve uploaded a sketch to an Arduino Uno whose loop is something like this:

So, now, I can’t upload anything anymore, because the IDE says «port already in use».

Is there a way to «reset» the Arduino without another programmer?

Nothing else is using the serial port, and everything went just fine until I uploaded the previous sketch.

I’ve found some interesting things:

  • Problems with 0021 on Ubuntu 10.04 Lucid Lynx
  • Re: Problems with 0021 on Ubuntu 10.04 Lucid Lynx
  • Uno sending serial data becomes un-connectable to Serial Monitor

Peter Mortensen's user avatar

21 Answers 21

Try the following:

  1. Prepare the basic empty program (empty setup, loop, etc.)
  2. Compile it.
  3. Reset the Arduino using the hardware button on the chip
  4. Press Ctrl + U to upload your code.
  5. If unsuccessful — got to 3.

There is a delay before the boot loader starts the programs, just work on your timing. It worked for me when a bug in my Arduino’s code was executing a soft reset every 500 ms.

Peter Mortensen's user avatar

I had the same problem on two Arduinos (one Uno, and one Modern Device Freeduino/USB Host board) and the window between reset and the beginning of serial port usage was so small that it was impossible to upload.

I finally fixed the problem by purchasing another Arduino Uno and building an ISP cable per these instructions, and using it to flash the Bare Bones app from the examples into each inaccessible board, using Arduino IDE version 0023, following these instructions to change preferences.txt. (Be sure to save the original file before editing it so you can replace it after you’ve rescued your Arduino.)

It took one quick upload to fix each board. Such a fast fix after so much grief. You might not want to purchase another Arduino, but consider these benefits:

  • You can overwrite the bootloader on your Arduino to gain more space.
  • Once the bootloader is overwritten, the board will boot faster.
  • Supposedly you can program raw AVRs for special projects, but I have not tried this: Google for ArduinoISP
  • It will quickly fix Arduinos that you block in the future.
  • You can now safely experiment to find ways to prevent serial port usage from locking up the device in the future.
  1. Unplug the USB cable
  2. Connect the RX Pin to ground
  3. Plug in the USB cable
  4. Upload a new program
  5. Remove the USB cable
  6. Remove the RX grounding

S.S. Anne's user avatar

PcTronics's user avatar

Make sure you plug the Arduino directly into the computer and not through a hub. Using a hub will give you this error.

Peter Mortensen's user avatar

Chris Kay's user avatar

After scratching my head about this problem, here is a very simple solution that works anytime:

  • Unplug your USB cable
  • Go in Device Manager
  • Click on Ports (COM & LPT)
  • Right click on Arduino. (COMx)
  • Properties
  • Port Settings
  • Put Flow Control to HARDWARE
  • Create an empty sketch (Optional)
  • Connect the USB cable
  • Upload ( Ctrl + U )

Peter Mortensen's user avatar

Eric Phenix's user avatar

Here’s what I did in Linux to be able to program my Arduino Micro which was stuck in a loop sending the 0 key when connected by USB;

Your output might be slightly different so just try running;

then plug in the Arduino and see how the output is formatted.

This stopped X from accepting the keypresses and allowed the Arduino IDE to program finally!

Based on my experience with the communication already in use or blocked, I would say that the program you are interfacing with still has the communication open.

I also found that if you disconnect the USB cable it will rest the communication. It is not the greatest solution, but it solves the problem.

Peter Mortensen's user avatar

For Arduino Yún users, try uploading via Ethernet/Wi-Fi (menu ToolsPort).

I had exactly the same problem, and I tried pretty much everything (apart from burning a new bootloader). I am surprised it worked, but I’ve uploaded an empty sketch without any problem.

Peter Mortensen's user avatar

lokers's user avatar

I just spent the last five hours searching for a solution to this problem (serial port COM3 already in use and grayed out serial port). I tried everything every forum and Q&A site I could find suggested, including this one.

What finally fixed it (got rid of the last code I’d input that got stuck and uploaded simple blink function)?

Follow this link — http://arduino.cc/en/guide/windows and follow the instructions for installing the drivers. My driver was «already up to date», but following these steps fixed the glitch. I am now a happy camper once again.

Note: Resetting the board manually with the button on the chip, or digitally through miscellaneous codes on the Internet did not work to fix this problem, because the signal was somehow blocked/confused between my Arduino Uno and the port in my laptop. Updating the drivers is like a reset for the «serial port already in use» problem.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *