Несколько кнопок для управления одним и тем же светодиодом в разное время.

Я только изучаю Arduino, это, безусловно, кривая обучения.

Использование встроенного светодиода Я хочу использовать две кнопки, чтобы светодиод мигал в разное время.

Я не уверен, чего не хватает в коде, так как нажатие BUTTON2 дает то же время, что и BUTTON.

Мы будем очень признательны за любую помощь.

 const byte BUTTON = 2;
const byte BUTTON2 = 3;
const byte LED = 13;

unsigned long buttonPushedMillis;
unsigned long ledTurnedOnAt;
unsigned long turnOnDelay = 500;
unsigned long turnOffDelay = 500;
unsigned long turnOnDelay2 = 1000;
unsigned long turnOffDelay2 = 1000;
bool ledReady = false;
bool ledState = false;

void setup() {
  pinMode(BUTTON, INPUT_PULLUP);
  pinMode(BUTTON2, INPUT_PULLUP);
  pinMode(LED, OUTPUT);
  digitalWrite(LED, LOW);
}

void loop() {
  unsigned long currentMillis = millis();
  if (digitalRead(BUTTON) == LOW) {
    delay(50);
    buttonPushedMillis = currentMillis;
    ledReady = true;
  }
  if (ledReady) {
    if ((unsigned long)(currentMillis - buttonPushedMillis) >= turnOnDelay) {
      digitalWrite(LED, HIGH);
      ledState = true;
      ledTurnedOnAt = currentMillis;
      ledReady = false;
    }
  }
  if (ledState) {
    if ((unsigned long)(currentMillis - ledTurnedOnAt) >= turnOffDelay) {
      ledState = false;
      digitalWrite(LED, LOW);
    }
  }
  {
    unsigned long currentMillis = millis();
    if (digitalRead(BUTTON2) == LOW) {
      delay(50);
      buttonPushedMillis = currentMillis;
      ledReady = true;
    }
    if (ledReady) {
      if ((unsigned long)(currentMillis - buttonPushedMillis) >= turnOnDelay2) {
        digitalWrite(LED, HIGH);
        ledState = true;
        ledTurnedOnAt = currentMillis;
        ledReady = false;
      }
    }
    if (ledState) {
      if ((unsigned long)(currentMillis - ledTurnedOnAt) >= turnOffDelay2) {
        ledState = false;
        digitalWrite(LED, LOW);
      }
    }
  }
}

\\

, 👍1

Обсуждение

Пожалуйста, правильно отформатируйте свой код (отступите все 4 начальных символа и завершите его тремя обратными галочками в отдельной строке)., @Majenko


1 ответ


1

Вы слишком усложняете свою программу, что вредит ей.

Вместо того, чтобы менять свой блинк-код в зависимости от того, какая кнопка нажата, просто заставьте кнопку изменять параметры блинк-кода и придерживайтесь только одного блинк-кода.

Это означает наличие только одного набора переменных мигания, которые использует ваш код мигания, а затем код вашей кнопки просто меняет значения, содержащиеся в этих переменных.

,