Pages: [1]   Go Down
Author Topic: problema conversione valori  (Read 897 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 2
Posts: 42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ho un buco di memoria
come lo converto il valore di

Code:
void temp()
{
tempC = analogRead(0);           //lettura valore del sensore
tempC = (5.0 * tempC * 100.0)/1024.0;  //conversione del dato analogico in temperatura
delay(1000);                           //aspetta 1 secondo prima di ripetere
}

qui viene usato dalla scheda ethernet

Code:
e.print(temp);

questo è l'errore

webserver_state_mod.cpp: In function 'void loop()':
webserver_state_mod:85: error: invalid conversion from 'void (*)()' to 'int'
webserver_state_mod:85: error: initializing argument 1 of 'void ETHER_28J60::print(int)'

sicuramente e un problema di conversione di valori ma non mi ricordo come si fa , gia bestemmiai un po di tempo fa ma non mi ricordo piu
grazie
« Last Edit: January 07, 2013, 01:31:56 pm by alessanddrob » Logged

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 569
Posts: 12573
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

non capisco, perché al comando e.print stai fornendo il nome della void invece di quello della variabile?
Non dovrebbe essere

e.print(tempC);
Logged

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Offline Offline
Newbie
*
Karma: 2
Posts: 42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

non vorrei scrivere una boiata , ma scrivendo il nome della funzione non passo il risultato della funzione ?
Logged

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 569
Posts: 12573
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Non credo sia così immediata la cosa, non sono un softwarista ma ricordo che le () accanto al nome della void servono proprio per il passaggio di parametri; una funzione potrebbe avere più risultati, no? come farebbe la funzione a sapere quale vuoi?
Logged

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Offline Offline
Newbie
*
Karma: 2
Posts: 42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

io sono un ardwarista smiley-grin
Le () servono di solito a passare un valore a una funzione
ma dato che qui il valore con cui deve lavorare è interno ..... analogread(0)
chiamando la funzione gia elabora il risultato ........void temp ()= elaborazione di tempC
magari sta' funzione mi genera una variabile  float e non lo posso usare in e.print smiley-sad
spero di non aver scritto una mega caXXata
che ne sa di piu' puo' anche maltrattarmi smiley-grin
grazie
Logged

Offline Offline
Newbie
*
Karma: 2
Posts: 42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

forse ho risolto .....forse perche' non posso provare niente

Code:
e.print((int)temp);

cosi converto il valore di temp in int (SPERO)
gia cosi il compilatore non da errori e gia è un passo avanti smiley

chissa' se mi scrive quando lo visualizzo ..........IMBECILLE CHE SPERAVI PURE CHE FUNZIONAVA ?  smiley-grin
Logged

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 569
Posts: 12573
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

beh, aspettiamo un softwarista smiley-grin ma intanto perché non provi:
temp();
e.print(tempC);
esegui la funzione e poi stampi il risultato.....
Logged

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Offline Offline
Newbie
*
Karma: 2
Posts: 42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

basterebbe fare cosi

e.print(tempC = (5.0 * tempC * 100.0)/1024.0);  senza chiamare funzioni

ma piu' sa' piu pulito tenere tutto fuori da ....void loop()

si aspettiamo uno esperto smiley-grin
ciao
Logged

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 569
Posts: 12573
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

dipende da ciò che devi fare, se ti serve SOLO in questa occasione ovvio che conviene scrivere la formula per intero, ma se devi richiamarla più volte la funzione ti evita le ridondanze
Logged

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Offline Offline
Newbie
*
Karma: 2
Posts: 42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

usare tutte funzioni serve per poter lavorare piu velocemete quando si scrive
se domani devo fare un altro progetto basta che apro il mio file di testo (funzioni) e me le trovo tutte li dentro belle e pronte
ciao
Logged

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 569
Posts: 12573
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

va bene, ho capito, sembriamo (come si dice dalle mie parti) "u ciuncu e ru cecatu ca vonu iocari a palloni" smiley-yell smiley-yell
Logged

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Messina (Italy)
Offline Offline
Sr. Member
****
Karma: 5
Posts: 315
Ciao a tutti!
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


Code:
void temp()
{
tempC = analogRead(0);           //lettura valore del sensore
tempC = (5.0 * tempC * 100.0)/1024.0;  //conversione del dato analogico in temperatura
delay(1000);                           //aspetta 1 secondo prima di ripetere
}


Per fare quello che dici tu è necessario che la funzione ritorni un valore... Per fare questo devi dichiarare la funzione come int in modo che il valore ritornato sia di questo tipo ed infine dici quale valore vuoi che venga ritornato:

Code:
int temp()
{
tempC = analogRead(0);           //lettura valore del sensore
tempC = (5.0 * tempC * 100.0)/1024.0;  //conversione del dato analogico in temperatura
delay(1000);                           //aspetta 1 secondo prima di ripetere
return tempC;
}
Logged

Video demonstration of my Dashboard OBDII -> http://goo.gl/m8Pqp

Offline Offline
Newbie
*
Karma: 2
Posts: 42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

santo subito smiley
Hai ragione mi era sfuggito questo piccolo particolare
 non mi ricordavo proprio del ......dichiarare una funzione int
e return  valore

PS io ho compilato quello che ho scritto  e non ha dato errori
possibile che possa funzionare lo stesso ?

domani provo sia il mio che il tuo ......... e se funzionano tutti e due ?  smiley-sad cambio hobby e mi do' al giardinaggio ?
ciao e grazie
Logged

Messina (Italy)
Offline Offline
Sr. Member
****
Karma: 5
Posts: 315
Ciao a tutti!
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

se ti riferisci a questo

Code:
e.print((int)temp);

non credo che funzioni in quanto tu cosi non hai fatto altro che convertire il valore ritornato dalla funzione temp in intero e questo va bene per la funzione print ma resta comunque il fatto che quella funzione in realtà non restituisce niente (non c'è il return)... in poche parole il compilatore si accontenta di sapere che quello è un valore intero ma (ovviamente) non riesce a sapere se viene realmente passato un valore utile...
non so se sono stato chiaro  smiley-sweat smiley-sweat smiley-sweat
Logged

Video demonstration of my Dashboard OBDII -> http://goo.gl/m8Pqp

Offline Offline
Newbie
*
Karma: 2
Posts: 42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

si si chiarissimo sia prima che adesso
quello che hai scritto e giusto
ma il compilatore non doveva accorgersi che quello che sto passando  alla funzione e.print() non è un dato valido , oltretutto glielo converto pure in (int)
gli passo una funzione void smiley-grin
ciao
Logged

Pages: [1]   Go Up
Jump to: