[pcomp week 6] Allergic to Love, Joystick Version (serial communication)
I ran into a lot of problems this week!
While doing this week’s labs on serial communication, lots of weird things kept happening — it would work sometimes and not other times, my computer crashed, Arduino couldn’t find the right port…
A few hours in, I realized that 95% of my problems were because I kept forgetting to turn on and off the serial monitor in P5. Even when I realized this I would forget to do it, or do it in the wrong order. This was very irritating.
Eventually, I got it sorted out. In the labs, it was suggested that we wire up one button and two potentiometers. Luckily for me, the joystick that I got for this assignment was literally those three things in one, so once I figured out the code on the Arduino side, I could easily move it into my p5 sketch.
The sketch I decided to add a sensor to was a game I made the other week in ICM, Allergic to Love. In the original version, you use your mouse to move your character along the x-axis, and then clicked to shoot your laser. Using a joystick to replace the mouse was fairly straightforward. The pot in the joystick that controls x-axis movement would replace mouseX, and the button on the joystick would replace mousePressed.
(This joystick also allows you to control movement on the y-axis, and even though this particular game doesn’t require it, I decided to keep that code in just in case in the future I decide to add some kind of movement up and down.)
Like in the lab, I made an array of data in P5 for the 3 sensor inputs: x, y, and button press. The P5 code using the sensor data ended up looking like this:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
function serialEvent() { // read a string from the serial port // until you get carriage return and newline: var inString = serial.readStringUntil('\r\n'); //check to see that there's actually a string there: if (inString.length > 0 ) { var sensors = split(inString, ','); // split the string on the commas if (sensors.length > 2) { // if there are three elements if (sensors[0] == 539) { cannon.dir = 0 } else if (sensors[0] < 200) { cannon.dir = -1 } else if (sensors[0] > 900) { cannon.dir = 1 } buttonPress = sensors[2]; // element 2 is the button } } } |
You can see how I made sensors[0], the x-axis, change direction depending on input, and how I set sensors[2], the button, to a simple variable.
It’s pretty fun to play the game with a joystick. It definitely makes it feel more arcade-y. Even though I had to make it a bit easier to accommodate the joystick, it’s still pretty hard!
My P5 code and my Arduino code are below.