Giuseppe Parrello

 

Embedded Joystick


Introduzione

Con questo progetto andremo a gestire un Joystick, usando la scheda di sviluppo FTDI FT232H (di cui esiste una pagina dedicata su questo sito) e la scheda di sviluppo TI ADS1115 (di cui esiste una pagina dedicata su questo sito).

 

Collegamento

Il Joystick deve essere collegato alla scheda di sviluppo TI ADS1115. I connettori di collegamento sono elencati qui di seguito:

Immagine Scheda FT232H Scheda ADS1115 Joystick

FT232H - ADS1115 - JOYSTICK

AD0 SCL ------
AD1 + AD2 SDA ------
+5V VDD ------
GND GND ------
GND ------ GND
+5V ------ +5V
------ A0 VRX
------ A1 VRY
------ A2 SW

 

Codice Python

Per gestire il Joystick, è richiesta la presenza della libreria "Adafruit CircuitPython ADS1x15".
Il seguente esempio di codice Python visualizza sia il valore attuale (in formato "raw") sia il voltaggio attuale dei tre parametri (asse X, asse Y, pulsante) forniti dal Joystick:

import time
import board
import busio
import adafruit_ads1x15.ads1115 as ADS
from adafruit_ads1x15.analog_in import AnalogIn

# Create the I2C bus
i2c = busio.I2C(board.SCL, board.SDA)

# Create the ADC object using the I2C bus
ads = ADS.ADS1115(i2c)

# Create single-ended input on channel 0,1,2
chanX = AnalogIn(ads, ADS.P0)
chanY = AnalogIn(ads, ADS.P1)
chanB = AnalogIn(ads, ADS.P2)

print("{:>6}\t{:>6}\t{:>6}\t{:>6}\t{:>6}\t{:>6}".format("raw_X", "volt_X", "raw_Y", "volt_Y", "raw_B", "volt_B"))

try:
    while True:
        print("{:>6}\t{:>6.3f}\t{:>6}\t{:>6.3f}\t{:>6}\t{:>6.3f}".format(chanX.value, chanX.voltage, chanY.value, chanY.voltage, chanB.value, chanB.voltage))
        time.sleep(0.25)

except KeyboardInterrupt:
    # Capture keyboard ^C to exit the program
    print('\nYou terminated the program. The program ends!')

Per gestire il Joystick, è richiesta la presenza della libreria "ADS1115_FTDI".
Il seguente esempio di codice Python visualizza sia il valore attuale (in formato "raw") sia il voltaggio attuale dei tre parametri (asse X, asse Y, pulsante) forniti dal Joystick:

import time
import ads1x15 as ADS

# Create the ADC object using the I2C bus
ads = ADS.ADS1115()

# Create single-ended input on channel 0,1,2
chanX = ADS.AnalogIn(ads, ADS.P0)
chanY = ADS.AnalogIn(ads, ADS.P1)
chanB = ADS.AnalogIn(ads, ADS.P2)

print("{:>6}\t{:>6}\t{:>6}\t{:>6}\t{:>6}\t{:>6}".format("raw_X", "volt_X", "raw_Y", "volt_Y", "raw_B", "volt_B"))

try:
    while True:
        print("{:>6}\t{:>6.3f}\t{:>6}\t{:>6.3f}\t{:>6}\t{:>6.3f}".format(chanX.value, chanX.voltage, chanY.value, chanY.voltage, chanB.value, chanB.voltage))
        time.sleep(0.25)

except KeyboardInterrupt:
    # Capture keyboard ^C to exit the program
    print('\nYou terminated the program. The program ends!')