Win10 arduino ide esp8226 ошибка открытия последовательного порта com8 port not found
недавно я купил Arduino Uno. После получения необходимых кабелей я решил загрузить пример на чип.
вместо того, чтобы видеть, что мигает, я получил ошибку, как processing.app.SerialException: Serial port 'COM1' not found. Did you select the right one from the Tools > Serial Port menu?
Да, я пробовал. Но даже монитор последовательного порта не открывается. Опять же, я получаю исключение, которое не стоит упоминать.
после того, как я узнал, что мои последовательные COM-порты не работают (через Portmon.exe), и выясняя, что у меня может даже не быть (в Диспетчере устройств нет COM-порта), я также попытался загрузить драйвер для COM-порта, но он также не удался.
некоторые говорят, что это из-за моей материнской платы Acer Aspire 5742. Некоторые говорят, что причиной является Windows 7.
Установка драйверов для Arduino в Windows 8 / 7.
(Я пробовал его для Uno r3, но я считаю, что он будет работать для всех плат Arduino )
подключите плату Arduino
на Панель Управления - - ->система и безопасность - - ->система - - - > на левой панели Диспетчер Устройств
расширения Другие Устройства.
под другими устройствами вы заметите значок с маленький желтый графический ошибка. (Отключите все другие устройства, подключенные к любому последовательному порту)
щелкните правой кнопкой мыши на этом устройстве - - ->Обновить Драйвер
выберите просмотрите мой компьютер для программного обеспечения драйвера
После Просмотра выбрать включить подпапки.
нажмите Далее ---> ваш драйвер будет установлен.
Свернуть Другие Устройства - - ->Расширить Порт ( его в диспетчере устройств только под другими устройствами )
вы увидите Arduino написано - - - > искать его COM-порт (закрыть Диспетчер устройств)
на Arduino Среды - - ->инструменты - - ->Последовательный Порт ---> выберите COM-ПОРТ как упоминалось в PORT в диспетчере устройств. (Если вы используете любую другую плату Arduino вместо UNO, выберите то же самое в платах )
avrdude: ser_open(): can't open device "\\.\COM3": Отказано в доступе.
Подскажите что делать, куда смотреть, что почитать, ничего не могу найти на эту тему.
Во многих темах пишут, что все на винде 8.1 все хорошо само ставится.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Попробуй во время прошивки на кнопку reset нажать, на сколько мне известно конверторы от ftdi страдают тем, что автомвтом не сбрасывают МК.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Как правило, это говорит о том, что либо устройства нет (а Ваше устройство если и "висит" в системе, то на другом номере), либо прав у пользователя на работу с этим устройством нет.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Знаю такую проблему, reset нажимал.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
А что можно предпренять, если устройство висит на другом номере?
Или если нет прав. Не знаю как проверить два этих предположения
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Его уже кто-то юзает
Поменяйте вручную номер этому порту на, например, десятый. Поменяется? Появится в системе? ИДЕ увидит этот порт?
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Порт уже менял, но при смене на любой другой пишет, что он занят другой программой. Я всеравно меняю, но это не помогает
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Порт уже менял, но при смене на любой другой пишет, что он занят другой программой. Я всеравно меняю, но это не помогает
Платформу менять надо. Возьмите какой-нибудь liveCD с линуксом и попробуйте там.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
попробовал на другом ноуте с WinXP, все получилось и поставилось.
НО это не отменяет моего вопроса, мне всеравно хочется на винде 8 чтобы заработало
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Попробуй преустановить IDE на самую новую, запустить от имени администратора, проверь правильно ли плата в настройках выбрана
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Я удивляюсь, как у вас так выходит. у меня 8.1 и все нормально автоматом дрова встали. нафига лезть куда то качать всякое непонятное, потом гонять вирусы пару дней. что за мазахизм такой.
Кто то уже использует этот порт. кто?
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Ну дрова я скачивал с официального сайта, по идее вирусов не должно быть.
Но дрова сами не встали и сом порт занят. Причем все заняты (пробовал менять на другие). Может фаервол все занял? хз. Пока нет идей. На ХР все работает. Причем с теми же дровами.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
попробовал на другом ноуте с WinXP, все получилось и поставилось. НО это не отменяет моего вопроса, мне всеравно хочется на винде 8 чтобы заработало
Вы не совсем верно трактуете: "хочется чтобы на этом железе и под Win8 заработало". Для этого и надо провести диагностику железа отдельно от операционки. Да хоть XP туда временно поставьте и проверьте. Может оно с Вашим USB не работает.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Подниму старую тему, чтобы в кучке лежало.
После обновления Win7 (сделал как раз перед получением проблемы, но до этого комп. стоял две недели невключаемый) словил ser_open(): can't set com-state for "\\.\COM3". Ардуина (Freeduino) проверенная временем, чип FTDI, кабеля те же, что и были. Другой софт не обновлял и т.п. и т.д. Порт появляется/исчезает при выдергивании кабеля. RX/TX без паразитных присоединений. Вобщем, всё чин-по чину, только ничего не работает. Голову чесал, другой софт запускал - занят порт и хоть тресни. Всякие антивирусы отключал, систему перезагружал, монитор протирал.
С горя полез смотреть в диспетчере задач свойства USB Serial Converter - ничего подозрительного, только версия драйвера лохматая - наверное как автоматом в первое подключение Ардуины три года назад поставилась. По привычке тыкнул в "Обновить драйвер" (с автопоиском) - винда куда-то полезла, что-то от августа 2017-го года скачала и. бинго! Скретчи шьются, скротчи тоже. Лампочки весело моргают, все рады и счастливы.
До недавнего времени работало ардуино в качестве выключателя света по времени. Чтобы код не сбивался использовал батарею 18650 через развязку с ИБП.
Но вот спустя почти пол года реле не щелкнуло и свет не выключился. Я подумал, что слетела прошивка, и решил записать заново простой тест на 5 минут:
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
пробуйте с тем на который села ардуина, посмотреть знаете как?
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
пробуйте с тем на который села ардуина, посмотреть знаете как?
Нет я не понял вас, А ну там она сейчас на COM4 до этого была на COM3 все одно и тоже.Естественно я выбираю тот Com порт на котором висит ардуино
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Попробуйте на другой ардуине, возможно эта вышла из строя
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Попробуйте на другой ардуине, возможно эта вышла из строя
Ну у меня другой нет )
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Это плохо, ремкомплект всегда нужно иметь ))
Ну а так - попробуйте другой кабель, попробуйте переткнуть в другой usb-порт, если не поможет - скорее всего каюк ардуине
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Если порт кем-то занят
то при чём тут кабель или "сдохла" Ардуина.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Так если порт занят ардуиной, чем еще он может быть занят?
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Вторым окном ардуины, например.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
и после смены порта тоже?
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
С другой стороны, мы тут на хрустальном шаре гадаем, а ТС даже какая у него ардуина не пояснил ))
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
С другой стороны, мы тут на хрустальном шаре гадаем, а ТС даже какая у него ардуина не пояснил ))
Arduino nano Atmega 328p
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Ошибка открытия последовательного порта "COM4" (Port busy)
Port busy в переводе означает "Порт занят"
Вы его пытаетесь открыть.
Так выпьем же за то чтобы наши желания совпадали с нашими возможностями.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
А открыть вкладку девайсы и посмотреть в реальности, отваливается порт при отключении ардуины или нет? И какой именно порт исчезает - появляется?
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Переустанови arduino ide, ну а потом Виндоус, если не поможет смени либо пк либо ардуино.
Как то так
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
я только за, если финансы позволяют )))
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Про новый комп шутка
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Если занят, то можно просто комп презагрузить.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Здраствуйте, прилетели значит мне 2 arduino nano. Установил IDE, все драйверы. Com порт как сам комп, так и IDE видят понимают. Пытаюсь залить первый скетч, но вот беда не заливается. Пошарив интернет пришел к выводу, что Китайцы не влили bootloader. Отыскал комп с winXP там есть порт LPT. Сделал прошиватель и вроде бы худо бедно смог залить загрузчик. Но нет другой комп все также не может залить никакой скетч. Манипуляции со сменой портов и кабелей не увенчались успехом. Может быть дело в компе? Что думаете?
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Здраствуйте, прилетели значит мне 2 arduino nano. Установил IDE, все драйверы. Com порт как сам комп, так и IDE видят понимают. Пытаюсь залить первый скетч, но вот беда не заливается. Пошарив интернет пришел к выводу, что Китайцы не влили bootloader. Отыскал комп с winXP там есть порт LPT. Сделал прошиватель и вроде бы худо бедно смог залить загрузчик. Но нет другой комп все также не может залить никакой скетч. Манипуляции со сменой портов и кабелей не увенчались успехом. Может быть дело в компе? Что думаете?
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Да конечно, таже фигня только ошибка больше
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Итак, разобрались со средой разработки, теперь можно загрузить прошивку. Рекомендую загрузить пустую прошивку, чтобы убедиться, что все драйвера установились и плата вообще прошивается. Также лучше делать это с новой или заведомо рабочей платой.
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.
Если появилась надпись “Загрузка завершена” – значит всё в порядке и можно прошивать другие скетчи. В любом случае на вашем пути встретятся другие два варианта событий, происходящих после нажатия на кнопку “Загрузка” – это ошибка компиляции и ошибка загрузки. Вот их давайте рассмотрим более подробно.
Объект Serial
Начнём знакомство с одним из самых полезных инструментов Arduino-разработчика – Serial, который идёт в комплекте со стандартными библиотеками. Serial позволяет как просто принимать и отправлять данные через последовательный порт, так и наследует из класса Stream кучу интересных возможностей и фишек, давайте сразу их все рассмотрим, а потом перейдём к конкретным примерам.
Запустить связь по Serial на скорости speed (измеряется в baud, бит в секунду). Скорость можно поставить любую, но есть несколько “стандартных” значений. Список скоростей для монитора порта Arduino IDE:
- 300
- 1200
- 2400
- 4800
- 9600 чаще всего используется, можно назвать стандартной
- 19200
- 38400
- 57600
- 115200 тоже часто встречается
- 230400
- 250000
- 500000
- 1000000
- 2000000 – максимальная скорость, не работает на некоторых китайских платах
Возвращает количество байт, которые можно записать в буфер последовательного порта, не блокируя при этом функцию записи.
Отправляет в порт val численное значение или строку, или отправляет количество len байт из буфера buf. Важно! Отправляет данные как байт (см. таблицу ASCII), то есть отправив 88 вы получите букву X: Serial.write(88); .
Отправляет в порт значение val – число или строку, фактически “печатает”. В отличие от write выводит именно текст, т.е. отправив 88, вы получите 88: Serial.print(88); . Отправляет любые стандартные типы данных: численные, символьные, строковые. Также методы print()/println() имеют несколько настроек для разных данных, что делает их очень удобным инструментом отладки:
format позволяет настраивать вывод данных: BIN, OCT, DEC, HEX выведут число в соответствующей системе счисления: двоичная, восьмеричная, десятичная (по умолчанию) и 16-ричная. Цифра после вывода float позволяет настраивать выводимое количество знаков после точки:
Полный аналог print() , но автоматически переводит строку после вывода. Позволяет также вызываться без аргументов (с пустыми скобками) просто для перевода курсора на новую строку.
Возвращает текущий байт с края буфера, не убирая его из буфера. При вызове Serial.read() будет считан тот же байт, но из буфера уже уберётся.
Устанавливает time (миллисекунды) таймаут ожидания приёма данных для следующих ниже функций. По умолчанию равен 1000 мс (1 секунда).
Читает данные из буфера и ищет набор символов target (тип char ), опционально можно указать длину length. Возвращает true , если находит указанные символы. Ожидает передачу по таймауту.
Читает данные из буфера и ищет набор символов target (тип char ) либо терминальную строку terminal. Ожидает окончания передачи по таймауту, либо завершает приём после чтения terminal.
Читает данные из порта и закидывает их в буфер buffer (массив char[] или byte[] ). Также указывается количество байт, который нужно записать – length (чтобы не переполнить буфер).
Читает данные из порта и закидывает их в буфер buffer (массив char[] или byte[] ), также указывается количество байт, который нужно записать – length (чтобы не переполнить буфер) и терминальный символ character. Окончание приёма в buffer происходит при достижении заданного количества length, при приёме терминального символа character (он в буфер не идёт) или по таймауту
Читает порт, формирует из данных строку String , и возвращает её (урок про стринги). Заканчивает работу по таймауту.
Читает порт, формирует из данных строку String , и возвращает её (урок про стринги). Заканчивает работу по таймауту или после приёма символа terminator (символ char ).
Читает целочисленное значение из порта и возвращает его (тип long ). Заканчивает работу по таймауту. Прерывает чтение на всех знаках, кроме знака – (минус). Можно также отдельно указать символ skipChar, который нужно пропустить, например кавычку-разделитель тысяч (10’325’685), чтобы принять такое число.
Плоттер
Помимо монитора последовательного порта, в Arduino IDE есть плоттер – построитель графиков в реальном времени по данным из последовательного порта. Достаточно отправлять значение при помощи команды Serial.println(значение) и открыть плоттер по последовательному соединению, например построим график значения с аналогового пина A0:
Плоттер поддерживает несколько линий графиков одновременно, для их отображения нужно соблюдать следующий протокол отправки данных: значения выводятся в одну строку, одно за другим по порядку, разделяются пробелом или запятой и в конце обязательно перенос строки.
значение1 пробел_или_запятая значение2 пробел_или_запятая значение3 пробел_или_запятая перенос_строки
Давайте выведем значения с аналоговых пинов A0, A1 и A2:
Получим вот такие графики:
Управляющие символы
Существуют так называемые управляющие символы, позволяющие форматировать вывод. Их около десятка, но вот самые полезные из них
- \n – новая строка
- \r – возврат каретки
- \v – вертикальная табуляция
- \t – горизонтальная табуляция
Также если в тексте вы захотите использовать одинарные кавычки ' , двойные кавычки " , обратный слэш \ и некоторые другие символы – их нужно экранировать при помощи обратного слэша, он просто ставится перед символом:
- \" – двойные кавычки
- \' – апостроф
- \\ – обратный слэш
- \0 – нулевой символ
- \? – знак вопроса
Выведем строку с кавычками:
Комбинация \r\n переведёт строку и вернёт курсор в левое положение:
Символы табуляции позволят удобно отправлять данные для последующей вставки в таблицу. Например выведем несколько степеней двойки в виде таблицы, используя символ табуляции \t :
Результат скопируем и вставим в excel Удобно!
Видео
Как мы с вами знаем из урока “Что умеет микроконтроллер“, у многих микроконтроллеров есть интерфейс UART, позволяющий передавать и принимать различные данные. У интерфейса есть два вывода на плате – пины TX и RX. На большинстве Arduino-плат к этим пинам подключен USB-UART преобразователь (расположен на плате), при помощи которого плата может определяться компьютером при подключении USB кабеля и обмениваться с ним информацией. На компьютере создаётся виртуальный COM порт (последовательный порт), к которому можно подключиться при помощи программ-терминалов и принимать-отправлять текстовые данные. Таким же образом кстати работают некоторые принтеры и большинство станков с ЧПУ.
В самой Arduino IDE есть встроенная “консоль” – монитор порта, кнопка с иконкой лупы в правом верхнем углу программы. Нажав на эту кнопку мы откроем сам монитор порта, в котором будут настройки:
Если с отправкой, автопрокруткой, отметками времени и кнопкой очистить вывод всё и так понятно, то конец строки и скорость мы рассмотрим подробнее:
- Конец строки: тут есть несколько вариантов на выбор, чуть позже вы поймёте, на что они влияют. Лучше поставить нет конца строки, так как это позволит избежать непонятных ошибок на первых этапах знакомства с платформой.
- Нет конца строки – никаких дополнительных символов в конце введённых символов после нажатия на кнопку отправка или клавишу Enter.
- NL – символ переноса строки в конце отправленных данных.
- CR – символ возврата каретки в конце отправленных данных.
- NL+CR – и то и то.
Отправка в порт
Рассмотрим самый классический пример для всех языков программирования: Hello World!
Отправка в порт позволяет узнать значение переменной в нужном месте программы, этот процесс называется отладка. Когда код работает не так, как нужно, начинаем смотреть, где какие переменные какие значения принимают. Или выводим текст из разных мест программы, чтобы наблюдать за порядком её работы. Во взрослых средах разработки и более серьёзных микроконтроллерах есть аппаратная отладка, которая позволяет наблюдать за ходом выполнения программы и значениями любых переменных без вывода в порт.Давайте вспомним урок циклы и массивы и выведем в порт элементы массива:
Вывод: 0 50 68 85 15 214 63 254 – элементы массива, разделённые пробелами.
Видео
Парсинг текста
Проще всего прочитать текст в String-строку (урок про них). Это максимально не оптимально, но зато довольно просто для восприятия:
Данный пример выводит любой текст, который был отправлен в монитор порта.
Предупреждения
Помимо ошибок, по причине которых проект вообще не загрузится в плату и не будет работать, есть ещё предупреждения, которые выводятся оранжевым текстом в чёрной области лога ошибок. Предупреждения могут появиться даже тогда, когда выше лога ошибок появилась надпись “Загрузка завершена“. Это означает, что в прошивке нет критических ошибок, она скомпилировалась и загрузилась в плату. Что же тогда означают предупреждения? Чаще всего можно увидеть такие:
Завершая раздел Введение в Arduino поговорим о вопросах, которые очень часто возникают у новичков:
- Ардуину можно прошить только один раз? Нет, несколько десятков тысяч раз, всё упирается в ресурс Flash памяти. А он довольно большой.
- Как стереть/нужно ли стирать старую прошивку при загрузке новой? Память автоматически очищается при прошивке, старая прошивка автоматически удаляется.
- Можно ли записать две прошивки, чтобы они работали вместе? Нет, при прошивке удаляются абсолютно все старые данные. Из двух прошивок нужно сделать одну, причём так, чтобы не было конфликтов. Подробнее в этом уроке.
- Можно ли “вытащить” прошивку с уже прошитой Ардуины? Теоретически можно, но только в виде нечитаемого машинного кода, в который преобразуется прошивка на С++ при компиляции, т.е. вам это НИКАК не поможет, если вы не имеете диплом по низкоуровневому программированию. Подробнее в этом уроке.
- Зачем это нужно? Например есть у нас прошитый девайс, и мы хотим его “клонировать”. В этом случае да, есть вариант сделать дамп прошивки и загрузить его в другую плату на таком же микроконтроллере.
- Если есть желание почитать код – увы, прошивка считывается в виде бинарного машинного кода, превратить который обратно в читаемый Си-подобный код обычному человеку не под силу.
- Вытащить прошивку, выражаясь более научно – сделать дамп прошивки, можно при помощи ISP программатора, об этом можно почитать здесь.
- Снять дамп прошивки можно только в том случае, если разработчик не ограничил такую возможность, например записав лок-биты, запрещающие считывание Flash памяти, или вообще отключив SPI шину. Если же разработчик – вы, и есть желание максимально защитить своё устройство от копирования – гуглите про лок-биты и отключение SPI
Чтение из порта
Проблемы возникают при попытке принять данные в порт. Дело в том, что метод read() читает один символ, а если вы отправите длинное число или строку – программа получит его по одному символу. Чтение сложных данных называется парсинг. Его можно делать вручную, об этом мы поговорим в отдельном уроке из блока “Алгоритмы”. В рамках этого урока рассмотрим встроенные инструменты для парсинга Serial.
Чтобы не нагружать программу чтением пустого буфера, нужно использовать конструкцию
Таким образом чтение будет осуществляться только в том случае, если в буфере есть какие-то данные.
Частые ошибки в коде, приводящие к ошибке компиляции
- 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 – массив задан без указания размера
Парсинг цифр
Для чтения целых цифр используем Serial.parseInt() , для дробных – Serial.parseFloat() . Пример, который читает целое число и отправляет его обратно:
Если при парсинге у вас появляются лишние цифры – поставьте “Нет конца строки” в настройках монитора порта
Вы заметите, что после отправки проходит секунда, прежде чем плата ответит в порт. Эта секунда является таймаутом, о котором мы говорили чуть выше. Программа ждёт секунду после принятия последнего символа, чтобы все данные успели прийти. Секунда это очень много, ожидать, скажем, 50 миллисекунд. Это можно сделать при помощи метода setTimeout() .
Теперь после отправки цифры программа будет ждать всего 50 мс и ответит гораздо быстрее!
Ошибки загрузки
Возникают на этапе, когда программа успешно скомпилирована и производится загрузка в плату по кабелю. Ошибка может возникать как по причине неисправностей железа, так и из-за настроек программы и драйверов.
- 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% сдох загрузчик. Второй неприятный исход – загрузчик “слетел”, и его можно прошить заново.
Ошибки компиляции
Возникает на этапе компиляции прошивки. Ошибки компиляции вызваны проблемами в коде прошивки.
- В некоторых случаях ошибка возникает при наличии кириллицы (русских букв) в пути к папке со скетчем. Решение: завести для скетчей отдельную папочку в корне диска с английским названием.
- В чёрном окошке в самом низу Arduino IDE можно прочитать полный текстошибки и понять, куда копать.
- В скачанных с интернета готовых скетчах часто возникает ошибка с описанием название_файла.h no such file or directory. Это означает, что в скетче используется библиотека , и нужно положить её в Program Files/Arduino/libraries/. Ко всем моим проектам всегда идёт папочка с использованными библиотеками, которые нужно установить. Также библиотеки всегда можно поискать в гугле по название файла.
- При использовании каких-то особых библиотек, методов или функций, ошибкой может стать неправильно выбранная плата в “Инструменты/плата“. Пример: прошивки с библиотекой Mouse.h или Keyboard.h компилируются только для Leonardo и Micro.
- Если прошивку пишете вы, то любые синтаксические ошибки в коде будут подсвечены, а снизу в чёрном окошке можно прочитать более детальное описание, в чём собственно косяк. Обычно указывается строка, в которой сделана ошибка, также эта строка подсвечивается красным.
- Иногда причиной ошибки бывает слишком старая, или слишком новая версия Arduino IDE. Читайте комментарии разработчика скетча
- Ошибка недостаточно свободного места возникает по вполне понятным причинам. Возможно поможет урок по оптимизации кода.
Читайте также: