Benvenuto Ospite,
per utilizzare il Forum ed avere accesso a tutte le sezioni e poter aprire un tuo Topic, rispondere nelle varie discussioni, mandare o ricevere Messaggi Privati devi seguire pochi passaggi:


Leggi il nostro Regolamento -> PREMI QUI <-
Segui il link su come Iscriversi -> PREMI QUI <-


Ricordati di aggiornare l'Avatar usando una immagine che ti distingua nel Forum

Spinner "Fai-da-Te"

Guide, richieste e tutto ciò che c'è da sapere sui controlli del cab
Avatar utente
Keyb
Affezionato
Affezionato
Messaggi: 193
Iscritto il: 13/10/2012, 11:02
Città: Roma

Spinner "Fai-da-Te"

Messaggio da Keyb »

Ciao a tutti.

Vi volevo far vedere lo spinner che mi sono costruito. E' basato su Teensy, un clone economico e miniaturizzato di Arduino. E' stato anche l'unico pezzo acquistato; il resto e' stato recuperato in giro.

Ho usato: Una testina di un vecchio videoregistratore, uno scaffale di un mobile bagno, una ruota ottica di una stampante e un sensore di un mouse. Chi riesce a trovare tutti i pezzi?

A parte gli scherzi, lo spinner funziona perfettamente. Ho implementato anche un controllo sulla risoluzione, in modo da poter variare la velocita' con un semplice interruttore (di recupero pure lui e che devo ancora installare). Il cambio velocita' serve a gestire i diversi giochi. Arkanoid vuole una reazione immediata, quelli di guida meno!

Lo spinner montato in verticale servira' anche da volante con un semplice accessorio che sto costruendo necessario ad accogliere il volante che mi ha appena venduto PaTrYcK

Visto che lo spinner viene visto come mouse, ho previsto anche la gestione di tre pulsanti aggiuntivi che emulino i tasti del mouse.

Allegate un po' di foto, il codice sorgente e un breve test di inerzia. Ah, non sono un programmatore, per cui immagino che il codice non sia ne' pulito ne' ottimizzato. Ma funziona e a me tanto basta....

Se servono altre info chiedete pure.

Ciao,
Alessandro

[youtube]http://www.youtube.com/watch?v=ZgxyWQH_1D8[/youtube]
2012-11-21 00.04.07.jpg
2012-11-21 00.06.02.jpg
2012-11-21 00.06.21.jpg
2012-11-21 00.08.42.jpg
2012-11-21 00.09.04.jpg

Codice: Seleziona tutto

#define ENCODER_OPTIMIZE_INTERRUPTS
#include <Encoder.h>

const int encPin1 = 7;     // Piedino pin 1 encoder
const int encPin2 = 8;     // Piedino pin 2 encoder
const int SpeedPin = 12;     // Piedino controllo velocita'
const int SpeedLedPin = 11;     // Piedino led controllo velocita'
const int MousePinLeft = 13;     // Piedino pulsante sinistra
const int MousePinCenter = 14;     // Piedino pulsante centrale
const int MousePinRight = 15;     // Piedino pulsante destra


const long debounceDelay = 150;    // Tempo per il Debounce (in millisecondi)
const int SpeedSlow = 2;       // Velocita' lenta
const int SpeedFast = 5;       // Velocita' rapida

int Speed = 0;
int buttonStateLeft = 0;
int buttonStateCenter = 0;
int buttonStateRight = 0;
long lastDebounceTime = 0;  

Encoder myEnc(encPin1, encPin2);
long encOldPosition  = -999;

void setup() {  
  pinMode(SpeedPin, INPUT_PULLUP);
  pinMode(MousePinLeft, INPUT_PULLUP);
  pinMode(MousePinCenter, INPUT_PULLUP);
  pinMode(MousePinRight, INPUT_PULLUP);
  pinMode(SpeedLedPin, OUTPUT);
}

void loop(){
Spinner();
}

void Spinner(){
  
  Mouse.set_buttons(0, 0, 0);

// Imposto la velocita'

  if(digitalRead(SpeedPin) == HIGH){
    Speed = SpeedSlow;
    digitalWrite(SpeedLedPin, LOW);
  }
  else {
    Speed = SpeedFast;
    digitalWrite(SpeedLedPin, HIGH);
  }

// Gestione Pulsanti Mouse

  buttonStateLeft = digitalRead(MousePinLeft);
  buttonStateCenter = digitalRead(MousePinCenter);
  buttonStateRight = digitalRead(MousePinRight);


  if((millis() - lastDebounceTime) > debounceDelay){
    if(buttonStateLeft == LOW && buttonStateCenter == LOW && buttonStateRight == LOW){
      Mouse.set_buttons(1, 1, 1);
      Mouse.set_buttons(0, 0, 0);
      lastDebounceTime = millis();
    }
    else if(buttonStateLeft == LOW && buttonStateCenter == LOW && buttonStateRight == HIGH){
      Mouse.set_buttons(1, 1, 0);
      Mouse.set_buttons(0, 0, 0);
      lastDebounceTime = millis();
    }
    else if(buttonStateLeft == LOW && buttonStateCenter == HIGH && buttonStateRight == LOW){
      Mouse.set_buttons(1, 0, 1);
      Mouse.set_buttons(0, 0, 0);
      lastDebounceTime = millis();
    }
    else if(buttonStateLeft == HIGH && buttonStateCenter == LOW && buttonStateRight == LOW){
      Mouse.set_buttons(0, 1, 1);
      Mouse.set_buttons(0, 0, 0);
      lastDebounceTime = millis();
    }
    else if(buttonStateLeft == LOW && buttonStateCenter == HIGH && buttonStateRight == HIGH){
      Mouse.set_buttons(1, 0, 0);
      Mouse.set_buttons(0, 0, 0);
      lastDebounceTime = millis();
    }
    else if(buttonStateLeft == HIGH && buttonStateCenter == LOW && buttonStateRight == HIGH){
      Mouse.set_buttons(0, 1, 0);
      Mouse.set_buttons(0, 0, 0);
      lastDebounceTime = millis();
    }
    else if(buttonStateLeft == HIGH && buttonStateCenter == HIGH && buttonStateRight == LOW){
      Mouse.set_buttons(0, 0, 1);
      Mouse.set_buttons(0, 0, 0);
      lastDebounceTime = millis();
    }
  }

// Gestione spostamento mouse asse x

 long encNewPosition = myEnc.read();
  if (encNewPosition != encOldPosition) {
    if (encNewPosition > encOldPosition){
        encOldPosition = encNewPosition;
        Mouse.move(-Speed, 0);
    }
    else {
        encOldPosition = encNewPosition;
        Mouse.move(Speed, 0);
    }
  }
}
Ciao,
Alex

Torna a “Controlli (joystick, pulsanti, trackball, spinner, volanti, ecc...)”