In this tutorial we will see how to simply use the joystick from the accessory pack with CircuitPython.
This tutorial is made with Mu IDE for CircuitPython.
If you haven’t installed those yet please refer to the installation guide on our website.
Begin by opening Mu and creating a new file
Copy the following code :
from gamebuino_meta import begin, waitForUpdate, display, buttons, color import board from analogio import AnalogIn while True: waitForUpdate() display.clear()
This will import the Gamebuino libraries needed for the program to work, as well as a “board” and an “AnalogIn” libraries we will use to handle the joystick.
The part begining by “while True:” is our main loop, without it nothing would happen at all.
To be able to use the joystick we will need to read the values sent by the two pins corresponding to the X and Y axis. Since those are analog pins we will use the “AnalogIn” function to communicate with the stick.
For that purpose we define the attach pins of our two axis as follows :
x_pin = analogio.AnalogIn(board.A1) y_pin = analogio.AnalogIn(board.A2)
We assign the A1 pin to the X axis and the A2 pin to the Y axis.
We can now proceed with the reading itself.
For that we use a small function called “read_input()” such as :
def read_input(pin): return pin.value
Calling this function and specifying which pin we want to read from will give us a value between 0 and 65536 (16 bits base)
To monitor the behavior of our setup we will display those values on screen.
Nothing complicated here, we just add a few calls the the print function in our main loop :
while True: waitForUpdate() display.clear() display.print("X = ") display.print(read_input(x_pin)) display.print("\n") display.print("Y = ") display.print(read_input(y_pin))
A bit convoluted but since we don’t have access to a proper printf function we can’t do complex formating so we need to make do.
We will now create a specific function that will transform those values into a visual representation of our joystick.
This function will be called “draw_interface” and is declared as such :
It doesn"t do anything yet but we can already add a call to it in our main loop :
while True: waitForUpdate() display.clear() display.print("X = ") display.print(read_input(x_pin)) display.print("\n") display.print("Y = ") display.print(read_input(y_pin)) draw_interface()
We will represent the movement of our joystick in the form of a point moving inside a circle. So we will display those two elements :
def draw_interface(): display.drawCircle(display.width()//2, display.height()//2, 20) dot_x = (read_input(x_pin) - 32768) * 20 // 65536 dot_y = (read_input(y_pin) - 32768) * 20 // 65536 display.setColor(color.RED) display.fillCircle(dot_x + display.width()//2, dot_y + display.height()//2, 5)
We start by drawing a circle with the function “drawCircle”, we place it at the center of the screen with a radius of 20 units.
We then calculate the coordinates of the point to display by reporting the values read from our two axis X and Y on this 20 units circle.
The we change the display color to red before using “fillCircle” to draw a red dot of 5 units radius that moves accordingly with the movement of our two axis.
You just went through another tutorial ! Now it’s your time to shine.