доброго дня!
мучаюсь с простейшей задачей - бегущий огонек по адресной ленте 2812, чтоб меняла направление движения по щелчку кнопки.
программу пишу в ardublock 2.0
направление могу поменять только когда огонек добежит до конца ленты и в этот момент нажать на кнопку.
подскажите - как сделать правильно?
и нигде не нашел как с угасающим шлейфом сделать…
боюсь тут мало специалистов по данной прокладке.
все вопросы к автору
Автор ArduBlock - Петров Виталий Николаевич
а так:
long D = 0;
long N = 0;
long B = 30;
long Y = 255;
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif
long Pixcil = 0;
long NeoPix = 0;
Adafruit_NeoPixel strip2(30, 2, NEO_GRB + NEO_KHZ800);
void my_1() {
Pixcil = 30;
NeoPix = 30 - 0;
//Pixcil = NeoPix;
for (int count = 0; count < NeoPix; count++) {
strip2.setBrightness(255);
strip2.setPixelColor(Pixcil-1, strip2.Color(255,0,0));
strip2.show();
delay(100);
strip2.setBrightness(255);
strip2.setPixelColor(Pixcil-1, strip2.Color(0,0,0));
strip2.show();
Pixcil = Pixcil - 1;
}
Pixcil = 30;
delay(200);
Pixcil = 30;
NeoPix = 30 - 0;
//Pixcil = NeoPix;
for (int count = 0; count < NeoPix; count++) {
strip2.setBrightness(255);
strip2.setPixelColor(Pixcil-1, strip2.Color(255,0,0));
strip2.show();
delay(200);
strip2.setBrightness(255);
strip2.setPixelColor(Pixcil-1, strip2.Color(0,0,0));
strip2.show();
Pixcil = Pixcil - 1;
}
Pixcil = 30;
}
void my_2() {
Pixcil = 0;
NeoPix = 30 - Pixcil;
for (int count = 0; count < NeoPix; count++) {
Pixcil = Pixcil + 1;
strip2.setBrightness(255);
strip2.setPixelColor(Pixcil-1, strip2.Color(51,255,255));
strip2.show();
delay(100);
strip2.setBrightness(255);
strip2.setPixelColor(Pixcil-1, strip2.Color(0,0,0));
strip2.show();
}
Pixcil = 0;
delay(200);
Pixcil = 0;
NeoPix = 30 - Pixcil;
for (int count = 0; count < NeoPix; count++) {
Pixcil = Pixcil + 1;
strip2.setBrightness(255);
strip2.setPixelColor(Pixcil-1, strip2.Color(51,255,255));
strip2.show();
delay(200);
strip2.setBrightness(255);
strip2.setPixelColor(Pixcil-1, strip2.Color(0,0,0));
strip2.show();
}
Pixcil = 0;
}
void setup() {
pinMode(5, INPUT_PULLUP);
#if defined(__AVR_ATtiny85__) && (F_CPU == 16000000)
clock_prescale_set(clock_div_1);
#endif
strip2.begin();
strip2.show();
strip2.setBrightness(50);
}
void loop() {
if (digitalRead(5) == 0) {
N = N + 1;
if (N > 1) {
N = 0;
}
delay(5);
}
if (N == 0) {
my_2();
}
if (N == 1) {
my_1();
}
}
За “так” Вас тут по размажут как сплав Розе по дорожкам. Зря Вы не прочитали текст, который был в пустом окне сообщения (Вам его уже привели). Исправьте свой пост пока не поздно.
я извиняюсь, что некорректно оформил сообщение - замаялся с этим ардуино)) вроде все просто - но ничего не выходит((
Нужно искать пазл вроде “включить пиксель энный цветом таким то”. Если пазла такого нет, попросить автора его написать. А потом кнопкой менять просто +1 на -1 и будет бегущий огонёк туда-сюда.
1 переписать все с нуля, начать с рисования алгоритма на бумажке
2 решение в лоб → в функциях my_1 my_2 читать кнопку, и в случае ее нажатия выходить из функции.
а как выходить из функции?
Проверку на нажатие кнопки надо делать внутри функции отображения …
Для отображения хвоста надо не гасить крайний заженный символ, а немного гасить все диоды ленты …
можно короткий пример?
Строки 108-113 постепенное гашение хвоста … на каждом отображении вычитается число из значения …
круть! спасибо! еще бы кнопку туда добавить))
мда…вы так далеко не уедете, не зная основ, почитайте уже что нибудь.
Оператор return (C) | Microsoft Learn
Добавил …
невероятно круто и огромное спасибо!
подскажите еще плз - как в вашем примере сделать только белый цвет и уменьшить скорость пролета светящегося диода по ленте?
с 107-109 убрать random и оставить только 255…
после 119 вставить delay(100);
100 поменять на свой вкус
получается зеленый
pixels[p][0]=255;
pixels[p][1]=255;
pixels[p][2]=255;