RGB светодиод с режимом плавного увеличения яркости

Тема в разделе "Arduino & Shields", создана пользователем Shura_krivie_ruki, 16 июн 2018.

  1. Спасибо! Разобрался . А можно поподробнее про прерывание для кнопки? Я если честно не особо понимаю в какую сторону копать чтобы кнопки работали мгновенно.
     
    NikitOS нравится это.
  2. Всем спасибо за помощь ! Режим освоил )
    Не разобрался только с прерыванием и более точным получением информации в мониторе порта.
    В итоге режимы переключаются 3 секундным зажатием кнопки.
    Пойду осваивать следующих главу книги!)
    Что получилось
    Код (C++):
    const int BLED=9;
    const int GLED=10;
    const int RLED=11;
    const int LED=5;
    const int BUTTON=2;
    boolean lastButton = LOW;
    boolean currentButton = LOW;
    int ledMode = 0;

    void setup()
    {
    Serial.begin(115200);
    pinMode(BLED, OUTPUT);
    pinMode(GLED, OUTPUT);
    pinMode(RLED, OUTPUT);
    pinMode(LED, OUTPUT);
    pinMode(BUTTON, INPUT);
    }
    boolean debounce(boolean last)
    {
    boolean current = digitalRead(BUTTON);
    if (last != current)
    {
    delay(5);
    current = digitalRead(BUTTON);
    return current;
    }
    }
    void setMode(int mode)
    {
    if (mode == 1)
    {
    analogWrite(LED, LOW);
    digitalWrite(RLED, HIGH);
    digitalWrite(GLED, LOW);
    digitalWrite(BLED, LOW);
    }
    else if (mode == 2)
    {
    digitalWrite(RLED, LOW);
    digitalWrite(GLED, HIGH);
    digitalWrite(BLED, LOW);
    }
    else if (mode == 3)
    {
    digitalWrite(RLED, LOW);
    digitalWrite(GLED, LOW);
    digitalWrite(BLED, HIGH);
    }
    else if (mode == 4)
    {
    analogWrite(RLED, 127);
    analogWrite(GLED, 0);
    analogWrite(BLED, 127);
    }
    else if (mode == 5)
    {
    analogWrite(RLED, 0);
    analogWrite(GLED, 127);
    analogWrite(BLED, 127);
    }
    else if (mode == 6)
    {
    analogWrite(RLED, 127);
    analogWrite(GLED, 127);
    analogWrite(BLED, 0);

    }
    else if (mode == 7)
    {
    analogWrite(RLED, 85);
    analogWrite(GLED, 85);
    analogWrite(BLED, 85);
    }
    else if(mode == 8)
    {
    analogWrite(RLED, LOW);
    analogWrite(GLED, LOW);
    analogWrite(BLED, LOW);
    for (int i=0; i<256; i=i+2)
    {
    analogWrite(LED, i);
    delay(15);
    }
    for (int i=255; i>=0; i=i-2)
    {
    analogWrite(LED, i);
    delay(15);
    }
    }
    else if (mode == 9)
    {
    analogWrite(LED, LOW);
    for (int i=0; i<256; i=i+2)
    {
    analogWrite(RLED, i);
    analogWrite(GLED, i);
    analogWrite(BLED, i);
    delay(15);
    }
    }
    else if (mode == 10)
    {
    analogWrite(LED, LOW);
    for (int i=255; i>=0; i=i-2)
    {
    analogWrite(RLED, i);
    analogWrite(GLED, i);
    analogWrite(BLED, i);
    delay(15);
    }
    }
    else if (mode == 11)
    {
    for (int i=0; i<256; i=i+5)
    {
    analogWrite(RLED, i);
    analogWrite(GLED, i);
    analogWrite(BLED, i);
    analogWrite(LED, i);
    delay(20);
    }
    }
    else if (mode == 12)
    {
    for (int i=255; i>=0; i=i-5)
    {
    analogWrite(RLED, i);
    analogWrite(GLED, i);
    analogWrite(BLED, i);
    analogWrite(LED, i);
    delay(20);
    }
    }                                                
    else
    {
    analogWrite(RLED, LOW);
    analogWrite(GLED, LOW);
    analogWrite(BLED, LOW);
    analogWrite(LED, LOW);
    }

    }
    void loop()
    {
    {
    Serial.print(ledMode);
    Serial.println();
                    delay(500);  
    Serial.print("mode = rgb");
    Serial.println();
                    delay(1100);
                                 
                    }

    currentButton = debounce(lastButton);

    if (lastButton == LOW && currentButton == HIGH)
    {
    ledMode++;
    }
    lastButton = currentButton;
    if (ledMode == 14) ledMode = 0;
    setMode(ledMode);
    }
     
     
    NikitOS нравится это.