Ошибка при открытии arduino

Первая прошивка


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

1. Плата подключается к компьютеру по USB, на ней должны замигать светодиоды. Если этого не произошло:

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

2. Компьютер издаст характерный сигнал подключения нового оборудования, а при первом подключении появится окошко “Установка нового оборудования”. Если этого не произошло:

  • См. предыдущий список неисправностей.
  • Кабель должен быть data-кабелем, а не “зарядным”.
  • Кабель желательно втыкать напрямую в компьютер, а не через USB-хаб.
  • Не установлены драйверы для Arduino.

3. В списке портов (Arduino IDE/Инструменты/Порт) появится новый порт, отличный от COM1. Если этого не произошло:

  • См. предыдущий список неисправностей.
  • Некорректно установлен драйвер CH341.
  • Если список портов вообще неактивен – драйвер Arduino установлен некорректно, вернитесь к установке
  • Возникла системная ошибка, обратитесь к знакомому компьютерщику

4. Выбираем свою плату. Если это Arduino Nano, выбираем в ИнструментыПлатаArduino Nano. Если другая – выбираем другую. Нажимаем стрелочку в левом верхнем углу (загрузить прошивку). Да, загружаем пустую прошивку.

  • [Для Arduino Nano] В микроконтроллер китайских нанок зашит “старый” загрузчик, поэтому выбираем ИнструментыПроцессорATmega328p (Old Bootloader). Некоторые китайцы зашивают в свои платы новый загрузчик, поэтому если прошивка не загрузилась (загрузка идёт минуту и вылетает ошибка avrdude: stk500_getsync()) – попробуйте сменить пункт Процессор на ATmega328p.

Если появилась надпись “Загрузка завершена” – значит всё в порядке и можно прошивать другие скетчи. В любом случае на вашем пути встретятся другие два варианта событий, происходящих после нажатия на кнопку “Загрузка” – это ошибка компиляции и ошибка загрузки. Вот их давайте рассмотрим более подробно.

Ошибки компиляции


Возникает на этапе компиляции прошивки. Ошибки компиляции вызваны проблемами в коде прошивки.

  • В некоторых случаях ошибка возникает при наличии кириллицы (русских букв) в пути к папке со скетчем. Решение: завести для скетчей отдельную папочку в корне диска с английским названием.
  • В чёрном окошке в самом низу Arduino IDE можно прочитать полный текст ошибки и понять, куда копать.
  • В скачанных с интернета готовых скетчах часто возникает ошибка с описанием название_файла.h no such file or directory. Это означает, что в скетче используется библиотека <название файла>, и нужно положить её в Program Files/Arduino/libraries/. Ко всем моим проектам всегда идёт папочка с использованными библиотеками, которые нужно установить. Также библиотеки всегда можно поискать в гугле по название файла.
  • При использовании каких-то особых библиотек, методов или функций, ошибкой может стать неправильно выбранная плата в “Инструменты/плата“. Пример: прошивки с библиотекой Mouse.h или Keyboard.h компилируются только для Leonardo и Micro.
  • Если прошивку пишете вы, то любые синтаксические ошибки в коде будут подсвечены, а снизу в чёрном окошке можно прочитать более детальное описание, в чём собственно косяк. Обычно указывается строка, в которой сделана ошибка, также эта строка подсвечивается красным.
  • Иногда причиной ошибки бывает слишком старая, или слишком новая версия Arduino IDE. Читайте комментарии разработчика скетча
  • Ошибка недостаточно свободного места возникает по вполне понятным причинам. Возможно поможет урок по оптимизации кода.

Частые ошибки в коде, приводящие к ошибке компиляции


  • expected ‘,’ or ‘;’ – пропущена запятая или точка запятой на предыдущей строке
  • stray ‘320’ in program – русские символы в коде
  • expected unqualified-id before numeric constant – имя переменной не может начинаться с цифры
  • … was not declared in this scope – переменная или функция используется, но не объявлена. Компилятор не может её найти
  • redefinition of … – повторное объявление функции или переменной
  • storage size of … isn’t known – массив задан без указания размера

Ошибки загрузки


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

  • USB кабель, которым подключается Arduino, должен быть Data-кабелем, а не кабелем только для зарядки. Нужным нам кабелем подключаются к компьютеру плееры и смартфоны.
  • Причиной ошибки загрузки являются не установленные/криво установленные драйвера CH340, если у вас китайская NANO.
  • Также будет ошибка avrdude: ser_open(): can’t open device, если не выбран COM порт, к которому подключена Arduino. Если кроме COM1 других портов нет – читай два пункта выше, либо попробуй другой USB порт, или вообще другой компьютер.
  • Большинство проблем при загрузке, вызванных “зависанием” ардуины или загрузчика, лечатся полным отключением ардуины от питания. Потом вставляем USB и по новой прошиваем.
  • Причиной ошибки загрузки может быть неправильно выбранная плата в “Инструменты/Плата”, а также неправильно выбранный процессор в “Инструменты/Процессор”. Также в свежих версиях IDE нужно выбирать ATmega328P (Old Bootloader) для китайских плат NANO.
  • Если у вас открыт монитор COM порта в другом окне Arduino IDE или плата общается через СОМ порт с другой программой (Ambibox, HWmonitor, SerialPortPlotter и т.д.), то вы получите ошибку загрузки, потому что порт занят. Отключитесь от порта или закройте другие окна и программы.
  • Если у вас задействованы пины RX или TX – отключите от них всё! По этим пинам Arduino общается с компьютером, в том числе для загрузки прошивки.
  • Если в описании ошибки встречается bootloader is not responding и not in sync, а все предыдущие пункты этого списка проверены – с вероятностью 95% сдох загрузчик. Второй неприятный исход – загрузчик “слетел”, и его можно прошить заново.

Предупреждения


Помимо ошибок, по причине которых проект вообще не загрузится в плату и не будет работать, есть ещё предупреждения, которые выводятся оранжевым текстом в чёрной области лога ошибок. Предупреждения могут появиться даже тогда, когда выше лога ошибок появилась надпись “Загрузка завершена“. Это означает, что в прошивке нет критических ошибок, она скомпилировалась и загрузилась в плату. Что же тогда означают предупреждения? Чаще всего можно увидеть такие:

  • # Pragma message… – это просто сообщения, оставленные разработчиком проекта или библиотеки. Чаще всего номер версии и прочая информация.
  • Недостаточно памяти, программа может работать нестабильно – Чуть выше этого предупреждения обычно идёт информация о задействованной памяти. Память устройства можно добивать до 99%, ничего страшного не случится. Это флэш память и во время работы она не изменяется. А вот динамическую память желательно забивать не более 85-90%, иначе реально могут быть непонятные глюки в работе, так как память постоянно “бурлит” во время работы. НО. Это зависит от скетча и в первую очередь от количества локальных переменных. Можно написать такой код, который будет стабильно работать при 99% занятой SRAM памяти. Так что ещё раз: это всего лишь предупреждение, а не ошибка.

FAQ


Завершая раздел Введение в Arduino поговорим о вопросах, которые очень часто возникают у новичков:

  • Ардуину можно прошить только один раз? Нет, несколько десятков тысяч раз, всё упирается в ресурс Flash памяти. А он довольно большой.
  • Как стереть/нужно ли стирать старую прошивку при загрузке новой? Память автоматически очищается при прошивке, старая прошивка автоматически удаляется.
  • Можно ли записать две прошивки, чтобы они работали вместе? Нет, при прошивке удаляются абсолютно все старые данные. Из двух прошивок нужно сделать одну, причём так, чтобы не было конфликтов. Подробнее в этом уроке.
  • Можно ли “вытащить” прошивку с уже прошитой Ардуины? Теоретически можно, но только в виде нечитаемого машинного кода, в который преобразуется прошивка на С++ при компиляции, т.е. вам это НИКАК не поможет, если вы не имеете диплом по низкоуровневому программированию. Подробнее в этом уроке.
    • Зачем это нужно? Например есть у нас прошитый девайс, и мы хотим его “клонировать”. В этом случае да, есть вариант сделать дамп прошивки и загрузить его в другую плату на таком же микроконтроллере.
    • Если есть желание почитать код – увы, прошивка считывается в виде бинарного машинного кода, превратить который обратно в читаемый Си-подобный код обычному человеку не под силу.
    • Вытащить прошивку, выражаясь более научно – сделать дамп прошивки, можно при помощи ISP программатора, об этом можно почитать здесь.
    • Снять дамп прошивки можно только в том случае, если разработчик не ограничил такую возможность, например записав лок-биты, запрещающие считывание Flash памяти, или вообще отключив SPI шину. Если же разработчик – вы, и есть желание максимально защитить своё устройство от копирования – гуглите про лок-биты и отключение SPI

Видео


Полезные страницы


  • Набор GyverKIT – большой стартовый набор Arduino моей разработки, продаётся в России
  • Каталог ссылок на дешёвые Ардуины, датчики, модули и прочие железки с AliExpress у проверенных продавцов
  • Подборка библиотек для Arduino, самых интересных и полезных, официальных и не очень
  • Полная документация по языку Ардуино, все встроенные функции и макросы, все доступные типы данных
  • Сборник полезных алгоритмов для написания скетчей: структура кода, таймеры, фильтры, парсинг данных
  • Видео уроки по программированию Arduino с канала “Заметки Ардуинщика” – одни из самых подробных в рунете
  • Поддержать автора за работу над уроками
  • Обратная связь – сообщить об ошибке в уроке или предложить дополнение по тексту ([email protected])

Платформа Arduino – это один из самых простых путей погрузиться в мир микроконтроллеров и попробовать самому их программировать. Но однако и на этом пути вас могут подстерегать различные ошибки. Некоторые из них устранить очень просто, а на устранение других у вас могут уйти целые дни. В этой статье мы рассмотрим 10 самых распространенных ошибок при работе с платформой Arduino и способы их устранения.

10 самых распространенных ошибок при работе с Arduino

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

В этой ситуации плата Arduino, подключается к компьютеру, не распознается им. В этом случае плата Arduino не появляется в списке устройств, подключенных к компьютеру по COM портам, как показано на следующем рисунке.

Плата Arduino не распознается компьютером

Решение

Эта проблема обычно случается когда вы используете не оригинальную плату Arduino, а ее дешевые клоны, обычно китайского производства. В этих клонах Arduino вместо стандартного для оригинальных плат Arduino FTDI чипа (FT232RL) используется более дешевый чип CH340g (для преобразования USB в последовательный интерфейс). Драйверы для стандартного чипа FT232RL уже содержатся в установочном пакете Arduino IDE, поэтому при ее установке они также автоматически устанавливаются на ваш компьютер. А чтобы использовать клон платы Arduino с чипом CH340g вам необходимо предварительно скачать и установить драйвер для этого чипа – скачать его можно по следующей ссылке. Установка его крайне простая – я думаю, она не вызовет у вас никаких затруднений.

Установка драйвера для чипа CH340g

После его установки вы сможете увидеть в диспетчере устройств, к какому COM порту подключена ваша плата Arduino.

2. Плата не синхронизируется

В этом случае ваш компьютер видит подключенную к нему плату Arduino, но вы не сможете загрузить в нее код программы и вы при попытке загрузке в нее программы вместо привычного сообщения «done uploading» увидите сообщение об ошибке: “avrdude: stk500_getsync(): not in sync: resp=0x00”.

Решение

Ошибка синхронизации resp = 0x00 является общим ответом (ошибкой) на все проблемы, связанные с некорректной работой микроконтроллера Atmega (или вообще его неработоспособным состоянием), являющегося «сердцем» платы Arduino. Соответственно, причин этой ошибки может быть достаточно много. Мы рекомендуем вам выполнить следующую последовательность шагов чтобы попробовать устранить эту проблему:

  1. Убедитесь в том, что ничего не подключено к цифровым контактам 0 и 1 платы Arduino (включая шилды).
  2. Убедитесь в том, что в настройках Arduino IDE вы выбрали правильный тип платы и правильный COM порт.
  3. Пару раз нажмите кнопку сброса на плате Arduino и попробуйте после этого загрузить в нее код программы.
  4. Если не помогло, то отключите и заново подсоедините плату Arduino к компьютеру.
  5. Закройте и снова запустите Arduino IDE.

Если ничего из перечисленного не помогло, то попробуйте подключить к своему компьютеру другую плату Arduino или же подключите вашу плату Arduino к другому компьютеру. Если вы обнаружите, что проблема в компьютере, то переустановите Arduino IDE. Иногда бывает и так, что Arduino IDE из Windows работает с глюками, а из другой операционной системы на этом же компьютере работает без проблем. Также встречаются энтузиасты, которые устанавливают Arduino IDE в операционную систему от платы Raspberry Pi, то есть работают с Arduino IDE на компьютере, который состоит из платы Raspberry Pi и монитора – они говорят, что в этом случае Arduino IDE работает гораздо лучше чем из под Windows. Также, если не хотите менять компьютер или операционную систему на нем, вместо Arduino IDE можно попробовать использовать аналогичные инструменты — оболочку PlatformIO или Arduino Web Editor (официальный онлайн инструмент, его не нужно устанавливать).

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

3. Код программы не начинает исполняться при нажатии кнопки сброса (Reset)

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

Решение

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

Если плата «висит» и ничего не делает, вы сначала должны убедиться в том, что вы в это же самое время не передаете ей никаких данных с компьютера по последовательному порту. При включении питания загрузчик платы первые несколько секунд проверяет не передаются ли плате по последовательному порту какие либо данные (например, не производится ли попытка загрузки в плату нового скетча). Если никакого нового скетча не поступает, то спустя несколько секунд загрузчик начинает исполнять последний скетч, загруженный в плату. Если же ваша программа периодически передает данные по последовательному порту плате, то загрузчик попросту не перейдет к исполнению последнего загруженного в плату скетча.

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

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

4. Invalid Device Signature Error (ошибка подписи)

Ошибка подписи при работе с платой Arduino

Эта ошибка возникает при попытке загрузки кода программы в плату Arduino, тип которой отличается от той платы, которую вы выбрали в настройках Arduino IDE. Ошибка возникает из-за того, что подпись устройства (device signature) на используемой плате отличается от подписи того типа платы, которую вы выбрали в Arduino IDE.

Решение

Выбрать правильный тип платы Arduino в настройках Arduino IDE. Если это не помогает, то можно попробовать прошить плату последней версией загрузчика Arduino (Arduino bootloader).

5. Ошибка запуска (Launch4j Error)

Ошибка запуска Arduino IDE

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 IDE

Одна из самых простых проблем для решения. Она обычно происходит когда вы пытаетесь загрузить код программы в плату Arduino в то время когда открыто окно монитора последовательной связи (serial monitor) (но эта проблема в последних версиях Arduino IDE уже устранена) или вы пытаетесь его открыть во время обмена информацией между Arduino IDE и платой Arduino, или вы пытаетесь в это время использовать этот же самый COM порт для связи с другим устройством. То есть данная проблема возникает тогда, когда вы пытаетесь использовать последовательный порт одновременно для двух вещей.

Решение

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

7. Скетч успешно загружен, но ничего не происходит

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

Решение

  1. Убедитесь в том, что тип выбранной в настройках Arduino IDE платы совпадает с типом платы, в которую вы загрузили программу.
  2. Также подобная ошибка может быть вызвана тем, что размер загружаемого в плату скетча превышает объем ее памяти для хранения программ. Уменьшите объем скетча или используйте плату Arduino с большим объемом памяти.
  3. Еще одной причиной подобной ошибки может быть сильная зашумленность цепей питания. Убедитесь в том, что питающее напряжение, подаваемое на плату, достаточно стабильно.

8. Неизвестная ошибка связи (Unsatisfied Link Error)

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

Решение

Для решения этой проблемы найдите файл comm.jar или jcl.jar в папке /System/Library/Frameworks/JavaVM.framework/ или в папках на вашем компьютере, относящимся к переменным окружения CLASSPATH или PATH.

9. Размер скетча слишком большой (Sketch Too Large)

Ошибка слишком большо размера скетча при работе с Arduino

Эта ошибка происходит когда размер кода программы больше чем объем перепрограммируемой памяти (flash memory, памяти для хранения программ) используемой вами платы Arduino. К примеру, объем этой памяти в плате Arduino Uno составляет 32 Кбайта, из которых 2 Кбайта заняты загрузчиком. Если вы попытаетесь загрузить в данную плату скетч объемом более 32 Кбайт, то увидите подобную ошибку.

Решение

Для решения этой проблемы модно использовать следующие способы уменьшения объема кода программы:

  1. Там, где это возможно, используйте целые типы данных (integer) вместо вещественных (float).
  2. Там, где это возможно, используйте при объявлениях переменных спецификатор “const”.
  3. Подключайте в программу только те библиотеки, которые вы будете использовать. Там, где это возможно, используйте облегченные версии используемых библиотек.
  4. Используйте специальные алгоритмы и другие способы уменьшения объема кода программы.

Более радикальным решением этой проблемы является смена платы Arduino на плату с большим объемом памяти. Например, плату Arduino Uno можно заменить на плату Arduino Mega, или даже на плату Arduino Due.

10. Ошибка переполнения стека (java.lang.StackOverflowError)

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

Решение

В этом случае вам необходимо тщательно проинспектировать код своей программы, обращая особое внимание на те строки, в которые используются строковые переменные (типа string). Убедитесь в том, что все кавычки присутствуют в необходимых им местах. Также убедитесь в правильном использовании слешей (косых черт).

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

Загрузка…

9 730 просмотров

  • Почему я не могу загрузить свои программы на плату Arduino?
  • Почему в Mac OS X появляется сообщение «Папка сборки исчезла или не может быть записана»?
  • Почему программное обеспечение Arduino не запускается после обновления Java на моем Mac?
  • Почему я получаю ошибку java.lang.StackOverflowError, когда пытаюсь скомпилировать свою программу?
  • Какой тип источника питания я должен использовать с моей платой Arduino?
  • Почему моя программа не запускается, когда я питаю плату от внешнего источника питания? (Arduino Diecimila или более ранняя)
  • Почему программное обеспечение Arduino зависает при попытке загрузить программу (Windows)?
  • Моя плата не включается (зеленый индикатор питания не горит)?
  • Почему моей Diecimila требуется так много времени (6-8 секунд), чтобы начать выполнять программу?
  • Что делать, если я получаю ошибку при запуске arduino.exe в Windows?
  • Почему Arduino не работает на старых версиях Mac OS X?
  • Что мне делать, если я получаю ошибку UnsatisfiedLinkError (о родной библиотеке librxtxSerial.jnilib) при запуске Arduino?
  • Ошибка «Could not find the main class»?
  • Что я могу сделать с конфликтами Cygwin в Windows?
  • Почему программное обеспечение Arduino и меню Tools долго открываются (в Windows)?
  • Почему моя плата не отображается в меню Tools | Serial Port?
  • Что если я получу исключение gnu.io.PortInUseException при загрузке кода или использовании последовательного монитора (на Mac)?
  • У меня проблемы с драйверами FTDI USB.
  • Почему моя программа не запускается, когда я включаю или перезагружаю плату Arduino?
  • Почему моя программа успешно загружается, но ничего не делает?
  • Как я могу уменьшить размер моей программы?
  • Почему я не получаю ШИМ (аналоговый выход) при вызове analogWrite () на контактах, отличных от 3, 5, 6, 9, 10 или 11?
  • Почему я получаю ошибки о необъявленных функциях или необъявленных типах?
  • Почему при загрузке программы появляются ошибки о недопустимой подписи устройства?

Почему я не могу загрузить свои программы на плату Arduino?

Есть много условий, связанных с переносом программы на вашу плату Arduino, и если какое-либо из них не выполнено, загрузка может закончиться неудачей. К ним относятся: драйверы для платы, выбор платы и последовательного порта в программном обеспечении Arduino, доступ к последовательному порту, физическое подключение к плате, прошивка для 8U2 (на Uno и Mega 2560), загрузчик на основной микроконтроллер на плате, настройки предохранителей микроконтроллера и многое другое. Вот несколько конкретных советов по устранению неисправностей каждого из этих компонентов.

Arduino Software

  • Убедитесь, что в меню Tools > Board выбран правильный пункт . Если у вас есть Arduino Uno, вам нужно будет выбрать его. Кроме того, более новые платы Arduino Duemilanove поставляются с ATmega328, а более старые — с ATmega168. Чтобы проверить, прочитайте текст на микроконтроллере (самом крупном чипе) на вашей плате Arduino. Для получения дополнительной информации об элементах меню платы см. Руководство по среде Arduino .
  • Затем убедитесь, что в меню Tools > Serial Port выбран правильный порт (если ваш порт не отображается, попробуйте перезапустить IDE, подключив плату к компьютеру). На Mac последовательный порт должен быть чем-то вроде /dev/tty.usbmodem621 (для Uno или Mega 2560) или /dev/tty.usbserial-A02f8e (для старых плат на основе FTDI). В Linux это должен быть /dev/ttyACM0 или аналогичный (для Uno или Mega 2560) или /dev/ttyUSB0 или аналогичный (для старых плат). В Windows это будет COM-порт, но вам нужно проверить в диспетчере устройств (в разделе «Порты»), чтобы увидеть, какой именно. Если у вас нет последовательного порта для платы Arduino, см. Следующую информацию о драйверах.

Драйверы

Драйверы позволяют программному обеспечению на вашем компьютере (например, программному обеспечению Arduino) взаимодействовать с оборудованием, подключаемым к компьютеру (платой Arduino). В случае Arduino драйверы работают, предоставляя виртуальный последовательный порт (или виртуальный COM-порт). Arduino Uno и Mega 2560 используют стандартные драйверы (USB CDC), предоставляемые операционной системой, для связи с ATmega8U2 на плате. Другие платы Arduino используют драйверы FTDI для связи с чипом FTDI на плате (или в USB-serial convertor).

Самый простой способ проверить правильность установки драйверов для вашей платы — открыть меню Tools > Serial Port в программном обеспечении Arduino, подключив плату Arduino к вашему компьютеру. При подключенной плате к вашему компьютеру должны появиться дополнительные пункты меню, при отключенной плате этих пунктов не будет. Обратите внимание, что не имеет значения, какое имя назначается последовательному порту платы Arduino, если вы выбираете его из меню.

  • В Windows 7 (особенно в 64-разрядной версии) вам может понадобиться зайти в диспетчер устройств и обновить драйверы для Uno или Mega 2560. Просто щелкните правой кнопкой мыши на устройстве (плата должна быть подключена к вашему компьютеру), и снова укажите Windows на соответствующий INF-файл. Этот файл находится в каталоге drivers / программное обеспечение Arduino (а не в его подкаталоге USB-драйверов FTDI).
  • В Linux Uno и Mega 2560 отображаются как устройства вида / dev / ttyACM0. Они не поддерживаются стандартной версией библиотеки RXTX, которую программное обеспечение Arduino использует для последовательной связи. В загружаемое программное обеспечение Arduino для Linux входит исправленная версия библиотеки RXTX для поиска этих устройств / dev / ttyACM *. Также есть пакет Ubuntu (для 11.04), который включает поддержку этих устройств. Однако, если вы используете пакет RXTX из своего дистрибутива, вам может понадобиться символическая ссылка с / dev / ttyACM0 на / dev / ttyUSB0 (например), чтобы последовательный порт появился в программном обеспечении Arduino.
    Выполнить:

sudo usermod -a -G tty yourUserName
sudo usermod -a -G dialout yourUserName
выйдите из системы и войдите снова, чтобы изменения вступили в силу.

Доступ к последовательному порту

  • В Windows, если программное обеспечение запускается медленно или дает сбой при запуске, или меню Tools открывается медленно, вам может потребоваться отключить последовательные порты Bluetooth или другие сетевые COM-порты в диспетчере устройств. Программное обеспечение Arduino сканирует все последовательные (COM) порты на вашем компьютере при запуске и при открытии меню Tools, и эти сетевые порты могут иногда вызывать большие задержки или сбои.
  • Убедитесь, что у вас не запущены программы, сканирующие все последовательные порты, например, программное обеспечение USB Cellular Wifi Dongle (например, от Sprint или Verizon), приложения для синхронизации PDA, драйверы Bluetooth-USB (например, BlueSoleil ), инструменты virtual daemon и т. д.
  • Убедитесь, что у вас нет программного обеспечения брандмауэра, которое блокирует доступ к последовательному порту (например, ZoneAlarm).
  • Возможно, вам придется выйти из обработки, PD, vvvv и т. д., Если вы используете их для чтения данных через USB или последовательное соединение с платой Arduino.
  • В Linux вы можете попробовать запустить программное обеспечение Arduino от имени пользователя root, хотя бы временно, чтобы проверить, происходит ли загрузка.

Физическая Связь

  • Сначала убедитесь, что ваша плата включена (зеленый светодиод включен) и подключена к компьютеру.
  • У Arduino Uno и Mega 2560 могут возникнуть проблемы с подключением к Mac через USB-концентратор. Если в меню Tools > Serial Port ничего не появляется, попробуйте подключить плату непосредственно к компьютеру и перезапустить Arduino IDE.
  • Отключите цифровые контакты 0 и 1 во время загрузки, так как они используются для последовательной связи с компьютером (их можно подключить и использовать после загрузки кода).
  • Попробуйте загрузить, не подключая ничего к плате (кроме USB-кабеля, конечно).
  • Убедитесь, что плата не касается металлических или токопроводящих предметов.
  • Попробуйте другой USB-кабель. Иногда они не работают.

Автосброс

  • Если у вас есть плата, которая не поддерживает автосброс, убедитесь, что вы сбрасываете платы за пару секунд до загрузки. (Arduino Diecimila, Duemilanove и Nano поддерживают автоматический сброс, как и LilyPad, Pro и Pro Mini).
  • Тем не менее, обратите внимание, что некоторые Diecimila были случайно сожжены из-за неправильного загрузчика и может потребовать от вас физического нажатия кнопки сброса перед загрузкой; см. этот вопрос ниже.
  • Однако на некоторых компьютерах вам может потребоваться нажать кнопку сброса на плате после нажатия кнопки загрузки в среде Arduino. Попробуйте разные интервалы времени между двумя нажатиями, до 10 секунд и более.
  • Если вы получили эту ошибку: [VP 1] Device is not responding correctly. попробуйте загрузить снова (т.е. сбросить плату и нажать кнопку загрузки второй раз).

Загрузчик

  • Убедитесь, что на вашей плате Arduino сгорел загрузчик. Для проверки перезагрузите плату. Встроенный светодиод L (который подключен к контакту 13) должен мигать. Если этого не произойдет, на вашей плате может не быть загрузчика.

Почему в Mac OS X появляется сообщение «Папка сборки исчезла или не может быть записана»?

Вы перетащили Arduino.app из образа диска (и, например, в папку «Приложения»)? Если нет, вы не сможете загрузить примеры.

Почему программное обеспечение Arduino не запускается после обновления Java на моем Mac?

Последнее обновление Java от Apple пытается использовать 64-битную версию собственных библиотек, но приложение Arduino поставляется с 32-битной версией библиотеки RXTX. Если вы запустите Arduino, вы получите ошибку вроде:

Uncaught exception in main method: java.lang.UnsatisfiedLinkError: /Applications/arduino0016/Arduino 16.app/Contents/Resources/Java/librxtxSerial.jnilib: no suitable image found.  Did find: /Applications/arduino0016/Arduino 16.app/Contents/Resources/Java/librxtxSerial.jnilib: no matching architecture in universal wrapper

Чтобы это исправить, нажмите на приложение Arduino (например, Arduino 16.app ) в Finder и выберите Get Info в меню File . На информационной панели установите флажок Open in 32 Bit Mode . После этого вы сможете запустить Arduino в обычном режиме.

Почему я получаю Java.lang.StackOverflowError, когда я пытаюсь скомпилировать свою программу?

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

java.lang.StackOverflowError

at java.util.Vector.addElement(Unknown Source)

at java.util.Stack.push(Unknown Source)

at com.oroinc.text.regex.Perl5Matcher._pushState(Perl5Matcher.java)

или:

at com.oroinc.text.regex.Perl5Matcher._match(Perl5Matcher.java)

at com.oroinc.text.regex.Perl5Matcher._match(Perl5Matcher.java)

at com.oroinc.text.regex.Perl5Matcher._match(Perl5Matcher.java)

at com.oroinc.text.regex.Perl5Matcher._match(Perl5Matcher.java)

at com.oroinc.text.regex.Perl5Matcher._match(Perl5Matcher.java)

at com.oroinc.text.regex.Perl5Matcher._match(Perl5Matcher.java)

at com.oroinc.text.regex.Perl5Matcher._match(Perl5Matcher.java)

это как раз эта проблема. Ищите необычные последовательности, включающие «двойные кавычки», «одинарные кавычки», обратную косую черту, комментарии и т. д. Например, пропущенные кавычки могут вызвать проблемы, как и последовательность «»» (используйте «»).

Какой тип источника питания я должен использовать с моей платой Arduino?

Как правило, плата Arduino может удовлетворительно работать при питании, доступном через порт USB компьютера, к которому она подключена, в зависимости от количества и типа дополнительных модулей, используемых с платой Arduino, и номинального тока питания USB, доступного от компьютер (зависит от производителя и модели компьютера). Если вы обнаружите, что для правильной работы платы Arduino требуется дополнительное питание, или если вам нужно работать с платой Arduino, отсоединенной от USB-порта, или если вы используете ее с тем, который не обеспечивает питание, вам необходимо получить питание от источника питания, обеспечивающего от 7 до 12 В (вольт) постоянного тока с достаточной силой тока для ваших нужд. Адаптеры переменного тока, обычно доступные в розничных магазинах для использования с потребительскими товарами, часто подходят, но убедитесь, что он имеет подходящий разъем для подключения к разъему питания на плате Arduino: цилиндрический штекер диаметром 5,5 мм с отверстием для штырька 2,1 мм, который обеспечивает положительное напряжение на внутреннем отверстии и отрицательное (или общее / заземление) напряжение на внешней цилиндрической втулке разъема. Для большинства приложений достаточно 1A, но вы можете обнаружить, что вам понадобится больше, если вам нужен конкретный модуль или набор из нескольких модулей, которые вместе с платой Arduino тянут более высокий общий ток. Вы должны суммировать номинальную потребляемую мощность тока на входе для каждой платы, которую вы используете, вместе с вашей платой Arduino, чтобы получить необходимую сумму, и после этого приобретите адаптер питания / источник питания, который обеспечивает минимум этого общего значения (более высокая сила тока источника питания не оказывает вредного воздействия). Вы также должны помнить, что встроенный регулятор 5 В не может подавать бесконечный ток (к примеру, 800 мА — нормальное значение, чтобы не перегревать плату), поэтому, если одному из ваших проектов требуется большее количество энергии, вы должны подумать, как обеспечить необходимым питанием каждую плату отдельно и заставить их работать вместе, соединяя все GND в одной точке.

Почему моя программа не запускается, когда я питаю плату от внешнего источника питания? (Arduino Diecimila или более ранняя)

Поскольку вывод RX не подключен, загрузчик на плате может видеть поступающие данные мусором, а это означает, что он никогда не запустит вашу программу. Попробуйте подключить контакт RX к земле резистором 10 кОм (или подключить RX непосредственно к контакту TX).

Почему программное обеспечение Arduino зависает при попытке загрузить программу? (Windows)?

Это может быть вызвано конфликтом с процессом Logitech «LVPrcSrv.exe». Откройте диспетчер задач и посмотрите, работает ли эта программа, и если да, закройте ее перед попыткой загрузки.

Моя плата не включается (зеленый индикатор питания не горит)?

Если вы используете USB-плату Diecimila или более старую (например, NG), убедитесь, что перемычка (маленькая пластиковая деталь возле USB-штекера) находится на правильных контактах. Если вы питаете плату от внешнего источника питания (подключенного к разъему питания), перемычка должна быть на двух контактах, ближайших к разъему питания. Если вы подключаете плату через USB, перемычка должна быть на двух выводах, ближайших к разъему USB.

Почему моей Diecimila требуется так много времени (6-8 секунд), чтобы начать выполнять программу?

Некоторые платы Arduino Diecimila были случайно сожжены загрузчиком Arduino NG. Он должен работать нормально, но имеет более длительную задержку при сбросе платы (потому что у NG нет автоматического сброса, поэтому вам нужно рассчитывать время загрузки вручную). Вы можете распознать загрузчик NG следующим образом — светодиод на контакте 13 будет мигать три раза при перезагрузке платы (по сравнению с однократным миганием при загрузчике Diecimila). Если на вашем Diecimila установлен загрузчик NG, вам может потребоваться физически нажать кнопку сброса на плате, прежде чем загружать программу. Вы можете записать правильный загрузчик на Diecimila, подробности смотрите на странице загрузчика .

Что делать, если я получаю ошибку при запуске arduino.exe в Windows?

Если вы получили ошибку при двойном щелчке исполняемого файла arduino.exe в Windows, например:
Arduino has encountered a problem and needs to close.
вам нужно будет запустить Arduino с помощью файла run.bat.

Почему Arduino не работает на старых версиях Mac OS X?

Если вы получаете сообщение об ошибке, подобное этому:

Link (dyld) error:

dyld: /Applications/arduino0004/Arduino 04.app/Contents/MacOS/Arduino Undefined symbols:

/Applications/arduino0004/librxtxSerial.jnilib undefined reference to _printf$LDBL128 expected to be defined in /usr/lib/libSystem.B.dylib

вам, вероятно, нужно обновить до Max OS X 10.3.9 или новее. Более старые версии имеют несовместимые версии некоторых системных библиотек.

Что мне делать , если я получаю UnsatisfiedLinkError ошибки (о родной библиотеке librxtxSerial.jnilib) при запуске Arduino?

Если вы получаете такую ​​ошибку при запуске Arduino:

Uncaught exception in main method: java.lang.UnsatisfiedLinkError: Native Library /Users/anu/Desktop/arduino0002/librxtxSerial.jnilib already loaded in another classloader

у вас, вероятно, есть старая версия библиотеки сообщений. Найдите файл comm.jar или jcl.jar в / System / Library / Frameworks / JavaVM .framework /

Ошибка «Could not find the main class»

Если вы получаете эту ошибку при запуске Arduino:

Java Virtual Machine Launcher: Could not find the main class. Program will exit.

убедитесь, что вы правильно распаковали содержимое файла .zip Arduino, в частности, что каталог lib находится непосредственно внутри каталога Arduino и содержит файл pde.jar .

Что я могу сделать с конфликтами Cygwin в Windows?

Если у вас уже есть Cygwin, установленный на вашем компьютере, вы можете получить такую ​​ошибку при попытке скомпилировать программу в Arduino:

6 [main] ? (3512) C:Devarduino0006toolsavrbinavrgcc.exe: *** fatal error C:Devarduino0006toolsavrbinavrgcc.exe: *** system shared memory version mismatch detected 0x75BE0084/0x75BE009C.

This problem is probably due to using incompatible versions of the cygwin DLL.

Search for cygwin1.dll using the Windows Start&gt;Find/Search facility and delete all but the most recent version.  The most recent version *should* reside in x:cygwinbin, where ‘x’ is the drive on which you have installed the cygwin distribution.  Rebooting is also suggested if you are unable to find another cygwin DLL.

Если это так, сначала убедитесь, что у вас не запущен Cygwin при использовании Arduino. Если это не поможет, попробуйте удалить cygwin1.dll из каталога Arduino и заменить его на cygwin1.dll из существующей установки cygwin (возможно, в c: cygwin bin).

Почему программное обеспечение Arduino и меню Tools долго открываются (в Windows)?

Если запуск программного обеспечения Arduino занимает много времени и он зависает при попытке открыть меню Tools, это может привести к конфликту с другим устройством в вашей системе. Программное обеспечение Arduino при запуске и при открытии меню Tools пытается получить список всех COM-портов на вашем компьютере. Возможно, что COM-порт, созданный одним из устройств на вашем компьютере, замедляет этот процесс. Посмотрите в диспетчере устройств. Попробуйте отключить устройства, которые предоставляют COM-порты (например, устройства Bluetooth).

Почему моя плата не отображается в меню Tools |Serial Port ?

Если вы используете USB Arduino платы, убедитесь , что вы установили драйверы FTDI (см. Среда разработчика). Если вы используете адаптер USB-Serial с платой, убедитесь, что вы установили его драйверы.

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

Убедитесь, что у вас нет программ, сканирующих все последовательные порты, таких как приложения синхронизации КПК, драйверы Bluetooth-USB (например, BlueSoleil ), virtual daemon tools и т. д.

Что делать, если я получу gnu.io.PortInUseException при загрузке кода или использовании последовательного монитора (на Mac)?

Error inside Serial.&lt;init&gt;()

gnu.io.PortInUseException: Unknown Application

     at gnu.io.CommPortIdentifier.open(CommPortIdentifier.java:354)

     at processing.app.Serial.&lt;init&gt;(Serial.java:127)

     at processing.app.Serial.&lt;init&gt;(Serial.java:72)

Это, вероятно, означает, что порт фактически используется другим приложением. Убедитесь, что у вас не запущены другие программы, которые обращаются к последовательным портам или портам USB, такие как приложение синхронизации КПК, диспетчеры устройств Bluetooth, определенные брандмауэры и т. д. Также обратите внимание, что некоторые программы (например, Max / MSP) поддерживают последовательный порт открытым даже когда он не используется — вам может потребоваться закрыть все патчи, которые используют последовательный порт, или полностью выйти из приложения.

Если вы получите эту ошибку с Arduino 0004 или более ранней версии, или с Processing, вам нужно будет запустить macosx_setup.command, а затем перезагрузить компьютер. Arduino 0004 включает в себя модифицированную версию этого скрипта, которую должны запускать все пользователи (даже те, кто запускал ту, которая шла с Arduino 0003). Вам также может понадобиться удалить содержимое каталога / var / spool / uucp .

У меня проблемы с драйверами FTDI USB.

Попробуйте установить последние версии драйверов от FTDI или обратитесь в службу поддержки по адресу support1@ftdichip.com .

Почему моя программа не запускается, когда я включаю или перезагружаю плату Arduino?

Скорее всего, потому что вы отправляете последовательные данные на плату, когда она впервые включается. В течение первых нескольких секунд загрузчик (программа, предварительно записанная на микросхему на плате) прослушивает компьютер, чтобы отправить ему новую программу для загрузки на плату. Через несколько секунд без связи загрузчик отключится и запустит программу, которая уже находится на плате. Если вы продолжите отправлять данные в загрузчик, это никогда не кончится, и ваша программа никогда не запустится. Вам нужно будет либо найти способ остановить поступление последовательных данных в течение первых нескольких секунд при включении платы (например, путем включения микросхемы, отправляющей данные из вашей функции setup ()), либо записать свой эскиз на плату с помощью внешнего программатора , заменив загрузчик.

Почему моя программ успешно загружается, но ничего не делает?

Вы выбрали не тот пункт в меню Tools > Microcontroller. Убедитесь, что выбранный микроконтроллер соответствует микроконтроллеру на вашей плате ( ATmega8 или ATmega168 ) — имя будет написано на самой большой микросхеме на плате.

Проверьте источник питания. Возможно, это может привести к потере чипа.

Кроме того, программа может быть слишком большой для платы. При загрузке программы Arduino 0004 проверяет, не слишком ли она велика для ATmega8 , но основывает свои расчеты на загрузчике объемом 1 Кб. У вас может быть более старый загрузчик, который занимает 2 КБ из 8 КБ программного пространства (флэш-памяти) на ATmega8 вместо 1 КБ, используемого текущим загрузчиком. Если ваш размер больше, будет загружена только часть скетча, но программное обеспечение не узнает об этом, и ваша плата будет постоянно сбрасываться, приостанавливаться.

Если у вас есть доступ к AVR-ISP или программатору параллельного порта, вы можете записать последнюю версию загрузчика на свою плату с помощью Tools | Burn Bootloader. В противном случае вы можете указать среде Arduino объем пространства, доступного для программ, отредактировав переменную upload.maximum_size в файле настроек. Измените 7168 на 6144, и среда должна правильно предупредить вас, когда ваша программа слишком большая.

Как я могу уменьшить размер моей программы?

Чип ATmega168 на Arduino дешева, но у него есть только 16 Кб памяти программного кода, которой не очень много (и 2 Кб используется загрузчиком).

Если вы используете число с плавающей запятой, попробуйте переписать ваш код с помощью целочисленной математики, что должно сэкономить вам около 2 КБ. Удалите все операторы #include вверху программы для библиотек, которые вы не используете.

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

Мы всегда работаем над уменьшением размера ядра Arduino, чтобы оставить больше места для ваших эскизов.

Почему я не получаю ШИМ (аналоговый выход) при вызове analogWrite() на контактах, отличных от 3, 5, 6, 9, 10 или 11?

Микроконтроллер на плате Arduino ( ATmega168 ) поддерживает PWM / analogWrite () только на определенных контактах. При вызове analogWrite () на любых других выводах выдается высокий (5 вольт) для значений больше 128 и низкий (0 вольт) для значений меньше 128. (Старые платы Arduino с ATmega8 поддерживают только ШИМ-выход на выводах 9, 10 и 11.)

Почему я получаю ошибки о необъявленных функциях или необъявленных типах?

Среда Arduino пытается автоматически сгенерировать прототипы для ваших функций, чтобы вы могли упорядочить их по своему усмотрению. Этот процесс, однако, не идеален, и иногда приводит к неясным сообщениям об ошибках.

Если вы объявите пользовательский тип в своем коде и создадите функцию, которая принимает или возвращает значение этого типа, вы получите ошибку при попытке скомпилировать программу. Это потому, что автоматически сгенерированный прототип для этой функции появится над определением типа.

Если вы объявляете функцию с возвращаемым типом из двух слов (например, «unsigned int»), среда не будет понимать, что это функция, и не создаст для нее прототип. Это означает, что вам нужно предоставить свое собственное или поместить определение функции выше любых вызовов к ней.

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

Если вы получаете сообщение об ошибке вроде:
avrdude: Yikes! Invalid device signature.
Double check connections and try again, or use -F to override
this check.

это может означать одну из двух вещей. Либо у вас выбрана неправильная плата из меню Tools > Board, либо вы не используете нужную версию avrdude. Arduino использует слегка модифицированную версию avrdude для загрузки программ на плату Arduino. Стандартная версия запрашивает подпись устройства платы способом, не понятным загрузчику, что приводит к этой ошибке. Убедитесь, что вы используете версию avrdude, которая поставляется с Arduino.

Именно поэтому, чтобы получить официальную бумагу по всем правилам, нужно обратиться в университет. Для этого нужно собрать определенную документацию http://market-diploma.com/ диплома, то здесь могут быть разные варианты: купить диплом с отличием бакалавра — значит сэкономить личное время и деньги, не теряя на процессе обуч

{{#setlogo:ArduinoCommunityLogo.png}}

Проверка/Оформление/Редактирование: Мякишев Е.А.

Почему у меня не получается загрузить на Arduino свои программы?

На загрузку программы на Arduino влияет сразу несколько вещей, и если хотя бы одна из них дает сбой, загрузка будет неуспешной. Вот некоторые из этих факторов: драйверы платы, плата и порт, выбранные в IDE Arduino, физическое подключение к плате, прошивка 8U2 (на Uno и Mega2560), загрузчик на главном микроконтроллере платы, фьюз-настройки микроконтроллера и т.д. Ниже – несколько решений каждой из этих проблем:

IDE Arduino

  • Убедитесь, что выбрали правильную плату в меню Инструменты > Плата (Tools > Board). То есть если вы работаете с Arduino Uno, то выбрать нужно именно ее. Кроме того, новые версии плат Arduino Duemilanove идут с процессором ATmega328, а старые – с ATmega168. Чтобы определить, каким именно процессором оснащена ваша плата, найдите ее микроконтроллер (самый большой чип на плате) и прочтите написанный на нем текст. Более подробно о меню «Плата» читайте в статье об IDE Arduino.
  • Теперь проверьте, правильный ли выбран порт в меню Инструменты > Порт (Tools > Serial Port). Если порт не отображается, попробуйте перезапустить IDE, но плата при этом должна быть подключена к компьютеру. На Mac последовательный порт должен выглядеть примерно так – /dev/tty.usbmodem621 (для Uno или Mega 2560) или /dev/tty.usbserial-A02f8e (для старых плат на базе FTDI). На Linux/dev/ttyACM0 или вроде того (для Uno или Mega2560) или /dev/ttyUSB0 или вроде того (для старых версий). На Windows это будет COM-порт, а какой именно – нужно будет посмотреть в «Менеджере устройств» (под секцией с портами). Если последовательного порта у Arduino не видно, читайте раздел ниже, посвященный драйверам.

Драйверы

Драйверы – это средства, с помощью которых ПО, установленное на вашем компьютере (т.е. IDE Arduino), «общается» с оборудованием, подключенным к вашему компьютеру (т.е. с платой Arduino). В случае Arduino драйверы отвечают за создание виртуального последовательного порта (или виртуального COM-порта). У плат Arduino Uno и Mega 2560 (у которых последовательная передача данных трансформируется в USB-сигнал при помощи контроллера ATmega8U2) для этого используются стандартные драйверы (USB CDC), идущие в комплекте с ОС. У других плат Arduino (где преобразование последовательного сигнала в USB-сигнал осуществляется при помощи FDTI-чипа) для этого используются FDTI-драйверы.

Самый простой способ проверить, правильные ли драйверы установлены для вашей платы – это открыть в IDE Arduino меню Инструменты > Порт (Tools > Serial Port). Причем это надо сделать два раза: первый – когда Arduino будет подключена к компьютеру, и второй – когда не будет. Затем нужно сравнить результаты. Когда Arduino не будет подключена к компьютеру, в меню «Порт» должны появиться дополнительные пункты, имеющие отношение к отключенной Arduino. Какое название будет присвоено последовательному порту Arduino – не важно.

  • Если вы используете Uno или Mega 2560, то на Windows (особенно на 64-битной версии) вам, возможно, придется зайти в «Менеджер устройств» и обновить драйверы. Просто кликните по девайсу правой кнопкой мыши (плата должна быть подключена к компьютеру), а затем снова укажите Windows соответствующий файл с расширением *.inf. Он должен находиться в директории IDE Arduino в папке drivers (но не в подпапке FTDI USB Drivers).
  • Если, устанавливая на Windows XP драйверы к Uno или Mega 2560, вы получаете ошибку The system cannot find the file specified («Система не может найти указанный файл»), попробуйте это решение (т.е. добавьте ключ RunOnce в «HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersion»).
  • На Linux платы Uno и Mega 2560 отображаются как /dev/ttyACM0. Однако стандартной версией библиотеки RXTX, которую Arduino использует для последовательной передачи данных, это не поддерживается. Впрочем, Linux-версия IDE Arduino содержит пропатченную версию RXTX-библиотеки, которая умеет искать эти /dev/ttyACM* девайсы. Кроме того, есть еще пакет для Ubuntu (для 11.04), в котором тоже есть поддержка этих девайсов. Если же, однако, вы используете RXTX-пакет из своего дистрибутива, то для того, чтобы в IDE Arduino появился нужный последовательный порт, вам, возможно, придется сделать симлинк от /dev/ttyACM0 к /dev/ttyUSB0 (к примеру).

Запустите:

sudo usermod -a -G tty yourUserName
sudo usermod -a -G dialout yourUserName

Чтобы изменения вступили в силу, разлогиньтесь и снова залогиньтесь.

Доступ к последовательному порту

  • Если, когда вы работаете на Windows, IDE Arduino не запускается или тормозит, или если у нее медленно открывается меню «Инструменты», то вам, возможно, надо будет отключить в «Менеджере устройств» последовательные Bluetooth-порты или другие сетевые порты. Дело в том, что IDE Arduino при запуске и открытии меню «Инструменты» сканирует все последовательные (COM) порты на вашем компьютере, и это иногда влечет за собой большие задержки и даже вылеты программы.
  • Убедитесь, что у вас не запущены другие программы для сканирования последовательных портов – вроде ПО для мобильных USB-модемов, синхронизирующих приложений для КПК, драйверов Bluetooth-USB, виртуальных эмуляторов и т.д.
  • Убедитесь, что ваш фаервол не блокирует доступ к последовательному порту. Среди таких фаерволов числится, например, ZoneAlarm.
  • Вам нужно будет выйти из Processing, vvvv и т.д., если вы используете их для чтения данных при USB— или последовательной передаче данных на плату Arduino.
  • На Linux можно попробовать запустить IDE Arduino через root – хотя бы временно, чтобы посмотреть, доступны ли для загрузки какие-нибудь обновления с фиксами.

Физическое соединение

  • Во-первых, убедитесь, что плата включена (если горит зеленый светодиод – значит, включена) и подсоединена к компьютеру.
  • На Arduino Uno и Mega 2560 могут быть проблемы с подключением к Mac через USB-хаб. Если в меню Инструменты > Порт (Tools > Serial Port) ничего не появляется, попробуйте подключить плату к компьютеру напрямую и перезапустить IDE Arduino.
  • Во время загрузки отключите 0-ой и 1-ый цифровой контакты, т.к. они тоже используются для последовательной коммуникации с компьютером (их можно будет снова включить, когда код будет загружен).
  • Попробуйте загрузить код на плату, когда к ней не подключено вообще ничего (кроме USB-кабеля, разумеется).
  • Убедитесь, что плата не касается ничего металлического или токопроводящего.
  • Попробуйте другой USB-кабель. Иногда они не работают.

Автоматический сброс

  • Если ваша плата не поддерживает автоматический сброс, то его необходимо делать вручную за пару секунд до загрузки кода (автоматический сброс поддерживают модели Diecimila, Duemilanove и Nano, а также LilyPad, Pro и Pro Mini с 6-контактной гребенкой).
  • Впрочем, имейте в виду, что на некоторые Diecimila был случайно записан неправильный загрузчик, и вам перед загрузкой придется нажимать на кнопку сброса вручную (см. вопрос о долгой загрузке Diecimila ниже).
  • Кроме того, на некоторых компьютерах кнопку сброса, возможно нужно будет нажать после того, как вы нажмете кнопку загрузки в IDE Arduino. Попробуйте разные интервалы – до 10 секунд и более.
  • Если вы получили ошибку [VP 1] Device is not responding correctly, попробуйте загрузиться снова, т.е. сбросьте плату и еще раз нажмите в IDE Arduino кнопку загрузки.

Загрузчик

  • Убедитесь, что на вашу Arduino записан загрузчик. Чтобы проверить это, сбросьте плату. В ответ на это действие должен заморгать L-светодиод (тот, который подключен к 13-ому контакту). Если не заморгал, то загрузчика на вашей плате может не быть.

Если ничего из вышеописанного не помогает, попробуйте спросить совета на форуме. Перед публикацией поста убедитесь, что ответили в нем на следующие вопросы:

  • Какая у вас операционная система?
  • Какая у вас модель Arduino? Если это Mini, LilyPad или другая плата, требующая дополнительной проводки, если возможно, приложите фото всей этой системы.
  • Проблемы с загрузкой были всегда? Или появились спустя какое-то время после нормальной работы? Если да, то что вы делали с платой перед тем, когда она перестала работать? Какое ПО вы недавно устанавливали или удаляли с компьютера?
  • Какие сообщения отображаются, когда вы пытаетесь загрузить код с включенным «подробным выводом»? Чтобы увидеть их, кликая на кнопку загрузки, зажмите клавишу  ⇧ Shift .

Почему у меня выскакивает ошибка «Build folder disappeared or could not be written» (на Mac OS X)?

Вы вытащили Arduino.app из образа диска (скажем, в папку Applications)? Если нет, то загружать скетчи у вас не получится.

Почему IDE Arduino не запускается после обновления Java на Mac?

Последнее обновление Java от Apple пытается использовать 64-битные версии родных библиотек, тогда как RXTX-библиотека Arduino идет в 32-битной версии. Таким образом, если вы запустите Arduino, то получите примерно такую ошибку:

Uncaught exception in main method: java.lang.UnsatisfiedLinkError: /Applications/arduino-0016/Arduino 16.app/Contents/Resources/Java/librxtxSerial.jnilib: no suitable image found. Did find: /Applications/arduino-0016/Arduino 16.app/Contents/Resources/Java/librxtxSerial.jnilib: no matching architecture in universal wrapper

Чтобы исправить это, кликните по приложению Arduino (например, по Arduino 16.app) в Finder, а затем выберите меню File и кликните по пункту Get Info. Теперь поставьте галочку рядом с пунктом Open in 32 Bit Mode. Теперь IDE Arduino должна запуститься нормально.

Почему при попытке скомпилировать программу мне выдает ошибку java.lang.StackOverflowError?

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

java.lang.StackOverflowError
at java.util.Vector.addElement(Unknown Source)
at java.util.Stack.push(Unknown Source)
at com.oroinc.text.regex.Perl5Matcher._pushState(Perl5Matcher.java)

…или…

at com.oroinc.text.regex.Perl5Matcher._match(Perl5Matcher.java)
at com.oroinc.text.regex.Perl5Matcher._match(Perl5Matcher.java)
at com.oroinc.text.regex.Perl5Matcher._match(Perl5Matcher.java)
at com.oroinc.text.regex.Perl5Matcher._match(Perl5Matcher.java)
at com.oroinc.text.regex.Perl5Matcher._match(Perl5Matcher.java)
at com.oroinc.text.regex.Perl5Matcher._match(Perl5Matcher.java)
at com.oroinc.text.regex.Perl5Matcher._match(Perl5Matcher.java)

…то случилось именно это. Следовательно, вам надо поискать в коде строки с «двойными кавычками», ‘одинарными кавычками’, обратными слэшами, комментариями и т.д. К примеру, проблемы могут возникнуть из-за пропущенных кавычек и строк вроде ‘ » ‘ (используйте вместо этого ‘ » ‘).

Какой блок питания использовать?

Как правило, плата Arduino может успешно функционировать от питания, идущего через USB-порт компьютера, к которому она подключена, однако тут есть два фактора. Во-первых, это зависит от количества и типа опциональных Shield-модулей, подключенных к Arduino, а во-вторых, от того, сколько тока может дать USB-порт компьютера (этот показатель варьируется в зависимости от производителя и модели компьютера).

Если вы обнаружите, что вашей Arduino нужно дополнительное питание, или вам понадобится, чтобы она функционировала без подключения к USB-порту компьютера, или при использовании Arduino с портом, который не дает питания, то вам понадобится блок питания, обеспечивающий напряжение от 7 до 12 В (Вольт) и достаточную силу тока. Для этих целей подойдут, например, адаптеры, умеющие конвертировать переменный ток в постоянный – они используются, как правило, для потребительской электроники, и их можно часто встретить в розничных магазинах. Однако нужно убедиться, что покупаемый адаптер имеет правильный коннектор, подходящий к разъему питания на Arduino: коннектор должен быть круглым, его внешний диаметр – 5,5 мм, а диаметр внутреннего отверстия-контакта – 2,1 мм. При этом отрицательное напряжение (или «земля») будет на внешнем контакте коннектора, а положительное – в контакте на внутреннем отверстии.

Для большинства случаев достаточно, как правило, силы тока в 1 ампер, однако некоторым Shield-модулям (или «небоскребу» из Shield-модулей) может потребоваться больше. То есть вам надо будет сложить силу тока, требуемую для питания всех подключенных к плате Shield-модулей, и купить адаптер, который сможет это совокупное питание обеспечивать (если адаптер будет давать больше, то никаких вредных побочных эффектов не будет). Также нужно помнить, что встроенный 5-вольтовый регулятор не сможет обеспечивать бесконечное количество тока (если не хотите перегреть плату, то лучше не превышать отметку в 800 миллиампер). Следовательно, если вашему проекту нужно больше, то необходимые 5 вольт (или вставьте сюда другое количество вольт, необходимых для вашего проекта) можно давать избирательно, питая различные устройства при помощи соответствующего количества адаптеров/регуляторов, а затем подключив из «земли» к одному контакту и тем самым заставив эти устройства работать вместе.

Почему мой скетч не запускается, когда плата питается от внешнего источника? (касается Arduino Diecimilia или еще более ранних моделей)

Из-за того, что RX-контакт не подключен, загрузчик на плате, возможно, будет видеть, что на плату идут мусорные данные. Следовательно, загрузчик будет работать вечно, а не те 6-8 секунд, что ему положены, а ваш скетч никогда не запустится. Попробуйте привязать RX-контакт к «земле» через 10000-омовый резистор или подключить RX-контакт напрямую к TX-контакту.

Почему IDE Arduino зависает, когда я пытаюсь загрузить программу (на Windows)?

Возможно, из-за конфликта с процессом Logitech – «LVPrcSrv.exe». Откройте диспетчер задач, и если этот процесс запущен, удалите его перед тем, как будете загружать скетч на Arduino.

Плата не включается (не загорается зеленый светодиод, отвечающий за питание) – что делать?

Если вы используете Diecimila или еще более раннюю USB-модель (например, NG), убедитесь, что перемычка (маленькая пластиковая деталь рядом с USB-разъемом) сидит на правильных контактах. Если плата питается от внешнего блока питания (вставленного в разъем для питания), перемычка должна сидеть на двух контактах, которые находятся ближе к разъему для питания. Если плата питается от USB, перемычка должна сидеть на контактах, находящихся ближе к USB-разъему. На фото ниже показано расположение перемычки, при котором питание будет осуществляться от USB-разъема.

Usbjumper.jpg

Почему Arduino Diecimila так долго (6-8 секунд) запускает мой скетч?

На некоторые Arduino Diecimila был случайно записан загрузчик Arduino NG. Впрочем, он должен работать нормально, однако при сбросе платы скетч загружается дольше обычного (у NG нет автоматического сброса, поэтому синхронизацию процесса загрузки нужно делать вручную). Чтобы узнать, какой загрузчик стоит на Arduino, выполните сброс платы – если светодиод на 13-ом контакте моргнул 3 раза, это NG-загрузчик, а если 1 раз – это Diecimila-загрузчик. Таким образом, если у вас Diecimila с загрузчиком от NG, вам перед загрузкой скетча, возможно, понадобится сделать ручной сброс платы. Впрочем, есть и другой вариант – записать на Diecimila правильный загрузчик (читайте об этом тут).

Что делать, если при запуске arduino.exe на Windows выдает ошибку?

Если при двойном клике на иконку arduino.exe появляется ошибка вроде…

Arduino has encountered a problem and needs to close.

…вам нужно запустить Arduino при помощи файла run.bat. И проявите терпение – IDE Arduino может понадобиться некоторое время для запуска.

Почему Arduino не запускается на старых версиях Mac OS X?

Если вам выдает подобную ошибку…

Link (dyld) error: 

dyld: /Applications/arduino-0004/Arduino 04.app/Contents/MacOS/Arduino Undefined symbols: 
/Applications/arduino-0004/librxtxSerial.jnilib undefined reference to _printf$LDBL128 expected to be defined in /usr/lib/libSystem.B.dylib

…вам, вероятно, нужно обновиться до Mac OS X 10.3.9 или позже. В старых версиях содержатся несовместимые версии некоторых системных библиотек.

Спасибо Gabe462 за подсказку.

Что делать, если при запуске Arduino выдает ошибку UnsatisfiedLinkError (о родной библиотеке librxtxSerial.jnilib)?

Если при запуске Arduino появляется примерно такая ошибка…

Uncaught exception in main method: java.lang.UnsatisfiedLinkError: Native Library /Users/anu/Desktop/arduino-0002/librxtxSerial.jnilib already loaded in another classloader

…то у вас, возможно, старая версия библиотеки, отвечающей за коммуникации. Ищите файлы comm.jar и jcl.jar в папке /System/Library/Frameworks/JavaVM.framework/ или в папках, которые указаны в переменных PATH и CLASSPATH, находящихся в файлах IDE Arduino.

За подсказку спасибо Анурагу Сегалу (Anurag Sehgal).

Что насчет ошибки «Could not find the main class»?

Если при запуске Arduino выдает вот такую ошибку…

Java Virtual Machine Launcher: Could not find the main class. Program will exit.

…убедитесь, что вы правильно извлекли содержимое файла Arduino.zip. В частности, папка lib должна находиться аккурат в папке Arduino и содержать файл pde.jar.

Что можно сделать, если у Arduino возникают конфликты с Cygwin (на Windows)?

Если на вашей машине установлен Cygwin, то при попытке скомпилировать скетч вам может выдать следующую ошибку:

6 [main] ? (3512) C:Devarduino-0006toolsavrbinavr-gcc.exe: *** fatal error - C:Devarduino-0006toolsavrbinavr-gcc.exe: *** system shared memory version mismatch detected - 0x75BE0084/0x75BE009C.

This problem is probably due to using incompatible versions of the cygwin DLL.

Search for cygwin1.dll using the Windows Start->Find/Search facility and delete all but the most recent version. The most recent version *should* reside in x:cygwinbin, where 'x' is the drive on which you have installed the cygwin distribution. Rebooting is also suggested if you are unable to find another cygwin DLL.

Если выдало, то перед использованием Arduino убедитесь, что у вас не запущен Cygwin. Если это не помогает, можно попробовать удалить cygwin.dll из папки Arduino и заменить его на сygwin.dll, находящийся в папке Cygwin (возможно, по маршруту c:cygwinbin).

За подсказку спасибо karlcswanson.

Почему так долго открываются IDE Arduino и меню «Инструменты» (на Windows)?

Если IDE Arduino долго запускается или зависает при попытке открыть меню «Инструменты», то здесь может быть конфликт с другим устройством в вашей системе. Среда разработки Arduino, будучи запущенной или когда вы пытаетесь открыть меню «Инструменты», пытается составить список всех COM-портов на вашем компьютере. Возможно, этот процесс замедляется каким-то COM-портом, созданным одним из девайсов на вашем компьютере.

Загляните в «Менеджер устройств». Попробуйте отключить устройства с COM-портами (например, Bluetooth-устройства).

Почему моя плата не отображается в меню Инструменты > Порт (Tools > Serial Port)?

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

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

Проверьте, не запущены ли у вас программы, сканирующие все UART-порты – вроде синхронизирующих приложений для КПК, драйверов Bluetooth-USB (например, BlueSoleil), виртуальных эмуляторов и т.д.

На Windows причина может быть в том, что в названии COM-порта присутствует слишком большая цифра. Как пишет пользователь zeveland:

«Небольшая подсказка для тех, у кого не получается загрузить скетч на USB-плату с большим номером COM-порта. Попробуйте снизить номер COM-порта, назначенного для FTDI-чипа. У меня много виртуальных COM-портов, настроенных на Bluetooth-устройства, поэтому плате был присвоен порт COM17. В итоге IDE Arduino не сумела найти плату, поэтому я удалил все виртуальные порты в «Панели управления» (на XP) и снизил номер для FTDI-чипа до COM2. Далее осталось лишь перенастроить Arduino на новый порт».

Если у вас Mac, и вы используете старую версию FTDI-драйверов, вам, возможно, понадобится удалить их, а взамен установить самые последние версии. Инструкции ищите тут.

Что делать, если при загрузке кода или использовании «Монитора порта» (на Mac) выдает ошибку gnu.io.PortInUseException?

Error inside Serial.<init>() 
gnu.io.PortInUseException: Unknown Application 
     at gnu.io.CommPortIdentifier.open(CommPortIdentifier.java:354) 
     at processing.app.Serial.<init>(Serial.java:127) 
     at processing.app.Serial.<init>(Serial.java:72)

Это, вероятно, значит, что порт уже используется другим приложением. Поэтому убедитесь, что у вас не запущено других программ с доступом к USB— и UART-портам – вроде синхронизирующих приложений для КПК, приложений для управления Bluetooth-устройствами, некоторых фаерволов и т.д. Также имейте в виду, что некоторые программы (например, Max/MSP) держат UART-порт открытым, даже не используя его, поэтому вам, возможно, надо будет закрыть все патчи, использующие UART-порты, а то и вовсе закрыть программу.

Если эта ошибка появляется на Arduino 0004 (или ранее) или на Processing, вам надо будет запустить macos_setup.command, а затем перезапустить компьютер. Arduino 004 содержит модифицированную версию этого скрипта, и его должны запустить все пользователи (даже те, кто запускал этот скрипт, когда он выходил с Arduino 0003). Кроме того, возможно, потребуется удалить содержимое папки /var/spool/uucp.

У меня проблемы с драйверами USB FTDI

Попробуйте установить самые последние версии драйверов от FTDI или обратитесь в их поддержку – support1@ftdichip.com.

Почему мой скетч не запускается, когда я включаю питание или делаю сброс на Arduino?

Скорее всего, потому что, стоит плате включиться, компьютер начинает отправлять ей UART-данные. В течение первых нескольких секунд загрузчик (программа, заранее записанная на микроконтроллер платы) ждет, не придет ли от компьютера новый скетч, который нужно загрузить на плату. Если первые несколько секунд компьютер будет «молчать», время работы загрузчика истечет, и он запустит скетч, который уже загружен на плату. Однако если продолжать отсылать загрузчику данные, время его работы никогда не истечет, а скетч никогда не запустится. Поэтому вам нужно либо найти способ остановить передачу UART-данных в первые несколько секунд после того, как у платы будет включено питание (например, запрограммировать чип в функции setup(), чтобы он отсылал какие-нибудь данные компьютеру), или загрузить скетч на плату при помощи внешнего программатора, заменяющего собой загрузчик.

Почему мой скетч загрузился нормально, но не работает?

Вы выбрали неправильный пункт в меню Инструменты > Плата (Tools > Board). Убедитесь, что выбранная плата соответствует той, что вы пользуетесь в данный момент.

Проверьте, нет ли помех от блока питания – из-за них микроконтроллер может потерять загруженный на него скетч.

Кроме того, скетч может быть слишком велик для платы. Когда вы загружаете скетч, Arduino 0004 проверяет, не слишком ли он велик для ATmega8, однако его расчеты основываются на том, что загрузчик занимает в программной flash-памяти микроконтроллера (она составляет 8 Кб) всего 1 Кб. Однако на ваше устройство, возможно, записана старая версия загрузчика, объем которой составляет не 1 кб, а 2 Кб. Таким образом, если размер вашего скетча слишком велик, загрузится лишь его часть, но загрузчик об этом знать не будет, поэтому плата войдет в «мертвую петлю» – будет постоянно сбрасываться, тормозить, сбрасываться и т.д.

Если вы используете программатор (либо AVR-ISP, либо для параллельного порта), можно попробовать записать на плату самую последнюю версию загрузчика – при помощи меню Инструменты > Записать Загрузчик (Tools > Burn Bootloader). Кроме того, вы можете объяснить IDE Arduino, что в памяти стало меньше места для загрузки скетчей, отредактировав переменную upload.maximum_size в файле с настройками (как его найти – читайте тут). Поменяйте 7168 на 6144, и теперь IDE Arduino всегда предупредит вас, если скетч будет слишком велик.

Как мне уменьшить размер скетча?

Одно из главных преимуществ микроконтроллера ATmega168, которым оснащена плата Arduino, в том, что он очень дешев. Однако он может работать лишь с 16 Кб программного кода, что не очень много (причем 2 Кб из «общей кассы» отходят загрузчику).

Если вы в своем скетче используете вычисления с плавающей точкой, попробуйте переписать его под целочисленные выражения – это должно сэкономить вам около 2 Кб flash-памяти. Также удалите в верхней части скетча все директивы #include, относящиеся к библиотекам, которые вы не используете.

Еще один вариант – попробуйте сделать вашу программу «полаконичней». Поищите способ решить ту же задачу, но более коротким путем.

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

Почему я не могу получить ШИМ-сигнал (аналоговый выход), вызывая функцию analogWrite() на всех контактах, кроме 3, 5, 6, 9, 10 и 11?

Микроконтроллер на плате Arduino (ATmega168) поддерживает ШИМ/AnalogWrite() не на всех контактах. Вызов функции analogWrite() на любых контактах, кроме перечисленных выше, даст HIGH (5 вольт) для значений выше 128 и LOW (0 вольт) для значений меньше 128. На старых версиях Arduino, оснащенных ATmega8, ШИМ поддерживается только на 9, 10 и 11 контактах.

Почему я получаю ошибки о необъявленных функциях и типах?

Среда разработки Arduino пытается автоматически сгенерировать прототипы для пользовательских функций, чтобы вы могли расставить их в своем скетче в каком угодно порядке. Этот процесс, однако, не идеален и иногда приводит к появлению ошибок.

К примеру, если вы объявите в скетче собственный тип данных и создадите функцию, которая будет принимать или возвращать данные этого вновь созданного типа, то при попытке скомпилировать скетч получите сообщение об ошибке.

Причина в том, что автоматически сгенерированный прототип для этой функции будет расположен в скетче до объявления нового типа данных.

Если объявить функцию, возвращающую 16-битные данные (например, типа unsigned int), IDE Arduino не поймет, что это, собственно, функция, и не создаст для нее прототип. Это значит, что вам надо будет написать этот прототип самому либо разместить объявление этой функции немного повыше – до того, как она будет вызвана в скетче в самый первый раз.

Почему при попытке загрузить скетч возникает ошибка invalid device signature?

Если вы получили ошибку…

avrdude: Yikes!  Invalid device signature.
       Double check connections and try again, or use -F to override
       this check.

…то может быть два варианта. Либо выбрана неправильная плата в меню Инструменты > Плата (Tools > Board), либо вы используете неправильную версию avrdude (для загрузки скетчей в Arduino используется немного модифицированная версия). Стандартная версия avrdude делает запросы, идентифицирующие плату, в непонятном для загрузчика формате, что в итоге и приводит к этой ошибке. Поэтому убедитесь, что у вас установлена версия avrdude, которая идет в комплекте с Arduino.

См.также

Внешние ссылки

  1. Arduino Troubleshooting

Платформа Arduino – это один из самых простых путей погрузиться в мир микроконтроллеров и попробовать самому их программировать. Но однако и на этом пути вас могут подстерегать различные ошибки. Некоторые из них устранить очень просто, а на устранение других у вас могут уйти целые дни. В этой статье мы рассмотрим 10 самых распространенных ошибок при работе с платформой Arduino и способы их устранения.

10 самых распространенных ошибок при работе с Arduino

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

В этой ситуации плата Arduino, подключается к компьютеру, не распознается им. В этом случае плата Arduino не появляется в списке устройств, подключенных к компьютеру по COM портам, как показано на следующем рисунке.

Плата Arduino не распознается компьютером

Решение

Эта проблема обычно случается когда вы используете не оригинальную плату Arduino, а ее дешевые клоны, обычно китайского производства. В этих клонах Arduino вместо стандартного для оригинальных плат Arduino FTDI чипа (FT232RL) используется более дешевый чип CH340g (для преобразования USB в последовательный интерфейс). Драйверы для стандартного чипа FT232RL уже содержатся в установочном пакете Arduino IDE, поэтому при ее установке они также автоматически устанавливаются на ваш компьютер. А чтобы использовать клон платы Arduino с чипом CH340g вам необходимо предварительно скачать и установить драйвер для этого чипа – скачать его можно по следующей ссылке. Установка его крайне простая – я думаю, она не вызовет у вас никаких затруднений.

Установка драйвера для чипа CH340g

После его установки вы сможете увидеть в диспетчере устройств, к какому COM порту подключена ваша плата Arduino.

2. Плата не синхронизируется

В этом случае ваш компьютер видит подключенную к нему плату Arduino, но вы не сможете загрузить в нее код программы и вы при попытке загрузке в нее программы вместо привычного сообщения «done uploading» увидите сообщение об ошибке: “avrdude: stk500_getsync(): not in sync: resp=0x00”.

Решение

Ошибка синхронизации resp = 0x00 является общим ответом (ошибкой) на все проблемы, связанные с некорректной работой микроконтроллера Atmega (или вообще его неработоспособным состоянием), являющегося «сердцем» платы Arduino. Соответственно, причин этой ошибки может быть достаточно много. Мы рекомендуем вам выполнить следующую последовательность шагов чтобы попробовать устранить эту проблему:

  1. Убедитесь в том, что ничего не подключено к цифровым контактам 0 и 1 платы Arduino (включая шилды).
  2. Убедитесь в том, что в настройках Arduino IDE вы выбрали правильный тип платы и правильный COM порт.
  3. Пару раз нажмите кнопку сброса на плате Arduino и попробуйте после этого загрузить в нее код программы.
  4. Если не помогло, то отключите и заново подсоедините плату Arduino к компьютеру.
  5. Закройте и снова запустите Arduino IDE.

Если ничего из перечисленного не помогло, то попробуйте подключить к своему компьютеру другую плату Arduino или же подключите вашу плату Arduino к другому компьютеру. Если вы обнаружите, что проблема в компьютере, то переустановите Arduino IDE. Иногда бывает и так, что Arduino IDE из Windows работает с глюками, а из другой операционной системы на этом же компьютере работает без проблем. Также встречаются энтузиасты, которые устанавливают Arduino IDE в операционную систему от платы Raspberry Pi, то есть работают с Arduino IDE на компьютере, который состоит из платы Raspberry Pi и монитора – они говорят, что в этом случае Arduino IDE работает гораздо лучше чем из под Windows. Также, если не хотите менять компьютер или операционную систему на нем, вместо Arduino IDE можно попробовать использовать аналогичные инструменты — оболочку PlatformIO или Arduino Web Editor (официальный онлайн инструмент, его не нужно устанавливать).

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

3. Код программы не начинает исполняться при нажатии кнопки сброса (Reset)

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

Решение

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

Если плата «висит» и ничего не делает, вы сначала должны убедиться в том, что вы в это же самое время не передаете ей никаких данных с компьютера по последовательному порту. При включении питания загрузчик платы первые несколько секунд проверяет не передаются ли плате по последовательному порту какие либо данные (например, не производится ли попытка загрузки в плату нового скетча). Если никакого нового скетча не поступает, то спустя несколько секунд загрузчик начинает исполнять последний скетч, загруженный в плату. Если же ваша программа периодически передает данные по последовательному порту плате, то загрузчик попросту не перейдет к исполнению последнего загруженного в плату скетча.

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

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

4. Invalid Device Signature Error (ошибка подписи)

Ошибка подписи при работе с платой Arduino

Эта ошибка возникает при попытке загрузки кода программы в плату Arduino, тип которой отличается от той платы, которую вы выбрали в настройках Arduino IDE. Ошибка возникает из-за того, что подпись устройства (device signature) на используемой плате отличается от подписи того типа платы, которую вы выбрали в Arduino IDE.

Решение

Выбрать правильный тип платы Arduino в настройках Arduino IDE. Если это не помогает, то можно попробовать прошить плату последней версией загрузчика Arduino (Arduino bootloader).

5. Ошибка запуска (Launch4j Error)

Ошибка запуска Arduino IDE

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 IDE

Одна из самых простых проблем для решения. Она обычно происходит когда вы пытаетесь загрузить код программы в плату Arduino в то время когда открыто окно монитора последовательной связи (serial monitor) (но эта проблема в последних версиях Arduino IDE уже устранена) или вы пытаетесь его открыть во время обмена информацией между Arduino IDE и платой Arduino, или вы пытаетесь в это время использовать этот же самый COM порт для связи с другим устройством. То есть данная проблема возникает тогда, когда вы пытаетесь использовать последовательный порт одновременно для двух вещей.

Решение

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

7. Скетч успешно загружен, но ничего не происходит

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

Решение

  1. Убедитесь в том, что тип выбранной в настройках Arduino IDE платы совпадает с типом платы, в которую вы загрузили программу.
  2. Также подобная ошибка может быть вызвана тем, что размер загружаемого в плату скетча превышает объем ее памяти для хранения программ. Уменьшите объем скетча или используйте плату Arduino с большим объемом памяти.
  3. Еще одной причиной подобной ошибки может быть сильная зашумленность цепей питания. Убедитесь в том, что питающее напряжение, подаваемое на плату, достаточно стабильно.

8. Неизвестная ошибка связи (Unsatisfied Link Error)

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

Решение

Для решения этой проблемы найдите файл comm.jar или jcl.jar в папке /System/Library/Frameworks/JavaVM.framework/ или в папках на вашем компьютере, относящимся к переменным окружения CLASSPATH или PATH.

9. Размер скетча слишком большой (Sketch Too Large)

Ошибка слишком большо размера скетча при работе с Arduino

Эта ошибка происходит когда размер кода программы больше чем объем перепрограммируемой памяти (flash memory, памяти для хранения программ) используемой вами платы Arduino. К примеру, объем этой памяти в плате Arduino Uno составляет 32 Кбайта, из которых 2 Кбайта заняты загрузчиком. Если вы попытаетесь загрузить в данную плату скетч объемом более 32 Кбайт, то увидите подобную ошибку.

Решение

Для решения этой проблемы модно использовать следующие способы уменьшения объема кода программы:

  1. Там, где это возможно, используйте целые типы данных (integer) вместо вещественных (float).
  2. Там, где это возможно, используйте при объявлениях переменных спецификатор “const”.
  3. Подключайте в программу только те библиотеки, которые вы будете использовать. Там, где это возможно, используйте облегченные версии используемых библиотек.
  4. Используйте специальные алгоритмы и другие способы уменьшения объема кода программы.

Более радикальным решением этой проблемы является смена платы Arduino на плату с большим объемом памяти. Например, плату Arduino Uno можно заменить на плату Arduino Mega, или даже на плату Arduino Due.

10. Ошибка переполнения стека (java.lang.StackOverflowError)

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

Решение

В этом случае вам необходимо тщательно проинспектировать код своей программы, обращая особое внимание на те строки, в которые используются строковые переменные (типа string). Убедитесь в том, что все кавычки присутствуют в необходимых им местах. Также убедитесь в правильном использовании слешей (косых черт).

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

Загрузка…

11 437 просмотров

Offline

Зарегистрирован: 22.03.2016

Приветствую! Помогите, плиз, разобраться, почему не запускается Arduino IDE. В процессе запуска выдается сообщение об ошибке от Java Virtual Machine Launcher: A Java Exception has occurred, и на этом все. Устанавливал последнюю на данный момент версию Arduino IDE v1.6.8 на Windows 7 Ultimate x64 с помощью инсталятора. Попытка переустановить IDE включая попытку поставить версии 1.8.7 и 1.8.3 проблему не решила. При переустановке пытался делать установку как с USB драйвером так и без него (на моем Arduino Uno R3 используется CH340G, драйвер для которого поставлен отдельно и вроде бы нормально работает). Попытался установить самую свежую на данный момент Java, но это тоже не ришило проблемы. При установке на Windows XP x32 (на другом компе) все встало и работает нормально. Как можно решить эту проблемку?

Что делать?

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

Понятное дело, что первое, что приходит на ум
заказчику – ошибка в моей программе, за что поначалу мне было немного обидно.

Существует две наиболее частые ситуации:

  1. Arduino IDE ругается, что не может найти указанный файл (No such file or directory). Это говорит о том, что нужно установить какую-то библиотеку. А со своими программами я всегда поставляю все необходимые библиотеки.
  2. Загрузка скетча подвисает, а потом выдает ошибку:
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0xe4
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0xe4
avrdude: stk500_recv(): programmer is not responding

1я ситуация разобрана здесь.

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

Дело в том, что Arduino IDE предполагает, что все современные Nano и UNO должны работать со скоростью
15200 бит в секунду. А китайские клоны до сих пор довольно часто работают со
скоростью в 2 раза меньше – 57600.

Решить эту проблему можно двумя способами:

  1. Обновить загрузчик на плате
  2. Добавить плату со старым загрузчиком в конфигурацию Arduino IDE

Лично мне кажется, что второй способ – более
универсальный и простой. Поэтому его и опишу.

Итак, зайдите на компьютере в папку, в которую
установлена Arduino IDE. Лично у меня это, как
и большинства, “C:Program Files (x86)Arduino”, если Вы на Windows.

Теперь откройте папку hardwarearduinoavr и
найдите файл boards.txt

В этом файле и находятся все платы, которые Вы выбираете через меню «Инструменты > Плата…»

Выбор платы из списка

Откройте этот файл в текстовом редакторе,
например, в блокноте.

Найдите в нем строчку uno.upload.speed

Настройки плат ардуино

Мы видим, что скорость загрузки равно 115200.
Но у нас плата, которая хочет 57600!

Можно, конечно, поменять на 115200 на 57600,
но тогда, к сожалению, мы не сможет загружать скетчи на плату с новым загрузчиком.

Выход, получается, один – добавить плату,
скажем, UNO2,
на случай скорости 57600.

Предлагаю просто вставить себе мои настройки и сохранить файл:

uno2.name=Uno 57600

uno2.vid.0=0x2341
uno2.pid.0=0x0043
uno2.vid.1=0x2341
uno2.pid.1=0x0001
uno2.vid.2=0x2A03
uno2.pid.2=0x0043
uno2.vid.3=0x2341
uno2.pid.3=0x0243

uno2.upload.tool=avrdude
uno2.upload.protocol=arduino
uno2.upload.maximum_size=32256
uno2.upload.maximum_data_size=2048
uno2.upload.speed=57600

uno2.bootloader.tool=avrdude
uno2.bootloader.low_fuses=0xFF
uno2.bootloader.high_fuses=0xDE
uno2.bootloader.extended_fuses=0xFD
uno2.bootloader.unlock_bits=0x3F
uno2.bootloader.lock_bits=0x0F
uno2.bootloader.file=optiboot/optiboot_atmega328.hex

uno2.build.mcu=atmega328p
uno2.build.f_cpu=16000000L
uno2.build.board=AVR_UNO
uno2.build.core=arduino
uno2.build.variant=standard

##############################################################

nano2.name=Nano 57600

nano2.upload.tool=avrdude
nano2.upload.protocol=arduino

nano2.bootloader.tool=avrdude
nano2.bootloader.unlock_bits=0x3F
nano2.bootloader.lock_bits=0x0F

nano2.build.f_cpu=16000000L
nano2.build.board=AVR_NANO
nano2.build.core=arduino
nano2.build.variant=eightanaloginputs

## Arduino Nano w/ ATmega328P
## --------------------------
nano2.menu.cpu.atmega328=ATmega328P

nano2.menu.cpu.atmega328.upload.maximum_size=30720
nano2.menu.cpu.atmega328.upload.maximum_data_size=2048
nano2.menu.cpu.atmega328.upload.speed=57600

nano2.menu.cpu.atmega328.bootloader.low_fuses=0xFF
nano2.menu.cpu.atmega328.bootloader.high_fuses=0xDA
nano2.menu.cpu.atmega328.bootloader.extended_fuses=0xFD
nano2.menu.cpu.atmega328.bootloader.file=optiboot/optiboot_atmega328.hex

Теперь у вас две платы UNO и две Nano:

Выбор платы ардуино в Arduino IDE

Удачи!

  • Ошибка при открытии after effects cep common extensibility platform
  • Ошибка при открытии архива rar
  • Ошибка при открывании файла ворд
  • Ошибка при открытии zip файла
  • Ошибка при открывании ddj rb asio