I’m trying to compile my Arduino file/project with Makefile. But I’m having issues with the global variables. It says there not declared. The makefile that I downloaded was from github: https://github.com/sudar/Arduino-Makefile.
Since I have no experience about Arduino, I don’t see what could be the problem.
My error code:
-------------------------
Arduino.mk Configuration:
- [AUTODETECTED] CURRENT_OS = LINUX
- [COMPUTED] ARDMK_DIR = /usr/share/arduino (relative to Common.mk)
- [USER] ARDUINO_DIR = /usr/share/arduino
- [AUTODETECTED] ARDUINO_VERSION = 105
- [DEFAULT] ARDUINO_SKETCHBOOK = /sketchbook
- [BUNDLED] AVR_TOOLS_DIR = /usr/share/arduino/hardware/tools/avr (in Arduino distribution)
- [COMPUTED] ARDUINO_LIB_PATH = /usr/share/arduino/libraries (from ARDUINO_DIR)
- [DEFAULT] ARDUINO_CORE_PATH = /usr/share/arduino/hardware/arduino/cores/arduino
- [COMPUTED] ARDUINO_VAR_PATH = /usr/share/arduino/hardware/arduino/variants (from ARDUINO_DIR)
- [COMPUTED] BOARDS_TXT = /usr/share/arduino/hardware/arduino/boards.txt (from ARDUINO_DIR)
- [DEFAULT] USER_LIB_PATH = /sketchbook/libraries (in user sketchbook)
- [USER] BOARD_TAG = uno
- [COMPUTED] OBJDIR = build-uno (from BOARD_TAG)
- [ASSUMED] MONITOR_BAUDRATE = 9600
- [DEFAULT] OPTIMIZATION_LEVEL = s
- [DEFAULT] MCU_FLAG_NAME = mmcu
- [DEFAULT] CFLAGS_STD = -std=gnu99
- [AUTODETECTED] Size utility: AVR-aware for enhanced output
-
- ARDUINO_LIBS =
- [SYSTEM] Wire
- [SYSTEM] EEPROM
- [SYSTEM] Esplora
- [SYSTEM] Ethernet
- [SYSTEM] Firmata
- [SYSTEM] GSM
- [SYSTEM] LiquidCrystal
- [SYSTEM] Robot_Control
- [SYSTEM] Robot_Motor
- [SYSTEM] SD
- [SYSTEM] Servo
- [SYSTEM] SoftwareSerial
- [SYSTEM] SPI
- [SYSTEM] Stepper
- [SYSTEM] TFT
- [SYSTEM] WiFi
- [SYSTEM] Wire
- [SYSTEM] Wire/utility
- [SYSTEM] Ethernet/utility
- [SYSTEM] Robot_Control/utility
- [SYSTEM] SD/utility
- [SYSTEM] TFT/utility
- [SYSTEM] WiFi/utility
- [SYSTEM] Wire/utility
- [COMPUTED] BOOTLOADER_PARENT = /usr/share/arduino/hardware/arduino/bootloaders (from ARDUINO_DIR)
-------------------------
/usr/share/arduino/hardware/tools/avr/bin/avr-g++ -MMD -c -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=105 -I. -I/usr/share/arduino/hardware/arduino/cores/arduino -I/usr/share/arduino/hardware/arduino/variants/standard -I/usr/share/arduino/libraries/Wire -I/usr/share/arduino/libraries/EEPROM -I/usr/share/arduino/libraries/Esplora -I/usr/share/arduino/libraries/Ethernet -I/usr/share/arduino/libraries/Firmata -I/usr/share/arduino/libraries/GSM -I/usr/share/arduino/libraries/LiquidCrystal -I/usr/share/arduino/libraries/Robot_Control -I/usr/share/arduino/libraries/Robot_Motor -I/usr/share/arduino/libraries/SD -I/usr/share/arduino/libraries/Servo -I/usr/share/arduino/libraries/SoftwareSerial -I/usr/share/arduino/libraries/SPI -I/usr/share/arduino/libraries/Stepper -I/usr/share/arduino/libraries/TFT -I/usr/share/arduino/libraries/WiFi -I/usr/share/arduino/libraries/Wire -I/usr/share/arduino/libraries/Wire/utility -I/usr/share/arduino/libraries/Ethernet/utility -I/usr/share/arduino/libraries/Robot_Control/utility -I/usr/share/arduino/libraries/SD/utility -I/usr/share/arduino/libraries/TFT/utility -I/usr/share/arduino/libraries/WiFi/utility -I/usr/share/arduino/libraries/Wire/utility -Wall -ffunction-sections -fdata-sections -Os -fno-exceptions main.cpp -o build-uno/main.o
main.cpp: In function 'void setup()':
main.cpp:17:16: error: 'OUTPUT' was not declared in this scope
pinMode(led, OUTPUT);
^
main.cpp:17:22: error: 'pinMode' was not declared in this scope
pinMode(led, OUTPUT);
^
main.cpp: In function 'void loop()':
main.cpp:23:30: error: 'analogWrite' was not declared in this scope
analogWrite(led, brightness);
^
main.cpp:33:11: error: 'delay' was not declared in this scope
delay(30);
^
make: *** [build-uno/main.o] Error 1
dda
5,9322 gold badges25 silver badges34 bronze badges
asked Aug 10, 2017 at 8:35
1
The Arduino IDE does some «sketch pre-processing» (see https://github.com/arduino/arduino-preprocessor#about-the-arduino-sketch-ino-preprocessing) that Arduino-Makefile does not. In other words, the Arduino IDE modify your sketch.ino to convert it into C++ before attempting to compile it while Arduino-Makefile try to compile it without changes.
As a result, Arduino-Makefile fail to compile some sketch that compile just fine using the Arduino IDE. Performing by hand theses three steps usually do the trick:
- Are there many source files? If yes, merge them into a single file.
- Is
#include <Arduino.h>
at the top of the single source file? If not, add it. - Are all functions declared before use? if not, add forward declaration.
In your case, it looks like step 2 is needed (the missing variable OUTPUT
and missings functions from your compilation error message are declared in Arduino.h
, see https://github.com/arduino/Arduino/blob/master/hardware/arduino/avr/cores/arduino/Arduino.h).
If you intent to continue with Arduino-Makefile I would suggest to get used to theses types of errors as most sketch you will find on the web are only tested using the Arduino IDE. On the bright side, it’s usually trivial to convert them into C++ and rarely time consuming as Arduino sketch are rarely «big».
answered Aug 10, 2017 at 15:23
-
Скачал библиотеку i2cdevlib для работы с датчиком MPU 6050(MPU 6000). Папки MPU6050 и I2Cdev скопировал в C:UsersAdmin(RCMS)DocumentsArduinolibraries
Папка со скетчами расположена по адресу C:UsersAdmin(RCMS)DocumentsArduino
Использую Arduino IDE 1.0.3 for windows. Arduino IDE находится в папке C:ArduPilot-Arduino-1.0.3-windowsПробовал скомпилировать пример MPU6050_DMP6, получил кучу ошибок:
Building for ArduPilot Mega 2.x
Excluding arduino core from include paths
In file included from MPU6050_DMP6.ino:46:
C:UsersAdmin(RCMS)DocumentsArduinolibrariesI2Cdev/I2Cdev.h:77:29: error: Arduino.h: No such file or directory
In file included from C:UsersAdmin(RCMS)DocumentsArduinolibrariesI2Cdev/I2Cdev.h:80,
from MPU6050_DMP6.ino:46:
C:ArduPilot-Arduino-1.0.3-windowslibrariesWire/Wire.h:26:20: error: Stream.h: No such file or directory
In file included from C:UsersAdmin(RCMS)DocumentsArduinolibrariesI2Cdev/I2Cdev.h:80,
from MPU6050_DMP6.ino:46:
C:ArduPilot-Arduino-1.0.3-windowslibrariesWire/Wire.h:31: error: expected class-name before ‘{‘ token
C:ArduPilot-Arduino-1.0.3-windowslibrariesWire/Wire.h:60: error: ‘size_t’ does not name a type
C:ArduPilot-Arduino-1.0.3-windowslibrariesWire/Wire.h:61: error: ‘size_t’ does not name a type
C:ArduPilot-Arduino-1.0.3-windowslibrariesWire/Wire.h:69: error: ‘size_t’ does not name a type
C:ArduPilot-Arduino-1.0.3-windowslibrariesWire/Wire.h:70: error: ‘size_t’ does not name a type
C:ArduPilot-Arduino-1.0.3-windowslibrariesWire/Wire.h:71: error: ‘size_t’ does not name a type
C:ArduPilot-Arduino-1.0.3-windowslibrariesWire/Wire.h:72: error: ‘size_t’ does not name a type
C:ArduPilot-Arduino-1.0.3-windowslibrariesWire/Wire.h:73: error: ‘Print’ has not been declared
In file included from C:UsersAdmin(RCMS)DocumentsArduinolibrariesMPU6050/MPU6050_6Axis_MotionApps20.h:37,
from MPU6050_DMP6.ino:48:
C:UsersAdmin(RCMS)DocumentsArduinolibrariesMPU6050/helper_3dmath.h: In member function ‘float Quaternion::getMagnitude()’:
C:UsersAdmin(RCMS)DocumentsArduinolibrariesMPU6050/helper_3dmath.h:74: error: ‘sqrt’ was not declared in this scope
C:UsersAdmin(RCMS)DocumentsArduinolibrariesMPU6050/helper_3dmath.h: In member function ‘float VectorInt16::getMagnitude()’:
C:UsersAdmin(RCMS)DocumentsArduinolibrariesMPU6050/helper_3dmath.h:111: error: ‘sqrt’ was not declared in this scope
C:UsersAdmin(RCMS)DocumentsArduinolibrariesMPU6050/helper_3dmath.h: In member function ‘float VectorFloat::getMagnitude()’:
C:UsersAdmin(RCMS)DocumentsArduinolibrariesMPU6050/helper_3dmath.h:178: error: ‘sqrt’ was not declared in this scope
In file included from C:UsersAdmin(RCMS)DocumentsArduinolibrariesMPU6050/MPU6050_6Axis_MotionApps20.h:42,
from MPU6050_DMP6.ino:48:
C:UsersAdmin(RCMS)DocumentsArduinolibrariesMPU6050/MPU6050.h: At global scope:
C:UsersAdmin(RCMS)DocumentsArduinolibrariesMPU6050/MPU6050.h:876: error: ‘NULL’ was not declared in this scope
In file included from MPU6050_DMP6.ino:48:
C:UsersAdmin(RCMS)DocumentsArduinolibrariesMPU6050/MPU6050_6Axis_MotionApps20.h: In member function ‘uint8_t MPU6050::dmpInitialize()’:
C:UsersAdmin(RCMS)DocumentsArduinolibrariesMPU6050/MPU6050_6Axis_MotionApps20.h:329: error: ‘delay’ was not declared in this scope
C:UsersAdmin(RCMS)DocumentsArduinolibrariesMPU6050/MPU6050_6Axis_MotionApps20.h: In member function ‘uint8_t MPU6050::dmpGetLinearAccelInWorld(VectorInt16*, VectorInt16*, Quaternion*)’:
C:UsersAdmin(RCMS)DocumentsArduinolibrariesMPU6050/MPU6050_6Axis_MotionApps20.h:663: error: ‘memcpy’ was not declared in this scope
C:UsersAdmin(RCMS)DocumentsArduinolibrariesMPU6050/MPU6050_6Axis_MotionApps20.h: In member function ‘uint8_t MPU6050::dmpGetEuler(float*, Quaternion*)’:
C:UsersAdmin(RCMS)DocumentsArduinolibrariesMPU6050/MPU6050_6Axis_MotionApps20.h:684: error: ‘atan2’ was not declared in this scope
C:UsersAdmin(RCMS)DocumentsArduinolibrariesMPU6050/MPU6050_6Axis_MotionApps20.h:685: error: ‘asin’ was not declared in this scope
C:UsersAdmin(RCMS)DocumentsArduinolibrariesMPU6050/MPU6050_6Axis_MotionApps20.h: In member function ‘uint8_t MPU6050::dmpGetYawPitchRoll(float*, Quaternion*, VectorFloat*)’:
C:UsersAdmin(RCMS)DocumentsArduinolibrariesMPU6050/MPU6050_6Axis_MotionApps20.h:691: error: ‘atan2’ was not declared in this scope
C:UsersAdmin(RCMS)DocumentsArduinolibrariesMPU6050/MPU6050_6Axis_MotionApps20.h:693: error: ‘sqrt’ was not declared in this scope
C:UsersAdmin(RCMS)DocumentsArduinolibrariesMPU6050/MPU6050_6Axis_MotionApps20.h:693: error: ‘atan’ was not declared in this scope
MPU6050_DMP6.ino: In function ‘void setup()’:
MPU6050_DMP6:173: error: ‘Serial’ was not declared in this scope
MPU6050_DMP6:183: error: ‘F’ was not declared in this scope
MPU6050_DMP6:214: error: ‘RISING’ was not declared in this scope
MPU6050_DMP6:214: error: ‘attachInterrupt’ was not declared in this scope
MPU6050_DMP6:234: error: ‘OUTPUT’ was not declared in this scope
MPU6050_DMP6:234: error: ‘pinMode’ was not declared in this scope
MPU6050_DMP6.ino: In function ‘void loop()’:
MPU6050_DMP6:272: error: ‘Serial’ was not declared in this scope
MPU6050_DMP6:272: error: ‘F’ was not declared in this scope
MPU6050_DMP6:316: error: ‘Serial’ was not declared in this scope
MPU6050_DMP6:317: error: ‘M_PI’ was not declared in this scope
MPU6050_DMP6:370: error: ‘digitalWrite’ was not declared in this scopeПодскажите, что я неправильно делаю?
Спасибо. -
Папки с либами должны быть в Arduino IDE
-
Скопировал абсолютно все библиотеки(эти тоже MPU6050 и I2Cdev) из папки C:UsersAdmin(RCMS)DocumentsArduinolibraries в C:ArduPilot-Arduino-1.0.3-windowslibraries
Не помогло. Есть идеи?
-
Идей валом. Хотя и не телепат, но первая навскидку — раз не знаете, где библиотека должна лежать, то смело могли её и не правильно установить
-
Что вы имеете в виду под словом «установить»? Почти во всех мануалах (например http://arduino.ua/ru/guide/Libraries или http://www.freeduino.ru/arduino/libraries.html) установка описывается простым копированием файлов .cpp и .h (т.е папки в которой они находятся) в директорию, где хранятся библиотеки. Это либо пользовательские библиотеки C:Users<имя пользователя>DocumentsArduinolibraries, либо Ардуиновские (подкаталог libraries каталога Arduino IDE).
В моём случае они есть в обоих директориях и всё равно есть ошибки.
Кстати, данные библиотеки также появились в Скетч -> Импортировать библиотеку. Я импортировал MPU6050 и всё равно получил ошибки.Вот теперь пора включать телепатию.
-
Решение найдено! Всё дело в версии компилятора(в версии Arduino IDE). Скачал с офф сайта Arduino IDE версии 1.5.8, загрузил библиотеки, немного потанцевал с бубном и всё скомпилилось(правда на другом компе). Тему можно закрывать.
SergeyKagen 3 / 4 / 2 Регистрация: 02.04.2018 Сообщений: 315 |
||||
1 |
||||
19.04.2019, 22:16. Показов 131493. Ответов 14 Метки нет (Все метки)
Простой код, но Arduino IDE напрочь отказывается принимать переменные. Что за глюк или я что-то неправильно делаю?
ошибка при компиляции «‘count’ was not declared in this scope», что не так?
__________________
0 |
marat_miaki 493 / 388 / 185 Регистрация: 08.04.2013 Сообщений: 1,686 |
||||
19.04.2019, 23:26 |
2 |
|||
Решение
1 |
Lavad 0 / 0 / 0 Регистрация: 03.10.2015 Сообщений: 25 |
||||||||
14.09.2019, 22:33 |
3 |
|||||||
Доброго времени суток!
В loop() делаю вызов:
При компиляции выделяется этот вызов, с сообщением: ‘myDisplay’ was not declared in this scope Замучился искать инфу о декларации/обьявлении функции. Везде, что находил, понимал одно: если ты вызываешь функцию, это и есть обьявление функции P.S. Код, что использовал в качестве функции, работоспособен. Раньше находился в loop(). Скетч постепенно разрастается, много однотипных обращений к дисплею…
0 |
8385 / 6147 / 615 Регистрация: 10.12.2010 Сообщений: 28,683 Записей в блоге: 30 |
|
14.09.2019, 23:57 |
4 |
Создал функцию (за пределами setup и loop), Перевидите на нормальный язык. В другом файле что ли? Добавлено через 1 минуту
Замучился искать инфу о декларации/обьявлении функции. Везде, что находил, понимал одно: если ты вызываешь функцию, это и есть обьявление функции Читать учебники по С++ не пробовали? https://metanit.com/cpp/tutorial/3.1.php Специфика Arduino лишь отличается тем что пред объявления не всегда нужны. Добавлено через 7 минут
0 |
ValeryS Модератор 8759 / 6549 / 887 Регистрация: 14.02.2011 Сообщений: 22,972 |
||||
15.09.2019, 00:09 |
5 |
|||
Везде, что находил, понимал одно: если ты вызываешь функцию, это и есть обьявление функции это где ж такое написано?
а объявить уже в удобном месте
0 |
0 / 0 / 0 Регистрация: 03.10.2015 Сообщений: 25 |
|
15.09.2019, 00:48 |
6 |
Неделю назад ВПЕРВЫЕ включил Arduino Uno. Написал на том же языке, что и читал на всяких форумах и справочниках по Arduino :-). За пределами этих функций — значит не внутри них. Обе приведенных Вами ссылок просмотрел, проверил в скетче… В итоге вылезла другая ошибка: void myDisplay(byte x, byte y, char str) тоже пробовал. Та же ошибка. Что не так на этот раз?
0 |
Модератор 8759 / 6549 / 887 Регистрация: 14.02.2011 Сообщений: 22,972 |
|
15.09.2019, 01:26 |
7 |
В итоге вылезла другая ошибка: точку с запятой в конце поставил?
1 |
Lavad 0 / 0 / 0 Регистрация: 03.10.2015 Сообщений: 25 |
||||||||||||
15.09.2019, 08:46 |
8 |
|||||||||||
Вот скетч. Проще некуда.
Любое из трех так называемых «объявлений» (строки 7…9) выдает одну и ту же ошибку — я пытаюсь объявить функцию как переменную. Добавлено через 9 минут
Компилятор задумался (я успел обрадоваться), но, зараза :-), он снова поставил свой автограф undefined reference to `myDisplay(unsigned char, unsigned char, char, float) На этот раз он пожаловался на строку вызова функции. Добавлено через 34 минуты
Dispay вместо Display Добавлено через 8 минут
0 |
ValeryS Модератор 8759 / 6549 / 887 Регистрация: 14.02.2011 Сообщений: 22,972 |
||||||||
15.09.2019, 10:36 |
9 |
|||||||
void myDisplay(byte, byte, char, float) = 0; вот так не надо делать(приравнивать функцию к нулю) Добавлено через 5 минут
void myDispay(byte x, byte y, char str, float temp)
myDisplay(0, 0, «C», temp); просишь чтобы функция принимала символ
или проси передавать строку, например так
1 |
Avazart 8385 / 6147 / 615 Регистрация: 10.12.2010 Сообщений: 28,683 Записей в блоге: 30 |
||||
15.09.2019, 12:02 |
10 |
|||
Кроме того наверное лучше так:
Тогда можно будет вынести ф-цию в отдельный файл/модуль.
1 |
locm |
15.09.2019, 21:07
|
Не по теме:
Arduino Uno.
AVR (Basic, немного Assembler). Arduino Uno это AVR, для которого можете писать на бейсике или ассемблере.
0 |
Avazart |
15.09.2019, 21:21
|
Не по теме:
Arduino Uno это AVR, для которого можете писать на бейсике или ассемблере. Но лучше не надо …
0 |
Lavad 0 / 0 / 0 Регистрация: 03.10.2015 Сообщений: 25 |
||||
16.09.2019, 12:12 |
13 |
|||
это где ж такое написано? Оказалось, что я верно понял чтиво по справочникам:
вот так не надо делать(приравнивать функцию к нулю)… Методом проб и ошибок уже понял :-).
или передавай символ… Если передаю в одинарных кавычках более одного символа, а функция ждет как
или проси передавать строку, например так… Буквально вчера попалось это в справочнике, но как-то не дошло, что тоже мой вариант :-).
Кроме того наверное лучше так:
Тогда можно будет вынести ф-цию в отдельный файл/модуль. Благодарю за совет! Как-нибудь проверю…
0 |
8385 / 6147 / 615 Регистрация: 10.12.2010 Сообщений: 28,683 Записей в блоге: 30 |
|
16.09.2019, 12:54 |
14 |
Оказалось, что я верно понял чтиво по справочникам: если ты вызываешь функцию, это и есть обьявление функции Нафиг выкиньте эти справочники.
0 |
0 / 0 / 0 Регистрация: 03.10.2015 Сообщений: 25 |
|
16.09.2019, 13:00 |
15 |
Ссылки Ваши добавлены в закладки. Время от времени заглядываю.
0 |
- PlatformIO Core.
If you’ve found a bug, please provide an information below.
Configuration
Operating system: LinuxMint 18.3
PlatformIO Version (platformio --version
): version 4.0.0a1, using Atom 1.33.1
Description of problem
I had some code for the Maple Mini (2.0 bootloader) that was compiling fine a couple weeks ago. After the latest full update (of my libraries, platforms, piocore, etc.) Nothing will compile that is unique to the leaflabs/stm32duino core library. Setting things like
pinMode(1, PWM);
throws errors of ‘PWM not declared in this scope’. Serial2 and Serial3 also no longer work and build with the error:
.pioenvs/maple_mini_b20/src/main.cpp.o: In function 'setup': main.cpp:(.text.setup+0x1c): undefined reference to
Serial2′
collect2: error: ld returned 1 exit status
*** [.pioenvs/maple_mini_b20/firmware.elf] Error 1`
I have written a small test just to make sure it wasn’t something I broke in my own code. The issue still persists with new projects, but compiles fine with ArduinoIDE v.1.8.5
Steps to Reproduce
- initialize new Maple Mini b2 project with arduino framework.
- code with pinMode settings for analog input or PWM output, and Serial2 or Serial3
- build
- pinMode errors will show with example code below, commenting those out and compiling with just
Serial2.begin(9600)
will cause a different error.
If problems with PlatformIO Build System:
The content of platformio.ini
:
[env:maple_mini_b20]
platform = ststm32
board = maple_mini_b20
framework = arduino
Source file to reproduce issue:
#include <Arduino.h>
void setup() {
pinMode(5, INPUT);
pinMode(1, PWM);
pinMode(10, INPUT_ANALOG);
Serial2.begin(9600);
}
void loop() {
}
Results of platformio run:
Processing maple_mini_b20 (platform: ststm32; board: maple_mini_b20; framework: arduino)
Verbose mode can be enabled via ‘-v, —verbose’ option
CONFIGURATION: https://docs.platformio.org/page/boards/ststm32/maple_mini_b20.html
PLATFORM: ST STM32 > Maple Mini Bootloader 2.0
HARDWARE: STM32F103CBT6 72MHz 20KB RAM (120KB Flash)
DEBUG: CURRENT(blackmagic) EXTERNAL(blackmagic, jlink, stlink)

Library Dependency Finder -> http://bit.ly/configure-pio-ldf
LDF MODES: FINDER(chain) COMPATIBILITY(soft)
Collected 27 compatible libraries
Scanning dependencies…
No dependencies
Compiling .pioenvs/maple_mini_b20/src/main.cpp.o
src/main.cpp: In function ‘void setup()’:
src/main.cpp:5:14: error: ‘PWM’ was not declared in this scope
pinMode(1, PWM);
^~~
src/main.cpp:5:14: note: suggested alternative: ‘PWR’
pinMode(1, PWM);
^~~
PWR
src/main.cpp:6:15: error: ‘INPUT_ANALOG’ was not declared in this scope
pinMode(10, INPUT_ANALOG);
^~~~~~~~~~~~
src/main.cpp:6:15: note: suggested alternative: ‘INPUT_PULLUP’
pinMode(10, INPUT_ANALOG);
^~~~~~~~~~~~
INPUT_PULLUP
*** [.pioenvs/maple_mini_b20/src/main.cpp.o] Error 1`
СОДЕРЖАНИЕ ►
- Произошла ошибка при загрузке скетча в Ардуино
- programmer is not responding
- a function-definition is not allowed arduino ошибка
- expected initializer before ‘}’ token arduino ошибка
- ‘что-то’ was not declared in this scope arduino ошибка
- No such file or directory arduino ошибка
- Compilation error: Missing FQBN (Fully Qualified Board Name)
Ошибки компиляции Arduino IDE возникают при проверке или загрузке скетча в плату, если код программы содержит ошибки, компилятор не может найти библиотеки или переменные. На самом деле, сообщение об ошибке при загрузке скетча связано с невнимательностью самого программиста. Рассмотрим в этой статье все возможные ошибки компиляции для платы Ардуино UNO R3, NANO, MEGA и пути их решения.
Произошла ошибка при загрузке скетча Ардуино
Самые простые ошибки возникают у новичков, кто только начинает разбираться с языком программирования Ардуино и делает первые попытки загрузить скетч. Если вы не нашли решение своей проблемы в статье, то напишите свой вопрос в комментариях к этой записи и мы поможем решить вашу проблему с загрузкой (бесплатно!).
avrdude: stk500_recv(): programmer is not responding
Что делать в этом случае? Первым делом обратите внимание какую плату вы используете и к какому порту она подключена (смотри на скриншоте в правом нижнем углу). Необходимо сообщить Arduino IDE, какая плата используется и к какому порту она подключена. Если вы загружаете скетч в Ардуино Nano V3, но при этом в настройках указана плата Uno или Mega 2560, то вы увидите ошибку, как на скриншоте ниже.
Такая же ошибка будет возникать, если вы не укажите порт к которому подключена плата (это может быть любой COM-порт, кроме COM1). В обоих случаях вы получите сообщение — плата не отвечает (programmer is not responding). Для исправления ошибки надо на панели инструментов Arduino IDE в меню «Сервис» выбрать нужную плату и там же, через «Сервис» → «Последовательный порт» выбрать порт «COM7».
a function-definition is not allowed here before ‘{‘ token
Это значит, что в скетче вы забыли где-то закрыть фигурную скобку. Синтаксические ошибки IDE тоже распространены и связаны они просто с невнимательностью. Такие проблемы легко решаются, так как Arduino IDE даст вам подсказку, стараясь отметить номер строки, где обнаружена ошибка. На скриншоте видно, что строка с ошибкой подсвечена, а в нижнем левом углу приложения указан номер строки.
expected initializer before ‘}’ token / expected ‘;’ before ‘}’ token
Сообщение expected initializer before ‘}’ token говорит о том, что вы, наоборот где-то забыли открыть фигурную скобку. Arduino IDE даст вам подсказку, но если скетч довольно большой, то вам придется набраться терпения, чтобы найти неточность в коде. Ошибка при компиляции программы: expected ‘;’ before ‘}’ token говорит о том, что вы забыли поставить точку с запятой в конце командной строки.
‘что-то’ was not declared in this scope
Что за ошибка? Arduino IDE обнаружила в скетче слова, не являющиеся служебными или не были объявлены, как переменные. Например, вы забыли продекларировать переменную или задали переменную ‘DATA’, а затем по невнимательности используете ‘DAT’, которая не была продекларирована. Ошибка was not declared in this scope возникает при появлении в скетче случайных или лишних символов.
Например, на скриншоте выделено, что программист забыл продекларировать переменную ‘x’, а также неправильно написал функцию ‘analogRead’. Такая ошибка может возникнуть, если вы забудете поставить комментарий, написали функцию с ошибкой и т.д. Все ошибки также будут подсвечены, а при нескольких ошибках в скетче, сначала будет предложено исправить первую ошибку, расположенную выше.
exit status 1 ошибка компиляции для платы Arduino
Данная ошибка возникает, если вы подключаете в скетче библиотеку, которую не установили в папку libraries. Например, не установлена библиотека ИК приемника Ардуино: fatal error: IRremote.h: No such file or directory. Как исправить ошибку? Скачайте нужную библиотеку и распакуйте архив в папку C:Program FilesArduinolibraries. Если библиотека установлена, то попробуйте скачать и заменить библиотеку на новую.
Довольно часто у новичков выходит exit status 1 ошибка компиляции для платы arduino uno /genuino uno. Причин данного сообщения при загрузке скетча в плату Arduino Mega или Uno может быть огромное множество. Но все их легко исправить, достаточно внимательно перепроверить код программы. Если в этом обзоре вы не нашли решение своей проблемы, то напишите свой вопрос в комментариях к этой статье.
missing fqbn (fully qualified board name)
Ошибка возникает, если не была выбрана плата. Обратите внимание, что тип платы необходимо выбрать, даже если вы не загружаете, а, например, делаете компиляцию скетча. В Arduino IDE 2 вы можете использовать меню выбора:
— список плат, которые подключены и были идентифицированы Arduino IDE.
— или выбрать плату и порт вручную, без подключения микроконтроллера.
I’m trying to follow this this tutorial to program an ATtiny85 micro-controller using my Arduino Uno r3 as the ISP.
I am up to the final step on the tutorial, but get an error when attempting to compile my sketch:
'OUTPUT' was not declared in this scope
I have tried multiple «Blink» scripts, but none have seemed to work.
My full error log:
Blink.ino:10:21: error: Arduino.h: No such file or directory
Blink.ino: In function 'void setup()':
Blink:15: error: 'OUTPUT' was not declared in this scope
Blink:15: error: 'pinMode' was not declared in this scope
Blink.ino: In function 'void loop()':
Blink:20: error: 'HIGH' was not declared in this scope
Blink:20: error: 'digitalWrite' was not declared in this scope
Blink:21: error: 'delay' was not declared in this scope
Blink:22: error: 'LOW' was not declared in this scope
I have also tried including Arduino.h, no help, and changing «OUTPUT» to «0x01», as it is defined to said value in Arduino.h, but instead got this error:
error: 'pinMode' was not declared in this scope
Any ideas as to what is happening?