Вопрос по RGB светодиоду

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

  1. Eragon

    Eragon Нерд

    Всем доброго времени суток! Вопрос такой: Хочу сделать так чтобы при уменьшении яркости первого цвета плавно зажигался следующий и так далее все 3 цвета. Накидал вот такой код:
    Код (C++):

                  for(int i=0; i<256;i++)
                 {
                   analogWrite(LED_R,i);
                   delay(15);
                 }
                  for(int i=255;i>=0;i--)
                   {
                   analogWrite(LED_R,i);
                   int val = i;
                   int level = map(val,i,0,0,255);
                   analogWrite(LED_G,level);

                   delay(15);
                   }
    Но работать это не хочет(( Но... Если написать
    Код (C++):
    int level = map(val,i,0,i,255);
    Красный начинает набирать яркость(первый цикл выполняется как надо) Дальше зажигается зелёный и гаснут они уже вместе. Подскажите почему не хочет работать функция MAP??? В чём тут подвох???
     
  2. rkit

    rkit Гуру

    Код (C++):
                  analogWrite(LED_R,i);
                   analogWrite(LED_G,255-i);
     
  3. Eragon

    Eragon Нерд

    Благодарствую, почему-то на ум первым делом пришло мапить i, оказалось всё ещё проще...))
     
  4. Eragon

    Eragon Нерд

    Код (C++):
             

    for(int i=0; i<255;i++)
    {
      analogWrite(LED_R,i);
      delay(15);
    }

    for(int i=255;i>=0;i--)
    {
      analogWrite(LED_R,i);
      analogWrite(LED_B,255-i);
      delay(15);
    }

    for(int i=255;i>=0;i--)
    {
       analogWrite(LED_B,i);
       analogWrite(LED_G,255-i);
        delay(15);
    }

    for(int i=255;i>=0;i--)
    {
      analogWrite(LED_G,i);
      delay(15);
    }
     
    Вот, что получилось, работает хорошо. Конечно это не критично, но всё же хочу спросить... Возможно ли упрощение этого кода без потери функционала и как можно избавится от delay в циклах при помощи функции millis???
     
    Последнее редактирование: 5 апр 2017
  5. qwone

    qwone Гик

    Ну упрощение я бы не сказал Полный пакет здесь https://yadi.sk/d/-8OnW-TS3GZmyM
    А так головной файл тут
    Код (C++):
    /*R_led_v2.ino
    */

    #include "Cl_analogOut.h"
    Cl_analogOut Out[] = {3, 5, 6, 9, 10, 11};// выводы 3, 5, 6, 9, 10, 11 сделать ШИМ выходами
    #include "Cl_PWM_led.h"
    Cl_PWM_led * PWM_led[] = {
      new Cl_PWM_led(& Out[0]),
      new Cl_PWM_led(& Out[1]),
      new Cl_PWM_led(& Out[2]),
      new Cl_PWM_led(& Out[3]),
      new Cl_PWM_led(& Out[4]),
      new Cl_PWM_led(& Out[5])
    };
    void setup() {
      for (byte i = 0; i < 6; ++i)PWM_led[i]->setup();
    }

    void loop() {
      for (byte i = 0; i < 6; ++i)PWM_led[i]->loop();
    }