Какие библиотеки для часов реального времени DS1302 и светодиодной ленты WS2811 не конфликтуют?
Я делаю настенные часы на заказ, и мне нужен Arduino (Uno или Nano) для подключения к модулю часов реального времени DS1302 и цепи светодиодов WS2811.
Поэтому я использую DS1302 для часов и FastLED для освещения. По отдельности эти две библиотеки работают нормально, так что я могу либо вывести время на последовательную консоль, либо управлять светодиодами так, как мне нужно.
Но когда я их комбинирую, происходит некоторый конфликт, и я не получаю светодиодный индикатор. Данные светодиода передаются через контакт 6, а часы используют контакты 2,3,4 (эти контакты настраиваются в коде).
Даже простое добавление инициализации DS1302 в работающий скетч FastLED не приводит к прекращению работы светодиодов
#include <FastLED.h>
#include <DS1302.h>
#define NUM_LEDS 50
#define DATA_PIN 6
// Запускаем DS1302 - останавливает работу светодиодов
DS1302 rtc(2, 3, 4);
CRGB leds[NUM_LEDS];
void setup() {
FastLED.addLeds<WS2811, DATA_PIN, RGB>(leds, NUM_LEDS);
}
void loop() {
for (int i=0; i<NUM_LEDS;i++) {
leds[i] = CRGB::Red;
}
FastLED.show();
delay(100);
}
Каковы мои действия по устранению неполадок: следует ли мне попробовать альтернативные библиотеки или я могу изучить сами библиотеки и посмотреть, какие аппаратные ресурсы они могут использовать?
Я предполагаю, что, поскольку и свет, и часы, вероятно, работают по последовательному протоколу, это может быть конфликт с последовательными драйверами — возможно, оба используют одни и те же критичные ко времени операции.
Редактировать: вставлен скетч, демонстрирующий проблему
@Lee, 👍0
Обсуждение1 ответ
Лучший ответ:
Я установил библиотеку из среды IDE, как предложил StarCat.
https://github.com/Makuna/Rtc
#include <FastLED.h>
#include <ThreeWire.h>
#include <RtcDS1302.h>
#define NUM_LEDS 50
#define DATA_PIN 6
ThreeWire myWire(3,4,2); // ввод-вывод, SCLK, CE
RtcDS1302<ThreeWire> Rtc(myWire);
CRGB leds[NUM_LEDS];
void setup() {
FastLED.addLeds<WS2811, DATA_PIN, RGB>(leds, NUM_LEDS);
Rtc.Begin();
}
void loop() {
RtcDateTime dt = Rtc.GetDateTime();
for (int i=0; i<NUM_LEDS;i++) {
leds[i] = CRGB::Red;
}
FastLED.show();
delay(100);
}
Я могу получать и использовать время, и светодиодный выход работает.
- Странный RTC DS3231 Вывод только при сохранении дат в переменные
- Странный артефакт при записи в последовательный порт во время выполнения цикла
- Как разделить входящую строку?
- Как вывести несколько переменных в строке?
- В чем разница между Serial.write и Serial.print? И когда они используются?
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- Программы построения последовательных данных
- Как узнать частоту дискретизации?
На данный момент у меня нет доступа к фактическому коду, вышеприведенное, надеюсь, является минимальным рабочим примером для демонстрации проблемы, а также последовательность световых сигналов довольно сложна и произвольна, поэтому на данном этапе просто нужно найти любой способ получить как rtc, так и светодиоды работают одновременно, @Lee
Вы когда-нибудь пытались переключить контакт 3 на 9?, @hcheung
Та библиотека DS1302, на которую вы указываете, очень старая. Пробовали ли вы использовать более новую библиотеку, такую как [Richard C. Miller](https://github.com/Makuna/Rtc/wiki), которую можно установить из Arduino IDE?, @StarCat
Существуют более точные модули RTC (DS3231), использующие I2C, который поддерживается аппаратно: это не повлияет на синхронизацию FastLED., @DataFiddler