Скетч не проходит проверку перед загрузкой на Arduino выдаёт ошибку "last" was not declared in this scope во фрагменте boolean now = digitalRead(Kn); if (last != now) #define Sin 9 #define Zel 10 #define Kr 11 #define Kn 2 int rez; int svet; boolean last_kn; boolean now_kn; int mode; void setup() { pinMode (Sin, OUTPUT);// put your setup code here, to run once: pinMode (Zel, OUTPUT); pinMode (Kr, OUTPUT); boolean debonce(boolean last); { boolean now = digitalRead(Kn); if (last != now) { delay(5); now = digitalRead(Kn); return now; } } rez = analogRead(A0) svet = rez / 4 void setMode(byte m) { //Красный if (m == 1) { analogWrite(Kr, svet); analogWrite(Sin, 0); analogWrite(Zel, 0); } //Синий if (m == 1) { analogWrite(Kr, 0); analogWrite(Sin, svet); analogWrite(Zel, 0); } //Зелёный if (m == 1) { analogWrite(Kr, 0); analogWrite(Sin, 0); analogWrite(Zel, svet); } //Красный + синий if (m == 1) { analogWrite(Kr, svet); analogWrite(Sin, svet); analogWrite(Zel, 0); } //Синий + зелёный if (m == 1) { analogWrite(Kr, 0); analogWrite(Sin, svet); analogWrite(Zel, svet); } //Красный + зелёный if (m == 1) { analogWrite(Kr, svet); analogWrite(Sin, 0); analogWrite(Zel, svet); } //Красный + зелёный + синий if (m == 1) { analogWrite(Kr, svet); analogWrite(Sin, svet); analogWrite(Zel, svet); } //Выкл if (m == 1) { analogWrite(Kr, 0); analogWrite(Sin, 0); analogWrite(Zel, 0); } } } void loop() { now_kn = debonce(last_kn); if (last_kn == 0 && now_kn == 1){ mode++; } now_kn = last_kn; if (mode == 8) mode = 0 setMode(mode) }
Разные действия на одно условие, будьте внимательнее. Условия будут выполнятся друг за другом, а не одно из условий. Код (C++): //Синий if (m == 1) { analogWrite(Kr, 0); analogWrite(Sin, svet); analogWrite(Zel, 0); } //Зелёный if (m == 1) { analogWrite(Kr, 0); analogWrite(Sin, 0); analogWrite(Zel, svet); } Немного отредактирован ваш скетч, но не логика работы Код (C++): #define Sin 9 #define Zel 10 #define Kr 11 #define Kn 2 int rez; int svet; boolean last_kn; boolean now_kn; int mode; boolean debonce(boolean last) { boolean now = digitalRead(Kn); if (last != now) { delay(5); now = digitalRead(Kn); return now; } } void setMode(byte m) { //Красный if (m == 1) { analogWrite(Kr, svet); analogWrite(Sin, 0); analogWrite(Zel, 0); } //Синий if (m == 1) { analogWrite(Kr, 0); analogWrite(Sin, svet); analogWrite(Zel, 0); } //Зелёный if (m == 1) { analogWrite(Kr, 0); analogWrite(Sin, 0); analogWrite(Zel, svet); } //Красный + синий if (m == 1) { analogWrite(Kr, svet); analogWrite(Sin, svet); analogWrite(Zel, 0); } //Синий + зелёный if (m == 1) { analogWrite(Kr, 0); analogWrite(Sin, svet); analogWrite(Zel, svet); } //Красный + зелёный if (m == 1) { analogWrite(Kr, svet); analogWrite(Sin, 0); analogWrite(Zel, svet); } //Красный + зелёный + синий if (m == 1) { analogWrite(Kr, svet); analogWrite(Sin, svet); analogWrite(Zel, svet); } //Выкл if (m == 1) { analogWrite(Kr, 0); analogWrite(Sin, 0); analogWrite(Zel, 0); } } void setup() { pinMode (Sin, OUTPUT);// put your setup code here, to run once: pinMode (Zel, OUTPUT); pinMode (Kr, OUTPUT); } void loop() { rez = analogRead(A0); svet = rez / 4; now_kn = debonce(last_kn); if (last_kn == 0 && now_kn == 1) { mode++; } now_kn = last_kn; if (mode == 8) mode = 0; setMode(mode); }