Buongiorno a tutti, nelle scorse settimane mi sono costruito un orologio (ore/minuti) con 4 display a 7 segmenti con i seguente programma:
// Date and time functions using a DS1307 RTC connected via I2C and Wire lib
#include "RTClib.h"
#include <SevSeg.h>
#include <stdio.h>
#include <DS1302.h>
RTC_DS1307 rtc;
SevSeg sevseg; //Instantiate a seven segment controller object
int OreMin ;
int secOra;
byte decPlace;
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
void setup () {
Serial.begin(9600);
Serial.println("Versione caricata Prova_tiny_02");
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
if (! rtc.isrunning()) {
Serial.println("RTC is NOT running!");
}
// following line sets the RTC to the date & time this sketch was compiled
//rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
// This line sets the RTC with an explicit date & time, for example to set
// January 21, 2014 at 3am you would call:
//rtc.adjust(DateTime(2020, 9, 16, 9, 9, 0));
byte numDigits = 4;
byte digitPins[] = {13, 12, 11, 10};
byte segmentPins[] = {2, 3, 4, 5, 6, 7, 8, 9}; //Segments: A,B,C,D,E,F,G,Period
bool resistorsOnSegments = false; // 'false' means resistors are on digit pins
byte hardwareConfig = COMMON_CATHODE;
bool updateWithDelays = false; // Default 'false' is Recommended
bool leadingZeros = true; // Use 'true' if you'd like to keep the leading zeros
bool disableDecPoint = false; // Use 'true' if your decimal point doesn't exist or isn't connected
sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments,
updateWithDelays, leadingZeros, disableDecPoint);
sevseg.setBrightness(10);
}
void printTime() {
DateTime now = rtc.now();
OreMin = (now.hour() * 100) + now.minute();
secOra = (now.second()); // rilevo i secondi da RTC
}
void loop () {
printTime(); // rileva l'orario
// faccio lampeggiare il punto separatore ore/minuti
if ((secOra % 2) == 0) {
sevseg.setNumber(OreMin);
} else {
decPlace = 2;
sevseg.setNumber(OreMin, decPlace);
}
sevseg.refreshDisplay();
}
Ora mi è venuta l'idea balzana di aggiungere altri 2 display per visualizzare anche i secondi.
Devo quindi avere non un puntino separatore ma due. L'unica idea che ho è di cercare di comandare questi separatamente collegandoli ad un PIN da mantenere sempre HIGH.
Mi sembra un'idea brutale e poco elegante (e non ho ancora provato se funzionerebbe!); qualcuno può suggerirmi una soluzione migliore?
Grazie
Enrico