Добрый день! Занимаюсь своим первым проектом с ардуино и уже близок к завершению! Практически всё нормально работает, но есть одно "НО".
Решил сделать подсветку на кухню, чтобы была на ардуинке и можно было свои режимы какие хочешь вставлять и менять их с помощью кнопки по кругу. Всё спаял, всё работает, но периодически, когда пытаюсь поменять режимы нажатием на кнопку, то режим не меняется. То режимы быстро все меняются моментально реагируя на кнопку, то зависнет на каком-то. Эти "подтупливания" не позволяют нормально использовать кнопку и ленту. При этом код работает, но "тупит"...
Испытываю на фрагменте длиной в 18 светодиодов, а вообще будет штук 100. При этом, явно заметно, что при увеличении количества светодиодов "подтупливания" затягиваются гораздо сильнее. Проблема явно в коде и в моем слабом понимании его написания, но копания в интернете не помогли как минимум потому, что я даже приблизительно не понимаю в чем проблема. Прошу помощи.
Когда дальше пытаюсь добавить ещё режим, то вообще зависает
Также, буду признателен если у кого-то есть в "загашнике" ещё интересные режимы для ленты. Я смотрел Гаверовские проекты, но не смог в них разобраться даже близко...
Решил сделать подсветку на кухню, чтобы была на ардуинке и можно было свои режимы какие хочешь вставлять и менять их с помощью кнопки по кругу. Всё спаял, всё работает, но периодически, когда пытаюсь поменять режимы нажатием на кнопку, то режим не меняется. То режимы быстро все меняются моментально реагируя на кнопку, то зависнет на каком-то. Эти "подтупливания" не позволяют нормально использовать кнопку и ленту. При этом код работает, но "тупит"...
Испытываю на фрагменте длиной в 18 светодиодов, а вообще будет штук 100. При этом, явно заметно, что при увеличении количества светодиодов "подтупливания" затягиваются гораздо сильнее. Проблема явно в коде и в моем слабом понимании его написания, но копания в интернете не помогли как минимум потому, что я даже приблизительно не понимаю в чем проблема. Прошу помощи.
C++:
#define BTN3 3 // кнопка подключена сюда (PIN --- КНОПКА --- GND)
#include "microLED.h"
#include "GyverButton.h"
#define ORDER_GRB
#define COLOR_DEBTH 2
#define NUMLEDS 18
#define LED_PIN 12
LEDdata leds[NUMLEDS]; // буфер ленты типа LEDdata (размер зависит от COLOR_DEBTH)
microLED strip(leds, NUMLEDS, LED_PIN); // объект лента
GButton butt1(BTN3);
int value = 0;
byte counter;
int i = 0;
void setup() {
Serial.begin(9600);
pinMode(12, OUTPUT);
butt1.setTickMode(AUTO);
strip.setBrightness(255); // яркость (0-255)
strip.clear(); // очищает буфер
strip.show(); // выводим изменения на ленту
}
void loop() {
if (butt1.isClick()) { // одиночное нажатие
value++; // инкремент
Serial.println(value); // для примера выведем в порт
}
if (value == 0) {
for (byte i = 0; i < NUMLEDS; i++) { // Первая заливка белым светом
leds[i] = mHEX(0xffffff); // белый
strip.show();
delay(10); // скорость заполнения
if (value == 1){
break;
}
}
}
if (value == 1) { // 1 клик
for (byte i = 0; i < NUMLEDS; i++) {
leds[i] = mHEX(0x0000ff); // белый
strip.show();
delay(10); // скорость заполнения
if (value == 2){
break;
}
}
}
if (value == 2) { // 2 клика
for (int i = 0; i < NUMLEDS; i++ ) { // от 0 до первой трети
leds[i] = mHSV(counter + i * 2, 255, 255); // HSV. Увеличивать HUE (цвет)
}
counter++; // counter меняется от 0 до 255 (тип данных byte)
strip.show();
delay(5); // скорость движения радуги
}
if (value == 3) {
value = 0;
}
}
C++:
if (value == 3) { // 3 клик
for (int i = 0; i < NUMLEDS / 2; i++ ) { // от 0 до половины
leds[i] = mHEX(0xffffff); // белый
strip.show();
delay(5); // скорость заполнения
if (value == 4){
break;
}
}
for (int i = NUMLEDS; i == NUMLEDS, i > i/2; i-- ) { // от конца до половины
leds[i] = mHEX(0xfff000); //
strip.show();
delay(5); // скорость заполнения
if (value == 4){
break;
}
}
}