Go Down

Topic: consiglio gestione joystik (Read 218 times) previous topic - next topic

albepancio

salve
leggendo il mio manuale arduinoi :)
stao cercando di realizzare un piccolo progetto usando un joystick e gli ingressi analagici.
vi spiego cosa vorrei realizzare.
io vorrei trasformare un joystick analagico in uno digitale, cioè nei vecchi video giochi avevamo joystik digitalii
quindi per esempio per far girare a destra una macchinina ,bisognava spostare a destra a colpetti ( non so se riesco a spiegarmi)
quello che vorrei fare e variare il lampeggio di un led( che simula il contatto) e variare il tempo muovando il joystick analogico. per la gestione degli ingressi analogici ho scritto questo piccolo codice
Code: [Select]
#define asseX A0
#define asseY A1
const int ledPin =  13;      // the number of the LED pin

// Variables will change:
int ledState = LOW;             // ledState used to set the LED
long previousMillis = 0;        // will store last time LED was updated

// the follow variables is a long because the time, measured in miliseconds,
// will quickly become a bigger number than can be stored in an int.
long interval = 0; 
 
void setup() {
  pinMode( asseX,INPUT );
  pinMode( asseY,INPUT );
  pinMode(ledPin, OUTPUT); 
 
  Serial.begin( 9600 );
}
 
void loop() {
long interval = asseX
 
  Serial.print( "Asse X: " );
  Serial.print( analogRead( asseX ) );
  Serial.print( " Asse Y: " );
  Serial.print( analogRead( asseY ) );
  Serial.print( "\n" );
 unsigned long currentMillis = millis();
 
  if(currentMillis - previousMillis > interval) {
    // save the last time you blinked the LED
    previousMillis = currentMillis;   

    // if the LED is off turn it on and vice-versa:
    if (ledState == LOW)
      ledState = HIGH;
    else
      ledState = LOW;

    // set the LED with the ledState of the variable:
    digitalWrite(ledPin, ledState);
 
  delay( 300 );

}

partendo da questo codice la strada piu semplice e quella di usare un mills e variare il valore dell intervallo usando il valore restituito dall ingresso anaklagico?
una cosa simile?????
non ho tutti i componenti oper  montare un circuito di prova , quindi chiedevo se la strada e quella giusta.
praticamente devo cambiare duty cycle  da sempre acceso a sempre spento .
grazie per l aiuto

torn24

Ciao!
Io prenderei una strada molto più semplice che non comporta l'uso di millis() ;)

Come funziona un joystik digitale ? Spostandolo da una parte attiva un segnale "non è diverso da avere 4 pulsanti digitali attivati da una leva"!

A questo punto c'è una posizione che attiva il segnale,  esempio per dare il segnale devo spostare tutta la leva verso destra, oppure spostarla a metà corsa ecc...

Per avere lo stesso comportamento con un joystik analogico devo solo decidere in che posizione deve essere la leva per acquisire il segnale, se ad esempio a fine corsa della leva, considero il massimo valore analogico letto, che corrisponde alla posizione della leva,

Se leggo valore analogico<= a posizione leva, faccio qualcosa


Esempio :


Code: [Select]


if(analogRead( asseX )>=300 && analogRead( asseX )<= 400)

    Posizione attiva in cui faccio qualcosa.



albepancio

No a me serve che vari la frequenza così da simulare un acceso spento variando il duty . Praticamente con una frequenza di 1 secondo il duty vari da 1 secondo acceso e zero spento a 0.50 acceso e 0.50 spento a 1 spento e zero acceso

docdoc

Cosa tu ci faccia con il movimento del joystick non è importante. Un joystick digitale on/off lo simuli leggendo lo spostamento attuale e se supera una certa soglia lo consideri "on" e quindi incrementi o decrementi "qualcosa" (nel tuo caso una variabile che rappresenta il valore del PWM, ovviamente da verificare i limiti con un map()).
Finché tieni il joystick in quella posizione continui ad incrementare/decrementare il corrispondente valore. Il "millis()" diciamoc he in linea di massima non ti serve, se non per regolare la "velocità" con cui incrementi/decrementi (ma può anche bastare qualche delay() piazzato opportunamente).

Alex "docdoc" - ** se ti sono stato d'aiuto, un punto karma sarà gradito, clicca su "add" qui a sinistra, vicino al mio nome ;) **

albepancio

mi scuso ma non riesco  a spiegare bene quello che vorrei fare

diciamo una cosa simile a regolare il lampeggio di una luce che vada da spento ad on
grazie per le risposte

Go Up