Объявленная переменная внутри void setup не видится в void loop

Если я объявлю переменную в void setup() и попытаюсь что-то с ней сделать в void loop(), он просто скажет, что переменная не объявлена. вот код:

#include "Servo.h"

void setup() {
    Servo servo1;
    int x_key = A0;
    servo1.attach(2);
    pinMode(A0, INPUT);
    pinMode(2, OUTPUT);

    int x_position = 90;
}

void loop() { 
    if (analogRead(A0) < 512) {
        x_position++;
        servo1.write(x_position);
    }
}

, 👍1

Обсуждение

Вам нужно выбрать свой код и нажать кнопку {} (форматирование кода). Я сделал это для тебя., @Duncan C

Конечно, это необъявлено. Переменная находится в настройке. Это не в цикле., @Majenko

Потому что переменная действительна только там, где она объявлена, если использовать официальный термин: ее область действия. Когда программа выйдет за пределы области действия этой переменной, она будет выброшена и больше не будет доступна. Вы можете объявить его в глобальной области видимости, то есть вне какой-либо функции., @chrisl

Это больше вопрос о C/C++, а не об Arduino., @chrisl

@chrisl правда, но ОП не знает достаточно, чтобы знать, где задать вопрос. Нам всем нужно с чего-то начинать. Мне просто хотелось бы, чтобы люди немного самостоятельно изучили информацию, прежде чем бежать в Интернет в поисках кого-нибудь, кто мог бы ответить за них на их вопросы., @Duncan C

какой у Вас вопрос? ... ты ничего не спросил, @jsotola


1 ответ


7

Да, именно так работают C и C++ (и большинство других C-подобных языков). Переменные имеют "область действия". Любая переменная, определенная внутри пары фигурных скобок (между { и }), видна только внутри этих фигурных скобок.

Если вы хотите сослаться на переменную как в setup(), так и в loop(), вы должны сделать ее глобальной переменной, определенной в начале вашего кода. .

#include "Servo.h"
Servo servo1;
int x_position = 90;  //Определите свои глобальные переменные здесь



void setup() {
    int x_key = A0;  //Эта переменная существует только внутри функции установки
    servo1.attach(2);
    pinMode(A0, INPUT);
    pinMode(2, OUTPUT);

}

void loop() { 
    if (analogRead(A0) < 512) {
        x_position++;
        servo1.write(x_position);
    }
}
,

Неужели servo1 тоже должен быть глобальным?, @copper.hat

Да, это тоже. Я немного спешил, когда писал этот пост., @Duncan C