12 Joystick

Hoofdstuk 12 Joystick
In een eerder hoofdstuk leerden we hoe we de Rotary Potentiometer moesten gebruiken. We gaan nu leren over joysticks, wat elektronische modules zijn die op hetzelfde principe werken als de Rotary Potentiometer.

In dit project gaan we de uitvoergegevens van een joystick uitlezen en weergeven op het Terminal-scherm.

Componentkennis

Joystick
Een joystick is een soort invoersensor die met uw vingers wordt gebruikt. U zou al bekend moeten zijn met dit concept, omdat ze veel worden gebruikt in gamepads en afstandsbedieningen. Het kan invoer ontvangen op twee assen (Y en/of X) tegelijkertijd (meestal gebruikt om de richting op een tweedimensionaal vlak te regelen). En het heeft ook een derde richtingsmogelijkheid door naar beneden te drukken (Z-as/richting).

Image

Dit wordt bereikt door twee draaipotentiometers in de joystickmodule op te nemen op 90 graden van elkaar, op zo’n manier geplaatst dat ze verschuivingen in de richting in twee richtingen tegelijk detecteren en met een drukknopschakelaar in de “verticale” as, die kan detecteren wanneer een gebruiker op de joystick drukt.

Image

Wanneer de Joystick-gegevens worden gelezen, zijn er enkele verschillen tussen de assen: gegevens van de X- en Y-as zijn analoog, waarvoor de ADC nodig is. De gegevens van de Z-as zijn digitaal, dus u kunt de GPIO rechtstreeks gebruiken om deze gegevens te lezen of u hebt de optie om de ADC te gebruiken om deze te lezen.

Image
Image

Code

#!/usr/bin/env python3
#############################################################################
# Filename    : Joystick.py
# Description : Read Joystick state
# Author      : www.freenove.com
# modification: 2023/05/11
########################################################################
from gpiozero import Button
import time
from ADCDevice import *

Z_Pin = 18      # define Z_Pin
button = Button(Z_Pin) # define Button pin according to BCM Numbering
adc = ADCDevice() # Define an ADCDevice class object

def setup():
    global adc
    if(adc.detectI2C(0x48)): # Detect the pcf8591.
        adc = PCF8591()
    elif(adc.detectI2C(0x4b)): # Detect the ads7830
        adc = ADS7830()
    else:
        print("No correct I2C address found, \n"
        "Please use command 'i2cdetect -y 1' to check the I2C address! \n"
        "Program Exit. \n");
        exit(-1)
        
def loop():
    while True:     
        val_Z = not button.value     # read digital value of axis Z
        val_Y = adc.analogRead(0)    # read analog value of axis X and Y
        val_X = adc.analogRead(1)
        print ('value_X: %d ,\tvlue_Y: %d ,\tvalue_Z: %d'%(val_X,val_Y,val_Z))
        time.sleep(0.01)

def destroy():
    adc.close()
    button.close()

    
if __name__ == '__main__':
    print ('Program is starting ... ') # Program entrance
    setup()
    try:
        loop()
    except KeyboardInterrupt: # Press ctrl-c to end the program.
        destroy()
        print("Ending program")

Nadat het programma is uitgevoerd, zal het Terminal-venster de gegevens van 3 assen X, Y en Z weergeven. Door de joystick te verschuiven (bewegen) of deze naar beneden te drukken, zullen de gegevens veranderen.

Image
Scroll naar boven