Помогите понять принцип работы каждого диода на ленте

souelle
Offline
Зарегистрирован: 25.11.2018

Дана лента 40 диодов

Цель - при подачи питания на разные пины (ардуины) - на ленте загорается определенный диод определенным цветом.

 

код без действия, все просто горит ничего не происход , вообщем все как надо - при подаче на пин 8 = лента включается. каждому диоду свой цвет. 

#include <Adafruit_NeoPixel.h>             // подключаем библиотеку
// how many diods on strip

const int lentusa = 40;



const int alllightsout = 7;



Adafruit_NeoPixel strip3 = Adafruit_NeoPixel(lentusa,alllightsout, NEO_GRB + NEO_KHZ800);    // output 7

void setup() {
}

void loop() {

if (digitalRead(8) == HIGH)
  {
  
digitalWrite(alllightsout, HIGH);
/
    strip3.setPixelColor(0, 0, 0, 0);
    strip3.setPixelColor(1, 0, 0, 0);
    strip3.setPixelColor(2, 255, 140, 0);
    //  
    strip3.setPixelColor(3, 0, 0, 0);
    strip3.setPixelColor(4, 0, 0, 0);
    strip3.setPixelColor(5, 255, 140, 0);
    // 
    strip3.setPixelColor(6, 255, 0, 0);
    strip3.setPixelColor(7, 255, 0, 0);
    //  
    strip3.setPixelColor(8, 255, 0, 0);
    strip3.setPixelColor(9, 255, 0, 0);
    strip3.setPixelColor(10, 255, 0, 0);
    //  
    strip3.setPixelColor(11, 255, 0, 0);
    strip3.setPixelColor(12, 255, 0, 0);
    strip3.setPixelColor(13, 255, 0, 0);
    //  середина салона
    strip3.setPixelColor(14, 255, 0, 0);
    strip3.setPixelColor(15, 255, 0, 0);
    strip3.setPixelColor(16, 255, 0, 0);
    //   
    strip3.setPixelColor(17, 255, 0, 0);
    strip3.setPixelColor(18, 255, 0, 0);
    strip3.setPixelColor(19, 255, 0, 0);
    // 
    strip3.setPixelColor(20, 255, 0, 0);
    strip3.setPixelColor(21, 255, 0, 0);
    strip3.setPixelColor(22, 255, 0, 0);
    //
    strip3.setPixelColor(23, 255, 0, 0);
    strip3.setPixelColor(24, 255, 0, 0);
    strip3.setPixelColor(25, 255, 0, 0);
    // 
    strip3.setPixelColor(26, 0, 0, 0);
    strip3.setPixelColor(27, 0, 0, 0);
    strip3.setPixelColor(28, 255, 140, 0);
    //  
    strip3.setPixelColor(29, 0, 0, 0);
    strip3.setPixelColor(30, 0, 0, 0);
    strip3.setPixelColor(31, 255, 140, 0);
    // 
    strip3.setPixelColor(32, 255, 0, 0);
    strip3.setPixelColor(33, 255, 0, 0);
    strip3.setPixelColor(34, 255, 0, 0);
    strip3.setPixelColor(35, 255, 0, 0);
    //  
    strip3.setPixelColor(36, 255, 0, 0);
    strip3.setPixelColor(37, 255, 0, 0);
    strip3.setPixelColor(38, 255, 0, 0);
    strip3.setPixelColor(39, 255, 0, 0);
    strip3.begin();
    strip3.show();
  }

if ( digitalRead(8) == LOW)
    {
      for (int i = 0; i < lentusa + 1; i++)
      {
    
           
    strip3.setPixelColor(i, strip3.Color(0, 0, 0));
    strip3.begin();
    strip3.show();
      }
    }



  
}
    

 

8 пин - полностью включает ленту,если на него нет ХАЙ , то она не должна гореть вообще.. 

 

Вопрос. Как дописать правильно, что бы например при подаче на ПИН 6 - определенныедиоды загорались другими цветами ? не работает так: 

 

 

#include <Adafruit_NeoPixel.h>             // подключаем библиотеку
// how many diods on strip

const int lentusa = 40;



const int alllightsout = 7;



Adafruit_NeoPixel strip3 = Adafruit_NeoPixel(lentusa,alllightsout, NEO_GRB + NEO_KHZ800);    // output 7

void setup() {
}

void loop() {

if (digitalRead(8) == HIGH)
  {
  
digitalWrite(alllightsout, HIGH);
/
    strip3.setPixelColor(0, 0, 0, 0);
    strip3.setPixelColor(1, 0, 0, 0);
    strip3.setPixelColor(2, 255, 140, 0);
    //  
    strip3.setPixelColor(3, 0, 0, 0);
    strip3.setPixelColor(4, 0, 0, 0);
    strip3.setPixelColor(5, 255, 140, 0);
    // 
    strip3.setPixelColor(6, 255, 0, 0);
    strip3.setPixelColor(7, 255, 0, 0);
    //  
    strip3.setPixelColor(8, 255, 0, 0);
    strip3.setPixelColor(9, 255, 0, 0);
    strip3.setPixelColor(10, 255, 0, 0);
    //  
    strip3.setPixelColor(11, 255, 0, 0);
    strip3.setPixelColor(12, 255, 0, 0);
    strip3.setPixelColor(13, 255, 0, 0);
    //  середина салона
    strip3.setPixelColor(14, 255, 0, 0);
    strip3.setPixelColor(15, 255, 0, 0);
    strip3.setPixelColor(16, 255, 0, 0);
    //   
    strip3.setPixelColor(17, 255, 0, 0);
    strip3.setPixelColor(18, 255, 0, 0);
    strip3.setPixelColor(19, 255, 0, 0);
    // 
    strip3.setPixelColor(20, 255, 0, 0);
    strip3.setPixelColor(21, 255, 0, 0);
    strip3.setPixelColor(22, 255, 0, 0);
    //
    strip3.setPixelColor(23, 255, 0, 0);
    strip3.setPixelColor(24, 255, 0, 0);
    strip3.setPixelColor(25, 255, 0, 0);
    // 
    strip3.setPixelColor(26, 0, 0, 0);
    strip3.setPixelColor(27, 0, 0, 0);
    strip3.setPixelColor(28, 255, 140, 0);
    //  
    strip3.setPixelColor(29, 0, 0, 0);
    strip3.setPixelColor(30, 0, 0, 0);
    strip3.setPixelColor(31, 255, 140, 0);
    // 
    strip3.setPixelColor(32, 255, 0, 0);
    strip3.setPixelColor(33, 255, 0, 0);
    strip3.setPixelColor(34, 255, 0, 0);
    strip3.setPixelColor(35, 255, 0, 0);
    //  
    strip3.setPixelColor(36, 255, 0, 0);
    strip3.setPixelColor(37, 255, 0, 0);
    strip3.setPixelColor(38, 255, 0, 0);
    strip3.setPixelColor(39, 255, 0, 0);
    strip3.begin();
    strip3.show();
  }



iif (digitalRead(6) == HIGH and digitalRead(8) == HIGH)
  {
     digitalWrite(alllightsout, HIGH);
      //
      strip3.setPixelColor(0, 0, 0, 0);
      strip3.setPixelColor(1, 0, 0, 0);
      strip3.setPixelColor(2, 255, 215, 0);
      //  
      strip3.setPixelColor(3, 0, 0, 0);
      strip3.setPixelColor(4, 0, 0, 0);
      strip3.setPixelColor(5, 255, 215, 0);
      // 
      strip3.setPixelColor(6, 255, 0, 0);
      strip3.setPixelColor(7, 255, 0, 0);
      //  
      strip3.setPixelColor(8, 255, 0, 0);
      strip3.setPixelColor(9, 255, 0, 0);
      strip3.setPixelColor(10, 255, 0, 0);
      //  
      strip3.setPixelColor(11, 255, 0, 0);
      strip3.setPixelColor(12, 255, 0, 0);
      strip3.setPixelColor(13, 255, 0, 0);
      //  
      strip3.setPixelColor(14, 255, 0, 0);
      strip3.setPixelColor(15, 255, 0, 0);
      strip3.setPixelColor(16, 255, 0, 0);
      //  
      strip3.setPixelColor(17, 255, 0, 0);
      strip3.setPixelColor(18, 255, 0, 0);
      strip3.setPixelColor(19, 255, 0, 0);
      // 
      strip3.setPixelColor(20, 255, 215, 0);
      strip3.setPixelColor(21, 255, 215, 0);
      strip3.setPixelColor(22, 255, 215, 0);
      // 
      strip3.setPixelColor(23, 255, 0, 0);
      strip3.setPixelColor(24, 255, 0, 0);
      strip3.setPixelColor(25, 255, 0, 0);
      // 
      strip3.setPixelColor(26, 0, 0, 0);
      strip3.setPixelColor(27, 0, 0, 0);
      strip3.setPixelColor(28, 255, 140, 0);
      //  
      strip3.setPixelColor(29, 0, 0, 0);
      strip3.setPixelColor(30, 0, 0, 0);
      strip3.setPixelColor(31, 255, 140, 0);
      // 
      strip3.setPixelColor(32, 255, 215, 0);
      strip3.setPixelColor(33, 255, 215, 0);
      strip3.setPixelColor(34, 255, 0, 0);
      strip3.setPixelColor(35, 255, 0, 0);
      //  
      strip3.setPixelColor(36, 255, 0, 0);
      strip3.setPixelColor(37, 255, 0, 0);
      strip3.setPixelColor(38, 255, 0, 0);
      strip3.setPixelColor(39, 255, 0, 0);

strip3.begin();
    strip3.show();
  }

  

if ( digitalRead(8) == LOW)
    {
      for (int i = 0; i < lentusa + 1; i++)
      {
    
           
    strip3.setPixelColor(i, strip3.Color(0, 0, 0));
    strip3.begin();
    strip3.show();
      }
    }


}
    

 

souelle
Offline
Зарегистрирован: 25.11.2018

Где может быть ошибка ? программа простая, но  у меня не выходит делать так,что бы определенные диоды меняли цвета при подачи питания на определенные пины ардуино

b707
Offline
Зарегистрирован: 26.05.2017

а что не работает?

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

для начала setup как минимум должен выглядеть так

void setup() {
  strip3.begin();
  strip3.setBrightness(50);
  strip3.show(); // Initialize all pixels to 'off'
}

 

souelle
Offline
Зарегистрирован: 25.11.2018

b707 пишет:

а что не работает?

 

Ардуина выдает разные цвета , словно не понимает что от нее хотят.. 

 

А код по структуре правильный получается ? 

что бы добавить другие пины , так же дописывать ?

 

например дам я сигнал на 5 пин, пропишу 6-ому пину лоу , и цвета определённые каждому диоду как мне нужно , когда идет питание на пин 5. - будет ли работать в такой же структуре корректно ?  А если одновременно на 6 так же приходит ? нужно прлписать пин 6 хай пин 5 хай пин 8 хай и так же каждому диоду цвет.

 

и обязательно ли прописывать все сценарии? присваивать пинам значение лоу ? мол , если там нет - а там есть - гори так.. а если и там и там есть - гори таким цветом . 

 

Будет так тоже работать корректно ? 

 

souelle
Offline
Зарегистрирован: 25.11.2018

xDriver пишет:

для начала setup как минимум должен выглядеть так

void setup() {
  strip3.begin();
  strip3.setBrightness(50);
  strip3.show(); // Initialize all pixels to 'off'
}

 

Спасибо, а брайгнесс обязательно? 

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

думаю нет, но какая яркость по умолчанию не знаю.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

дальше просто зажгите всю ленту белым, заодно проверите все диоды  и свой блок питания :)

loop {
    for (int i = 0; i < lentusa; i++)
    {
      strip3.setPixelColor(i, strip3.Color(255, 255, 255));
    }
    strip3.show();

    while(1); // пока стоп, больше ничего не делаем
}

 

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

горит ? 

souelle
Offline
Зарегистрирован: 25.11.2018

xDriver пишет:

горит ? 

 

Горит все) 

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

ок

теперь по цветам

loop {
    for (int i = 0; i < lentusa; i++)
    {
      strip3.setPixelColor(i, strip3.Color(255, 0, 0)); // красный
    }
    strip3.show();
    delay(3000);

    for (int i = 0; i < lentusa; i++)
    {
      strip3.setPixelColor(i, strip3.Color(0, 255, 0)); // зеленый
    }
    strip3.show();
    delay(3000);

    for (int i = 0; i < lentusa; i++)
    {
      strip3.setPixelColor(i, strip3.Color(0, 0, 255)); // синий
    }
    strip3.show();
    delay(3000);
}

цвета могу попутать местами, там у разных лент по разному.

 

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

ну а теперь можно и условий напихать... тока у меня уже глаза слипаются

 

arduinec
Offline
Зарегистрирован: 01.09.2015

souelle пишет:

Где может быть ошибка ?

Функция strip3.begin() должна выполняться один раз в setup().

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Уважаемый, зажгите 1 светодиод в нужном Вам цвете. Уверяю - остальное будет очень просто. 40 - это много.

"Путь в  тысячу ли начинается с первого шага" 

souelle
Offline
Зарегистрирован: 25.11.2018

mykaida пишет:

Уважаемый, зажгите 1 светодиод в нужном Вам цвете. Уверяю - остальное будет очень просто. 40 - это много.

"Путь в  тысячу ли начинается с первого шага" 

 

нужно каждому свои цвета 

bwn
Offline
Зарегистрирован: 25.08.2014

Вот когда научитесь зажигать любой из них, нужным вам цветом, тогда можно переходить к дальнейшему, приделывать ифы и прочие свистелки. Пока вы пытаетесь шаманить и являться верным последователем карго-культа. За двое прошедших суток, могли реально научиться ею управлять, уже просто методом тыка. ИМХО.

souelle
Offline
Зарегистрирован: 25.11.2018

bwn пишет:

Вот когда научитесь зажигать любой из них, нужным вам цветом, тогда можно переходить к дальнейшему, приделывать ифы и прочие свистелки. Пока вы пытаетесь шаманить и являться верным последователем карго-культа. За двое прошедших суток, могли реально научиться ею управлять, уже просто методом тыка. ИМХО.

 

 

Любой из них горит нужным мне цветом , все это пройдено , теперь мне просто нужно подключить условия - вот я и спросил как это реализовать 

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Извините, а нафига Вы  strip3.begin() и strip3.show() в цикл пихаете?

bwn
Offline
Зарегистрирован: 25.08.2014

souelle пишет:

Любой из них горит нужным мне цветом , все это пройдено , теперь мне просто нужно подключить условия - вот я и спросил как это реализовать 

Ну если вы ее полностью приручили, тогда дело за малым:

if (digitalRead(нужный пин) == HIGH или LOW, как вам надо) {
включить ленту c заданными параметрами
}

чего еще проще?

souelle
Offline
Зарегистрирован: 25.11.2018

bwn пишет:

souelle пишет:

Любой из них горит нужным мне цветом , все это пройдено , теперь мне просто нужно подключить условия - вот я и спросил как это реализовать 

Ну если вы ее полностью приручили, тогда дело за малым:

if (digitalRead(нужный пин) == HIGH или LOW, как вам надо) {
включить ленту c заданными параметрами
}

чего еще проще?

 

ну и каждому диоду ставлю другой цвет , как и выше , так ?

у меня пинов несколько, соответсвенно нужно написать иф нужный пин - ХАЙ, а другой ЛОУ, и тот ЛОУ - то гори "так" (перечесление всех диодов и их цветов, так? - в таком формате почему то горит все миксовано и не понятно.. вот и спросил об ошибках :) 

leks
Offline
Зарегистрирован: 22.10.2017

Если в управлении используется 2 пина, значит в условиях if через && нужно прописывать состояния на 2 пинах.

Перед тем как вбивать новою комбинацию свечений старую нужно выключить-погасить, либо на все пиксели вбивать новую комбинацию.

souelle
Offline
Зарегистрирован: 25.11.2018

leks пишет:

Если в управлении используется 2 пина, значит в условиях if через && нужно прописывать состояния на 2 пинах.

Перед тем как вбивать новою комбинацию свечений старую нужно выключить-погасить, либо на все пиксели вбивать новую комбинацию.

 

Значит, если у меня например 3 пина, то нужно прописывать каждую комбинацию ? и свечение каждого диода ? я правильно понял ? :)

leks
Offline
Зарегистрирован: 22.10.2017

Ну, да. Иначе старые данные по свечению остаются на пикселе - отсюда хаос свечения.

bwn
Offline
Зарегистрирован: 25.08.2014

souelle пишет:

Значит, если у меня например 3 пина, то нужно прописывать каждую комбинацию ? и свечение каждого диода ? я правильно понял ? :)

Три пина, дадут восемь комбинаций. Нужно учитывать все.