fabpolli:
quindi se devidi di avere stringhe di lunghezza fissa per splittare la stringa in base alla posizione allora devi prevedere di formattari gli orari in modo che occupino sempre 4 posizioni (Es 0830, 1101, 1547) oppure cambi approccio e usi sempre dei separatori, la stringa sarà più lunga ma saprai sempre con certezza l'informazione ste sta trattando, esempio estremi separando ogni possibile valore
Come dico spesso (ed ultimamente non so perché ma lo sto riscontrando spesso.. ) se è una comunicazione tra MACCHINE è sempre bene usare una codifica per MACCHINE, possibilmente rendendo la cosa più semplice per un processorino come quello di Arduino...
droidprova:
Grazie ragazzi, mi metto all'opera, e provo le vai soluzioni.
Ma prima devi ben definire cosa vuoi comunicare, e poi disegnare il protocollo. Ti faccio un esempio.
Se tu vuoi mandare una informazione relativa al giorno della settimana (tralascio per ora il discorso della "fascia" che non ho capito) e due orari rispettivamente di accensione e spegnimento, io farei un pacchetto di lunghezza fissa contenente queste informazioni. Del tipo:
gaaaassss
dove "g" è il codice del giorno (come ha detto Guglielmo, 0 è Domenica, 1 è Lunedì e così via), "aaaa" è l'ora di accensione nel formato HHMM, e "ssss" quello di spegnimento.
Questa è una comunicazione stringa (non "String" mi raccomando, usa un "char buffer[]" dimensionato al numero massimo di caratteri del protocollo, più uno) di dimensione fissa. Potresti anche compattare il tutto invece di 4 caratteri usando 2 byte per ogni orario (il primo byte avrà valore pari a quello dell'ora, il secondo dei minuti, oppure dato che i minuti in un giorno sono 1440 ti basta un unsigned int quindi sempre 2 byte). Ma per ora parliamo solo di caratteri per semplicità.
Questa cosa, ad esempio, l'avevo progettata per un prototipo di centralina di irrigazione a 4 canali (quindi nel mio caso il formato era "cgaaaassss" dove si aggiungeva "c" col codice del canale 1-4) anche se non come comando ma nel file di configurazione dei tempi e zone di irrigazione.
Ora, nel canale tu mandi solo questo tipo di informazioni, ossia "il giorno G accendi alle XX:XX e spegni alle YY:YY"? Non so quale sia la tua applicazione pratica, ma se parlassimo di luci o apparati generici, per i quali potrei avere l'accensione alle 22 e lo spegnimento alle 6 di mattina? E in questo altro canale è possibile che (ora o magari per future espansioni) ci passino anche altre informazioni differenti da "accendi questa cosa dalle X alle Y"?
Per cui un protocollo più generico potrebbe prevedere un primo carattere che identifica il tipo di messaggio/comando, seguito dal suo "payload" ossia il contenuto del messaggio.
Ad esempio, indicando con "L"(fisso)= comando "Luce", poi "c"=una cifra 0-9 per il canale (o fascia?), "A"(fisso)=comando ACCENDI oppure "S"(fisso)=comando SPEGNI, "g"=giorno della settimana, e "hhhh"=ora avremo:
LcAghhhh
LcSghhhh
ad esempio:
L1A20830 // Accendi il canale 1 alle 08:30 del Lunedì
L1S21830 // Spegni il canale 1 alle 18:30 del Lunedì
L2A32030 // Accendi il canale 2 alle 20:30 del Martedì
L2S40630 // Spegni il canale 2 alle 06:30 del Mercoledì
In futuro potrai anche mandare sullo stesso canale altri comandi, ad esempio "Imposta il termostato 2 a 26 gradi":
T226
Nel ciclo principale di lettura delle comunicazioni andrai dapprima a leggere il primo carattere che indica il tipo di messaggio, poi se è una "L" leggerai i successivi 7 caratteri, se è "T" i successivi 3, e così via.