Ошибка avrdude: stk500_getsync(): not in sync: resp=0x00 и как ее решить?
Данная ошибка периодически появляется практически у всех, чаще всего у новичков, хотя и не только, что же с ней делать? Давайте разбираться.
- Для начала нужно убедиться что в диспетчере устройств ваша плата отображается правильно, и там нету никаких красных крестиков или желтых кружочков с восклицательным знаком, то есть у вас должно быть что-то вроде этого (так должна определяться плата Arduino Uno на чипе CH340T):
или этого:
Если у вас есть тут восклицательный знак или вообще неопознанное устройство, то проблема скорее всего с драйверами, пробуйте их найти и переустановить или попробуйте подключить плату к другому выходу USB. Если тут все хорошо, идем далее
- В среде разработки ардуино нужно убедиться что у вас правильно выбрана плата, и ком-порт. Новичком я часто сталкивался с этой проблемой, когда отключив плату, я поправлял код программы, затем подключал плату, пытался ее прошить и видел эту ошибку, а дело в том что просто слетала галка с нужного ком-порта, как здесь:
Это самая частая причина данной ошибки – просто ставим галочку, убеждаемся, что сама плата выбрана правильно, запускаем заливку и скетч успешно заливается, но на этом не все, если тут у вас все ок – идем далее.
3. Иногда помогает нажатие кнопки Reset на плате в момент заливки скетча. Было у меня такое при работе с платой Arduino Pro Mini при прошивке ее через модуль cp2102 — usb. Запускаем заливку скетча и следим за статусной строкой в среде Arduino.
Как только после надписи «Компиляция скетча» появится надпись «Вгружаем» — необходимо в течение секунды клацнуть кнопочку «Reset» на плате , и вместо ошибки «avrdude: stk500_getsync(): not in sync: resp=0x00» можем получить благополучное «Вгрузили»
4. Для некоторых плат, например Arduino Nano, Arduino Pro Micro и некоторых других бывает такая ситуация, что вы думаете что прошиваете один чип , а на самом деле на плате он другой (Вместо atmega328 может быть atmega168). Необходимо присмотреться на чип, возможно посветить фонариком, либо сфотографировать.
И если чип действительно другой, необходимо выбрать именно его в выборе процессора
5. Был у меня один случай, когда плата нивкакую не хотела шиться имея сетевой шилд на борту. Простой скетч моргалки без шилда – льется, с шилдом тот же скетч – злополучный avrdude: stk500_getsync(): not in sync . Долго мы с товарищем ломали голову над данной проблемой, пока я не вычитал что на этой неудачной китайской копии ATmega328P UNO R3 CH340T Instead 16U2 неправильно впаян ICSP разъём, если у вас та же ситуация, то вам сюда
Хорошо если у вас есть точно такая же плата, на которой у вас происходит ошибка. Тогда просто подключаем ее , убеждаемся что в среде ардуино стоит галка на правильном ком-порте и пытаемся шить, если же она успешно шьётся, значит проблема таки в плате, если же тоже шиться не хочет, то это либо драйвер, либо кабель, либо usb-порт.
Итак если проблема осталась, а вышеперечисленные пункты вам не помогли то нужно разбираться дальше. У меня такая проблема была как раз в упомянутой плате ATmega328P UNO R3 CH340T Instead 16U2 . У меня их две, и как раз была ситуация, когда с одной платой скетчи не хотели литься, но подменив на другую такую же плату, скетч легко залился, и так я понял что проблема точно в плате (отсекая разные варианты с драйверами или низкой скоростью ком-порта о которой часто пишут, также ктото писал что кому-то помогала перезагрузка, но тут мы видим сразу – эта шьется, эта нет, и голову ломать не нужно о дровах, кабелях, скорости, статическом электричестве и т п). Нагуглив что же делать в такой ситуации я выяснил, что необходимо проверить возвращение данных при замыкании rx-tx. То есть нужно перемычкой замкнуть каналы RX и TX – это digital 0 и digital 1 (они обычно подписаны) и далее нужно найти какую-нибудь программу-терминал, например Putty.
Итак, замыкаем эти контакты, подключаем плату, открываем putty, выбираем Serial, указываем порт на котором висит наша ардуина и жмем open.
Появляется терминальое окно, и тут нам просто необходимо что-то написать, если мы видим написанные символы, это хорошо – пути на ардуине до главной микросхемы целы и прошив контроллер есть шанс вернуть плату к жизни. Если же мы пишем, а символы в окне не появляются, значит похоже обрыв на дорожках самой платы, либо неисправны какие-либо другие элементы платы, то есть проблема не в микросхеме (с таким я не сталкивался, но полагаю нужно найти принципиальную схему ардуины, например тут, вооружиться тестером и прозванивать). У меня написанные символы отобразились, то есть дело в микросхеме. Посмотрев что на плате эта микросхема относительно легко достается, я поменял эти микросхемы местами с другой платой и убедился что с другой рабочей микросхемой ардуинка благополучно шьётся. Что же дальше? Конечно, можно заказать эту микросхему, стоит она вчетверо дешевле самой ардуины, и проблема решена, но ведь есть вариант прошить. Есть много способов прошивки, для коих нужны разные программаторы и прочее, но есть способ прошития ардуины другой ардуиной, вот им я и заинтересовался. На официальном сайте есть подробная инструкция, вот что там примерно говорится:
Возьмите плату прошивальщик, то есть рабочую, которой будете прошивать, подключите ее, выберите правильно сом-порт, и залейте в нее скетч ArduinoISP (этот скетч есть в стандартном наборе программ)
Далее необходимо соединить плату прошивальщик с прошиваемой платой, вот эта схема для моей ардуино уно и совместимых с ней:
Снизу плата-прошивальщик , к ней подключается юсб-кабель, сверху плата-пациент, которую мы прошиваем. Также далее в инструкции написано, что если плата уно, то к ней необходимо повесить конденсатор на 10uF между reset и ground , но вот к донору или прошивальщику – непонятно. В итоге оказалось что к прошивальщику. Благо конденсатор такой у меня нашелся, обычный электролитический, из какой-то материнки. Далее необходимо в среде ардуино выбрать программатор Arduino as ISP
И после этого можно прошивать – инструменты – burn bootloader
Итак, я подключил проводки, поставил между землей и резетом конденсатор, но сначала методом тыка я поставил конденсатор на донора, подключил юсб кабель к прошевающей плате и увидел как на моем пациенте засветились огоньки одновременно с огоньками прошивальщика (так они не мигали совсем, тупо горел только индикатор питания), это меня уже порадовало, убедившись что скетч ArduinoISP у меня залит, выбрана правильная плата, ком-порт и программатор я нажал Burn Bootloader и увидел ошибку. Расстроился конечно, подумал что придется таки заказывать эту микруху, но вспомнил о кондесаторе и пересадил его с пациента на прошивальщика (отключив естественно предварительно кабель). Итак, подключив кабель я снова нажал Burn Bootloader и о чудо! На обеих платах начали быстро моргать огоньки, и гдето через минуту среда ардуино сказала мне что прошивка завершена. Отключив питание, я отключил все проводки и для начала проверил все ли в порядке с платой прошивальщиком – подключил ее, залил самый простой скетч блинк и он благополучо заработал. Отключив плату, я подключил пациента, и попробовал залить скетч в нее. Ошибку он не выдал! Скетч благополучно залился и начал успешно моргать раз в секунду! Вот и все, оказалось ничего сложного в этой прошивке нету. Очень надеюсь, что эта инструкция поможет кому-то еще, удачи!
Если вам эта информация не помогла, почитайте инструкцию по подробной диагностике чипов Ардуино с помощью второй ардуино платы. По всем вопросам пишите на arduinos.by@gmail.com
Эта ошибка возникает, когда компонент Arduino IDE не может связаться с платой. Причины могут быть следующие:
Физическая проблема с подключением
-
Выключите и включите плату. Если контакт был плохой, это поможет исправить ситуацию.
-
Замените USB-кабель. Иногда попадаются некачественные провода, где нет жил для передачи данных.
-
Убедитесь, что провод не болтается в разъёме, контакт есть, на плату поступает питание.
Неправильные настройки в Arduino IDE
-
Убедитесь, что выбрана правильная модель платы в Tools → Boards.
-
Убедитесь, что выбран правильный порт в Tools → Port. Если вариантов несколько, попробуйте другие.
-
Попробуйте другие USB-порты: иногда один внутренний USB-концентратор компьютера настроен неверно, а другой нормально. Также можно попробовать подключить плату через внешний USB-расширитель.
-
Аккурат в момент перед прошивкой, или одновременно, или на полсекунды позже попробуйте нажать Reset на плате. Иногда по USB сброс не работает, и приходится сбрасывать плату вручную.
-
Откройте диспетчер устройств.
-
Переподключите плату.
-
Подождите несколько секунд. В диспетчере устройств появится новый COM-порт с именем платы. Запомните номер порта. Если вместо COM-порта у вас появилось неизвестное устройство, попробуйте обновить драйвера или прошить загрузчик.
-
В Arduino IDE выбирайте тот номер порта, который увидели в предыдущем пункте.
-
Проверьте, что у вас нет других открытых программ, которые используют COM-порт. Например, CURA, Serial Projector или монитор порта.
Проблема с загрузчиком на плате
Если предыдущие пункты не помогли, то проблема может быть с загрузчиком. Эта особая подпрограмма, которая позволяет загружать прошивку по USB без использования особых ISP-программаторов. Она работает первые секунды при включении платы. Если эта программа стирается или повреждается, то загрузчик надо перезаписать.
Для прошивки загрузчика есть специальная инструкция.
Понять, что сейчас работает загрузчик, можно по плавному миганию светодиода L на платах Iskra Neo и Arduino Leonardo. На них проблема поломанного загрузчика особенно актуальна, так как чип подключается к контактам USB напрямую, без преобразователя USB-UART.
Содержание
- Синтаксические ошибки
- Ошибки компиляции плат Arduino uno
- Для чего нужна функция void setup()
- Ошибка exit status 1 при компиляции для плат uno, mega и nano
- Синтаксис void setup()
- Ошибки библиотек
- Ошибки компилятора Ардуино
- Примеры void setup()
- Основные ошибки
- Ошибка: «avrdude: stk500_recv(): programmer is not responding»
- Ошибка: «No such file or directory / exit status 1»
Синтаксические ошибки
Arduino — одна из самых удобных сред для начинающих инженеров, особенно программистов, потому что им не нужно проектировать свои системы управления и выполнять множество других действий.
Сразу после покупки они получают готовый набор библиотек на C99 и возможность при необходимости извлекать необходимые модули в открытых источниках.
Но и здесь не избежать многих проблем, которые знает каждый программист, и одна из самых неприятных — это ошибка компиляции платы Arduino nano, с которой вам придется столкнуться не один раз. Что означает эта линия, каковы причины ее появления, а главное, как быстро решить эту проблему?
Для начала стоит немного погрузиться в теорию, чтобы понять причину появления этой строчки с текстом и не грешить лишний раз, что Arduino uno не видит компьютер.
Как вы понимаете, компиляция означает преобразование кода C в машинный (двоичный) формат и преобразование нескольких функций в простые операции, чтобы их можно было выполнять через операнды встроенного процессора. Все это звучит достаточно просто, но сам процесс сборки намного сложнее, и поэтому во время этого процесса может возникнуть ошибка по десяткам причин.
Все мы привыкли, что код никогда не запускается с первого раза, и когда мы пытаемся запустить его в интерпретаторе, выскакивает десяток ошибок, которые нужно оперативно исправлять. Компилятор работает аналогично, за исключением того, что не всегда указываются причины ошибок. Поэтому рекомендуется сначала протестировать код в среде разработки, а уже потом начинать компилировать его в исполняемые файлы под Arduino.
Мы выяснили, к чему приводит этот процесс, давайте выясним, как это происходит:
- Первое, что делает компилятор, это загружает все включенные файлы, а также изменяет определенные определения на указанное для них значение. Следовательно, это необходимо, чтобы синтаксический синтаксический анализатор не проходил через один и тот же код несколько раз. Кроме того, в зависимости от среды компилятор может заменять функции вместо их объявления или делать это после передачи синтаксическим анализатором. В случае с C99 используется второй вариант реализации, но это не так важно.
- Затем проверьте основной синтаксис. Этот процесс выполняется в исходном скомпилированном файле, и какой-то парсер проверяет, были ли указанные функции описаны выше, подключены ли необходимые библиотеки и так далее. Он также проверяет, приводятся ли типы данных к определенным значениям для правильности. Не забывайте, что C99 использует строгую явную типизацию, и вы не можете помещать какие-либо буквальные значения в объявленную целочисленную строку. Если это замечено, сразу отобразится ошибка.
- В зависимости от среды разработки иногда можно протестировать код, который теперь будет скомпилирован в последний раз, запустив интерпретатор соответствующим образом.
- Последний представляет собой стек различных операций по преобразованию функций, базовых операндов и прочего в двоичный код, что может занять некоторое время. Кроме того, вся файловая структура переносится в исполняемый файл exe-шники и на этом компиляция завершается.
Как видите, процесс не так прост, как задумано, и в любой момент может возникнуть какая-то ошибка, которая прервет компиляцию. Проблема в том, что, в отличие от первых трех этапов, ошибки на последнем часто неявны, но все же не связаны с алгоритмом и логикой программы. В результате на их ремонт и очистку уходит гораздо больше времени.
Но синтаксические ошибки являются наиболее частой причиной возникновения ошибки компиляции платы Arduino nano в состоянии выхода 1. В этом случае процесс отладки часто бывает чрезвычайно простым.
Вам будет показана ошибка и строка, а также подсказка от оператора EXCEPTION, который не понравился синтаксическому анализатору. Будь то запятая или незамкнутые функциональные скобки, проблема загрузки в плату Arduino все равно возникнет.
Решение предельно простое и логичное: найти и исправить синтаксис, который не нравится машине. Часто эти сообщения появляются группами, как при тестировании, так и при компиляции, поэтому можно «заблокировать» разработку более одного раза.
Не бойтесь этого — это нормальный процесс. Все претензии отображаются на английском языке, например, часто можно увидеть следующее: не было заявлено в этой области. Что это за ошибка ардуино — на самом деле ответ уже скрыт в сообщении. Функция или переменная просто не были объявлены в области видимости.
Ошибки компиляции плат Arduino uno
Еще одна распространенная ошибка пользователей, которая вызывает вопросы, например, что делать, если Arduino не видит порт, заключается в том, что вы просто забываете настроить среду разработки. IDE Arduino была создана для всех типов плат, но, как мы указали, на каждый контроллер помещается только ограниченное количество библиотек, и их содержимое может быть разным.
Следовательно, если в меню среды вы выбрали компиляцию для неправильного MK, вероятно, вызываемая функция или метод просто не найдены в постоянной памяти, что возвращает ошибку. Как правило, в настройках указывается плата Arduino uno, поэтому не забывайте ее менять. И обратная ситуация может быть причиной проблемы с загрузкой на плату на Arduino.
Для чего нужна функция void setup()
Скачивая программу, Arduino дает возможность нашему коду участвовать в инициализации системы. Для этого нам нужно сообщить микроконтроллеру команды, которые он будет выполнять при запуске, а затем забыть о них (т.е эти команды будут выполняться только один раз при запуске системы). И для этой самой цели в нашей с вами программе нам нужно выбрать блок, в котором будут храниться эти команды void setup (), а точнее пространство внутри фигурных скобок этой функции, является таким местом внутри скетча Ардуино.
Ошибка exit status 1 при компиляции для плат uno, mega и nano
И наиболее частым сообщением для пользователей, которое появляется в среде разработки, является exit 1. И это наиболее неудобно для отладки приложения, потому что здесь нужно учитывать почти ядро системы, чтобы понять, в чем заключается злополучное зрелище.
В документации указано, что это сообщение указывает на то, что Arduino ide не запускается в требуемой конфигурации, но на самом деле существует еще дюжина случаев, когда вы увидите это сообщение. Однако на самом деле не забудьте проверить системный бит, IDE и посмотреть, какие библиотеки доступны для справки в данный момент.
Синтаксис void setup()
В этом примере слово setup — это имя функции. Именно так и нужно писать именно в этом регистре. Слово перед именем описывает тип возвращаемых данных. В этом случае подпрограмма не возвращает никаких данных, поэтому нам нужно указать слово void. Все команды должны быть заключены в фигурные скобки {}.
Не забудьте поставить подтяжки! Потеря хотя бы одной круглой скобки сразу сделает всю программу непонятной для arduino. Но даже не ставьте лишние скобки — это тоже приведет к ошибке.
Ошибки библиотек
Если при компиляции скетча Arduino произошла ошибка, но ни одно из вышеперечисленных сообщений не отображалось, можно смело искать ошибку в библиотеках MK. Это самая неприятная задача для большинства программистов, ведь приходится залезать в чужой код, а без этого не обойтись.
Ведь банальная причина может заключаться в устаревшем синтаксисе загруженного плагина, а чтобы он заработал, его нужно переписывать практически с нуля. Это единственный выход из сложившейся ситуации. Но бывают и более приземленные ситуации, когда вы связали библиотеку, функции которой никогда не вызывались, или вы просто перепутали имя.
Ошибки компилятора Ардуино
Ранее последний стек действий упоминался при запуске кода через компилятор, а сейчас могут возникнуть самые страшные ошибки — ошибки в самой IDE. Здесь не может быть конкретного решения. Вам никто не запрещает зайти в самое сердце системы и самому там все проверить, но гораздо эффективнее будет вернуться к предыдущей версии программы или, наоборот, обновить.
Примеры void setup()
Чаще всего в пустой конфигурации указываются следующие инструкции:
- pinMode с указанием номера и типа контакта. Эта инструкция определяет режим работы выводов ардуино.
- Serial.begin с указанием скорости (чаще всего 9600). Эта инструкция инициализирует работу последовательного порта на указанной скорости.
- Инструкция по подключению и инициализации различных объектов библиотек arduino. Например, servo.atach (6) сообщит библиотеке, что мы подключили сервопривод к выводу 9, и код библиотеки будет выполнять все последующие действия только с этим портом.
- Инициализация глобальных переменных, если по какой-то причине это невозможно сделать при определении переменных в глобальной области видимости.
- Задайте другие настройки и начальные значения для переменных и объектов.
Если говорить о переопределении ошибки конфигурации вакуума, то она возникает, если мы подключаем модуль или скетч, в котором уже есть эта функция. Вот что вызывает ошибку
Основные ошибки
Ошибка: «avrdude: stk500_recv(): programmer is not responding»
Посмотрим, что у нас за карта? Какой порт мы используем? Сообщите arduino о правильной карте и порте. Возможно, вы используете Nano, и указано Mega. Возможно, вы указали неправильный порт. Все это приводит к сообщению: «программист не отвечает».
Решение:
В Arduino IDE в меню «Сервис» выберите плату. В меню «Сервис → Последовательный порт» выберите порт.
Ошибка: «No such file or directory / exit status 1»
Включенной библиотеки нет в папке библиотек.
Решение:
Скачайте нужную библиотеку и скопируйте ее в папку с программой — например, C: Program Files Arduino libraries. Если есть библиотека, замените файлы в папке.
I had this problem when working with Arduino IDE and XOD running on top of it.
What I found; looked like baud rates were being set differently at different stages in the setup. I compared Windows ‘device settings’, arduino IDE settings and XOD settings…and they are not the same and seem to change ? …hence the ‘avrdude:stk500_**** errors!
To demonstrate
Connect an Arduino board to a PC USB socket.
-
On Windows 7; Control Panel System and SecuritySystem Device Manager… then double-click on ‘Ports (COM & LPT)
You should see FTDI
or
USB-SERIAL CH340(COM7) … for a chinese serial com chip on the arduino board.
Right-click on this and check ‘Properties Port Settings’ and note the ‘Bits per second’ value : e.g. 57600 … (write it down !) -
Open the arduino IDE and click on FilePreferences and tick the option ;’Show verbose output during: ‘upload‘.Then close the ‘Preferences’ screen.
-
Load a small program that works. e.g. FileExamples1.Blink
-
In the for your arduino board setup in the Arduino IDE;
ToolsBoard … such as Arduino Nano
ToolsProcessor … such as ATmega328P
ToolsPort:COM7 for example … make sure a tick is selected.
ToolsGet Board Info … will show info from the arduino serial chip (a good sign your usb cable works!)
-
On the IDE toolbar select;
-
‘Verify’ and shortly it should show ‘Done Compiling’
-
Click ‘Upload’ and the Blink program should load into the arduino chip.
-
-
Now here is the interesting observation; The ‘verbose message at the bottom of the IDE screen will indicate what ‘Overriding Baud Rate : XXXXX’ is being used! Write this number down next to the value you found on the Windows devices setting.
-
Now, if you are a XOD man, leave the arduino IDE running and run XOD.
-
Open the XOD IDE and open (Deploy) say the 01-hello program and load it into your arduino board.
-
Select’welcome-xod’ and select 01-hello program on left-side menu.
-
Select ‘DeployUpload to Arduino …’
-
select ‘Board model:’ and ‘Serial port:’ … eg COM7
-
Scroll up in the ‘Deployment ‘ window and there will be another value labeled ‘Overriding Baud Rate : e.g.115200’
I HAVE FOUND THESE BAUD RATE SETTINGS CHANGE INEXPLICABLY !
I hope my observations will throw some light on your problem of erratic uploads.
Первая загрузка прошивки
Содержание
- 1 Подключение платы
- 2 Выбор и настройка платы
- 3 Загрузка прошивки
- 4 Ошибка компиляции
- 5 Ошибка загрузки
Подключение платы
Плата подключается к компьютеру по USB, на ней должны замигать светодиоды. Если этого не произошло:
- Неисправен USB кабель
- Неисправен USB порт компьютера
- Неисправен USB порт Arduino
- Попробуйте другой компьютер, чтобы исключить часть проблем из списка
- Попробуйте другую плату (желательно новую), чтобы исключить часть проблем из списка
- На плате Arduino сгорел входной диод по линии USB из-за короткого замыкания, устроенного пользователем при сборке схемы
- Плата Arduino сгорела полностью из-за неправильного подключения пользователем внешнего питания или короткого замыкания
Компьютер издаст характерный сигнал подключения нового оборудования, а при первом подключении появится окошко “Установка нового оборудования”. Если этого не произошло:
- См. предыдущий список неисправностей
- Кабель должен быть data-кабелем, а не “зарядным”
- Кабель желательно втыкать напрямую в компьютер, а не через USB-хаб
- Не установлены драйверы Arduino (во время установки IDE или из папки с программой), вернитесь к установке.
В списке портов (Arduino IDE/Инструменты/Порт) появится новый порт, обычно COM3. Если этого не произошло:
- См. предыдущий список неисправностей
- Некорректно установлен драйвер CH341 из предыдущего урока
- Если список портов вообще неактивен – драйвер Arduino установлен некорректно, вернитесь к установке
- Возникла системная ошибка, обратитесь к знакомому компьютерщику
Выбор и настройка платы
- В наборе используется Arduino Nano, выбираем в ИнструментыПлатаArduino Nano
- На данный момент в микроконтроллер китайских плат зашит “старый” загрузчик, поэтому далее выбираем ИнструментыПроцессорATmega328p (Old Bootloader)
- Если вам по какой-то причине пришлют платы с новым загрузчиком – прошивка не загрузится (будет минутная загрузка и ошибка), можно попробовать сменить пункт Процессор на ATmega328p
- Теперь выбираем порт, к которому подключена плата. COM1 – в большинстве случаев системный порт, у вас должен появиться ещё один (обычно COM3)
Загрузка прошивки
“Загрузка” прошивки происходит в два этапа – компиляция и непосредственно загрузка в микроконтроллер. Компиляция – проверка кода на наличие ошибок, её можно запустить, нажав кнопку с символом галочки в верхнем меню программы. Компилировать код можно даже не подключая плату к компьютеру! При нажатии на кнопку с символом стрелочки начнётся компиляция, а затем загрузка скомпилированного кода в плату.
Вставьте следующий код с полной заменой содержимого в IDE и загрузите его. Должен начать мигать светодиод L на плате, это означает что все программы настроены верно и можно переходить к работе с набором!
void setup() { pinMode(LED_BUILTIN, OUTPUT); } void loop() { digitalWrite(LED_BUILTIN, 0); delay(300); digitalWrite(LED_BUILTIN, 1); delay(300); }
Ошибка компиляции
Возникает на этапе сборки и компиляции прошивки. Ошибки компиляции вызваны проблемами в коде прошивки, то есть проблема сугубо программная. Слева от кнопки “загрузить” есть кнопка с галочкой – проверка. Во время проверки производится компиляция прошивки и выявляются ошибки, если таковые имеются. Ардуино в этом случае может быть вообще не подключена к компьютеру.
- В некоторых случаях ошибка возникает при наличии кириллицы (русских букв) в пути к папке со скетчем. Решение: завести для скетчей отдельную папочку в корне диска с английским названием.
- В чёрном окошке в самом низу Arduino IDE можно прочитать полный текст ошибки и понять, куда копать
- В скачанных с интернета готовых скетчах часто возникает ошибка с описанием <название файла>.h no such file or directory. Это означает, что в скетче используется библиотека <название файла>, и нужно положить её в Program Files/Arduino/libraries/. Ко всем моим проектам всегда идёт папочка с использованными библиотеками, которые нужно установить. Также библиотеки всегда можно поискать в гугле по <название файла>.
- При использовании каких-то особых библиотек, методов или функций, ошибкой может стать неправильно выбранная плата в “Инструменты/плата“. Пример: прошивки с библиотекой Mouse.h или Keyboard.h компилируются только для Leonardo и Micro.
- Если прошивку пишете вы, то любые синтаксические ошибки в коде будут подсвечены, а снизу в чёрном окошке можно прочитать более детальное описание, в чём собственно косяк. Обычно указывается строка, в которой сделана ошибка, также эта строка подсвечивается красным.
- Иногда причиной ошибки бывает слишком старая, или слишком новая версия Arduino IDE. Читайте комментарии разработчика скетча.
- Ошибка недостаточно свободного места возникает по вполне понятным причинам. Оптимизация: статическая память – память, занимаемая кодом (циклы, функции). Динамическая память занята переменными.
Ошибка загрузки
Возникает на этапе, когда прошивка собрана, скомпилирована, в ней нет критических ошибок, и производится загрузка в плату по кабелю. Ошибка может возникать как по причине неисправностей железа, так и из-за настроек программы и драйверов.
- Если неправильно выбран COM порт – прошивка не загрузится с ошибкой avrdude: ser_open(): can’t open device. Вернитесь к пункту “Выбор и настройка платы” этого урока и убедитесь в том, что выбор порта активен и при подключении платы появляется новый.
- Большинство проблем при загрузке, вызванных “зависанием” ардуины или загрузчика, лечатся полным отключением Ардуины от питания. Потом вставляем USB и по новой прошиваем.
- Причиной ошибки загрузки может быть неправильно выбранная плата в “Инструменты/Плата”, а также неправильно выбранный процессор в “Инструменты/Процессор”.
- Если у вас открыт монитор COM порта в другом окне Arduino IDE или плата общается через СОМ порт с другой программой (Ambibox, HWmonitor, SerialPortPlotter и т.д.), то вы получите ошибку загрузки, потому что порт занят. Отключитесь от порта или закройте другие окна и программы.
- Если у вас задействованы пины RX или TX – отключите от них всё! По этим пинам Arduino общается с компьютером, в том числе для загрузки прошивки.
- Если в описании ошибки встречается bootloader is not responding и not in sync, а все предыдущие пункты этого списка проверены – с вероятностью 95% микроконтроллер сломался. Оставшиеся 5% – “слетел” загрузчик, и его можно прошить заново.
- Если появилась красная надпись avrdude: stk500_disable(): protocol error, expect=0x14, resp=0x00, но прошивка по факту загрузилась – возможно проблемы с USB кабелем/портом/гнездом на плате Arduino, можно попробовать другой кабель или порт.
Полезный пример?