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

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

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

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

 

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

01#include <Adafruit_NeoPixel.h>             // подключаем библиотеку
02// how many diods on strip
03 
04const int lentusa = 40;
05 
06 
07 
08const int alllightsout = 7;
09 
10 
11 
12Adafruit_NeoPixel strip3 = Adafruit_NeoPixel(lentusa,alllightsout, NEO_GRB + NEO_KHZ800);    // output 7
13 
14void setup() {
15}
16 
17void loop() {
18 
19if (digitalRead(8) == HIGH)
20  {
21   
22digitalWrite(alllightsout, HIGH);
23/
24    strip3.setPixelColor(0, 0, 0, 0);
25    strip3.setPixelColor(1, 0, 0, 0);
26    strip3.setPixelColor(2, 255, 140, 0);
27    // 
28    strip3.setPixelColor(3, 0, 0, 0);
29    strip3.setPixelColor(4, 0, 0, 0);
30    strip3.setPixelColor(5, 255, 140, 0);
31    //
32    strip3.setPixelColor(6, 255, 0, 0);
33    strip3.setPixelColor(7, 255, 0, 0);
34    // 
35    strip3.setPixelColor(8, 255, 0, 0);
36    strip3.setPixelColor(9, 255, 0, 0);
37    strip3.setPixelColor(10, 255, 0, 0);
38    // 
39    strip3.setPixelColor(11, 255, 0, 0);
40    strip3.setPixelColor(12, 255, 0, 0);
41    strip3.setPixelColor(13, 255, 0, 0);
42    //  середина салона
43    strip3.setPixelColor(14, 255, 0, 0);
44    strip3.setPixelColor(15, 255, 0, 0);
45    strip3.setPixelColor(16, 255, 0, 0);
46    //  
47    strip3.setPixelColor(17, 255, 0, 0);
48    strip3.setPixelColor(18, 255, 0, 0);
49    strip3.setPixelColor(19, 255, 0, 0);
50    //
51    strip3.setPixelColor(20, 255, 0, 0);
52    strip3.setPixelColor(21, 255, 0, 0);
53    strip3.setPixelColor(22, 255, 0, 0);
54    //
55    strip3.setPixelColor(23, 255, 0, 0);
56    strip3.setPixelColor(24, 255, 0, 0);
57    strip3.setPixelColor(25, 255, 0, 0);
58    //
59    strip3.setPixelColor(26, 0, 0, 0);
60    strip3.setPixelColor(27, 0, 0, 0);
61    strip3.setPixelColor(28, 255, 140, 0);
62    // 
63    strip3.setPixelColor(29, 0, 0, 0);
64    strip3.setPixelColor(30, 0, 0, 0);
65    strip3.setPixelColor(31, 255, 140, 0);
66    //
67    strip3.setPixelColor(32, 255, 0, 0);
68    strip3.setPixelColor(33, 255, 0, 0);
69    strip3.setPixelColor(34, 255, 0, 0);
70    strip3.setPixelColor(35, 255, 0, 0);
71    // 
72    strip3.setPixelColor(36, 255, 0, 0);
73    strip3.setPixelColor(37, 255, 0, 0);
74    strip3.setPixelColor(38, 255, 0, 0);
75    strip3.setPixelColor(39, 255, 0, 0);
76    strip3.begin();
77    strip3.show();
78  }
79 
80if ( digitalRead(8) == LOW)
81    {
82      for (int i = 0; i < lentusa + 1; i++)
83      {
84     
85            
86    strip3.setPixelColor(i, strip3.Color(0, 0, 0));
87    strip3.begin();
88    strip3.show();
89      }
90    }
91 
92 
93 
94   
95}

 

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

 

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

 

 

001#include <Adafruit_NeoPixel.h>             // подключаем библиотеку
002// how many diods on strip
003 
004const int lentusa = 40;
005 
006 
007 
008const int alllightsout = 7;
009 
010 
011 
012Adafruit_NeoPixel strip3 = Adafruit_NeoPixel(lentusa,alllightsout, NEO_GRB + NEO_KHZ800);    // output 7
013 
014void setup() {
015}
016 
017void loop() {
018 
019if (digitalRead(8) == HIGH)
020  {
021   
022digitalWrite(alllightsout, HIGH);
023/
024    strip3.setPixelColor(0, 0, 0, 0);
025    strip3.setPixelColor(1, 0, 0, 0);
026    strip3.setPixelColor(2, 255, 140, 0);
027    // 
028    strip3.setPixelColor(3, 0, 0, 0);
029    strip3.setPixelColor(4, 0, 0, 0);
030    strip3.setPixelColor(5, 255, 140, 0);
031    //
032    strip3.setPixelColor(6, 255, 0, 0);
033    strip3.setPixelColor(7, 255, 0, 0);
034    // 
035    strip3.setPixelColor(8, 255, 0, 0);
036    strip3.setPixelColor(9, 255, 0, 0);
037    strip3.setPixelColor(10, 255, 0, 0);
038    // 
039    strip3.setPixelColor(11, 255, 0, 0);
040    strip3.setPixelColor(12, 255, 0, 0);
041    strip3.setPixelColor(13, 255, 0, 0);
042    //  середина салона
043    strip3.setPixelColor(14, 255, 0, 0);
044    strip3.setPixelColor(15, 255, 0, 0);
045    strip3.setPixelColor(16, 255, 0, 0);
046    //  
047    strip3.setPixelColor(17, 255, 0, 0);
048    strip3.setPixelColor(18, 255, 0, 0);
049    strip3.setPixelColor(19, 255, 0, 0);
050    //
051    strip3.setPixelColor(20, 255, 0, 0);
052    strip3.setPixelColor(21, 255, 0, 0);
053    strip3.setPixelColor(22, 255, 0, 0);
054    //
055    strip3.setPixelColor(23, 255, 0, 0);
056    strip3.setPixelColor(24, 255, 0, 0);
057    strip3.setPixelColor(25, 255, 0, 0);
058    //
059    strip3.setPixelColor(26, 0, 0, 0);
060    strip3.setPixelColor(27, 0, 0, 0);
061    strip3.setPixelColor(28, 255, 140, 0);
062    // 
063    strip3.setPixelColor(29, 0, 0, 0);
064    strip3.setPixelColor(30, 0, 0, 0);
065    strip3.setPixelColor(31, 255, 140, 0);
066    //
067    strip3.setPixelColor(32, 255, 0, 0);
068    strip3.setPixelColor(33, 255, 0, 0);
069    strip3.setPixelColor(34, 255, 0, 0);
070    strip3.setPixelColor(35, 255, 0, 0);
071    // 
072    strip3.setPixelColor(36, 255, 0, 0);
073    strip3.setPixelColor(37, 255, 0, 0);
074    strip3.setPixelColor(38, 255, 0, 0);
075    strip3.setPixelColor(39, 255, 0, 0);
076    strip3.begin();
077    strip3.show();
078  }
079 
080 
081 
082iif (digitalRead(6) == HIGH and digitalRead(8) == HIGH)
083  {
084     digitalWrite(alllightsout, HIGH);
085      //
086      strip3.setPixelColor(0, 0, 0, 0);
087      strip3.setPixelColor(1, 0, 0, 0);
088      strip3.setPixelColor(2, 255, 215, 0);
089      // 
090      strip3.setPixelColor(3, 0, 0, 0);
091      strip3.setPixelColor(4, 0, 0, 0);
092      strip3.setPixelColor(5, 255, 215, 0);
093      //
094      strip3.setPixelColor(6, 255, 0, 0);
095      strip3.setPixelColor(7, 255, 0, 0);
096      // 
097      strip3.setPixelColor(8, 255, 0, 0);
098      strip3.setPixelColor(9, 255, 0, 0);
099      strip3.setPixelColor(10, 255, 0, 0);
100      // 
101      strip3.setPixelColor(11, 255, 0, 0);
102      strip3.setPixelColor(12, 255, 0, 0);
103      strip3.setPixelColor(13, 255, 0, 0);
104      // 
105      strip3.setPixelColor(14, 255, 0, 0);
106      strip3.setPixelColor(15, 255, 0, 0);
107      strip3.setPixelColor(16, 255, 0, 0);
108      // 
109      strip3.setPixelColor(17, 255, 0, 0);
110      strip3.setPixelColor(18, 255, 0, 0);
111      strip3.setPixelColor(19, 255, 0, 0);
112      //
113      strip3.setPixelColor(20, 255, 215, 0);
114      strip3.setPixelColor(21, 255, 215, 0);
115      strip3.setPixelColor(22, 255, 215, 0);
116      //
117      strip3.setPixelColor(23, 255, 0, 0);
118      strip3.setPixelColor(24, 255, 0, 0);
119      strip3.setPixelColor(25, 255, 0, 0);
120      //
121      strip3.setPixelColor(26, 0, 0, 0);
122      strip3.setPixelColor(27, 0, 0, 0);
123      strip3.setPixelColor(28, 255, 140, 0);
124      // 
125      strip3.setPixelColor(29, 0, 0, 0);
126      strip3.setPixelColor(30, 0, 0, 0);
127      strip3.setPixelColor(31, 255, 140, 0);
128      //
129      strip3.setPixelColor(32, 255, 215, 0);
130      strip3.setPixelColor(33, 255, 215, 0);
131      strip3.setPixelColor(34, 255, 0, 0);
132      strip3.setPixelColor(35, 255, 0, 0);
133      // 
134      strip3.setPixelColor(36, 255, 0, 0);
135      strip3.setPixelColor(37, 255, 0, 0);
136      strip3.setPixelColor(38, 255, 0, 0);
137      strip3.setPixelColor(39, 255, 0, 0);
138 
139strip3.begin();
140    strip3.show();
141  }
142 
143   
144 
145if ( digitalRead(8) == LOW)
146    {
147      for (int i = 0; i < lentusa + 1; i++)
148      {
149     
150            
151    strip3.setPixelColor(i, strip3.Color(0, 0, 0));
152    strip3.begin();
153    strip3.show();
154      }
155    }
156 
157 
158}
159    

 

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

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

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

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

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

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

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

 

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

b707 пишет:

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

 

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

 

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

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

 

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

 

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

 

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

 

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

xDriver пишет:

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

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

 

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

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

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

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

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

1loop {
2    for (int i = 0; i < lentusa; i++)
3    {
4      strip3.setPixelColor(i, strip3.Color(255, 255, 255));
5    }
6    strip3.show();
7 
8    while(1); // пока стоп, больше ничего не делаем
9}

 

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

горит ? 

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

xDriver пишет:

горит ? 

 

Горит все) 

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

ок

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

01loop {
02    for (int i = 0; i < lentusa; i++)
03    {
04      strip3.setPixelColor(i, strip3.Color(255, 0, 0)); // красный
05    }
06    strip3.show();
07    delay(3000);
08 
09    for (int i = 0; i < lentusa; i++)
10    {
11      strip3.setPixelColor(i, strip3.Color(0, 255, 0)); // зеленый
12    }
13    strip3.show();
14    delay(3000);
15 
16    for (int i = 0; i < lentusa; i++)
17    {
18      strip3.setPixelColor(i, strip3.Color(0, 0, 255)); // синий
19    }
20    strip3.show();
21    delay(3000);
22}

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

 

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 пина, то нужно прописывать каждую комбинацию ? и свечение каждого диода ? я правильно понял ? :)

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