Смысл такой : при нажатии на кнопку серва должна повернуться на определённый угол(пусть будет 180),при нажатии на неё же(кнопку). вернуться в первоначальное состояние(0 градусов).У Джереми в видеоуроке 2 есть похожий скетч ,но только со светодиодом,поменял кое что,но что-то не так... Объясните что я не так сделал.Заранее благодарен. Код (C): #include <Servo.h> Servo myservo; int pos = 0;//Первое положение сервы int pos1 = 180;//Второе положение сервы int switchPin = 2;//Кнопка подключена к D2 boolean lastButton = LOW; boolean currentButton = LOW; boolean servoMax = false; void setup() { myservo.attach(9);//Серва подключена к D9 pinMode(switchPin,INPUT);//Кнопка как вход myservo.write(pos);//Серва встаёт при стакрте на 0' } boolean debounce(boolean last) { boolean current = digitalRead(switchPin); if (last !=current) { delay(5); current = digitalRead(switchPin); } return current; } void loop() { currentButton = debounce(lastButton); if (lastButton == LOW && currentButton == HIGH) { servoMax = !servoMax; } lastButton = currentButton; myservo.write(pos1); }
Вы в последней строке всегда записываете значение 180, независимо от того, что и как было нажато. Видимо, нужно сделать как-то так: Код (C): myservo.write(servoMax ? 0 : 180);
Ранее в коде Вы установили переменную servoMax в состояние true или false. Строчка эквивалентна такой записи: Код (C): if(servoMax == true) myservo.write(0); else myservo.write(180); А вот статья про тернарный условный оператор.