sono nuovo del forum, e in realtà ho iniziato a smanettare con arduino solo da ieri.. quindi la domanda che sto per farvi sarà magari banale, comunque ringrazio in anticipo chi avrà voglia di rispondermi.
Allora, rilevo dei problemi col comando Serial.println, infatti, mentre in un primo momento funziona tutto correttamente, dopo un po (circa 30 secondi) inizia a impazzire, sputandomi fuori numeri a caso..
mi spiego meglio: io sto costruendo un contagiri, per ora voglio che arduino invii la velocità angolare al pc, con tempo di campionamento 0.5 sec.
per i primi 30 sec va tutto bene, poi inizia a dare una sfilza di zeri, come se campionasse ogni millisecondo o cose del genere....
secondo voi come mai? qualcuno ha avuto lo stesso problema?
mi ero dimenticato di aggiungere che, ogni volta che inizia ad "impazzire", la ventola del PC si attiva, come se stesse anche iniziando a consumare piu risorse...
aggiungo infine, che uso un vecchio PC 32 bit con Ubuntu.
per fare i programmi ci vuole un po' di logica, anche per fare le domande però .... secondo te come potremmo risponderti ... non ti dico cosa ci servirebbe per valutare il problema, lo devi capire da solo
nid69ita: millis() - Arduino Reference
Leggi cosa ritorna la millis() sopratutto che tipo di dato e la sua dimensione.
Un altro consiglio, quando hai finito di scrivere il codice, usa nell'IDE di Arduino la voce di menu "Formattazione automatica (Ctrl+T)"
dunque, la formattazione automatica non da alcun effetto.
ho provato a mettere, al posto di
Serial.println(velocita)
la riga (era questo che intendevi?)
Serial.println(millis())
ha lo stesso comportamento (cioè all'inizio tutto ok: mi da valori sequanziali multipli di 500, ma quando si arriva intorno a 31000 mi da una fila compulsiva di zeri...)
ah un altra cosa, avevo provato a mettere
Serial.println(veocita,HEX)
e dopo un po mi uscivano dei valori strani composti in parte da numeri ed in parte da lettere... ???
il float.. non saprei se usarlo, perchè ho letto occupi molta memoria: per ora il codice è molto scarno, ma in futuro dovrà pilotare anche altre cose, percui preferirei usare int che, comunque, ha un range di valori assolutamente idonei
Ti aiuto ancora un pò:
il problema stà qui:
tempozero = millis();
Tu scrivi il valore della millis() dentro a una variabile. Verifica cosa ritorna la millis() e quanto è grande la tua variabile....
Praticamente ovunque hai dichiarato variabili e costanti con int.
Questo non è un problema
const int LED = 13;
ma sarebbe meglio
const byte LED = 13;
Tieni conto che anche la tempozero come int ti avrebbe dato problemi.
Una int contiene al massimo da -32768 a +32767 e 0 +65535 se unsigned int.
Tu leggi la millis() che ritorna unsigned long. Alla partenza del micro hai cifra piccola (1234, 1740, 2200...) ma ben presto superi i 32767
(dopo circa 32 secondi)