Our Frogger controller transforms the classic arcade gameplay into a physical, hands-on experience by replacing traditional keyboard inputs with interactive, pressure-sensitive lily pads. Rather than tapping arrow keys, players move a small frog figurine to one of four large lily pads—each corresponding to a direction: up, down, left, or right. When the frog is placed on a lily pad, a pressure sensor detects the weight and sends the appropriate signal through the Circuit Playground, moving the frog in-game. This one-to-one input-to-output mapping allows players to intuitively understand how their actions influence the game. The conceptual model draws directly from Frogger’s core mechanics: precision, timing, and spatial awareness. In the original game, players must carefully navigate hazards by choosing when and where to move. Our controller mirrors this concept by encouraging players to physically mimic that movement, moving across pads as if the frog were hopping from lily pad to lily pad. This embodied interaction creates a deeper connection to the game and adds a new layer of engagement. It also transforms a passive seated experience into one that is more active and involved. The lily pads serve as clear signifiers. Each pad’s position in a cross-shaped arrangement makes its purpose obvious and directly reflects its directional function. These affordances support the game’s theme and create an experience rooted in movement, timing, and playful risk-taking.
Open Question:
Do you feel as though it would be difficult to hit the lily pad due to it's size with the frog while also watching the game?
Team contributions:
• Caio: Painted box, 3D printed frog and lily pads, brought and used most of the components for the controller.
•Logan: Coded, soldered, brought boxes, bought pressure sensors, and wired the circuit board.
Code:#include <Keyboard.h>
#include <KeyboardLayout.h> #include <Adafruit_CircuitPlayground.h> #include <Adafruit_Circuit_Playground.h> #define THRESHOLD 600 void setup() { Serial.begin(9600); while (!Serial); // Wait for serial to be ready CircuitPlayground.begin(); Keyboard.begin(); Serial.println("Pressure sensor readings:"); } void loop() { int sensor1 = analogRead(1); // Pin 1 int sensor2 = analogRead(3); // Pin 3 int sensor3 = analogRead(4); // Pin 4 int sensor4 = analogRead(7); // Pin 7 // Print sensor readings to the Serial Monitor Serial.print("Sensor 1: "); Serial.print(sensor1); Serial.print(" | Sensor 2: "); Serial.print(sensor2); Serial.print(" | Sensor 3: "); Serial.print(sensor3); Serial.print(" | Sensor 4: "); Serial.println(sensor4); if (sensor1 < 950) { Keyboard.press(KEY_UP_ARROW); // Forward } else { Keyboard.release(KEY_UP_ARROW); } if (sensor2 < 950) { Keyboard.press(KEY_LEFT_ARROW); // Left } else { Keyboard.release(KEY_LEFT_ARROW); } if (sensor3 < 950) { Keyboard.press(KEY_DOWN_ARROW); // Backward } else { Keyboard.release(KEY_DOWN_ARROW); } if (sensor4 < 950) { Keyboard.press(KEY_RIGHT_ARROW); // Right } else { Keyboard.release(KEY_RIGHT_ARROW); } delay(50); }Image:
Schematic:
Video:
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.