Функция was not declared in this scope

VadimOrenburg
Offline
Зарегистрирован: 01.10.2016

Доброго времени суток

При загрузке данного кода возникает ошибка: 'SecurityMode' was not declared in this scope. Почему то не видит данную функцию.

Но если создать новый скетч и вставить в него данный код, при загрузке не сохранять его, то все нормально загружается и работает.

В чем проблема может быть?

const int PIN_SENSOR_1  = 2;
const int PIN_SENSOR_2  = 3;
const int PIN_SENSOR_3  = 4;
const int PIN_SENSOR_4  = 5;
const int PIN_ALARM_1   = 6;
const int PIN_ALARM_2   = 7;
const int PIN_STATUS    = 8;

boolean SECURITY  = false;
boolean ALARM     = false;

void setup() {
  Serial.begin(9600);
  
  pinMode(PIN_SENSOR_1, INPUT);
  pinMode(PIN_SENSOR_2, INPUT);
  pinMode(PIN_SENSOR_3, INPUT);
  pinMode(PIN_SENSOR_4, INPUT);

  pinMode(PIN_ALARM_1, OUTPUT);
  pinMode(PIN_ALARM_2, OUTPUT);
  pinMode(PIN_STATUS, OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  Serial.print("SECURITY: ");
  Serial.println(SECURITY);
  
  SecurityMode();
  
  delay(200);
}

void SecurityMode() {
  if (digitalRead(12) == HIGH) {
    SECURITY = !SECURITY;
    delay(100);
  }
}

 

VadimOrenburg
Offline
Зарегистрирован: 01.10.2016

Если перенести функцию выше loop, то тогда все нормально компилируется.

Но почему такая особенность только на сохраненном скетче?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Такая особенность на всех скетчах. Это правило языка: всё должно быть объявлено до использования. В старых версиях IDE разработчики прятали это своими искусственными действиями и тогда можно было располагать фунция после испольхования, а некоторой версии перестали. Теперь всё делается правильно.

Николай Коростелев
Offline
Зарегистрирован: 05.04.2016

возможно нужно создать прототип функции? Учи си, многие вопросы отпадут