problema conversione valori

ho un buco di memoria
come lo converto il valore di

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

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

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

e.print(tempC);

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

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?

io sono un ardwarista :smiley:
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 :frowning:
spero di non aver scritto una mega caXXata
che ne sa di piu' puo' anche maltrattarmi :smiley:
grazie

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

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 :slight_smile:

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

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

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:
ciao

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

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

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

alessanddrob:

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:

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;
}

santo subito :slight_smile:
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 ? :frowning: cambio hobby e mi do' al giardinaggio ?
ciao e grazie

se ti riferisci a questo

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 :sweat_smile: :sweat_smile: :sweat_smile:

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:
ciao