@Newbie001

Как включать/выключать лазер по нажатию кнопки?

Это скетч управления кнопкой лазером KY-008 по типу включения/выключения. После включения с помощью нажатия кнопки лазер должен быть включенным, пока с помощью еще одного нажатия не выключится.
Вот мой код, который не сработал:
const int LaserPin = 3;
const int ButtonPin = 4;
int CurrentButtonState;
int LastButtonState;
void setup() {

pinMode(ButtonPin, INPUT);
pinMode(LaserPin, OUTPUT);
}
void loop() {
  CurrentButtonState=LastButtonState;
  CurrentButtonState = digitalRead(ButtonPin);
  if(LastButtonState == HIGH && CurrentButtonState == LOW) {
      Serial.println("On");

      if(digitalRead(ButtonPin) == HIGH)
      digitalWrite(LaserPin, LOW);

      else
      digitalWrite(LaserPin, HIGH);

}}
  • Вопрос задан
  • 201 просмотр
Решения вопроса 1
@AlbertForest
const int LaserPin = 3;
const int ButtonPin = 4;
bool LaserState = false;
bool ButtonState = false;
void setup() {

  pinMode(ButtonPin, INPUT_PULLUP);
  pinMode(LaserPin, OUTPUT);
}
void loop() {
  if (!ButtonState && digitalRead(ButtonPin)){ // Если кнопка нажата, а прошлый статус - 0
    delay(10); // убеждаемся что это не шум
    if (digitalRead(ButtonPin)){
      LaserState = !LaserState; // меняем статус лазера
      digitalWrite(LaserPin, LaserState); // устанавливаем
      ButtonState = true; // запоминаем состояние кнопки
    }
  }
  if(!digitalRead(ButtonPin) && ButtonState){ // Если кнопка опущена а ее статус 1 - меняем статус
    ButtonState = false;
  }
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@evgeniy_lm
i3a4em уже исправил вашу ошибку, повторятся не буду, а вот объяснять семилетнему ребенку такие вещи проще используя tinkercad или s4a. В таком возрасте складывать кубики понятнее чем писать мудреные слова
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы