Нажатие кнопки светодиода для определенного светодиода В светодиодном шаблоне, не работающем в Arduino

что я ожидаю, как показано ниже.

Если я нажму кнопку шаблона один. затем один образец работает. Если я не нажму какую-либо конкретную светодиодную кнопку, такую как «LED_Button_two», «LED_Button_one» и т.д.. затем схема работает непрерывно. Если я нажму конкретную светодиодную кнопку между 3-секундным интервалом, то этот конкретный светодиод выключится. и загорится следующий светодиод в шаблоне

Это моя проблема.

Здесь мой скетч не дал никакого эффекта, когда я нажимаю кнопку типа "LED_Button_two" когда светодиод два включается по шаблону. Он не выключается, когда я нажимаю кнопку "LED_Button_two". или то же самое происходит с другими, такими как "LED_Button_one", "LED_Button_three" и "LED_Button_four".

Вот мой код

const int Button_pattern_1 = 2;
const int Button_pattern_2 = 3;
const int Button_pattern_stop = 4;

const int LED_Button_one = 5;
const int LED_one = 12;

const int LED_Button_two = 6;
const int LED_two = 11;

const int LED_Button_three = 7;
const int LED_three = 10;

const int LED_Button_four = 8;
const int LED_four = 9;

int buttonState_pattern_1 = 0;
int buttonState_pattern_2 = 0;
int buttonState_pattern_stop = 0;

int buttonState_LED_one = 0;
int buttonState_LED_two = 0;
int buttonState_LED_three = 0;
int buttonState_LED_four = 0;

const long Interval = 3000;

byte state = 0;

char ledState_pattern_one = 'A', ledState_pattern_two = 'A';

unsigned long previousMillis_pattern_one = 0, previousMillis_pattern_two = 0;
const long interval = 3000;

void setup() {
  // put your setup code here, to run once:

  Serial.begin(115200);

  pinMode(Button_pattern_1, INPUT);
  pinMode(Button_pattern_2, INPUT);
  pinMode(Button_pattern_stop, INPUT);

  pinMode(LED_Button_one, INPUT);
  pinMode(LED_Button_two, INPUT);
  pinMode(LED_Button_three, INPUT);
  pinMode(LED_Button_four, INPUT);

  pinMode(LED_one, OUTPUT);
  pinMode(LED_two, OUTPUT);
  pinMode(LED_three, OUTPUT);
  pinMode(LED_four, OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:

  unsigned long currentMillis = millis();

  buttonState_pattern_1 = digitalRead(Button_pattern_1);
//  Serial.println(buttonState_pattern_1);
  buttonState_pattern_2 = digitalRead(Button_pattern_2);
//  Serial.println(buttonState_pattern_2);
  buttonState_pattern_stop = digitalRead(Button_pattern_stop);
//  Serial.println(buttonState_pattern_stop);

  buttonRun();

  switch (state)
  {
    case 'a':
//      Serial.println("Pattern one running");
      pattern_one(currentMillis);
      break;

    case 'b':
//      Serial.println("Pattern two running");
      pattern_two(currentMillis);
      break;
  }
//  Serial.println(digitalRead(LED_Button_one));
//  Serial.println(digitalRead(LED_Button_two));
//  Serial.println(digitalRead(LED_Button_three));
//  Serial.println(digitalRead(LED_Button_four));
//  Serial.println("new");
}

void buttonRun()
{
  if (digitalRead(Button_pattern_1) == HIGH)
  {
    state = 'a';
  }
  if (digitalRead(Button_pattern_2) == HIGH)
  {
    state = 'b';
  }
  if (digitalRead(Button_pattern_stop) == HIGH)
  {
    Serial.println("Pattern stop");
    patternStop();
    state = 0;
  }
}

void pattern_one(unsigned long currentMillis_pattern)
{
  if (currentMillis_pattern - previousMillis_pattern_one >= interval)
  {
    previousMillis_pattern_one = currentMillis_pattern;
    if (ledState_pattern_one == 'A')
    {
      ledState_pattern_one = 'B';
      buttonState_LED_two = digitalRead(LED_Button_two);
      if (buttonState_LED_two == LOW) //Here I have used pull-up resistor that's why i have checked with 1.
      {
        Serial.print("two");
//        Serial.println(digitalRead(LED_Button_two));
        digitalWrite(LED_one, LOW);
        digitalWrite(LED_two, LOW);
        digitalWrite(LED_three, LOW);
        digitalWrite(LED_four, LOW);
      }
      else
      {
        Serial.println("button two press");
        digitalWrite(LED_one, LOW);
        digitalWrite(LED_two, HIGH);
        digitalWrite(LED_three, LOW);
        digitalWrite(LED_four, LOW);
      }
    }

    else if (ledState_pattern_one == 'B')
    {
      ledState_pattern_one = 'C';
      buttonState_LED_four = digitalRead(LED_Button_four);
      if (buttonState_LED_four == LOW) //Here I have used pull-up resistor that's why i have checked with 1.
      {
        Serial.print("four");
//        Serial.println(digitalRead(LED_Button_four));
        digitalWrite(LED_one, LOW);
        digitalWrite(LED_two, LOW);
        digitalWrite(LED_three, LOW);
        digitalWrite(LED_four, LOW);
      }
      else
      {
        Serial.println("button four press");
        digitalWrite(LED_one, LOW);
        digitalWrite(LED_two, LOW);
        digitalWrite(LED_three, LOW);
        digitalWrite(LED_four, HIGH);
      }
    }

    else if (ledState_pattern_one == 'C')
    {
      ledState_pattern_one = 'D';
      buttonState_LED_one = digitalRead(LED_Button_one);
      if (buttonState_LED_one == LOW) //Here I have used pull-up resistor that's why i have checked with 1.
      {
        Serial.print("one");
//        Serial.println(digitalRead(LED_Button_one));
        digitalWrite(LED_one, LOW);
        digitalWrite(LED_two, LOW);
        digitalWrite(LED_three, LOW);
        digitalWrite(LED_four, LOW);
      }
      else
      {
        Serial.println("button one press");
        digitalWrite(LED_one, HIGH);
        digitalWrite(LED_two, LOW);
        digitalWrite(LED_three, LOW);
        digitalWrite(LED_four, LOW);
      }
    }

    else if (ledState_pattern_one == 'D')
    {
      ledState_pattern_one = 'A';
      buttonState_LED_three = digitalRead(LED_Button_three);
      if (buttonState_LED_three == LOW) //Here I have used pull-up resistor that's why i have checked with 1.
      {
        Serial.print("three");
//        Serial.println(digitalRead(LED_Button_three));
        digitalWrite(LED_one, LOW);
        digitalWrite(LED_two, LOW);
        digitalWrite(LED_three, LOW);
        digitalWrite(LED_four, LOW);
      }
      else
      {
        Serial.println("button three press");
        digitalWrite(LED_one, LOW);
        digitalWrite(LED_two, LOW);
        digitalWrite(LED_three, HIGH);
        digitalWrite(LED_four, LOW);
      }
    }
  }
}

void pattern_two(unsigned long currentMillis_pattern)
{
  if (currentMillis_pattern - previousMillis_pattern_two >= interval)
  {
    previousMillis_pattern_two = currentMillis_pattern;
    if (ledState_pattern_two == 'A')
    {
      ledState_pattern_two = 'B';
      buttonState_LED_one = digitalRead(LED_Button_one);
      if (buttonState_LED_one != LOW) //Here I have used pull-up resistor that's why i have checked with 1.
      {
//        Serial.print("one");
//        Serial.println(digitalRead(LED_Button_one));
        digitalWrite(LED_one, HIGH);
        digitalWrite(LED_two, LOW);
        digitalWrite(LED_three, LOW);
        digitalWrite(LED_four, LOW);
      }
      else
      {
        Serial.println("button one press");
        digitalWrite(LED_one, LOW);
        digitalWrite(LED_two, LOW);
        digitalWrite(LED_three, LOW);
        digitalWrite(LED_four, LOW);
      }
    }
    else if (ledState_pattern_two == 'B')
    {
      ledState_pattern_two = 'C';
      buttonState_LED_three = digitalRead(LED_Button_three);
      if (buttonState_LED_three != LOW) //Here I have used pull-up resistor that's why i have checked with 1.
      {
//        Serial.print("three");
//        Serial.println(digitalRead(LED_Button_three));
        digitalWrite(LED_one, LOW);
        digitalWrite(LED_two, LOW);
        digitalWrite(LED_three, HIGH);
        digitalWrite(LED_four, LOW);
      }
      else
      {
        Serial.println("button three press");
        digitalWrite(LED_one, LOW);
        digitalWrite(LED_two, LOW);
        digitalWrite(LED_three, LOW);
        digitalWrite(LED_four, LOW);
      }
    }
    else if (ledState_pattern_two == 'C')
    {
      ledState_pattern_two = 'D';
      buttonState_LED_two = digitalRead(LED_Button_two);
      if (buttonState_LED_two != LOW) //Here I have used pull-up resistor that's why i have checked with 1.
      {
//        Serial.print("two");
//        Serial.println(digitalRead(LED_Button_two));
        digitalWrite(LED_one, LOW);
        digitalWrite(LED_two, HIGH);
        digitalWrite(LED_three, LOW);
        digitalWrite(LED_four, LOW);
      }
      else
      {
        Serial.println("button two press");
        digitalWrite(LED_one, LOW);
        digitalWrite(LED_two, LOW);
        digitalWrite(LED_three, LOW);
        digitalWrite(LED_four, LOW);
      }
    }
    else if (ledState_pattern_two == 'D')
    {
      ledState_pattern_two = 'A';
      buttonState_LED_four = digitalRead(LED_Button_four);
      if (buttonState_LED_four != LOW) //Here I have used pull-up resistor that's why i have checked with 1.
      {
//        Serial.print("four");
//        Serial.println(digitalRead(LED_Button_four));
        digitalWrite(LED_one, LOW);
        digitalWrite(LED_two, LOW);
        digitalWrite(LED_three, LOW);
        digitalWrite(LED_four, HIGH);
      }
      else
      {
        Serial.println("button four press");
        digitalWrite(LED_one, LOW);
        digitalWrite(LED_two, LOW);
        digitalWrite(LED_three, LOW);
        digitalWrite(LED_four, LOW);
      }
    }
  }
}
void patternStop()
{
  digitalWrite(LED_one, LOW);
  digitalWrite(LED_two, LOW);
  digitalWrite(LED_three, LOW);
  digitalWrite(LED_four, LOW);
  state = 0;
}

, 👍-1

Обсуждение

какой у вас конкретный вопрос?, @jsotola

На схеме показано отсутствие последовательных резисторов на светодиодах. Почему бы и нет?, @VE7JRO

Есть ли шанс использовать INPUT_PULLUP, чтобы вы могли исключить эти внешние резисторы?, @VE7JRO

Думали ли вы об использовании библиотеки Bounce2 для устранения дребезга кнопок?, @VE7JRO

@jsotola Это и мой вопрос, и проблема -> «Здесь мой скетч не дал никакого эффекта, когда я нажимаю кнопку, например «LED_Button_two», когда светодиод номер два включается по шаблону. Он не может выключаться, когда я нажимаю кнопку «LED_Button_two» ... или то же самое происходит с другими, такими как "LED_Button_one", "LED_Button_three" и "LED_Button_four".", @coder

@VE7JRO Я не знаю о библиотеке Bounce2. в чем тут проблема не могу понять. Я застрял здесь с прошлых нескольких дней. пожалуйста помоги., @coder


1 ответ


-2

Отличная работа над схемой! У меня есть частичный ответ и предложение для вас. Схема в том виде, в каком вы ее нарисовали, будет работать правильно, теперь программное обеспечение должно управлять ею.

На боковых схемах обычно располагаются слева направо и сверху вниз. т.е. Входы слева и выходы справа, + вверху. Мы все знаем, что это невозможно, и вы должны сделать некоторые исключения, особенно для микропроцессоров, так как они таким образом не распиновываются. Единственное, что еще нужно сделать, это, возможно, отметить, что питание подается через USB, который, как я предполагаю, находится в этой цепи.

,

Да, проблема в софте для управления им. А вы говорите, что проблема с питанием. но тут дело не в мощности., @coder

«Схема, которую вы нарисовали, будет работать правильно» ... вы забываете о токоограничивающих резисторах светодиода., @jsotola