PDA

Visualizza la versione completa : Estrapolare bit da una stringa ARDUINO


jamal87
13-06-2014, 17:59
Buonasera,
volevo sapere come estrapolare degli specifici bit da una stringa che mi ritorna l'ora corrente.
Nella fattispecie sto utilizzando un DS1307 con la relativa libreria RTC.
La funzione per l'ora (rtc.getDateStr()).
Ho fatto alcune prove come memorizzarla in un array ma niente da fare.

Grazie in anticipo

oregon
13-06-2014, 18:54
Cosa restituisce quella funzione? In quale formato? Cosa vuoi ottenere?

jamal87
13-06-2014, 19:05
restituisce una stringa di caratteri come ad esempio

18:04:01

voglio ottenere solo l'ora:18
solo i minuti:04
e i secondi:01

oregon
13-06-2014, 19:08
Ottenere a video? In un'altra variabile? Di che tipo?

jamal87
13-06-2014, 19:24
in una variabile... scusami

mi serve per memorizzarla su eeprom poi

oregon
13-06-2014, 19:28
Scusa ma perch dici "in una variabile" senza rispondere a quello che ti ho chiesto prima? Quale tipo di variabile?

jamal87
16-06-2014, 09:36
una variabile int per l'ora, una variabile int per i minuti e una variabile int per i secondi.
Poi queste variabili le memorizzo su eeprom

torn24
17-06-2014, 08:54
Ho letto che la funzione atta a restituire l'ora rtc.getTimeStr() , a quanto pare sembra che restituisca un oggetto String , visto che string scritto con la S maiuscola , di conseguenza puoi usare
i metodi dell'oggetto String per splittare la stringa , e tramite la funzione int() di arduino convertire i dati in interi .




string orario =rtc.getTimeStr();
int ora=int(orario.substring(0,2));
int minuti=int(orario.substring(3,5);
int secondi=int(orario.substring(6));





Ci che dovrai fare simile o uguale all'esempio ,se non ho commesso errori nell'uso del metodo substring , e della funzione int() :)

se lo provi funzionasse fammi sapere sul Forum se corretto .....

torn24
17-06-2014, 09:37
Ciao , ho voluto provare il tutto su IDE arduino , e mi presenta un messaggio che string non un parametro valido per la funzione int() , dalla chiara documentazione fornita ,quando ho trovato scritto che il parametro di int() poteva essere di qualunque tipo ho immaginato potesse essere anche di tipo String :confused:

Propongo una soluzione alternativa ..... , da verificare se funziona o meno .



String orario =rtc.getTimeStr();


char buffer[10];
char tmp[3];
orario.toCharArray(buffer, 10);
strncpy(tmp,buffer,2);
int ora=atoi(tmp);
strncpy(tmp,buffer+3,2);
int minuti=atoi(tmp);
strncpy(tmp,buffer+6,2);
int secondi=atoi(tmp);

Scara95
17-06-2014, 10:17
Propongo una soluzione alternativa ..... , da verificare se funziona o meno .

Probabilmente no dato che strncpy non setta il terminatore della stringa (che comunque puoi settare manualmente all'inizio).
Le regole fondamentali del pseudo C/C++ di arduino sono uguali a quelle di C/C++, in particolare
int ora=int(orario.substring(0,2)); equivalente a
int ora=(int)orario.substring(0,2); ed ecco spiegato il tuo errore.

Ad ogni modo basta una singola sscanf (che dovrebbe essere supportata da arduino).

Loading