Using 4 buttons for up, down, left and right to move the maze to get the bead from the start to the finish.
The code (which is below) is actually quite straight forward. Most of my time was spend gluing bits of cardbaord together to make the various bits that are needed to mount the servos and the maze itself..
In case you need recommends on cardbaord the box that the bumper packs of pampers nappies come in are ideal. (yes I have small kids)
Below is the code. Be aware I'm more about getting the Arduino to do something and so the code will be a bit rough around the edges. It works but I definitely do not consider it best practise or even efficent code.
Use at your own risk.
// Balance Table for Maze
// Winkleink
// 2011
// Pin 7 Left
// Pin 6 Right
//Pin 5 Up
//Pin 4 Down
// Pin 10 Servo - Up/Down
// Pin 9 Servo - Left/Right
// Library that makes working with Servos easier
#include <Servo.h>
// Set Button variables
int bLeft = 5; // Left Button
int bRight = 4; // Right Button
int bUp = 7; // Up Button
int bDown = 6; // Down Button
// Set Servo variables
Servo servoUD; // Servo Up/Down on Pin 10
Servo servoLR; // Servo Left/Right on Pin 9
//Set Servo position variables
int posUD = 100; // variable to store the Up/Down servo position
int posLR = 100; // variable to store the Left/Right servo position
void setup()
{
servoUD.attach(10); // attaches the servo on pin 10 to the servo object
servoLR.attach(9); // attaches the servo on pin 9 to the servo object
pinMode(bLeft,INPUT); // bLeft - Left Button
pinMode(bRight,INPUT); // bRight - Right Button
pinMode(bUp,INPUT); // bUp - Up Button
pinMode(bDown,INPUT); // bDown - Down Button
}
void loop()
{
// Position the Serrvo
// As the initial variable are center this also centers the table when it starts
servoUD.write(posUD);
servoLR.write(posLR);
if (digitalRead(bLeft) == HIGH){
posLR--;
}
if (digitalRead(bRight) == HIGH){
posLR++;
}
if (digitalRead(bUp) == HIGH){
posUD--;
}
if (digitalRead(bDown) == HIGH){
posUD++;
}
delay(50);
}