Какие библиотеки для часов реального времени DS1302 и светодиодной ленты WS2811 не конфликтуют?

serial rtc led-strip

Я делаю настенные часы на заказ, и мне нужен 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);
}

Каковы мои действия по устранению неполадок: следует ли мне попробовать альтернативные библиотеки или я могу изучить сами библиотеки и посмотреть, какие аппаратные ресурсы они могут использовать?

Я предполагаю, что, поскольку и свет, и часы, вероятно, работают по последовательному протоколу, это может быть конфликт с последовательными драйверами — возможно, оба используют одни и те же критичные ко времени операции.

Редактировать: вставлен скетч, демонстрирующий проблему

, 👍0

Обсуждение

На данный момент у меня нет доступа к фактическому коду, вышеприведенное, надеюсь, является минимальным рабочим примером для демонстрации проблемы, а также последовательность световых сигналов довольно сложна и произвольна, поэтому на данном этапе просто нужно найти любой способ получить как rtc, так и светодиоды работают одновременно, @Lee

Вы когда-нибудь пытались переключить контакт 3 на 9?, @hcheung

Та библиотека DS1302, на которую вы указываете, очень старая. Пробовали ли вы использовать более новую библиотеку, такую как [Richard C. Miller](https://github.com/Makuna/Rtc/wiki), которую можно установить из Arduino IDE?, @StarCat

Существуют более точные модули RTC (DS3231), использующие I2C, который поддерживается аппаратно: это не повлияет на синхронизацию FastLED., @DataFiddler


1 ответ


Лучший ответ:

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);
}

Я могу получать и использовать время, и светодиодный выход работает.

,