Compilation error pinmode was not declared in this scope

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://git...

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's user avatar

dda

5,9322 gold badges25 silver badges34 bronze badges

asked Aug 10, 2017 at 8:35

Godhaze's user avatar

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:

  1. Are there many source files? If yes, merge them into a single file.
  2. Is #include <Arduino.h> at the top of the single source file? If not, add it.
  3. 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

Alexandre Perrin's user avatar

  1. Скачал библиотеку 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

    Подскажите, что я неправильно делаю?
    Спасибо.

  2. Папки с либами должны быть в Arduino IDE

  3. Скопировал абсолютно все библиотеки(эти тоже MPU6050 и I2Cdev) из папки C:UsersAdmin(RCMS)DocumentsArduinolibraries в C:ArduPilot-Arduino-1.0.3-windowslibraries

    Не помогло. Есть идеи?

  4. Идей валом. Хотя и не телепат, но первая навскидку — раз не знаете, где библиотека должна лежать, то смело могли её и не правильно установить

  5. Что вы имеете в виду под словом «установить»? Почти во всех мануалах (например http://arduino.ua/ru/guide/Libraries или http://www.freeduino.ru/arduino/libraries.html) установка описывается простым копированием файлов .cpp и .h (т.е папки в которой они находятся) в директорию, где хранятся библиотеки. Это либо пользовательские библиотеки C:Users<имя пользователя>DocumentsArduinolibraries, либо Ардуиновские (подкаталог libraries каталога Arduino IDE).
    В моём случае они есть в обоих директориях и всё равно есть ошибки.
    Кстати, данные библиотеки также появились в Скетч -> Импортировать библиотеку. Я импортировал MPU6050 и всё равно получил ошибки.

    Вот теперь пора включать телепатию.

  6. Решение найдено! Всё дело в версии компилятора(в версии 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 напрочь отказывается принимать переменные. Что за глюк или я что-то неправильно делаю?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void setup() {
  
  Serial.begin(9600);
  int count = 0;
  pinMode(7, INPUT);
  pinMode(13, OUTPUT);
 
}
 
void loop() {
 
  if( digitalRead(7) == HIGH ){ 
    
    while(1){ 
      delayMicroseconds(2); 
      count++;  
      if( digitalRead(7) == LOW ){ Serial.println(count); count = 0; break; }
      }
    }  
}

ошибка при компиляции «‘count’ was not declared in this scope», что не так?

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



marat_miaki

493 / 388 / 185

Регистрация: 08.04.2013

Сообщений: 1,686

19.04.2019, 23:26

2

Лучший ответ Сообщение было отмечено SergeyKagen как решение

Решение

C++
1
2
3
4
5
6
7
8
  int count = 0; //глобальная переменная
 
  void setup() {
   Serial.begin(9600);
  pinMode(7, INPUT);
  pinMode(13, OUTPUT);
 
}



1



Lavad

0 / 0 / 0

Регистрация: 03.10.2015

Сообщений: 25

14.09.2019, 22:33

3

Доброго времени суток!
У меня то же сообщение, но на функцию :-(
Создал функцию (за пределами setup и loop), которая только принимает вызов, ничего не возвращает:

C++
1
2
3
4
5
void myDispay(byte x, byte y, char str) {
  lcd.setCursor(x, y);
  lcd.print(temp, 1);   // выводим данные, с точностью до 1 знака после запятой
  lcd.print(str);   // выводим писанину
  }

В loop() делаю вызов:

C++
1
myDisplay(0,0,"C");

При компиляции выделяется этот вызов, с сообщением:

‘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

Цитата
Сообщение от Lavad
Посмотреть сообщение

Создал функцию (за пределами setup и loop),

Перевидите на нормальный язык.
Какие еще пределы?

В другом файле что ли?

Добавлено через 1 минуту

Цитата
Сообщение от Lavad
Посмотреть сообщение

Замучился искать инфу о декларации/обьявлении функции. Везде, что находил, понимал одно: если ты вызываешь функцию, это и есть обьявление функции
Что делаю не так? В чем моя ошибка? Помогите, пожалуйста

Читать учебники по С++ не пробовали?

https://metanit.com/cpp/tutorial/3.1.php
http://cppstudio.com/post/5291/

Специфика Arduino лишь отличается тем что пред объявления не всегда нужны.

Добавлено через 7 минут
Кроме того иногда потеряй скобок {} приводят к таким ошибкам.



0



ValeryS

Модератор

Эксперт по электронике

8759 / 6549 / 887

Регистрация: 14.02.2011

Сообщений: 22,972

15.09.2019, 00:09

5

Цитата
Сообщение от Lavad
Посмотреть сообщение

Везде, что находил, понимал одно: если ты вызываешь функцию, это и есть обьявление функции

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

C++
1
void myDispay(byte x, byte y, char str);

а объявить уже в удобном месте



0



0 / 0 / 0

Регистрация: 03.10.2015

Сообщений: 25

15.09.2019, 00:48

6

Неделю назад ВПЕРВЫЕ включил Arduino Uno.
Задолго до этого писал программы под Windows (БейсикВизуал) и AVR (Basic, немного Assembler). Т.е. имеется некоторое представление об объявлении переменных, функций,… От Си всегда держался как можно дальше. Это первая и последняя причина «нечитания» книг по Си. За неделю экспериментов на Arduino мнение об этом пока не изменилось — легче вернуться к Ассму, чем копаться в Си.

Написал на том же языке, что и читал на всяких форумах и справочниках по Arduino :-). За пределами этих функций — значит не внутри них.

Обе приведенных Вами ссылок просмотрел, проверил в скетче… В итоге вылезла другая ошибка:
function ‘void myDisplay(byte, byte, char)’ is initialized like a variable

void myDisplay(byte x, byte y, char str) тоже пробовал. Та же ошибка.

Что не так на этот раз? :-(



0



Модератор

Эксперт по электронике

8759 / 6549 / 887

Регистрация: 14.02.2011

Сообщений: 22,972

15.09.2019, 01:26

7

Цитата
Сообщение от Lavad
Посмотреть сообщение

В итоге вылезла другая ошибка:
function ‘void myDisplay(byte, byte, char)’ is initialized like a variable

точку с запятой в конце поставил?



1



Lavad

0 / 0 / 0

Регистрация: 03.10.2015

Сообщений: 25

15.09.2019, 08:46

8

Вот скетч. Проще некуда.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <PCD8544.h>
 
float temp = 0;
static PCD8544 lcd;   // даем имя подключенному дисплею (lcd)
static const byte Lm35Pin = 14;   // аналоговый пин (A0) Arduino, к которому подключен LM35
 
//void myDisplay() = 0;
//void myDisplay(byte, byte, char, float) = 0;
//void myDisplay(byte x, byte y, char str, float temp) = 0;
 
void myDispay(byte x, byte y, char str, float temp) {
  lcd.setCursor(x, y);   // начиная с (x,y)...
  lcd.print(temp, 1);   // выводим temp
  lcd.print(str);   // выводим писанину
}
 
void setup() {
  lcd.begin(84, 48);   // инициализируем дисплей
  analogReference(INTERNAL);   // подключаем внутренний ИОН на 1.1V
}
 
void loop() {
  float temp = analogRead(Lm35Pin) / 9.31;  // подсчитываем температуру (в Цельсиях)...
  myDisplay(0, 0, "C", temp);   // отправляем данные на экран
  delay(500);   // ждем 500 мсек
}

Любое из трех так называемых «объявлений» (строки 7…9) выдает одну и ту же ошибку — я пытаюсь объявить функцию как переменную.

Добавлено через 9 минут
Попробовал так:

C++
1
void myDisplay(byte x, byte y, char str, float temp);

Компилятор задумался (я успел обрадоваться), но, зараза :-), он снова поставил свой автограф :-)

undefined reference to `myDisplay(unsigned char, unsigned char, char, float)

На этот раз он пожаловался на строку вызова функции.

Добавлено через 34 минуты
Когда что-то новое затягивает, забываешь о нормальном отдыхе, теряешь концентрацию…
Нашел ошибку. Чистейшая грамматика

C++
1
void myDispay(byte x,...

Dispay вместо Display

Добавлено через 8 минут
ValeryS, благодарю за попытку помощи!



0



ValeryS

Модератор

Эксперт по электронике

8759 / 6549 / 887

Регистрация: 14.02.2011

Сообщений: 22,972

15.09.2019, 10:36

9

Цитата
Сообщение от Lavad
Посмотреть сообщение

void myDisplay(byte, byte, char, float) = 0;

вот так не надо делать(приравнивать функцию к нулю)
так в классическом С++ объявляют чисто виртуальные функции, и класс в котором объявлена чисто виртуальная функция становится абстрактным. Означает что у функции нет реализации и в дочернем классе нужно обязательно реализовать функцию. А из абстрактного класса нельзя создать объект

Добавлено через 5 минут

Цитата
Сообщение от Lavad
Посмотреть сообщение

void myDispay(byte x, byte y, char str, float temp)

Цитата
Сообщение от Lavad
Посмотреть сообщение

myDisplay(0, 0, «C», temp);

просишь чтобы функция принимала символ char str, а передаешь строку "C"
или передавай символ

C++
1
myDisplay(0, 0, 'C', temp);

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

C++
1
void myDispay(byte x, byte y, char * str, float temp);



1



Avazart

Эксперт С++

8385 / 6147 / 615

Регистрация: 10.12.2010

Сообщений: 28,683

Записей в блоге: 30

15.09.2019, 12:02

10

Кроме того наверное лучше так:

C++
1
2
3
4
5
6
7
8
void myDispay(PCD8544& lcd,byte x, byte y, char str, float temp) 
{
  lcd.setCursor(x, y);   // начиная с (x,y)...
  lcd.print(temp, 1);   // выводим temp
  lcd.print(str);   // выводим писанину
}
 
myDisplay(lcd,0, 0, 'C', temp);

Тогда можно будет вынести ф-цию в отдельный файл/модуль.



1



locm

15.09.2019, 21:07

Не по теме:

Цитата
Сообщение от Lavad
Посмотреть сообщение

Arduino Uno.

Цитата
Сообщение от Lavad
Посмотреть сообщение

AVR (Basic, немного Assembler).

Arduino Uno это AVR, для которого можете писать на бейсике или ассемблере.



0



Avazart

15.09.2019, 21:21

Не по теме:

Цитата
Сообщение от locm
Посмотреть сообщение

Arduino Uno это AVR, для которого можете писать на бейсике или ассемблере.

Но лучше не надо …



0



Lavad

0 / 0 / 0

Регистрация: 03.10.2015

Сообщений: 25

16.09.2019, 12:12

13

Цитата
Сообщение от ValeryS
Посмотреть сообщение

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

Оказалось, что я верно понял чтиво по справочникам: если ты вызываешь функцию, это и есть обьявление функции. А сама функция может располагаться по скетчу в ЛЮБОМ месте (но за пределами setup, loop и любых других функций). И больше никаких специфических строк.

Цитата
Сообщение от ValeryS
Посмотреть сообщение

вот так не надо делать(приравнивать функцию к нулю)…

Методом проб и ошибок уже понял :-).

Цитата
Сообщение от ValeryS
Посмотреть сообщение

или передавай символ… 'C'

Если передаю в одинарных кавычках

более одного

символа, а функция ждет как char str, то выводятся на экран только самый правый из отправленных символов. Отправил «абв», а выводится «в».
Выкрутился, прописав в функции char str[], а символы отправляю через двойные кавычки.

Цитата
Сообщение от ValeryS
Посмотреть сообщение

или проси передавать строку, например так… char * str

Буквально вчера попалось это в справочнике, но как-то не дошло, что тоже мой вариант :-).

Цитата
Сообщение от Avazart
Посмотреть сообщение

Кроме того наверное лучше так:

C++
1
void myDispay(PCD8544& lcd,byte x, byte y, char str, float temp) {...}

Тогда можно будет вынести ф-цию в отдельный файл/модуль.

Благодарю за совет! Как-нибудь проверю…



0



Эксперт С++

8385 / 6147 / 615

Регистрация: 10.12.2010

Сообщений: 28,683

Записей в блоге: 30

16.09.2019, 12:54

14

Цитата
Сообщение от Lavad
Посмотреть сообщение

Оказалось, что я верно понял чтиво по справочникам: если ты вызываешь функцию, это и есть обьявление функции

Нафиг выкиньте эти справочники.
Почитайте мои ссылки.



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

  1. initialize new Maple Mini b2 project with arduino framework.
  2. code with pinMode settings for analog input or PWM output, and Serial2 or Serial3
  3. build
  4. 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, то вы увидите ошибку, как на скриншоте ниже.

Ошибка: programmer is not responding

Ошибка Ардуино: programmer is not responding

Такая же ошибка будет возникать, если вы не укажите порт к которому подключена плата (это может быть любой COM-порт, кроме COM1). В обоих случаях вы получите сообщение — плата не отвечает (programmer is not responding). Для исправления ошибки надо на панели инструментов Arduino IDE в меню «Сервис» выбрать нужную плату и там же, через «Сервис» → «Последовательный порт» выбрать порт «COM7».

a function-definition is not allowed here before ‘{‘ token

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

Ошибка: a function-definition is not allowed

Ошибка: a function-definition is not allowed here before ‘{‘ token

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 возникает при появлении в скетче случайных или лишних символов.

Ошибка Ардуино: was not declared in this scope

Ошибка Ардуино: 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 Nano

exit status 1 Ошибка компиляции для платы Arduino Nano

Довольно часто у новичков выходит 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?

Понравилась статья? Поделить с друзьями:
  • Compilation error expected unqualified id before token
  • Compilation error expected primary expression before token
  • Compilation error expected constructor destructor or type conversion before token
  • Compilation error expected at end of input
  • Compilation error exit status 1 esp8266