WS2812B светодиодная лента. проблемы с запуском
- Войдите на сайт для отправки комментариев
Добрый день Прошу помощи. Это первый раз) Запускаю ленту. лента светится.
Собрал схему, подключены три переменных резистора к аналоговым входам A0-A2.
Было два скетча. В одном регулировал цветовую схему HSV резисторами. В другом было плавное изменение цвета. Все работало. Добавил выключатель с резистором на цифровой вход D12 для выбора между этими двумя режимами, что - то сломалось.
В одном положении кнопки происходит плавная смена цвета как и задумано, в другом вместо статического свечения с возможностью регулировки осталось автоматическое изменение, но добавилось легкое мерцание, хотя прослеживается отклик на регулировки. Прошу подсказать что где кривенько написал. Надеюсь понятно сформулировал вопрос. Спасибо.
#include <FastLED.h> // подключаем библиотеку #define NUM_LEDS 52 // указываем количество светодиодов на ленте #define PIN 13 // указываем пин для подключения ленты const int buttonPin = 12; // подключена кнопка, подает логическую "1" CRGB leds[NUM_LEDS]; uint8_t hue = 0; int hue_m; // Hue переменный регулятор int sat_m; // Saturation переменный регулятор int val_m; // Value переменный регулятор void setup() { // основные настройки для адресной ленты FastLED.addLeds <WS2812, PIN, GRB>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip); FastLED.setBrightness(100); pinMode(buttonPin, INPUT); } void loop() { hue_m = analogRead (A0); hue_m = map(hue_m, 0, 1023, 0, 255); sat_m = analogRead (A1); sat_m = map(sat_m, 0, 1023, 0, 255); val_m = analogRead (A2); val_m = map(val_m, 0, 1023, 0, 255); int buttonState = digitalRead(buttonPin); if(buttonState == HIGH) { for (int i = 0; i < NUM_LEDS; i++) { leds[i] = CHSV(hue, 255, 255); } EVERY_N_MILLISECONDS(40){hue++;} } else { for (int i = 0; i < NUM_LEDS; i++) { leds[i] = CHSV(hue_m, sat_m, val_m); } } FastLED.show(); }
Похоже проблема в том, что Вы постоянно переписываете значения.
А переписывать надо только, если они изменились.
Запомните предыдущие значения и, если они не меняются, то и не делать ничего. и FastLED.show() тоже.
Простите, но как реализовать в коде, я новенький, погуглил немного, что-то не понял(
Покажите первоначальный скетч, где не мерцало. Сравним и узнаем причину.
там не было if else соответственно, кнопки еще не было
1. Ручной режим
2. Автоматически плавно меняется цвет
Предположим, что проблема в кнопке. Засаживаем D12 прямо проводком на GND - мерцает? А на VCC?
да, вы правы, если замкнута кнопка, стабильно работает плавный режим, если размыкаю барахлит статика, но стоит коснуться D12-м GND, начинает нормально работать статика.
Ну вот и выяснили - искать нужно в районе кнопки. Так, как схему не привели, то придётся без подсказок это делать.
да, вы правы, если замкнута кнопка, стабильно работает плавный режим, если размыкаю барахлит статика, но стоит коснуться D12-м GND, начинает нормально работать статика.
А у Вас кнопка хоть подтянута?
Подтянута? не болтается
Резистор не тем концом припаян.
http://arduino.ru/tutorials/button
Ура заработало! Спасибо большое!
Спасибо, ознакомился с кодом, понял что вы имели ввиду, изящно, а дело и правда было в схеме.
Удачи