Buona sera
ho costruito una leva joystick con unico asse collegata ad un potenziometro, il problema è che quando vado a fare la calibrazione ha uno scatto da 0% al 50% in maniera non incrementale come se il punto zero partisse a metà della corsa del potenziometro.
Ho cambiato potenziometro ma il problema rimane.
A questo punto penso che sia un problema di codice che allego per scrupolo.
Grazie mille
#include <Joystick.h>
Joystick_ Joystick;
const int yAxisPin = A0;
int yValue = 0;
void setup() {
Joystick.begin();
}
void loop() {
yValue = analogRead(yAxisPin);
int mappedYValue = map(yValue, 0, 1023, -127, 127);
Joystick.setYAxis(mappedYValue);
delay(10);
}
Problema joystick con potenziometro
Moderatori: MassimoB, WALTERmwp, xyz
9 messaggi
• Pagina 1 di 1
0
voti
0
voti
Prima di tutto:
1. Che HW stai usando ? uno schema fidocadj aiuterebbe
2. I collegamenti sono corretti ?
3. Il codice è tutto o solo uno stralcio ?
4. Metti un link della libreria che stai usando
Manca la chiamata a pinMode() (non ricordo se la lettura analogica lo richiede o è già dentro la funzione )
Se stampi sulla seriale il valore letto dall'ADC senza elaborazioni cosa ottieni ?
EDIT per inserire il codice usa "CODE" con un minimo di formattazione che non guasta, infine commenta il codice
1. Che HW stai usando ? uno schema fidocadj aiuterebbe
2. I collegamenti sono corretti ?
3. Il codice è tutto o solo uno stralcio ?
4. Metti un link della libreria che stai usando
Manca la chiamata a pinMode() (non ricordo se la lettura analogica lo richiede o è già dentro la funzione )
Se stampi sulla seriale il valore letto dall'ADC senza elaborazioni cosa ottieni ?
EDIT per inserire il codice usa "CODE" con un minimo di formattazione che non guasta, infine commenta il codice
0
voti
Da ignorante quale sono se vedo scritto:
mi chiedo,
-che funzione andrà a svolgere analogRead()?
-che funzione andrà a svolgere Joystick.setYAxis()?
quindi andrei a vedere li dentro, come vengono usati quei valori, ed in che modo influenzano il valore restituito, sai, a me piace sapere cosa sto facendo, , il che significa anche, non prendere per buono niente ad occhi chiusi.
- Codice: Seleziona tutto
yValue = analogRead(yAxisPin);
........
Joystick.setYAxis(mappedYValue);
mi chiedo,
-che funzione andrà a svolgere analogRead()?
-che funzione andrà a svolgere Joystick.setYAxis()?
quindi andrei a vedere li dentro, come vengono usati quei valori, ed in che modo influenzano il valore restituito, sai, a me piace sapere cosa sto facendo, , il che significa anche, non prendere per buono niente ad occhi chiusi.
-
lelerelele
4.192 3 7 9 - Master
- Messaggi: 4827
- Iscritto il: 8 giu 2011, 8:57
- Località: Reggio Emilia
0
voti
ThEnGi ha scritto:Prima di tutto:
1. Che HW stai usando ? uno schema fidocadj aiuterebbe
2. I collegamenti sono corretti ?
3. Il codice è tutto o solo uno stralcio ?
4. Metti un link della libreria che stai usando
Manca la chiamata a pinMode() (non ricordo se la lettura analogica lo richiede o è già dentro la funzione )
Se stampi sulla seriale il valore letto dall'ADC senza elaborazioni cosa ottieni ?
EDIT per inserire il codice usa "CODE" con un minimo di formattazione che non guasta, infine commenta il codice
Grazie mille per la risposta tempestiva
Allora sto usando una scheda Arduino Leonordo sulla quale ho collegato un potenziometro 10k (Allego foto)
Ti confermo che il codice è tutto quello che ho scritto, sono alle primissime armi e sicuramente ci sarà un errore
Sto usando questa libreria: https://github.com/MHeironimus/ArduinoJ ... master.zip
Praticamente sto costruendo una leva Spoiler per un simulatore di volo (allego foto)
0
voti
lelerelele ha scritto:Da ignorante quale sono se vedo scritto:
- Codice: Seleziona tutto
yValue = analogRead(yAxisPin);
........
Joystick.setYAxis(mappedYValue);
mi chiedo,
-che funzione andrà a svolgere analogRead()?
-che funzione andrà a svolgere Joystick.setYAxis()?
quindi andrei a vedere li dentro, come vengono usati quei valori, ed in che modo influenzano il valore restituito, sai, a me piace sapere cosa sto facendo, , il che significa anche, non prendere per buono niente ad occhi chiusi.
Grazie mille del consiglio, purtroppo essendo alle prime armi mi sto facendo aiutare e ho fatto un copia incolla del codicwe che mi hanno dato
0
voti
Appunto perché sei alle prime armi.IN7504 ha scritto:Grazie mille del consiglio, purtroppo essendo alle prime armi mi sto facendo aiutare e ho fatto un copia incolla del codicwe che mi hanno dato
Capisco che ti acchiappa la frenesia di fare qualcosa che funzioni, ma credimi se ti dico che non ti serve a niente, mentre ti servirà ed anche tanto partire da piu basso, capendo il perché una riga di codice ti elabora i dati, e come lo faccia!
Te ne butto li un'altra, sai come va a leggere il dato, la porta dove hai collegato il potenzimetro? Come è configurata? Che tipo di dato ti legge?
Io sono partito facendomi queste domande, (ed ecco perché non mi sono mai avvicinato ad arduino) , ritenendo predominante capire cosa succede dal punto scorrevole del potenziometro, arrivando al valore letto ed elaborato.
saluti.
-
lelerelele
4.192 3 7 9 - Master
- Messaggi: 4827
- Iscritto il: 8 giu 2011, 8:57
- Località: Reggio Emilia
0
voti
IN7504 ha scritto:Grazie mille del consiglio, purtroppo essendo alle prime armi mi sto facendo aiutare e ho fatto un copia incolla del codicwe che mi hanno dato
lelerelele ha scritto:ed ecco perché non mi sono mai avvicinato ad arduino)
Il copia incolla è tipico degli arduiniani nel primi "livelli" di esperienza, poi qualcosa non torna e vengono/vanno a piangere sui forum inquanto incapaci di eseguire un debug di un codice che non hanno scritto, IN7504 mi spiace essere crudo e schietto ma è un esperienza già passata più volte.
Quello che posso fare e farò è aiutarti ad aiutarti a risolvere il problema
Questo è il documento che dovresti sapere a menadito: LINK
Intanto avevo chiesto uno schema fidocadj, è la prima volta ed è semplice lo fornisco io
Ho inserito un condensatore in rosso perché l'ADC del ATmega 32u4 (chiamiamolo con il nome tecnico) prevede un impedenza in ingresso massima di 10kOhm, inserendo il condensatore non fai altro rendere disponibile una fonte di tensione a bassa impedenza ma vai ad inserire un filtro con F di taglio a circa 150Hz.
Se puoi accettare questa riduzione di banda semplifichi il lavoro dell'ADC
Ora il processo di debug: Prima cosa bisogna separare il problema in parti !
Prima cosa: Il uC legge correttamente il valore del potenziometro ?
Volevo darti il codice per vedere se il potenziometro funzionava correttamente però lelerelele ha ragione, dovrai essere tu a creare il codice (no copia incolla ) e dovrà fare questo:
Setup[
Inizializzare Seriale
Inizializzare ADC
]
loop[
Leggere valore ADC
Inviarlo sulla seriale
ritardo di 100ms
]
cosi facendo sul monitor seriale devono arrivarti una serie di numeri (0, 1024) relativi alla posizione del potenziometro.
Non barare saranno massimo 10 righe di codice ma attento che il uC ha la sua peculiarità sulla seriale (come ben descritta nei doc di arduino)
0
voti
Non sono certo, ma
invece che
yValue = analogRead(yAxisPin);
con const int yAxiPin = A0
prova con
yValue = analogRead(0) //legge tensione del piedino A0;
Poi può darsi che la mia versione di ambiente arduino sia obsoleta e sia cambiato il nome degli indirizzi.
invece che
yValue = analogRead(yAxisPin);
con const int yAxiPin = A0
prova con
yValue = analogRead(0) //legge tensione del piedino A0;
Poi può darsi che la mia versione di ambiente arduino sia obsoleta e sia cambiato il nome degli indirizzi.
0
voti
Chiedo scusa per la banalità, ma una verifica accurata del potenziometro è stata fatta?
Per verifica accurata, intendo manovrare il potenziometro direttamente a mano, invece che tramite qualche meccanismo
Lo chiedo perché a me capitò un radiocomando proporzionale da aeromodellismo che sembrava impazzito quando la causa era uno stick che sforzava sui potenziometri
Per verifica accurata, intendo manovrare il potenziometro direttamente a mano, invece che tramite qualche meccanismo
Lo chiedo perché a me capitò un radiocomando proporzionale da aeromodellismo che sembrava impazzito quando la causa era uno stick che sforzava sui potenziometri
9 messaggi
• Pagina 1 di 1
Chi c’è in linea
Visitano il forum: Nessuno e 4 ospiti