arduino uno коды ошибок
Ошибка компиляции для плат Arduino
Ошибка компиляции для плат Arduino возникает в момент проверки скетча, если исходный код программы написан некорректно или компилятор не может найти указанные файлы библиотек, переменные или методы. Чаще всего такие ошибки связаны с небрежностью или невнимательностью программиста, но бывают просто-таки мистические ситуации, когда, казалось бы, все правильно, а вот компилятор «дурит». Чудес не бывает и любые странные ошибки в конце концов можно найти и исправить. Давайте попробуем это сделать вместе.
Синтаксические ошибки
Первый и наиболее распространенный вариант ошибок компилятора Arduino – несоблюдение синтаксиса. Как правило, такие ошибки достаточно легко находятся и исправляются, ведь Arduino IDE сама даст вам подсказку, стараясь найти и отметить номер строки, в которой обнаружена проблема. Но иногда приходится разгадывать целый квест, анализируя строчки, в которых закралась коварная неточность (например, пропущена фигурная скобка). Тут требуется внимательность и хладнокровие – нужно просто отбросить те участки программы, где ошибок быть не может и начать просматривать код, строчка за строчкой. Главное не паниковать и помнить, что ошибки совершают все, а поиск и решение проблем – это основное, что приходится делать программистам.
Перечислим наиболее часто встречающиеся варианты ошибок компиляции Arduino/Genuino:
Ошибки компиляции плат Arduino Uno
В Arduino IDE можно писать скетчи под разные варианты микроконтроллеров. Очень часто это приводит к тому, что написав код для Arduino Nano, вы пытаетесь его скомпилировать, не указав в меню выбора платы нужное значение. По умолчанию в меню выбрана плата Arduino/Genuino Uno, чтобы скомпилировать скетч для Arduino Nano нужно будет выбрать эту плату. Все дело в том, что при компиляции под конкретную платформу Arduino подгружает необходимые модули и библиотеки. Для каждой платформы эти библиотеки свои. Вполне может оказаться, что в написанном вами коде будут ссылки на переменные и методы, которых просто нет в выбранной конфигурации.
Ошибка exit status 1 при компиляции для плат Uno, Mega и Nano
Сообщение «exit status 1» при компиляции Arduino означает, что процесс компиляции завершился с ошибкой. Причин этому может быть огромное множество, как правило, все они быстро исправляются, так что ничего страшного в этой ошибке нет. Но бывают ситуации, когда ошибка вызвана внутренними проблемами компилятора. Например, при работе в 64x разрядной операционной системе или изменении версии IDE или библиотек. Единого рецепта быть не может, нужно будет искать решение конкретной проблемы на форуме.
Ошибки библиотек
Огромное количество ошибок при компиляции для Arduino может быть вызвано неправильно подключенными библиотеками или ошибками внутри самих библиотек. Рассмотрим только некоторые из них:
Ошибки компилятора ардуино
В эту группу входят самые страшные для разработчика ошибки, связанные с нестабильным поведением самого компилятора. В этом случае единого рецепта быть не может. В одних случая нужно попытаться загрузить самую свежую версию компилятора, в других – наоборот, откатиться до более старой, в которой используемая вами библиотека еще работала корректно.
Arduino uno коды ошибок
Ошибки Arduino
1. avrdude: stk500_getsync(): not in sync: resp=0x00
Если вы получаете сообщение об ошибке: «avrdude: stk500_getsync(): not in sync: resp=0x00»,
то это означает, что Arduino не отвечает.
Существуют масса причин, почему это может происходить.
Попробуйте проверить следующее:
* Подаётся ли на плату питание (если контроллер подключается через USB, то джампером должен быть выбран соответствующий режим работы)
* Проверьте правильность и надёжность соединения контроллера Arduino с ПК
* Если у вас Arduino NG, ты нажмите кнопку сброса перед загрузкой скетча (нажатием Upload)
* Убедитесь, что в Arduino IDE у вас выбран правильный последовательный порт.
* Попробуйте переустановить драйвер.
* Верно ли установлен чип микроконтроллера (если вы собрали свой собственный Arduino, то прошит ли загрузчик(bootloader)?)
* Правильная ли версия загрузчика? (если вы собрали свой собственный Arduino)
* Проверьте — не подключено ли у вас что-либо к UART-у микроконтроллера (у Arduino Mega — к «0-му» UART-у), т.к. находящееся на UART-е устройство может помешать загрузке скетча через bootloader.
Обратите внимание, что возможны и другие причины появления данной ошибки, поэтому пробуйте все варианты.
2. java.lang.NullPointerException at processing.app.Serial.setDTR.
Если вы получаете сообщение об ошибке: «java.lang.NullPointerException at processing.app.Serial.setDTR(Serial.java:480)», то это означает, что неправильно выбран последовательный порт (меню Tools — Serial port)
4. ser_send(): write error: sorry no info avail
Неправильно выбран последовательный порт (меню Tools — Serial port).
Ошибки компиляции Arduino Nano и их решения
Синтаксические ошибки
Ардуино – одна из наиболее комфортных сред для начинающих инженеров, в особенности программистов, ведь им не приходится проектировать свои системы управления и делать множество других действий.
Сразу же при покупке они получают готовый набор библиотек на С99 и возможность, по необходимости, подтянуть необходимые модули в опен-соурс источниках.
Но и здесь не избежать множества проблем, с которыми знаком каждый программист, и одна из самых неприятных – ошибка компиляции для платы Аrduino nano, с которой вам придется столкнуться не раз. Что же эта строчка означает, какие у неё причины появления, и главное – как быстро решить данную проблему?
Для начала стоит немного окунуться в теорию, чтобы вы понимали причину возникновения данной строчки с текстом и не грешили лишний раз, что Ардуино уно не видит компьютер.
Как несложно догадаться, компиляция – приведение кода на языке Си к виду машинного (двоичного) и преобразование множественных функций в простые операции, чтобы те смогли выполняться через встроенные операнды процессора. Выглядит всё достаточно просто, но сам процесс компиляции происходит значительно сложнее, и поэтому ошибка во время проведения оной может возникать по десяткам причин.
Все мы уже привыкли к тому, что код никогда не запускается с первого раза, и при попытке запустить его в интерпретаторе вылезает десяток ошибок, которые приходится оперативно править. Компилятор действует схожим образом, за исключением того, что причины ошибок указываются далеко не всегда. Именно поэтому рекомендуется протестировать код сначала в среде разработки, и лишь затем уже приступать к его компиляции в исполняемые файлы под Ардуино.
Мы узнали, к чему приводит данный процесс, давайте разберёмся, как он происходит:
Как можно увидеть, процесс не так прост, как его рисуют, и на любом этапе может возникнуть какая-то ошибка, которая приведет к остановке компиляции. Проблема в том, что, в отличие от первых трех этапов, баги на последнем – зачастую неявные, но всё ещё не связанные с алгоритмом и логикой программы. Соответственно, их исправление и зачистка занимают значительно больше времени.
А вот синтаксические ошибки – самая частая причина, почему на exit status 1 происходит ошибка компиляции для платы Аrduino nano. Зачастую процесс дебагинга в этом случае предельно простой.
Вам высвечивают ошибку и строчку, а также подсказку от оператора EXCEPTION, что конкретно не понравилось парсеру. Будь то запятая или не закрытые скобки функции, проблема загрузки в плату Аrduino возникнет в любом случае.
Решение предельно простое и логичное – найти и исправить непонравившийся машине синтаксис. Зачастую такие сообщения вылезают пачками, как на этапе тестирования, так и компилирования, поэтому вы можете таким образом «застопорить» разработку не один раз.
Не стоит этого страшиться – этот процесс вполне нормален. Все претензии выводятся на английском, например, часто можно увидеть такое: was not declared in this scope. Что это за ошибка arduino – на самом деле ответ уже скрыт в сообщении. Функция или переменная просто не были задекларированы в области видимости.
Ошибки компиляции плат Arduino uno
Другая частая оплошность пользователя, которая порождает вопросы вроде, что делать, если Аrduino не видит порт, заключается в том, что вы попросту забываете настроить среду разработки. IDE Ардуино создана под все виды плат, но, как мы указывали, на каждом контроллере помещается лишь ограниченное количество библиотек, и их наполнение может быть различным.
Соответственно, если в меню среды вы выбрали компиляцию не под тот МК, то вполне вероятно, что вызываемая вами функция или метод просто не будет найдена в постоянной памяти, вернув ошибку. Стандартно, в настройках указана плата Ардуино уно, поэтому не забывайте её менять. И обратная ситуация может стать причиной, по которой возникает проблема загрузки в плату на Аrduino uno.
Ошибка exit status 1 при компиляции для плат uno, mega и nano
И самое частое сообщение, для пользователей уно, которое выскакивает в среде разработки – exit 1. И оно же самое дискомфортное для отладки приложения, ведь тут необходимо учесть чуть ли не ядро системы, чтобы понять, где же кроется злополучный баг.
В документации указано, что это сообщение указывает на то, что не запускается ide Аrduino в нужной конфигурации, но на деле есть ещё десяток случаев, при которых вы увидите данное сообщение. Однако, действительно, не забывайте проверять разрядность системы, IDE и просматривать, какие библиотеки вам доступны для обращения на текущий момент.
Ошибки библиотек
Если произошла ошибка при компиляции скетча Ардуино, но не выводилось ни одно из вышеописанных сообщений, то можете смело искать баг в библиотеках МК. Это наиболее неприятное занятие для большинства программистов, ведь приходится лазить в чужом коде, но без этого никак.
Ведь банально причина может быть в устаревшем синтаксисе скачанного плагина и, чтобы он заработал, необходимо переписать его практически с нуля. Это единственный выход из сложившейся ситуации. Но бывают и более банальные ситуации, когда вы подключили библиотеку, функции из которой затем ни разу не вызвали, или просто перепутали название.
Ошибки компилятора Ардуино
Ранее упоминался финальный стек действий, при прогонке кода через компилятор, и в этот момент могут произойти наиболее страшные ошибки – баги самого IDE. Здесь конкретного решения быть не может. Вам никто не запрещает залезть в ядро системы и проверить там всё самостоятельно, но куда эффективнее будет откатиться до предыдущей версии программы или, наоборот, обновиться.
Основные ошибки
Ошибка: «avrdude: stk500_recv(): programmer is not responding»
Смотрим какая у нас плата? Какой порт используем? Сообщаем ардуино о правильной плате и порте. Возможно, что используете Nano, а указана Mega. Возможно, что указали неверный порт. Всё это приводит к сообщению: «programmer is not responding».
Решение:
В Arduino IDE в меню «Сервис» выбираем плату. В меню «Сервис → Последовательный порт» выбираем порт.
Ошибка: «a function-definition is not allowed here before ‘<‘ token"
Забыли в коде программы (скетча) закрыть фигурную скобку >.
Решение:
Обычно в Ардуино IDE строка с ошибкой подсвечивается.
Ошибка: «No such file or directory / exit status 1»
Подключаемая библиотека отсутствует в папке libraries.
Решение:
Ошибка: «expected initializer before ‘>’ token / expected ‘;’ before ‘>’ token»
Решение:
Обычно в Ардуино IDE строка с ошибкой подсвечивается.
Ошибка: «. was not declared in this scope»
Arduino IDE видит в коде выражения или символы, которые не являются служебными или не были объявлены переменными.
Решение:
Проверить код на использование неизвестных выражений или лишних символов.
Первая прошивка, ошибки, FAQ
Первая прошивка
Итак, разобрались со средой разработки, теперь можно загрузить первую прошивку. Можно загрузить пустую прошивку, чтобы просто убедиться, что все драйвера установились и платы вообще прошиваются. Рекомендуется делать это с новой платой, к которой никогда не подключались датчики и модули, чтобы исключить выход платы из строя по вине пользователя.
1. Плата подключается к компьютеру по USB, на ней должны замигать светодиоды. Если этого не произошло:
2. Компьютер издаст характерный сигнал подключения нового оборудования, а при первом подключении появится окошко “Установка нового оборудования”. Если этого не произошло:
3. В списке портов (Arduino IDE/Инструменты/Порт) появится новый порт, обычно COM3. Если этого не произошло:
4. Выбираем свою плату. Если это Arduino Nano, выбираем в Инструменты\Плата\Arduino Nano. Если другая – выбираем другую. Нажимаем стрелочку в левом верхнем углу (загрузить прошивку). Да, загружаем пустую прошивку.
Если появилась надпись “Загрузка завершена” – значит всё в порядке и можно прошивать другие скетчи. В любом случае на вашем пути встретятся другие два варианта событий, происходящих после нажатия на кнопку “Загрузка” – это ошибка компиляции и ошибка загрузки. Вот их давайте рассмотрим более подробно.
Ошибки компиляции
Возникает на этапе сборки и компиляции прошивки. Ошибки компиляции вызваны проблемами в коде прошивки, то есть проблема сугубо софтварная. Слева от кнопки “загрузить” есть кнопка с галочкой – проверка. Во время проверки производится компиляция прошивки и выявляются ошибки, если таковые имеются. Ардуино в этом случае может быть вообще не подключена к компьютеру.
Частые ошибки в коде, приводящие к ошибке компиляции
Ошибки загрузки
Возникают на этапе, когда прошивка собрана, скомпилирована, в ней нет критических ошибок, и производится загрузка в плату по кабелю. Ошибка может возникать как по причине неисправностей железа, так и из-за настроек программы и драйверов.
Предупреждения
Помимо ошибок, по причине которых проект вообще не загрузится в плату и не будет работать, есть ещё предупреждения, которые выводятся оранжевым текстом в чёрной области лога ошибок. Предупреждения могут появиться даже тогда, когда выше лога ошибок появилась надпись “Загрузка завершена“. Это означает, что в прошивке нет несовместимых с жизнью ошибок, она скомпилировалась и загрузилась в плату. Что же тогда означают предупреждения? Чаще всего можно увидеть такие:
Завершая раздел Введение в Arduino поговорим о вопросах, которые очень часто возникают у новичков:
Видео
10 самых распространенных ошибок при работе с Arduino
Платформа Arduino – это один из самых простых путей погрузиться в мир микроконтроллеров и попробовать самому их программировать. Но однако и на этом пути вас могут подстерегать различные ошибки. Некоторые из них устранить очень просто, а на устранение других у вас могут уйти целые дни. В этой статье мы рассмотрим 10 самых распространенных ошибок при работе с платформой Arduino и способы их устранения.
Если вы начинающий в Arduino, то вначале рекомендуем вам ознакомиться с руководством по первому использованию платы Arduino для начинающих – в ней вы найдете решение самых простых ошибок, возникающих при работе с данной платой.
1. Плата Arduino не распознается
В этой ситуации плата Arduino, подключается к компьютеру, не распознается им. В этом случае плата Arduino не появляется в списке устройств, подключенных к компьютеру по COM портам, как показано на следующем рисунке.
Решение
Эта проблема обычно случается когда вы используете не оригинальную плату Arduino, а ее дешевые клоны, обычно китайского производства. В этих клонах Arduino вместо стандартного для оригинальных плат Arduino FTDI чипа (FT232RL) используется более дешевый чип CH340g (для преобразования USB в последовательный интерфейс). Драйверы для стандартного чипа FT232RL уже содержатся в установочном пакете Arduino IDE, поэтому при ее установке они также автоматически устанавливаются на ваш компьютер. А чтобы использовать клон платы Arduino с чипом CH340g вам необходимо предварительно скачать и установить драйвер для этого чипа – скачать его можно по следующей ссылке. Установка его крайне простая – я думаю, она не вызовет у вас никаких затруднений.
После его установки вы сможете увидеть в диспетчере устройств, к какому COM порту подключена ваша плата Arduino.
2. Плата не синхронизируется
В этом случае ваш компьютер видит подключенную к нему плату Arduino, но вы не сможете загрузить в нее код программы и вы при попытке загрузке в нее программы вместо привычного сообщения » done uploading » увидите сообщение об ошибке: “ avrdude: stk500_getsync(): not in sync: resp=0x00 ”.
Решение
Ошибка синхронизации resp = 0x00 является общим ответом (ошибкой) на все проблемы, связанные с некорректной работой микроконтроллера Atmega (или вообще его неработоспособным состоянием), являющегося «сердцем» платы Arduino. Соответственно, причин этой ошибки может быть достаточно много. Мы рекомендуем вам выполнить следующую последовательность шагов чтобы попробовать устранить эту проблему:
Если проблема оказалась в плате Arduino, то можно попробовать прошить ее стандартным программным обеспечением Arduino (то есть попросту сменить в ней загрузчик). Если это не помогло, то, скорее всего, вам придется использовать в своей работе другую плату Arduino.
3. Код программы не начинает исполняться при нажатии кнопки сброса (Reset)
В этом случае плата Arduino при включении питания и при нажатии кнопки сброса не начинает исполнять записанный в нее скетч, а обычно возвращается к исполнению стандартного скетча, записанного в загрузчик платы – это скетч мигания светодиодом.
Решение
Описанная проблема может возникать по достаточно большому количеству причин.
Если плата «висит» и ничего не делает, вы сначала должны убедиться в том, что вы в это же самое время не передаете ей никаких данных с компьютера по последовательному порту. При включении питания загрузчик платы первые несколько секунд проверяет не передаются ли плате по последовательному порту какие либо данные (например, не производится ли попытка загрузки в плату нового скетча). Если никакого нового скетча не поступает, то спустя несколько секунд загрузчик начинает исполнять последний скетч, загруженный в плату. Если же ваша программа периодически передает данные по последовательному порту плате, то загрузчик попросту не перейдет к исполнению последнего загруженного в плату скетча.
Если же передача данных по последовательному порту является исключительно важной частью вашего проекта, вам необходимо предусмотреть в ней задержку, необходимую для того чтобы у загрузчика было время переключиться на исполнение последнего загруженного в плату скетча. Если же у вас нет возможности сделать такую задержку, то вам необходимо будет использовать какие-нибудь внешние программаторы для загрузки кода программы в плату Arduino, которые загружают код программы в обход встроенного в плату загрузчика.
Если же плата Arduino при включении питания или нажатии кнопки сброса не зависает, а начинает исполнять встроенный в загрузчик скетч мигания светодиодом, то кардинальным способом решения этой проблемы является смена загрузчика в плате, поскольку он мог быть поврежден в результате каких-нибудь обстоятельств.
4. Invalid Device Signature Error (ошибка подписи)
Эта ошибка возникает при попытке загрузки кода программы в плату Arduino, тип которой отличается от той платы, которую вы выбрали в настройках Arduino IDE. Ошибка возникает из-за того, что подпись устройства (device signature) на используемой плате отличается от подписи того типа платы, которую вы выбрали в Arduino IDE.
Решение
Выбрать правильный тип платы Arduino в настройках Arduino IDE. Если это не помогает, то можно попробовать прошить плату последней версией загрузчика Arduino (Arduino bootloader).
5. Ошибка запуска (Launch4j Error)
Arduino IDE необходимо некоторое время для того чтобы запуститься и если после ее запуска вы на что-нибудь кликаете, то возникает ошибка Launch4J error как показано на представленном рисунке. Launch4j – это инструмент, который используется для упаковки (wrapping) приложений Java в программной среде Windows, который позволяет им исполняться как обычным программам Windows.
Arduino IDE написана на JAVA и эта ошибка возникает из-за несовместимости библиотеки Java Run Time Environment (JRE), поставляемой вместе с Arduino IDE.
Решение
Часто решить эту проблему удается простым выключением Bluetooth или WiFi на вашем компьютере. Если это не помогает, то более сложным вариантом решения данной проблемы является замена библиотеки JRE в Arduino IDE на ее последнюю версию.
6. Последовательный порт уже используется (Serial Port Already in Use)
Одна из самых простых проблем для решения. Она обычно происходит когда вы пытаетесь загрузить код программы в плату Arduino в то время когда открыто окно монитора последовательной связи (serial monitor) (но эта проблема в последних версиях Arduino IDE уже устранена) или вы пытаетесь его открыть во время обмена информацией между Arduino IDE и платой Arduino, или вы пытаетесь в это время использовать этот же самый COM порт для связи с другим устройством. То есть данная проблема возникает тогда, когда вы пытаетесь использовать последовательный порт одновременно для двух вещей.
Решение
Когда вы хотите загрузить программу в плату Arduino с помощью Arduino IDE, просто закройте (остановите работу) всех программ/приложений, которые в это же самое время могут использовать данный последовательный порт. Если в каких то программах вы не уверены, то отключите и снова подсоедините плату Arduino к компьютеру.
7. Скетч успешно загружен, но ничего не происходит
Эта проблема аналогична ранее рассмотренным проблемам. В данном случае у вас появилось сообщение, что программа успешно загружена в плату Arduino, но сама плата после этого ничего не делает.
Решение
8. Неизвестная ошибка связи (Unsatisfied Link Error)
Очень редко возникающая ошибка. Связана с тем, что на вашем компьютере используется очень старая библиотека для последовательной связи, возможно, от какой то предыдущей версии операционной системы.
Решение
Для решения этой проблемы найдите файл comm.jar или jcl.jar в папке /System/Library/Frameworks/JavaVM.framework/ или в папках на вашем компьютере, относящимся к переменным окружения CLASSPATH или PATH.
9. Размер скетча слишком большой (Sketch Too Large)
Эта ошибка происходит когда размер кода программы больше чем объем перепрограммируемой памяти (flash memory, памяти для хранения программ) используемой вами платы Arduino. К примеру, объем этой памяти в плате Arduino Uno составляет 32 Кбайта, из которых 2 Кбайта заняты загрузчиком. Если вы попытаетесь загрузить в данную плату скетч объемом более 32 Кбайт, то увидите подобную ошибку.
Решение
Для решения этой проблемы модно использовать следующие способы уменьшения объема кода программы:
Более радикальным решением этой проблемы является смена платы Arduino на плату с большим объемом памяти. Например, плату Arduino Uno можно заменить на плату Arduino Mega, или даже на плату Arduino Due.
10. Ошибка переполнения стека (java.lang.StackOverflowError)
Иногда плата Arduino не может выполнить программы, в которых используется некорректная работа со строками, например, у строковых переменных пропущены кавычки в некоторых выражениях (или функциях).
Решение
В этом случае вам необходимо тщательно проинспектировать код своей программы, обращая особое внимание на те строки, в которые используются строковые переменные (типа string). Убедитесь в том, что все кавычки присутствуют в необходимых им местах. Также убедитесь в правильном использовании слешей (косых черт).
В данной статье мы рассмотрели 10 самых распространённых ошибок при работе с Arduino. Разумеется, реальное число ошибок, которые могут возникать при работе с платами Arduino, гораздо больше чем 10, однако мы попытались в этой статье рассмотреть самые распространённые из них. Если у вас возникает какая либо ошибка, которая не рассмотрена в данной статье, можете описать ее в комментариях и мы попробуем вместе с вами ее решить.