Salve a tutti
Vi chiedo aiuto in merito a un problema banale ma non riesco a venirne a capo. Non so se dipenda dal codice o dall'hardware.
Il listato non deve far altro che muovere un motorino cc secondo il movimento di un joystick. Devo ancora finirlo e ovviamente ci sono errori sicuramente ma la cosa che mi lascia perplesso è che ho provato a fare una prima compilazione e l'ho caricato su Arduino Uno per un primo test veloce, ma il Serial Monitor invece di restituirmi prima i valori delle righe subito dopo il loop mi restituisce la prima riga di Serial.println dentro il ciclo while.
Altra cosa strana, il ciclo while dovrebbe iterare finchè i valori restano in quel range restituendo solo "joystick fermo" ( almeno se l'ho scritto corretto) ma invece mi sul Monitor Seriale ho sempre le stesse stringhe.
Potreste dirmi da cosa può dipendere?
secondo me è meglio se ti rileggi come funziona "analogRead(pin)"; poi devi considerare che "false" è uguale a "0" mentre "true" è qualsiasi numero diverso da "0"...
Scusa ma non sono convinto di aver sbagliato l'uso di analogRead. Oppure potresti spiegarmi il perchè di questa tua affermazione?
In molti esempi ho usato la stessa sintassi per misurare il valore di un ingresso analogico e compiere azioni in merito al valore restituito.
Ammetto che ci sono errori di numeri e di uso degli operatori logici ma la cosa che non mi torna è perchè ad esempio il ciclo while non itera se resto dentro quei valori.
Con tutti quei delay, è più il tempo che sta fermo che il tempo che gira! Già il delay(700) iniziale tiene fermo per 700ms, poi fa un giro di loop e poi si ferma di nuovo...
I delay nei cicli ci sono perchè il motorino è uno stepper.
Gli altri li ho aggiunti per vedere con calma cosa accade nel serial monitor. Ovviamente poi li sistemerò, il tempo che impiega è il minimo.
Si esatto, come ho detto prima alcuni numeri e operatori sono inesatti.
Ho corretto in questo modo la riga:
analogRead((X_pin >=498) || (X_pin <=502))
Questo perchè il joystick nella sua posizione di riposo non resta mai fermo in un valore fisso ma oscilla tra i due valori sopra.
Ho quindi cercato di creare un range di valori che venissero riconosciuti come levetta ferma in posizione centrale. O almeno è quello che sto cercando di fare
Cortesemente mi commenti dettagliatamente, secondo TE, cosa fa quell'istruzione ... perché, confermo, che NON ti è chiaro il funzionamento della analogRead() ...
NO, la sintassi della analogRead() la trovi nel reference ... in pratica:
valore_letto = analogRead(pin_da_leggere);
... quindi:
all'interno delle parentesi puoi mettere SOLO il numero del pin da leggere
il valore letto è il valore ritornato dalla funzione
Quindi, quello che hai scritto, come ben descrive andreaber sopra, NON va assolutamente bene ... devi leggere sia X_pin che Y_pin, salvare i valori e fare i tuoi confronti.
Guardati gli esempi, che trovi nel IDE, di come si chiama la analogRead().
Scusate ma l'ho fatta grossa...sono stato un pò di tempo fermo e ho perso le basi !!
Mi ero talmente incaponito a cercare il motivo del perchè non funzionasse il while che ho perso di vista l'errore più grave!
Occhio che Arduino UNO R4, in comune con Arduino UNO R3 ... ha SOLO il nome ...
... è un oggetto totalmente diverso che richiede parecchio studio per approfondirne l'uso.
Cercherò di fare del mio meglio , anche se purtroppo ho visto che ancora non c'è molta documentazione in giro. Quasi tutti i testi sono riferiti alla R3.
Spero uscirà qualcosa che insegni come sfruttare le sue potenzialità.
Leggili e studiali con interesse
Scusa se te lo dico, so che la verità è spesso ruvida, ma se il tuo livello è questo:
sei ben lontano da poter sfruttare una R4
Anzi, sei ancora piuttosto lontano da riuscire a sfruttare una qualsiasi MCU o anche solo ottenere codice funzionante su PC