Проблема с простейшей программой.

Nikita000
Offline
Зарегистрирован: 08.07.2019

Суть программы: регулировать яркость RGB ленты. Код представлен ниже.

#define PIN_PHOTO_SENSOR A4
#define LED_R 11 // Pin D11 --> красный
#define LED_G 10 // Pin D10 --> зеленый
#define LED_B 9 // Pin D9 --> синий


void setup() {
 pinMode( LED_R, OUTPUT );
 pinMode( LED_G, OUTPUT );
 pinMode( LED_B, OUTPUT );
 analogWrite (LED_R,255);
 analogWrite (LED_G,255);
 analogWrite (LED_B,255);
  Serial.begin(9600);
int x;
}

void loop() {
 int val1 = analogRead(PIN_PHOTO_SENSOR);
delay(1000);
int val2 = analogRead(PIN_PHOTO_SENSOR);
delay(1000);
if(val2 < val1){
  x=x-10;
  }
if(val2 > val1){
   x==x+10;
   }
else{
  delay(100);
}
green(x);

}

void red(int s){
analogWrite (LED_R,255-s);
}
void green(int s){
analogWrite (LED_G,255-s);
}

void blue(int s){
analogWrite (LED_B,255-s);
}

Ошибка в строке №32, а именно: exit status 1 'x' was not declared in this scope.

Уже не знаю что делать, помогите пожалуйста.

 

Pyotr
Offline
Зарегистрирован: 12.03.2014

А еще в строке 24 и 27. 

Присмотритесь к строке 15.

b707
Offline
Зарегистрирован: 26.05.2017

не только в строке 32, но и 24 и 27. просто ИДЕ, когда показывает ошибки - идет "снизу".

А что. собственно, непонятно в сообщении? - переменная x незадекларирована? - так задеркларируйте

Nikita000
Offline
Зарегистрирован: 08.07.2019

так я ее в 15 строке задеклорировал или я чтото не понимаю.

bwn
Offline
Зарегистрирован: 25.08.2014

Nikita000 пишет:

так я ее в 15 строке задеклорировал или я чтото не понимаю.

Чтобы понять, погуглите: "Область видимости переменных".

b707
Offline
Зарегистрирован: 26.05.2017

Nikita000 пишет:

так я ее в 15 строке задеклорировал или я чтото не понимаю.

Прочитайте что-нибудь про "область видимости переменных" в языке Си. Вам компилятор пишет, что переменная "в этой области видимости незадекларирована". И он однако, прав.

Nikita000
Offline
Зарегистрирован: 08.07.2019

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

Pyotr
Offline
Зарегистрирован: 12.03.2014

Nikita000 пишет:

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

или сделать ее глобальной, или static

bwn
Offline
Зарегистрирован: 25.08.2014

Pyotr пишет:

Nikita000 пишет:

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

или сделать ее глобальной, или static

Добрый Вы. Нахрена ТС-у читать, когда и так всё скажут.(((

Nikita000
Offline
Зарегистрирован: 08.07.2019

Все, разобрался, всем спасибо.

b707
Offline
Зарегистрирован: 26.05.2017

Nikita000 пишет:

Все, разобрался, всем спасибо.

 Главное - сам!

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

К строке 27 присмотрелся?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

DetSimen пишет:

К строке 27 присмотрелся?

ну у тя и глазомер )))

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Nikita000 пишет:

Если я задекларирую переменную х в void loop(),то каждый новый цикл программы переменная х будет равна нулю

вовсе нет. 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

DetSimen пишет:

Nikita000 пишет:

Если я задекларирую переменную х в void loop(),то каждый новый цикл программы переменная х будет равна нулю

вовсе нет. 

у меня обозначена как static в процедуре, и точно, пока не скинешь в ноль, результат накапливался, для меня это когнитивный диссонанс, принял как данность )))

b707
Offline
Зарегистрирован: 26.05.2017

ua6em пишет:

у меня обозначена как static в процедуре, и точно, пока не скинешь в ноль, результат накапливался, для меня это когнитивный диссонанс, принял как данность )))

убери статик - не будет диссонанаса...

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

ua6em пишет:

DetSimen пишет:

Nikita000 пишет:

Если я задекларирую переменную х в void loop(),то каждый новый цикл программы переменная х будет равна нулю

вовсе нет. 

у меня обозначена как static в процедуре, и точно, пока не скинешь в ноль, результат накапливался, для меня это когнитивный диссонанс, принял как данность )))

дак почитай за отличие static переменных и автоматических, как у ТС, када он х в loop() обьявляет. Статик инициализируется 1 рас и хранит последнее значение при выходе из функции, а отоматические переменные создаются на стеке каждый раз при входе в функцию.  Сомневаюсь, что лжывый С++ ее обнуляет при этом, т.е хранит она, какправило, всяку каку, что на стеке валялась ДО этого.  Взрослые, еслишто, меня поправят. 

b707
Offline
Зарегистрирован: 26.05.2017

DetSimen пишет:

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

числовые типы должны иннициализироваться нулем каждый раз, насколько я помню

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

b707 пишет:

DetSimen пишет:

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

числовые типы должны иннициализироваться нулем каждый раз, насколько я помню

глобальные - да, без вопросов.  Они и кладуца в сегмент инициализированных данных.  А локальные - раньше в них мусор валялся, счас мошт стандарты поменяли. ЕвгенийП точно знает. Но молчит. 

sadman41
Онлайн
Зарегистрирован: 19.10.2016

Их компилятор может вообще на своё усмотрение проинициализировать ближайшим (по ходу выполнения) числом.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

проверил, да, локальные обнуляюца. буду знать теперь. 

Upd. я даже знаю почему.  Если обьявить 

int i; в функции, без инициализатора, неявно будет обьявлено 

int i = int(); 

По крайней мере, очень на то похоже. :)