Почему я не могу загрузить свои программы на плату 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, вы получите ошибку вроде:

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

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

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

или:

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

Какой тип источника питания я должен использовать с моей платой 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?

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

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

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

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

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

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

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

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

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

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

Если это так, сначала убедитесь, что у вас не запущен 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)?

Это, вероятно, означает, что порт фактически используется другим приложением. Убедитесь, что у вас не запущены другие программы, которые обращаются к последовательным портам или портам 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.