нужна помощь! Скетч не работает должным образом

Тема в разделе "Arduino & Shields", создана пользователем Evgen-82, 1 сен 2015.

  1. Evgen-82

    Evgen-82 Нерд

    Здравствуйте, требуется небольшая помощь, написал код скетча, но он почему-то не работает должным образом, а нужно следующее, 4 светодиода и 1 кнопка без фиксации, и нужно этой кнопкой менять режим работы программы этих светодиодов, допустим:
    1 нажатие - Бегущий огонь.
    2 нажатие - Бегущая тень
    3 нажатие - Мигают все светодиоды.
    4 нажатие - Плавное зажигание и гашение всех светодиодов
    вот как-то так, код такой


    int button = 10;
    int ledcount = 4;
    int leds[4] = {4, 5, 6, 9};
    int mode = 1;//номер режима
    boolean currButtState = false;
    boolean prevButtState = false;
    boolean pwmMode = false;
    int pwmValue = 0;
    void setup()
    {
    for (int i = 0; i < ledcount; i++)
    {
    pinMode(i, OUTPUT);
    }
    pinMode(button, INPUT_PULLUP);
    }
    void loop()
    {
    currButtState = debounce(prevButtState);
    if(prevButtState == HIGH && currButtState == LOW) mode++;
    if(mode > 4) mode = 1;
    switch (mode)
    {
    case 3:
    pwm(); break;
    case 4:
    blink(); break;
    case 2:
    lightflash(); break;
    case 1:
    darkflash(); break;
    }
    }
    boolean debounce(boolean prevState)
    {
    boolean currState = digitalRead(button);
    if (currState != prevState)
    {
    delay(5);
    currState = digitalRead(button);
    }
    return currState;
    }
    void darkflash()
    {
    for (int i = 0; i < ledcount; i++)
    {
    digitalWrite(leds, HIGH);
    }
    digitalWrite(leds[0], LOW);
    delay(100);
    for (int j = 1; j < ledcount; j++)
    {
    digitalWrite(leds[j], LOW);
    digitalWrite(leds[j - 1], HIGH);
    delay(100);
    }
    }
    void lightflash()
    {
    for (int i = 0; i < ledcount; i++)
    {
    digitalWrite(leds, LOW);
    }
    digitalWrite(leds[0], HIGH);
    delay(100);
    for (int j = 1; j < ledcount; j++)
    {
    digitalWrite(leds[j], HIGH);
    digitalWrite(leds[j - 1], LOW);
    delay(100);
    }
    }
    void blink()
    {
    for (int i = 0; i < ledcount; i++)
    {
    digitalWrite(leds, LOW);
    }
    delay(500);
    for (int i = 0; i < ledcount; i++)
    {
    digitalWrite(leds, HIGH);
    }
    delay(500);
    }
    void pwm()
    {
    if (pwmValue == 255) pwmMode = false;
    if (pwmValue == 0) pwmMode = true;
    for (int i = 0; i < ledcount; i++)
    {
    analogWrite(leds, pwmValue);
    delay(10);
    }
    if(pwmMode) pwmValue++;
    else pwmValue--;
    }
     

    Вложения:

    • Снимок.JPG
      Снимок.JPG
      Размер файла:
      127,3 КБ
      Просмотров:
      415
  2. Unixon

    Unixon Оракул Модератор

    Код (Text):

    void setup()
    {
      for (int i = 0; i < ledcount; i++)
      {
        pinMode(leds[i], OUTPUT); // (!)
      }
      pinMode(button, INPUT_PULLUP);
    }

    // ...

    void loop()
    {
      prevButtState = currButtState; // (!)
      currButtState = debounce(prevButtState);
      if(prevButtState == HIGH && currButtState == LOW) mode++;
      if(mode > 4) mode = 1;
      switch (mode)
      {
        case 3:
          pwm(); break;
        case 4:
          blink(); break;
        case 2:
          lightflash(); break;
        case 1:
          darkflash(); break;
      }
    }

    // ...
     
     
  3. Evgen-82

    Evgen-82 Нерд

    Ругается
     
  4. Evgen-82

    Evgen-82 Нерд

    Все, нашел ошибку, спасибо, сейчас проверю
     
  5. Evgen-82

    Evgen-82 Нерд

    Благодарю, все получилось, все работает!!!! ТЕМА ЗАКРЫТА!!!