Как стереть память о Arduino Uno?

15

Я просто тинкер, изучающий Arduino с моим сыном, и я был удивлен, что, когда я снова подключил USB-кабель к Arduino, программа все еще работала, и я подумал про себя: «Хорошо, что я просто не взорвал ничего вверх «.

Итак, как обычно люди называют это днем ​​с этими вещами? Вы обычно загружаете голыми руками ничего не рисуя или просто отключаете все?

Питер Тернер
источник
4
Что вы подразумеваете под «когда я снова подключил USB-кабель к Arduino, программа все еще работала», какое поведение вы наблюдали и какое поведение ожидали? Было ли что-нибудь связано с Arduino?
Джиппи
@jippie Да, у меня было подключено несколько светодиодов, и все они загорелись. Почему-то я думал, что программы были загружены в память и будут перезагружены, но так как этого не существует ....
Питер Тернер
7
Программы загружаются во флэш-память, а не в ОЗУ, поэтому они сохраняются даже после отключения питания.
Рикардо

Ответы:

15

При загрузке Arduino будет запускать любую программу, которая была установлена ​​на нем в последний раз. Решение: не включайте его, если не хотите, чтобы он работал.

Когда Arduino готов к работе, он обычно запускает программу Blink. Таким образом, вы можете просто загрузить это и назвать это день, если вы хотите «сбросить» его.

Или запустите программу цикла с командой сна.

Если вы возились с загрузчиком USB через контакты icsp, этого недостаточно, вам нужно переустановить загрузчик. Но если вы загружали программы через usb или напрямую с помощью программатора, нет проблем с загрузкой Blink или другой фиктивной программы для его сброса.

Manishearth
источник
возможно ли, чтобы он запускал саморазрушающуюся программу без подключения к клеммам напряжения?
Питер Тернер
@PeterTurner, когда нет сил для этого? Нет. Но вы можете добавить программу, которая неправильно использует контакты, и если вы оставите ее на некотором повреждении, можно вызвать (не так много, если контакты не подключены)
Manishearth
9

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

  • Загрузите набросок Bare Minimum, найденный в File-> Examples-> Basicв
  • Загрузить эскиз с большой задержкой в ​​цикле.
#include <limits.h>

void setup()
{}

void loop()
{
  delay(ULONG_MAX);
}
void setup()
{
   exit(0);
}

void loop()
{}

* Стоп просто образный. Доска действительно не перестает работать.

asheeshr
источник
2
Можете ли вы получить аналогичный (и более постоянный) эффект, позвонив exit()изнутри setup()или loop()?
Питер Блумфилд,
@ PeterR.Bloomfield Не могу поверить, что я забыл об этом!
asheeshr
Зачем беспокоиться о выходе или задержке? Просто имейте void setup () { } void loop () { }- в любом случае внутренне процессор просто зацикливается на том, чтобы «ничего не делать полезного».
Ник Гэммон
1

Главное, что может пойти не так, если вы отложите Arduino на пару недель, забудете, какой эскиз (код) загружен на него, а затем вернитесь к работе, подключите аппаратное обеспечение (например, переключатель, светодиод или двигатель). ) и он неожиданно загорится / включится, потому что предыдущий код адресован контакту, к которому он подключен.


Решение 1. Сначала загрузите новый код.

Простой и безопасный способ - загрузить новый код, над которым вы работаете сегодня, перед тем, как подключать какое-либо оборудование. Теперь вы знаете, что делает код, какие выводы он использует, а затем подключаете оборудование (предпочтительно поворачивая Arduino. сначала отключи его)

Затем при повторном подключении питания запускается загруженный эскиз, у вас подключено оборудование, и все должно быть в порядке.


Решение 2. Загрузите эскиз «ничего не делать».

Вы можете загрузить этот короткий набросок:

int main () { }

Это "ничего не делает". Все контакты останутся входными данными, так что вы можете безопасно подключить свое оборудование и начать кодировать новый проект.


Безопасность прежде всего

Хорошее правило - не подключать и не отключать аппаратное обеспечение (например, светодиоды, переключатели, двигатели) при включенном питании. Если вы отвлечетесь и подключитесь к неправильной розетке на плате, вы можете немедленно повредить то, что вы подключили, или Arduino, или оба.

Выключив питание, вы можете в последнюю минуту проверить, все ли правильно подключено, правильная полярность и т. Д.

Также убедитесь, что на вашем теле нет статического электричества, особенно если вы носите джемпер или что-то пушистое или сидите на ковре.

Лично я всегда протягиваю руку и прикасаюсь к какой-то металлической части поблизости, чтобы «заземлить» себя, прежде чем дотянуться до Arduino. Примером является металлический корпус ПК, разъем для наушников или что-то в этом роде.

Если после подключения питания к Arduino (например, через USB-кабель) вы не сразу увидите, что загорелся индикатор питания, немедленно отключите питание! Возможно, вы что-то замкнули, и чем меньше времени вы это делаете, тем лучше.

Ник Гаммон
источник
1

Больше всего меня беспокоит то, что я обычно подключаю Arduino к своему новому проекту и подключаю USB для начальной загрузки нового скетча. Я волнуюсь, понятия не имею, что попытается использовать предыдущая программа, будучи подключенным к совершенно другому оборудованию.

Пока что ничего плохого не произошло, и я не думаю, что буду использовать BLINK каждый раз, когда кладу один из моих Arduinos обратно в мусорное ведро. Это, вероятно, просто вопрос времени.

linhartr22
источник
0

Если плата Arduino подключена к любому другому устройству, отключите все и просто подключите Arduino к компьютеру с помощью USB-кабеля и попробуйте загрузить новый эскиз, надеюсь, это поможет.

НИПИ
источник
Добро пожаловать в Arduino SE! Есть ли причина, по которой этот ответ лучше, чем другие ответы? Благодарность!
Анонимный пингвин
0

В Arduino IDE перейдите к примерам, выберите Eeprom, выберите eeprom clear и затем загрузите эскиз.

Когда загорится светодиод на контакте 13, все готово.

NB. Это может занять некоторое время в зависимости от размера EEPROM в Arduino.

Виктор Петерс
источник
Так в чем смысл? Запуск чего-то, что не касается ввода-вывода (но очищает EEPROM при каждом включении)?
Питер Мортенсен
Вы действительно пробовали это? Вывод 13, по-видимому, не настроен как выходной (Arduino IDE 1.6.5)
Питер Мортенсен,