Как «сбросить» плату Arduino? - PullRequest
21 голосов
/ 13 марта 2011

Я загрузил эскиз в Arduino Uno, цикл которого выглядит примерно так:

void loop(){
    Serial.println("Hello World");
}

Итак, теперь я больше ничего не могу загрузить, потому что в среде IDE написано «порт уже используется».

Есть ли способ "перезагрузить" Arduino без другого программиста?

РЕДАКТИРОВАТЬ:
Ничто другое не использует последовательный порт, и все шло отлично, пока я не загрузил предыдущий скетч.

РЕДАКТИРОВАТЬ:
Я нашел несколько интересных вещей:

Ответы [ 20 ]

24 голосов
/ 22 мая 2011

Попробуйте следующее:

  1. Подготовка базовой пустой программы (пустая настройка, цикл и т. Д.)
  2. Скомпилируйте.
  3. Сброс Arduino с помощью аппаратной кнопки на чипе
  4. Нажмите Ctrl + U , чтобы загрузить свой код.
  5. Если не удалось - доехал до 3.

Задержка загрузки программ начинается с момента запуска. Это сработало для меня, когда ошибка в коде моего Arduino выполняла программный сброс каждые 500 мс.

5 голосов
/ 10 декабря 2011

У меня была такая же проблема на двух Arduinos (одна Uno и одна плата Modern Device Freeduino / USB Host), и окно между сбросом и началом использования последовательного порта было настолько маленьким, что было невозможно загрузить.

Я наконец-то решил проблему, купив другую Arduino Uno и собрав кабель ISP для этих инструкций и используя его для прошивки приложения Bare Bones из примеров на каждую недоступную плату с использованием ArduinoВерсия IDE 0023, следуя этим инструкциям для изменения настроек .txt.(Обязательно сохраните исходный файл перед его редактированием, чтобы вы могли заменить его после того, как спасли Arduino.)

Для исправления каждой платы потребовалась одна быстрая загрузка.Такое быстрое исправление после такого горя.Возможно, вы не захотите приобретать другое Arduino, но рассмотрите следующие преимущества:

  • Вы можете перезаписать загрузчик на Arduino, чтобы получить больше места.
  • Как только загрузчик перезаписывается, платабудет загружаться быстрее.
  • Возможно, вы можете программировать необработанные AVR для специальных проектов, но я не пробовал этого: Google для ArduinoISP
  • Он быстро исправит Arduinos, который вы заблокируете в будущем.
  • Теперь вы можете безопасно экспериментировать, чтобы найти способы предотвратить блокировку устройства при использовании последовательного порта в будущем.
2 голосов
/ 09 августа 2013

Убедитесь, что вы подключаете Arduino непосредственно к компьютеру, а не через концентратор.Использование концентратора даст вам эту ошибку.

1 голос
/ 26 ноября 2014

После того, как я почесал голову об этой проблеме, вот очень простое РЕШЕНИЕ, которое работает в любое время:

  • Отключите USB-кабель
  • Войдите в МЕНЕДЖЕР УСТРОЙСТВА
  • Нажмите на порты (COM и LPT)
  • Щелкните правой кнопкой мыши на Arduino .... (COMx)
  • Свойства
  • Настройки порта
  • Установите управление потоком в ОБОРУДОВАНИЕ
  • Создание пустого эскиза (* Необязательно)
  • Подключение USB-кабеля
  • Загрузка (Ctrl - U)

// Emtpy Sketch to fix upload problem
// Create by Eric Phenix
// Nov 2014

void setup() 
{ 
} 

// the loop routine runs over and over again forever:
void loop()
{ 
delay(1000);                            
}

Et вуаля!Eric

1 голос
/ 18 марта 2011

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

1 голос
/ 13 апреля 2014

Я только что провел последние 5 часов в поисках решения этой проблемы (последовательный порт COM3 уже используется, выделен серым последовательным портом) ... Я перепробовал все предложенные форумы, включая этот ..

Что, наконец, исправило (избавился от последнего введенного мною кода, который застрял и загрузил простую функцию мигания)? Перейдите по этой ссылке - http://arduino.cc/en/guide/windows и следуйте инструкциям по установке водителей. Мой драйвер был "уже в курсе", но после этих шагов исправили ошибку. Теперь я снова счастливый турист.

Примечание: Сброс платы вручную с помощью кнопки на чипе или в цифровом виде через разное. коды в интернете не помогли решить эту проблему, потому что сигнал был каким-то образом заблокирован / запутан между моим arduino uno и портом в моем ноутбуке. Обновление драйверов похоже на сброс проблемы «последовательный порт уже используется».

По крайней мере, пока ..

0 голосов
/ 28 декабря 2015

У меня была та же самая проблема сегодня. Вот простое решение, которое мы нашли, чтобы решить эту проблему (спасибо Ангиаре):

Вместо того, чтобы загружать свои новые коды в arduino с помощью «кнопки загрузки» (кружок с зеленой стрелкой) на экране, используйте мышь, чтобы нажать «Эскиз», а затем «Загрузить».

Пожалуйста, не забудьте добавить строку delay () в ваши коды при работе с serial.println () и циклами. Я усвоил свой урок трудным путем.

0 голосов
/ 22 ноября 2015

У меня тоже была эта проблема, я пробовал описанные выше методы, но ни один из них, похоже, не работал, но что-то работало (почему-то, не уверен, было ли это просто чудаком или это действительно способ сделать это)

  1. Отключите USB от Duino
  2. Нажмите и удерживайте кнопку сброса
  3. Подключите USB и включите
  4. продолжайте удерживать и загрузите эскиз. По завершении загрузки отпустите кнопку сброса.
0 голосов
/ 24 января 2015

Вот что я сделал в Linux, чтобы иметь возможность программировать мой Arduino Micro, который застрял в цикле, отправляя клавишу 0 при подключении через USB;

# while true; do xinput float $(xinput --list | grep -i Arduino | awk '{print $7}' | cut -d'=' -f 2); done

Ваш вывод может немного отличаться, поэтому попробуйте запустить;

# watch xinput --list

затем подключите Arduino и посмотрите, как форматируется вывод.

Это остановило X от принятия нажатий клавиш и позволило Arduino IDE наконец-то запрограммировать!

0 голосов
/ 18 декабря 2014

У меня похожая проблема.

Если я включаю myarduino Перед запуском загруженной программы происходит задержка.

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

void setup(){} void loop(){}

так что моя проблема решена.

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

...