Объявленная переменная внутри 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);
}
}
@ThisIsAron, 👍1
Обсуждение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);
}
}
,
@Duncan C
Неужели servo1 тоже должен быть глобальным?, @copper.hat
Да, это тоже. Я немного спешил, когда писал этот пост., @Duncan C
Смотрите также:
- Получение имени перечисления из экземпляра перечисления
- Как изменить переменную при нажатии кнопки, подключенной к контакту 2
- Ошибка переменной does not name a type!
- Использование YS-IRTM с Arduino Uno
- IRRemote отправлять и получать тем же Arduino
- Преимущества глобальных переменных перед статическими членами класса?
- 7-сегментный дисплей с потенциометром
- Акцептант векселей ИКТ
Вам нужно выбрать свой код и нажать кнопку
{}
(форматирование кода). Я сделал это для тебя., @Duncan CКонечно, это необъявлено. Переменная находится в настройке. Это не в цикле., @Majenko
Потому что переменная действительна только там, где она объявлена, если использовать официальный термин: ее область действия. Когда программа выйдет за пределы области действия этой переменной, она будет выброшена и больше не будет доступна. Вы можете объявить его в глобальной области видимости, то есть вне какой-либо функции., @chrisl
Это больше вопрос о C/C++, а не об Arduino., @chrisl
@chrisl правда, но ОП не знает достаточно, чтобы знать, где задать вопрос. Нам всем нужно с чего-то начинать. Мне просто хотелось бы, чтобы люди немного самостоятельно изучили информацию, прежде чем бежать в Интернет в поисках кого-нибудь, кто мог бы ответить за них на их вопросы., @Duncan C
какой у Вас вопрос? ... ты ничего не спросил, @jsotola