Buona sera,
mi capita un problema magari semplicissimo.. usando il comando floatToString converto il valore di un orologio per scriverlo un uno schermo Nextion, funziona tutto tranne che i minuti me li scrive singoli cioè esempio 20: 8, ora vorrei sapere come potrei fare a scrivere 20:08 con lo zero sui decimali.
Grazie mille a tutti.. se necessario posto lo sketch
se minuti <10
scrivi 0
scrivi minuti
Hai tre possibilità in base a come hai disegnato l'interfaccia su Nextion, ovvero puoi usare tre oggetti, due numerici e un testo, con il primo numerico visualizzi le ore, con in testo visualizzi il carattere ':' e con l'altro numerico visualizzi i minuti.
Su nextion un oggetto number ha la sua lunghezza, se la setti a due e il valore è 8 ti visualizza in automatico 08.
Se invece su nextion usi un solo oggetto text allora puoi inviare al nextion i valori separati su due variabili numeriche e usare un timer su nextion per aggiornare l'oggetto stringa che visualizza le ore partendo dai valori delle variabili con la funzione cov o ancora meglio covx
cov page0.nMin.val,page0.txtBuf.txt,2
anche qui con l'ultimo parametro hai la lunghezza e ti riempi di zeri iniziali in automatico.
Ultima possibilità è agire da codice Arduino e usare la funzione sprintf e formattarti la stringa prima di inviarla
Dipende da come hai generato quel float.
Ma se invii 20.8 è normale che la stringa ti venga 20 8, dovresti inviare 20.08
Lo sketch si presenta così:
[/[code]
#include "Nextion.h"
#include "RTClib.h"
#include "floatToString.h"
NexText nex_ore = NexText(0, 2, "t0");
NexText nex_min = NexText(0, 1, "t1");
NexText nex_day = NexText(0, 4, "t3");
NexText nex_mon = NexText(0, 5, "t4");
NexText nex_yea = NexText(0, 6, "t5");
char txt1[10];
char txt2[10];
char txt3[10];
char txt4[10];
char txt5[10];
char buffer1[20];
char buffer2[20];
const int setpin = 6;
boolean statepin = 0;
RTC_DS1307 RTC;
void setup() {
nexInit();
pinMode(6, OUTPUT);
digitalWrite(6, HIGH);
RTC.begin();
if (! RTC.isrunning()) {
RTC.adjust(DateTime(__DATE__, __TIME__));
}
}
void loop() {
statepin = digitalRead(setpin);
if (statepin == LOW)
{
RTC.adjust(DateTime(__DATE__, __TIME__));
}
DateTime now = RTC.now();
sprintf(buffer1, "%02d:%02d:%02d", now.hour(), now.minute(), now.second());
sprintf(buffer2, "%02d/%02d/%d", now.day(), now.month(), now.year());
nex_ore.setText(txt1); //ore nex
memset(txt1, 0, sizeof(txt1));
floatToString(txt1,now.hour(),0,2);
nex_min.setText(txt2),":"; //min nex
memset(txt2, 0, sizeof(txt2));
floatToString(txt2,now.minute(),0,2);
nex_day.setText(txt3); //giorno nex
memset(txt3, 0, sizeof(txt3));
floatToString(txt3,now.day(),0,2);
nex_mon.setText(txt4); //mese nex
memset(txt4, 0, sizeof(txt4));
floatToString(txt4,now.month(),0,2);
nex_yea.setText(txt5); //anno nex
memset(txt5, 0, sizeof(txt5));
floatToString(txt5,now.year(),0,4);
}
code]
Allora devo cambiarle tutte le righe di scrittura?