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?
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
chissa' se mi scrive quando lo visualizzo ..........IMBECILLE CHE SPERAVI PURE CHE FUNZIONAVA ?
beh, aspettiamo un softwarista 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
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"
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
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 ? 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
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
ciao