Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2014
    Messaggi
    22

    Estrapolare bit da una stringa ARDUINO

    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

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Cosa restituisce quella funzione? In quale formato? Cosa vuoi ottenere?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2014
    Messaggi
    22
    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

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Ottenere a video? In un'altra variabile? Di che tipo?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2014
    Messaggi
    22
    in una variabile... scusami

    mi serve per memorizzarla su eeprom poi

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Scusa ma perché dici "in una variabile" senza rispondere a quello che ti ho chiesto prima? Quale tipo di variabile?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2014
    Messaggi
    22
    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

  8. #8
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    Ciao

    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 .


    codice:
    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 .....
    Tecnologia

  9. #9
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    Ciao

    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

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

    codice:
    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);
    Ultima modifica di torn24; 17-06-2014 a 09:00
    Tecnologia

  10. #10
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Quote Originariamente inviata da torn24 Visualizza il messaggio
    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
    codice:
    int ora=int(orario.substring(0,2));
    è equivalente a
    codice:
    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).
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.