Глиф Учебники

Ошибка was not declared in this scope в Arduino IDE

Справочник · Arduino · 1 минута чтения

Компилятор встретил имя, которого в этом месте не знает. Ошибка выглядит так:

Текст
error: 'pinmode' was not declared in this scope

Имя в кавычках — то, что не нашлось; номер строки стоит перед словом error. Arduino IDE подсвечивает эту строку. Причины — по частоте.

1. Регистр букв или опечатка

Язык скетчей — C++, и в нём pinMode и pinmode — разные имена. Правильно пишутся:

НеверноВерно
pinmode, PinModepinMode
digitalwrite, DigitalWritedigitalWrite
analogreadanalogRead
serial.printlnSerial.println
led_builtin, LED_BUILDINLED_BUILTIN
high, low, outputHIGH, LOW, OUTPUT

Та же история с вашими переменными: объявлена ledPin, а в коде LedPin или ledpin.

2. Не подключена библиотека

Servo, DHT, LiquidCrystal_I2C, Wire — не часть языка, их даёт библиотека. Без строки #include вверху скетча компилятор их не знает:

Arduino
#include <Servo.h>

Servo servo;

void setup() {
  servo.attach(9);
}

void loop() {
}

Если библиотека не установлена вовсе, ошибка будет другой — No such file or directory (справка Как установить библиотеку в Arduino IDE).

3. Переменная объявлена в другой функции

Переменная живёт только внутри фигурных скобок, где её объявили. Объявленная в setup() в loop() не видна:

Arduino
void setup() {
  int ledPin = 9;
  pinMode(ledPin, OUTPUT);
}

void loop() {
  digitalWrite(ledPin, HIGH);   // ошибка: ledPin здесь не существует
}

Если переменная нужна в обеих функциях, объявите её вне функций, в начале скетча:

Arduino
const int LED_PIN = 9;

void setup() {
  pinMode(LED_PIN, OUTPUT);
}

void loop() {
  digitalWrite(LED_PIN, HIGH);
}

4. Лишняя или забытая фигурная скобка

Если где-то выше не закрыта { или закрыта лишняя }, компилятор теряется, и ошибки сыплются в местах, где всё написано верно, — часто вместе с was not declared и expected … before …. Нажмите Tools → Auto Format (Ctrl+T): по отступам после форматирования видно, где скобки разошлись. Arduino IDE подсвечивает парную скобку, если поставить курсор рядом с ней.

5. Имя есть только у другой платы

Некоторые имена определены не для всех плат. Например, Serial1 есть только у плат со вторым аппаратным портом (Mega, Leonardo), а у Uno и Nano его нет. Проверьте, что в Tools → Board выбрана та плата, для которой написан скетч.

Читайте первую ошибку

Одна опечатка часто тянет за собой десяток сообщений. Исправляйте первую ошибку в списке (прокрутите панель Output вверх) и компилируйте снова — остальные нередко исчезают сами. Подробнее об ошибках компилятора C++ — в курсе C++.