Pages: [1]   Go Down
Author Topic: Convertire byte letti da SD  (Read 576 times)
0 Members and 1 Guest are viewing this topic.
(TN) italy
Offline Offline
Jr. Member
**
Karma: 0
Posts: 77
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Bergamo
Offline Offline
God Member
*****
Karma: 1
Posts: 663
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

 smiley-eek-blue non ho ben capito la tua richiesta...
Logged

lucadentella.it

(TN) italy
Offline Offline
Jr. Member
**
Karma: 0
Posts: 77
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Code:
[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 smiley-grin

Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 333
Posts: 22938
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged


(TN) italy
Offline Offline
Jr. Member
**
Karma: 0
Posts: 77
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

e per quanto riguarda ID e PORTA?
Logged

Monselice PD Italy
Offline Offline
Faraday Member
**
Karma: 28
Posts: 5515
фон Крыса
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 -_-"
Logged

Se corri veloce come un fulmine, ti schianterai come un tuono.

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 333
Posts: 22938
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged


0
Offline Offline
Shannon Member
****
Karma: 132
Posts: 10498
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

(TN) italy
Offline Offline
Jr. Member
**
Karma: 0
Posts: 77
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
byte   _ip[]      = { 192, 168, 1, 200 };

Dentro ad un altra funzione leggo i byte del file:
Code:
// 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
Logged

0
Offline Offline
Shannon Member
****
Karma: 132
Posts: 10498
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Pages: [1]   Go Up
Jump to: