Tutorial_Python_GPIOZero Bladzijde 121
Alle codes (van proefjes) overzichtelijk op een rij
Staat het project er niet bij kijk dan hier
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).

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.

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.


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.


