Потенциометр + RGB светодиод

Тема в разделе "Arduino & Shields", создана пользователем inspirer, 3 фев 2016.

  1. Onkel

    Onkel Гуру

    цикл был как пример, прямо по вашей задаче я в общем уже ответил
    тут l=analogRead(аналоговый вход, куда подключен вывод потенциометра)

    и выводите (например в линейном режиме)
    analogWrite (RLED, r*8);

    analogWrite(GLed, min(g*8,255-r));
    analogWrite(BLed,255-8*r-min(g*8,255-r));


    можно и на три координаты разложить (ну про минусы я писал)
    analogWrite(RLED,25*l/100);
    analogWrite(GLED, 25*((l%100)/10) );
    analogWrite(BLED,25*(l%10))
     
    inspirer нравится это.
  2. inspirer

    inspirer Нуб


    а как быть с потенциометром? как его включить в работу?
     
  3. Onkel

    Onkel Гуру

    прямо в начале
    loop()
    {
    l=analogRead(аналоговый вход, куда подключен вывод потенциометра);
    // а тут уже код 2х или 3х мерного растра
    delay(100); // для порядку
    }
     
  4. Kirkazon

    Kirkazon Нерд

    Я так делал

    Код (C++):
    #define RED_PIN 9
    #define GREEN_PIN 10
    #define BLUE_PIN 11
    #define POT_PIN A0

    void setup() {
    pinMode(RED_PIN, OUTPUT);
    pinMode(GREEN_PIN, OUTPUT);
    pinMode(BLUE_PIN, OUTPUT);
    pinMode(POT_PIN, INPUT);
    }

    void loop() {
      int rotation = analogRead(POT_PIN);
      int i = map(rotation, 0, 1023, 0, 765);
      int red;
      int green;
      int blue;
     
    if ( i <= 255) {
      red = 255 - i;
      green = i;
      blue = 0;
    }
    else if (i <= 511) {
      red = 0;
      green = 255 - (i - 256);
      blue = i - 256;
    }
    else if ( i <= 765) {
      red = i - 512;
      green = 0;
      blue = 255 - (i - 512);
    }
    analogWrite(RED_PIN, red);
    analogWrite(GREEN_PIN, green);
    analogWrite(BLUE_PIN, blue);
    }
     
    inspirer нравится это.
  5. inspirer

    inspirer Нуб

    спасибо, всё никак не время не выделю для реализации ((
     
  6. Sindbad

    Sindbad Гик

    Ну да, если верно утверждение, что белый и черный это один и тот же цвет, только с разной яркостью, то достаточно двух потенциометров. Боюсь, другие люди не придерживаются такого определения понятия "цвет".
     
  7. Onkel

    Onkel Гуру

     
  8. Onkel

    Onkel Гуру

    Черный - это только одна точка. Задачи дать черный цвет не было. У меня точки {0.0.0} нет в множестве. Все остальные точки по цветам, 1024 точки, более- менее равномерно распределенные, мы получим. И кстати, если уж совсем буквоедски подходить- разве точки {250.250.250} и {251.251.251}- это разные цвета?
     
    Последнее редактирование: 11 фев 2016
  9. inspirer

    inspirer Нуб

    очень понравился метод реализации, возможно не бесчисленно большое кол-во цветов, но работает здорово, спасибо за помощь.

    попробовал этот способ. сначала с двумя растрами, затем с тремя. Цветов интуитивно больше, но переключение происходит хаотично, нежели от способа выше и постоянно моргает, хотя наверное меня уже об этом и предупреждали)) также ещё происходит моргание диода разными цветами при остановке вращения, с чем именно связано так и не понял. Как и было сказано, это наверное предназначен код больше для 2 потенциометров или трёх, чтобы работало корректно, но у меня он только один пока.

    кому интересно, вот ссылки на видео, что получилось. правда всю палитру не заценить, так как свет слишком яркий для камеры телефона, но всё равно суть понятно.

    https://cloud.mail.ru/public/EpXG/Wt3NPFQTT - вариант Kirkazon
    https://cloud.mail.ru/public/EjY3/iWfMReUqS - вариант Onkel (2 растра)

    С 3 растрами тоже записал, но картина примерно та же. только есть ещё крайнее положение потенциометра, когда диод выключен совсем)

    код Kirkazon есть, выложу код, который помог написать Onkel, может кто найдёт ошибки и подскажет
    Код (C++):
    #define RED_PIN 9
    #define GREEN_PIN 10
    #define BLUE_PIN 11
    #define POT_PIN A0

    void setup() {
    pinMode(RED_PIN, OUTPUT);
    pinMode(GREEN_PIN, OUTPUT);
    pinMode(BLUE_PIN, OUTPUT);
    pinMode(POT_PIN, INPUT);
    }

    void loop() {
    int l=analogRead(POT_PIN);
    delay(100);
    int r=l/32;
    int g=l%32;

    analogWrite(RED_PIN,25*l/100);
    analogWrite(GREEN_PIN, 25*((l%100)/10) );
    analogWrite(BLUE_PIN,25*(l%10));
    }
     
  10. Onkel

    Onkel Гуру

    посмотрите, не скачет ли показание ацп l=analogRead(POT_PIN), больше моргать нечему.
     
  11. inspirer

    inspirer Нуб

    через мониторинг порта? или через эмуляция осциллографа?
     
  12. Onkel

    Onkel Гуру

    в этом примере все цвета - двухцветные, rg rb и gb, собственно rgb цветов (где r>0 g> 0 b>0) нет.
     
  13. Onkel

    Onkel Гуру

    наверное на порт можно выводить как l, так и значения цветов.