Помогите понять принцип работы каждого диода на ленте
- Войдите на сайт для отправки комментариев
Чт, 21/03/2019 - 02:44
Дана лента 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();
}
}
}
Где может быть ошибка ? программа простая, но у меня не выходит делать так,что бы определенные диоды меняли цвета при подачи питания на определенные пины ардуино
а что не работает?
для начала setup как минимум должен выглядеть так
void setup() { strip3.begin(); strip3.setBrightness(50); strip3.show(); // Initialize all pixels to 'off' }а что не работает?
Ардуина выдает разные цвета , словно не понимает что от нее хотят..
А код по структуре правильный получается ?
что бы добавить другие пины , так же дописывать ?
например дам я сигнал на 5 пин, пропишу 6-ому пину лоу , и цвета определённые каждому диоду как мне нужно , когда идет питание на пин 5. - будет ли работать в такой же структуре корректно ? А если одновременно на 6 так же приходит ? нужно прлписать пин 6 хай пин 5 хай пин 8 хай и так же каждому диоду цвет.
и обязательно ли прописывать все сценарии? присваивать пинам значение лоу ? мол , если там нет - а там есть - гори так.. а если и там и там есть - гори таким цветом .
Будет так тоже работать корректно ?
для начала setup как минимум должен выглядеть так
void setup() { strip3.begin(); strip3.setBrightness(50); strip3.show(); // Initialize all pixels to 'off' }Спасибо, а брайгнесс обязательно?
думаю нет, но какая яркость по умолчанию не знаю.
дальше просто зажгите всю ленту белым, заодно проверите все диоды и свой блок питания :)
loop { for (int i = 0; i < lentusa; i++) { strip3.setPixelColor(i, strip3.Color(255, 255, 255)); } strip3.show(); while(1); // пока стоп, больше ничего не делаем }горит ?
горит ?
Горит все)
ок
теперь по цветам
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); }цвета могу попутать местами, там у разных лент по разному.
ну а теперь можно и условий напихать... тока у меня уже глаза слипаются
Где может быть ошибка ?
Функция strip3.begin() должна выполняться один раз в setup().
Уважаемый, зажгите 1 светодиод в нужном Вам цвете. Уверяю - остальное будет очень просто. 40 - это много.
"Путь в тысячу ли начинается с первого шага"
Уважаемый, зажгите 1 светодиод в нужном Вам цвете. Уверяю - остальное будет очень просто. 40 - это много.
"Путь в тысячу ли начинается с первого шага"
нужно каждому свои цвета
Вот когда научитесь зажигать любой из них, нужным вам цветом, тогда можно переходить к дальнейшему, приделывать ифы и прочие свистелки. Пока вы пытаетесь шаманить и являться верным последователем карго-культа. За двое прошедших суток, могли реально научиться ею управлять, уже просто методом тыка. ИМХО.
Вот когда научитесь зажигать любой из них, нужным вам цветом, тогда можно переходить к дальнейшему, приделывать ифы и прочие свистелки. Пока вы пытаетесь шаманить и являться верным последователем карго-культа. За двое прошедших суток, могли реально научиться ею управлять, уже просто методом тыка. ИМХО.
Любой из них горит нужным мне цветом , все это пройдено , теперь мне просто нужно подключить условия - вот я и спросил как это реализовать
Извините, а нафига Вы strip3.begin() и strip3.show() в цикл пихаете?
Любой из них горит нужным мне цветом , все это пройдено , теперь мне просто нужно подключить условия - вот я и спросил как это реализовать
Ну если вы ее полностью приручили, тогда дело за малым:
if (digitalRead(нужный пин) == HIGH или LOW, как вам надо) {
включить ленту c заданными параметрами
}
чего еще проще?
Любой из них горит нужным мне цветом , все это пройдено , теперь мне просто нужно подключить условия - вот я и спросил как это реализовать
Ну если вы ее полностью приручили, тогда дело за малым:
if (digitalRead(нужный пин) == HIGH или LOW, как вам надо) {
включить ленту c заданными параметрами
}
чего еще проще?
ну и каждому диоду ставлю другой цвет , как и выше , так ?
у меня пинов несколько, соответсвенно нужно написать иф нужный пин - ХАЙ, а другой ЛОУ, и тот ЛОУ - то гори "так" (перечесление всех диодов и их цветов, так? - в таком формате почему то горит все миксовано и не понятно.. вот и спросил об ошибках :)
Если в управлении используется 2 пина, значит в условиях if через && нужно прописывать состояния на 2 пинах.
Перед тем как вбивать новою комбинацию свечений старую нужно выключить-погасить, либо на все пиксели вбивать новую комбинацию.
Если в управлении используется 2 пина, значит в условиях if через && нужно прописывать состояния на 2 пинах.
Перед тем как вбивать новою комбинацию свечений старую нужно выключить-погасить, либо на все пиксели вбивать новую комбинацию.
Значит, если у меня например 3 пина, то нужно прописывать каждую комбинацию ? и свечение каждого диода ? я правильно понял ? :)
Ну, да. Иначе старые данные по свечению остаются на пикселе - отсюда хаос свечения.
Значит, если у меня например 3 пина, то нужно прописывать каждую комбинацию ? и свечение каждого диода ? я правильно понял ? :)
Три пина, дадут восемь комбинаций. Нужно учитывать все.