Pages: [1]   Go Down
Author Topic: Convertire byte letti da SD  (Read 505 times)
0 Members and 1 Guest are viewing this topic.
(TN) italy
Offline Offline
Jr. Member
**
Karma: 0
Posts: 74
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: 74
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: 313
Posts: 21657
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: 74
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: 26
Posts: 5480
фон Крыса
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: 313
Posts: 21657
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
Online Online
Shannon Member
****
Karma: 117
Posts: 10113
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
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

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

(TN) italy
Offline Offline
Jr. Member
**
Karma: 0
Posts: 74
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
Online Online
Shannon Member
****
Karma: 117
Posts: 10113
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
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

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Pages: [1]   Go Up
Jump to: