I am completely new to Arduino (and programming to that fact), although I have been reading the forum every day for about 3 months now! Learning and absorbing as much as I can, for which I thank the Arduino Community immensly for!! Without this support I would not have been able to even attempt this project, let alone finish it!
My first Arduino Project is a Skill Stop Game consisting of 7 Leds which flash from Left to Right and then back down, Right to Left. The idea is to push the button when either of the 2 Green Leds are lit. A successful hit will increase the speed by 10%. An unsuccessful hit will stop the sequence on the incorrect Led and display the 'level' reached in the Serial Monitor (along with a silly message).
I've also no experience with Electronics, but wanted to build something a little more permanent, without having to incorporate additional Microcontrollers (I think thats abit advanced for me at this stage). So I decided to use VeroBoard with Female Headers at one end enabling me to simply hook up the Arduino with Jumper Wires as and when I wanted to show-off, I mean use it!
I thought I'd share this project to give my fellow 'noobs' an idea of how someone with literately no knowledge in this field, can actually build a working project (even if this is relatively simple)! Pictures and Video below... Please feel free to add any comments and feedback, I'd love to learn 'what I did wrong' and 'what could be better' etc...
/*
Skill Stop Sketch correct hit increases Speed by 10%.
*/
int ledPins[] = {3, 14, 15, 16, 17, 18, 19}; // Have used Analog Pins as this was easier to set up on Arduino
int delayTime = 250; // Starting Led Speed
int level = 1; // Start at Level 1
boolean greenLed = false; // Boolean to define when greenLed is on
boolean gameOver = false; // Boolean to define when Game Over
void buttonPush(); // Function for interrupt
void setup() {
pinMode(2, INPUT);
for(int i=0; i<7; i++){
pinMode(ledPins[i], OUTPUT);
}
attachInterrupt(0, buttonPush, FALLING);
Serial.begin(9600);
}
void loop() {
if(gameOver == true){ // Game Over sequence
Serial.print("You Reached Level: "); // Display level reached
Serial.println(level);
if(level>0 && level<11){
Serial.println("You can do better than that!"); // Message for score less than 11
}
if(level>10 && level<16){
Serial.println("A worthy effort!"); // Message for score over 11 and less than 16
}
if(level>15 && level<21){
Serial.println("You're a machine!"); // Message for score over 15 and less than 21
}
if(level>20){
Serial.println("Unreal!"); // Message for score over 20
}
delay(3000);
for(int i=0; i<7; i++){ // Flash all Leds to start Game
digitalWrite(ledPins[i], LOW);
}
delay(200);
for(int i=0; i<7; i++){
digitalWrite(ledPins[i], HIGH);
}
delay(200);
for(int i=0; i<7; i++){
digitalWrite(ledPins[i], LOW);
}
delay(200);
for(int i=0; i<7; i++){
digitalWrite(ledPins[i], HIGH);
}
delay(200);
for(int i=0; i<7; i++){
digitalWrite(ledPins[i], LOW);
}
delay(200);
for(int i=0; i<7; i++){
digitalWrite(ledPins[i], HIGH);
}
delay(200);
for(int i=0; i<7; i++){
digitalWrite(ledPins[i], LOW);
}
level = 1; // Reset Level to 1
delayTime = 250; // Starting delay time
gameOver = false; // Set Game Over to false
delay(500);
}
if(gameOver == false){ // Check Game Over indicator before each Led (this ensures Game ends immediately as an interrupt returns to the position it left off)
digitalWrite(3, HIGH);
delay(delayTime);
}
if(gameOver == false){
digitalWrite(14, HIGH);
delay(delayTime);
}
if(gameOver == false){
digitalWrite(15, HIGH);
delay(delayTime);
}
if(gameOver == false){
digitalWrite(16, HIGH);
delay(delayTime);
}
if(gameOver == false){
digitalWrite(17, HIGH);
delay(delayTime);
}
if(gameOver == false){
greenLed = true; // Set greenLed True to use during interrupt (correct hit)
digitalWrite(18, HIGH);
delay(delayTime);
}
if(gameOver == false){
digitalWrite(19, HIGH);
delay(delayTime);
}
if(gameOver == false){
digitalWrite(19, LOW);
delay(delayTime);
}
if(gameOver == false){
digitalWrite(18, LOW);
greenLed = false; // Set greenLed False to use during interrupt (incorrect hit)
delay(delayTime);
}
if(gameOver == false){
digitalWrite(17, LOW);
delay(delayTime);
}
if(gameOver == false){
digitalWrite(16, LOW);
delay(delayTime);
}
if(gameOver == false){
digitalWrite(15, LOW);
delay(delayTime);
}
if(gameOver == false){
digitalWrite(14, LOW);
}
}
void buttonPush(){ // Button push interrupt
static unsigned long last_interrupt_time = 0;
unsigned long interrupt_time = millis();
if (interrupt_time - last_interrupt_time > 300){ // Debounce
if(greenLed == true){ // If Button pushed during greenLed True
delayTime = delayTime * 9 / 10; // Increase Delaytime by 10%
level++; // Increase level by 1
}
else{
gameOver = true; // If greenLed is not true, it must be false, hence set Game Over as True
}
last_interrupt_time = interrupt_time;
}
}
