Нужна помощь. Тактовая кнопка+LED

Тема в разделе "Arduino & Shields", создана пользователем Obi_Van, 5 дек 2014.

  1. Obi_Van

    Obi_Van Нуб

    Ребята, привет! ;)
    Самостоятельно изучаю схемотехнику, андруино и решил немного побаловаться светодиодами.
    Помогите, пожалуйста, в решении задачи.
    Имеются три светодиода (красный, желтый и зеленый) и тактовая кнопка. При каждом нажатии кнопки один светодиод гаснет, а другой загорается и так по очереди.
    Схему собрал. Набросал алгоритм. Приступил к написанию скетча и.. не получается.:mad:

    Предполагаю не получается потому что идет зацикливание, однако у меня же стоит цикл IF.
    В общем я в растерянности.
    Код (Text):
    #include <Bounce.h>

    #define G_LED 2
    #define Y_LED 4
    #define R_LED 7
    #define BUTTON 12

    int G_LED_VAL =0;
    int Y_LED_VAL =0;
    int R_LED_VAL =0;

    Bounce klik = Bounce (BUTTON, 200);

    void setup ()
    {
      pinMode (BUTTON, INPUT);
      pinMode (G_LED, OUTPUT);
      pinMode (Y_LED, OUTPUT);
      pinMode (R_LED, OUTPUT);
    }


    void loop ()
    {
    if (klik.update ())
    {
      if (G_LED_VAL == HIGH) //если ЗЕЛЕНЫЙ ВКЛ, то его ГАСИМ, ЖЕЛТЫЙ ВКЛ
      {
        G_LED_VAL=LOW;
        Y_LED_VAL=HIGH;
        R_LED_VAL=LOW;
       
        //digitalWrite (G_LED, G_LED_VAL);
        //digitalWrite (Y_LED, Y_LED_VAL);
        //digitalWrite (R_LED, R_LED_VAL);
       
      }
     
      if (G_LED_VAL != HIGH) //если ЗЕЛЕНЫЙ ВЫКЛ
      {
        if (Y_LED_VAL == HIGH) //если ЖЕЛТЫЙ ВКЛ, то его гасим, КРАСНЫЙ ВКЛ
        {
          G_LED_VAL=LOW;
          Y_LED_VAL=LOW;
          R_LED_VAL=HIGH;
         
        // digitalWrite (G_LED, G_LED_VAL);
        // digitalWrite (Y_LED, Y_LED_VAL);
        // digitalWrite (R_LED, R_LED_VAL);
        }
        if (Y_LED_VAL != HIGH) //если ЖЕЛТЫЙ ВЫКЛ
        {
          if (R_LED_VAL == HIGH) // если КРАСНЫЙ ВКЛ, то его гасим, ЗЕЛЕНЫй ВКЛ
          {
            G_LED_VAL=HIGH;
            Y_LED_VAL=LOW;
            R_LED_VAL=LOW;
           
          // digitalWrite (G_LED, G_LED_VAL);
          // digitalWrite (Y_LED, Y_LED_VAL);
          // digitalWrite (R_LED, R_LED_VAL);
          }
          else // если КРАСНЫЙ ВЫКЛ, то КРАСНЫЙ ВКЛ
          {
            G_LED_VAL=LOW;
            Y_LED_VAL=LOW;
            R_LED_VAL=HIGH;
           
          // digitalWrite (G_LED, G_LED_VAL);
          // digitalWrite (Y_LED, Y_LED_VAL);
          // digitalWrite (R_LED, R_LED_VAL);
          }
        }
      }
    digitalWrite (G_LED, G_LED_VAL);
    digitalWrite (Y_LED, Y_LED_VAL);
    digitalWrite (R_LED, R_LED_VAL);
    }

    }
    IMG_20141205_110235.jpg
     
  2. Код (Text):
    void UpdateClick()

    {
      boolean changed = debouncer.update();
      if (changed)
      {
        int value = debouncer.read();
        if (value == HIGH)
        {
          buttonState = 0;
          ButtonCounter=ButtonCounter+1; //Счетчик нажатий
        }
        else {    
          buttonState = 1;
          buttonPressTimeStamp = millis();
        }
      }
    }
    Сделай со счетчиком и проверяй его.

    Если = 1 то включай зеленый
    Если = 2 то включай желтый
    Если =3 то включай красный

    Если включен красный и нажали на кнопку, обнуляй счетчик, что бы включился зеленый.

    Используй библиотеку Bounce2.h
     
  3. Obi_Van

    Obi_Van Нуб

    Спасибо за скорый ответ, отзывчивость .
    Думал про счетчик кнопок, но как реализовать - не знал. Спасибо за пример. С дополнительными модулями и функциями пока не встречался.
    Почитал еще инет - узнал, что есть библиотеки для опросов кнопок.
    В общем: есть вектор дальнейшего познания.