Ciao a tutti!
Io ho creato un piccolo file di configurazione salvato nella SD. Quando leggo la memoria però avrei bisogno di convertire questi byte.
Come posso fare?
Vi ringrazio
Ciao a tutti!
Io ho creato un piccolo file di configurazione salvato nella SD. Quando leggo la memoria però avrei bisogno di convertire questi byte.
Come posso fare?
Vi ringrazio
non ho ben capito la tua richiesta...
Scusami non mi sono spiegato bene ![]()
In pratica nella mia microSD ho salvato un file contenete delle impostazioni per il mio arduino:
[IP]
1921681200
[ID]
1
[SERVER]
192168150
[PORTA]
5000
Nel momento in cui vado a leggere questo file la funzione read() mi restituisce dei byte. Io dovrei convertire questi byte in int ( per quanto riguarda la porta e l'id ).
Spero di essere stato piu chiaro ![]()
L'IP è formato da 4 byte. Salvi i 4 byte come tali e poi li rileggi come tali.
Ossia se hai un IP 192.168.1.200 salverai byte(192), byte(168), byte(1),byte(200). Così in lettura non devi convertire nulla.
e per quanto riguarda ID e PORTA?
Non vorrei dire una boiata.... non l'ho mai fatto.... li converti da stringa a numero ? O.o vi prego non uccidetemi...
la programmazione OOP che sto studiando mi srta deviando la mente -_-"
Per l'ID dipende. Se è un numero < 256 basta 1 byte, altrimenti fino a 65535 basta un tipo "int" salvato nel formato byte alto/byte basso. Stessa cosa dicasi per la porta.
dipende.
Se quando hai salvato i dati li hai salvati come testo (modalità ascii, come credo tu abbai fatto), dovrai leggere il file (o parte di esso), e poi estrapoolare le informazioni lavorando con le stringhe. La classe String potrebbe esserti di aiuto, permette di "tagliare" le stringhe molto facilmente.
Invece se hai salvato i dati in forma binaria, essi non sono leggibili da un'editor di testo, però sono già i byte che formano i numeri. basta reincollare i vari byte usando le funzioni di bitshift.
edit: dimenticavo: String() - Arduino Reference e più in generale Arduino - Home
Ho provato a leggere i manuali e ho fatto tante prove ma non ce la faccio xD sono rincoglionito scusatemi.
Io leggo il file e inserisco i byte letti in un array.
Ho una variabile _ip prima della funzione setup:
byte _ip[] = { 192, 168, 1, 200 };
Dentro ad un altra funzione leggo i byte del file:
// Apertura del file di configurazione
File configFile = SD.open("cnfFile.cfg", FILE_READ);
// Buffer di lettura di 80 bytes
byte readLine[80];
// Lettura del file
int i = 0;
while (configFile.available()) {
readLine[i] = configFile.read();
i++;
}
// Chiusura del file
configFile.close();
Dovrei prendere certi di questi byte letti ed memorizzarli nell'array _ip.
Inoltre:
Dubbio n* 1: _ip devo dichiararlo volatile? ( cazzata? )
Dubbio n*2: Perche se io nella funzione stampo: Serial.println((_ip[0], DEC)); non mi ritorna 192 ?
Grazie della pazienza
ora in readLine[] hai una stringa. Ora devi divertirti a tagliarla in 4 stringhe contenenti 4 interi, e poi con la funzione atoi() trasformi le stringhe in numeri.
Dubbio n* 1: _ip devo dichiararlo volatile? ( cazzata? )
no, le variabili volatile in arduino le usi solo se una variabile viene modificata da interrupt diversi e/o dal programma. Isnomma se ci possono essere più di un accesso contemporaneo (può capitare magari che il loop inizia un'operazione sul numero, poichè in assembler anche una semplice somma in realtà sono più operazioni, e in quel momento scatta l'interrupt...)
Dubbio n*2: Perche se io nella funzione stampo: Serial.println((_ip[0], DEC)); non mi ritorna 192 ?
uhmm forse per via delle doppie parentesi?