Subscribe to Updates

    Get the latest creative news from FooBar about art, design and business.

    What's Hot

    Come impostare un IP statico per Raspberry PI

    Novembre 10, 2023

    Le migliori rendite passive tecnologiche per guadagna soldi

    Novembre 4, 2023

    Guida all’Acquisto: I Migliori Router WiFi del 2023

    Settembre 13, 2023
    Facebook X (Twitter) Instagram
    Facebook X (Twitter) Instagram
    iSmanettoneiSmanettone
    Subscribe
    • Home
    • News
    • Programmazione
    • iPhone
    • Wifi e sicurezza
    • Backtrack
    • Arduino
    • Android
    • Apple
    • Raspberry
    • Altro
    iSmanettoneiSmanettone
    Home»Arduino»Lezione 16: Come utilizzare la Joystick shield per i propri progetti con Arduino
    Arduino

    Lezione 16: Come utilizzare la Joystick shield per i propri progetti con Arduino

    ismanettoneblogBy ismanettoneblogSettembre 14, 2014Updated:Settembre 14, 2014Nessun commento5 Mins Read
    Facebook Twitter Pinterest LinkedIn Tumblr Email
    Share
    Facebook Twitter LinkedIn Pinterest Email

    In questa sedicesima lezione su Arduino, si parlerà di una scheda un po’ particolare, che permette di dare un tocco di originalità ai propri progetti e realizzarne nuove tipologie.

    La scheda in questa si chiama Joystick Shield, in quanto permette di comandare qualsiasi cosa, come se fosse un Joystick.

    Joystick_Arduino

    Nella scheda è presente una sorta di rotella (quella in nero), che dal punto di vista circuitale non è altro che un potenziometro, ovvero un dispositivo in grado di far cambiare il proprio valore di resistenza. Ci sono altri push button, che sono A,B,C,D,E,F. Come si può notare in basso a sinistra, è possibile scegliere se alimentare la scheda con 3.3 oppure 5 [V].

    Il mio consiglio è quello di utilizzare l’alimentazione più alto, in modo da avere una risoluzione migliore, per via della conversione analogica-digitale di Arduino a 10 bit (aumentando il livello 0-5 V, l’ADC lavora meglio).

    La scheda va messa sopra allo stesso Arduino, cercando di far combaciare correttamente i PIN presenti.

    Per capire come recuperare i valori dei vari controller presenti nella scheda, basta guardare questo documento:

    JOYSTICK_SHD_V2.0

     

    Schema joystick Arduino

    I valori della X e Y vengono “inviati” sui pin analogici A0 e A1, mentre i valori digitali dei push-button A,B,C,D vengono “inviati” sui pin digitali 2-6.

    I push button inviano valore 1 quando non sono premuti e il valore 0 altrimenti.

    Ecco un po’ di esempi software per poter utilizzare la scheda correttamente.

     

    Joystick Hello world ! 

    Questo codice permette di capire in pochi minuti come poter recuperare le informazioni dalla scheda in Arduino.

    /**
    Questo programa spiega come utilizzare il Joystick con Arduino
    
    Versione 1.0
    Autore Giacomo Bellazzi
    */
    
    int A = 2;
    int B = 3;
    int C = 4;
    int D = 5;
    int x = A0;
    int y = A1;
    char key[] = {'A','B','C','D'};
    
    
    void setup() {
     Serial.begin(9600);
    }
    
    void loop() {
      keyPressed(A);
      keyPressed(B);
      keyPressed(C);
      keyPressed(D);
      joystick();
      delay(100);
    }
    
    /* Questa funzione mostra se un pin è stato mostrato*/
    void keyPressed(int index){
      if(digitalRead(index)==0){
        Serial.print(key[index-2]);
        Serial.print(" has been pressed");
        Serial.print("\n");
      }
    }  
    /* Questa funziona mostra lo spostamendo x e y del joystick*/  
    void joystick(){
      Serial.print("x: ");
      Serial.print(analogRead(x));  
      Serial.print(" y: ");
      Serial.print(analogRead(y)); 
      Serial.print("\n");
    }  
    

     

    Come comandare l’elicottero Syma S-107G con Arduino

    Sul mercato è possibile acquistare piccoli elicotteri radio comandabili a prezzi davvero bassi. Per esempio l’elicottero Syma S-107G è facilmente acquistabili su ebay per 15 euro.

    La sua autonomia è di circa 5-6 minuti e permette di controllarlo agevolmente attraverso il joystick presente nella scatola. Per chi volesse utilizzare lo stesso Arduino con la joystick shield può utilizzare questo programma.

    Il joystick originale dell’elicottero utilizzare i segnali IR per poter comunicare con il dispositivo. Per tanto è necessario l’utilizzo di 3 LED ad infrarosso da collegare al PIN 12 per poter inviare correttamente la sequenza di bit di corretta.

    /**
    Questo programa permette di utilizzare la Joystick shield per comandare l'elicottero Syma S-107G
    
    Versione 1.0
    Autore Giacomo Bellazzi
    */
    #define RED 12    // the output pin of the IR LED
    
    int A = 2;
    int B = 3;
    int C = 4;
    int D = 5;
    int x = A0;
    int y = A1;
    int throttleValue = 63; //Initial value
    
    void setup() {
        pinMode(RED, OUTPUT);    // set IR LED (Pin 4) to Output
        int Channel = 0;          //Channel A = 0, Channel B = 128
        pinMode(A,INPUT);
        pinMode(B,INPUT);
        pinMode(C,INPUT);
        pinMode(D,INPUT);
        Serial.begin(9600);
    }
    
    void loop() {
        int Throttle, Rudder, Elevator, RudderTrim;
        int Channel;
        Throttle = throttleValue;
        Rudder = leftRightToPerc(analogRead(x));   
        Elevator = upDownToPerc(analogRead(y));  
        RudderTrim = 0;
        Serial.println(Throttle);
        //Serial.println(Rudder);
        //Serial.println(Elevator); 
        //Transmit(0,63,50,0);
        Transmit(Rudder, Elevator, Throttle, RudderTrim);
        throttle();
    }
    
    void Transmit(byte rudder, byte elevator, byte throttle, byte trim) {
        static byte Code[4];
        byte mask = 128;     //bitmask
        int i;
     
        Code[0] = rudder; // 0 -> 127; 63 is the midpoint.
        Code[1] = elevator; // 0 -> 127; 63 is the midpoint.
        Code[2] = throttle; // 0 -> 127; 0 is throttle off
        Code[3] = trim;    // Haven't messed with this
         
        OutPulse(2002);  // Start 38Khz pulse for 2000us (2002us is evenly divided by 26)
        delayMicroseconds(2000);  // 2000us off.
     
        for (i = 0; i<4; i++) {        // Loops through the Code[]
            for (mask = 128; mask > 0; mask >>=1) {    // See Arduino reference for bit masking (really cool stuff!)
            OutPulse(312);         // Sends 312 pulse each loop
     
                if(Code[i] & mask) {          //If both bit positions are 1 you get 1             
                    delayMicroseconds(688);     // send 1 (700 off)
                }
                else {
                    delayMicroseconds(288);     // send 0 (300 off)
                }
            } //End mask loop
        }  //End i loop
     
        OutPulse(312);  //Send 300 microsecond Closing Pulse
        delay(60);      
     
    } // End Transmit
     
     
    void OutPulse(int Pulse) {  //sends 38Khz pulses over the Pulse Length
        
        int par=Pulse/26;
        par+=-1;
        for(int p = 0; p < par; p++) {  //Takes about 26 microseconds per loop
            digitalWrite(RED, HIGH);
              delayMicroseconds(10);
            digitalWrite(RED, LOW);
              delayMicroseconds(10);
        }
    }  //End Out
    
    
    
    int leftRightToPerc(int value){
      return (int) (127-value*0.12414467);
      }
    int upDownToPerc(int value){
      return (int) (127-value*0.12414467);
    }  
    
    // Viene aumentato il valore della potenza/quota 
    void throttle(){
      if(hasBeenPressed(C)&&throttleValue!=0){
        throttleValue--;
      }
      if(hasBeenPressed(A)&&throttleValue!=127){
        throttleValue++;
      }
    }
    
    
    
    // Stabilisce se un push button è stato premuto
    boolean hasBeenPressed(int key){
      if(digitalRead(key)==0){
        return true;
      }else{
        return false;
      }
    }   
    
    
    
    

     

    Elicottero

    Share. Facebook Twitter Pinterest LinkedIn Tumblr Email
    ismanettoneblog

    Related Posts

    Come utilizzare il modulo ESP8266 per comodare Arduino da Smartphone

    Marzo 15, 2017

    Progetto rilevatore apertura garage con Arduino

    Gennaio 2, 2017

    C.H.I.P il nuovo PC low cost targato Linux da 9$

    Gennaio 1, 2017
    Add A Comment

    Comments are closed.

    Donazione PayPal
    Instructables
    Instructables
    Alla Scoperta di Backtrack
    Alla scoperta di Backtrack
    Raspberry PI
    Kali Linux
    Arduino
    Kali Linux
    Github Repo
    Instructables
    Chi sono e come contattarmi
    Instructables
    Email
    Blogroll
    • Blog di AlterVista
    • Come iniziare
    • Forum di Supporto
    • Guide WordPress
    Meta
    • Accedi
    • Feed dei contenuti
    • Feed dei commenti
    • WordPress.org
    Editors Picks
    8.5

    Apple Planning Big Mac Redesign and Half-Sized Old Mac

    Gennaio 5, 2021

    Autonomous Driving Startup Attracts Chinese Investor

    Gennaio 5, 2021

    Onboard Cameras Allow Disabled Quadcopters to Fly

    Gennaio 5, 2021
    Top Reviews
    9.1

    Review: T-Mobile Winning 5G Race Around the World

    By ismanettoneblog
    8.9

    Xiaomi Mi 10: New Variant with Snapdragon 870 Review

    By ismanettoneblog
    8.9

    Samsung Galaxy S21 Ultra Review: the New King of Android Phones

    By ismanettoneblog
    Advertisement
    Demo
    iSmanettone
    Facebook X (Twitter) Instagram Pinterest Vimeo YouTube
    • Home
    • News
    • Arduino
    • Raspberry
    © 2025 ThemeSphere. Designed by ThemeSphere.

    Type above and press Enter to search. Press Esc to cancel.

    Ad Blocker rilavato
    Ad Blocker rilavato
    Il nostro sito web è reso possibile dalla visualizzazione di pubblicità online ai nostri visitatori. Ti preghiamo di supportarci disabilitando il tuo Ad Blocker