Go Down

Topic: Convertire byte letti da SD (Read 602 times) previous topic - next topic

D4ng3R92

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

lucadentella

:smiley-eek-blue: non ho ben capito la tua richiesta...
lucadentella.it

D4ng3R92

Scusami non mi sono spiegato bene :)
In pratica nella mia microSD ho salvato un file contenete delle impostazioni per il mio arduino:

Code: [Select]

[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 :D


leo72

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.

D4ng3R92

e per quanto riguarda ID e PORTA?

ratto93

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 -_-"
Se corri veloce come un fulmine, ti schianterai come un tuono.

leo72

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.

lesto

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: http://arduino.cc/en/Reference/StringObject e più in generale http://arduino.cc/en/Reference/HomePage
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

D4ng3R92

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:

Code: [Select]

byte   _ip[]      = { 192, 168, 1, 200 };


Dentro ad un altra funzione leggo i byte del file:
Code: [Select]

// 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

lesto

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.

Quote
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...)

Quote
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?
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Go Up