Hey there.
Im building a lockout style game show with 8 buttons..it reads the winners names amongst other various timed outputs
my code feels strong however the system will still jump around and do bizzare things at times.
my own efforts to resolve this have failed.
can anyone suggest the best way to handle 8 inputs coming in and the first one in locking out the other buttons?
thanks alot
#include <SoftwareSerial.h>
#include <MP3.h>
#include <SPI.h>
unsigned long intervalA = 400;
unsigned long intervalB = 600;
unsigned long startTime;
int b1 = 32;
int b2 = 33;
int b3 = 34;
int b4 = 35;
int b5 = 36;
int b6 = 37;
int b7 = 38;
int b8 = 39;
MP3 mp3;
//button status
int bu1 = 0;
int bu2 = 0;
int bu3 = 0;
int bu4 = 0;
int bu5 = 0;
int bu6 = 0;
int bu7 = 0;
int bu8 = 0;
//led outout pins(digital)
int p1 = 22;
int p2 = 23;
int p3 = 24;
int p4 = 25;
int p5 = 26;
int p6 = 27;
int p7 = 28;
int p8 = 29;
int bell = 30;
int buzz = 31;
int left = 42;
int right = 43;
//Status of whether or not a button has been pressed
int set = 0;
int hold = 0;
int time1 = 0;
int time2 = 0;
int time3 = 0;
int time4 = 0;
int time5 = 0;
int time6 = 0;
int time7 = 0;
int time8 = 0;
int reset = 0;
void setup() {
Serial.begin(9600);
mp3.begin (MP3_SOFTWARE_SERIAL);
mp3.volume(0x1F);
mp3.set_mode(MP3::SINGLE) ;
//Button inputs defined
pinMode(b1, INPUT);
pinMode(b2, INPUT);
pinMode(b3, INPUT);
pinMode(b4, INPUT);
pinMode(b5, INPUT);
pinMode(b6, INPUT);
pinMode(b7, INPUT);
pinMode(b8, INPUT);
pinMode(41, INPUT);
//LED outout Pins defined
pinMode(p1, OUTPUT);
pinMode(p2, OUTPUT);
pinMode(p3, OUTPUT);
pinMode(p4, OUTPUT);
pinMode(p5, OUTPUT);
pinMode(p6, OUTPUT);
pinMode(p7, OUTPUT);
pinMode(p8, OUTPUT);
pinMode(bell, OUTPUT);
pinMode(buzz, OUTPUT);
pinMode(left, OUTPUT);
pinMode(right, OUTPUT);
digitalWrite(p1, HIGH);
digitalWrite(p2, HIGH);
digitalWrite(p3, HIGH);
digitalWrite(p4, HIGH);
digitalWrite(p5, HIGH);
digitalWrite(p6, HIGH);
digitalWrite(p7, HIGH);
digitalWrite(p8, HIGH);
digitalWrite(bell, LOW);
digitalWrite(buzz, LOW);
//The delay allows time for the voltage to stabilize (exp. because the electronics are not removed from the buttons!)
delay(1000);
}
void loop() {
//Read to see if a button is pushed
if(hold == 0){
bu1 = digitalRead(b1);
bu2 = digitalRead(b2);
bu3 = digitalRead(b3);
bu4 = digitalRead(b4);
bu5 = digitalRead(b5);
bu6 = digitalRead(b6);
bu7 = digitalRead(b7);
bu8 = digitalRead(b8);
}
//If the status of any of the Buttons has changed to being pulled HIGH
//lockout the other players and their lights so only the winners light remains on
//player 1
if(bu1 == 1){
hold = 1;
digitalWrite(p2, LOW);
digitalWrite(p3, LOW);
digitalWrite(p4, LOW);
digitalWrite(p5, LOW);
digitalWrite(p6, LOW);
digitalWrite(p7, LOW);
digitalWrite(p8, LOW);
digitalWrite(bell, HIGH);
digitalWrite(left, HIGH);
bu1 = 0;
time1 = 1;
startTime = millis();
Serial.println("Player 1");
}
if(bu2 == 1){
hold = 1;
digitalWrite(p1, LOW);
digitalWrite(p3, LOW);
digitalWrite(p4, LOW);
digitalWrite(p5, LOW);
digitalWrite(p6, LOW);
digitalWrite(p7, LOW);
digitalWrite(p8, LOW);
digitalWrite(bell, HIGH);
digitalWrite(left, HIGH);
bu2 = 0;
time2 = 1;
startTime = millis();
Serial.println("Player 2");
}
if(bu3 == 1){
hold = 1;
digitalWrite(p2, LOW);
digitalWrite(p1, LOW);
digitalWrite(p4, LOW);
digitalWrite(p5, LOW);
digitalWrite(p6, LOW);
digitalWrite(p7, LOW);
digitalWrite(p8, LOW);
digitalWrite(bell,HIGH);
digitalWrite(left, HIGH);
bu3 = 0;
time3 = 1;
startTime = millis();
Serial.println("Player 3");
}
if(bu4 == 1){
hold = 1;
digitalWrite(p2, LOW);
digitalWrite(p3, LOW);
digitalWrite(p1, LOW);
digitalWrite(p5, LOW);
digitalWrite(p6, LOW);
digitalWrite(p7, LOW);
digitalWrite(p8, LOW);
digitalWrite(bell, HIGH);
digitalWrite(left, HIGH);
bu4 = 0;
time4 = 1;
startTime = millis();
Serial.println("Player 4");
}
if(bu5 == 1){
hold = 1;
digitalWrite(p2, LOW);
digitalWrite(p3, LOW);
digitalWrite(p4, LOW);
digitalWrite(p1, LOW);
digitalWrite(p6, LOW);
digitalWrite(p7, LOW);
digitalWrite(p8, LOW);
digitalWrite(buzz, HIGH);
digitalWrite(right, HIGH);
bu5 = 0;
time5 = 1;
startTime = millis();
Serial.println("Player 5");
}
if(bu6 == 1){
digitalWrite(p2, LOW);
digitalWrite(p3, LOW);
digitalWrite(p4, LOW);
digitalWrite(p5, LOW);
digitalWrite(p1, LOW);
digitalWrite(p7, LOW);
digitalWrite(p8, LOW);
digitalWrite(buzz,HIGH);
digitalWrite(right, HIGH);
bu6 = 0;
time6 = 1;
startTime = millis();
Serial.println("Player 6");
}
if(bu7 == 1){
hold = 1;
digitalWrite(p2, LOW);
digitalWrite(p3, LOW);
digitalWrite(p4, LOW);
digitalWrite(p5, LOW);
digitalWrite(p6, LOW);
digitalWrite(p1, LOW);
digitalWrite(p8, LOW);
digitalWrite(buzz,HIGH);
digitalWrite(right, HIGH);
bu7 = 0;
time7 = 1;
startTime = millis();
Serial.println("Player 7");
}
if(bu8 == 1){
hold = 1;
digitalWrite(p2, LOW);
digitalWrite(p3, LOW);
digitalWrite(p4, LOW);
digitalWrite(p5, LOW);
digitalWrite(p6, LOW);
digitalWrite(p7, LOW);
digitalWrite(p1, LOW);
digitalWrite(buzz,HIGH);
digitalWrite(right, HIGH);
bu8 = 0;
time8 = 1;
startTime = millis();
Serial.println("Player 8");
}
//these are how im handling the off delay timers for the external bell and buzzer
if (time1 && (millis() - startTime >= intervalA))
{
digitalWrite(bell, LOW);
}
if (time1 && (millis() - startTime >= intervalB))
{
mp3.play_usb_disk(0x0001);
time1 = 0;
}
if (time2 && (millis() - startTime >= intervalA))
{
digitalWrite(bell, LOW);
}
if (time2 && (millis() - startTime >= intervalB))
{
mp3.play_usb_disk(0x0002);
time2 = 0;
}
if (time3 && (millis() - startTime >= intervalA))
{
digitalWrite(bell, LOW);
}
if (time3 && (millis() - startTime >= intervalB))
{
mp3.play_usb_disk(0x0003);
time3 = 0;
}
if (time4 && (millis() - startTime >= intervalA))
{
digitalWrite(bell, LOW);
}
if (time4 && (millis() - startTime >= intervalB))
{
mp3.play_usb_disk(0x0004);
time4 = 0;
}
if (time5 && (millis() - startTime >= intervalA))
{
digitalWrite(buzz, LOW);
}
if (time5 && (millis() - startTime >= intervalB))
{
mp3.play_usb_disk(0x0005);
time5 = 0;
}
if (time6 && (millis() - startTime >= intervalA))
{
digitalWrite(buzz, LOW);
}
if (time6 && (millis() - startTime >= intervalB))
{
mp3.play_usb_disk(0x0006);
time6 = 0;
}
if (time7 && (millis() - startTime >= intervalA))
{
digitalWrite(buzz, LOW);
}
if (time7 && (millis() - startTime >= intervalB))
{
mp3.play_usb_disk(0x0007);
time7 = 0;
}
if (time8 && (millis() - startTime >= intervalA))
{
digitalWrite(buzz, LOW);
}
if (time8 && (millis() - startTime >= intervalB))
{
mp3.play_usb_disk(0x0008);
time8 = 0;
}
if(digitalRead(41)){
reset = 1;
}
//this is the reset
if (reset == 1){
hold = 0;
digitalWrite(22,HIGH);
digitalWrite(23,HIGH);
digitalWrite(24,HIGH);
digitalWrite(25,HIGH);
digitalWrite(26,HIGH);
digitalWrite(27,HIGH);
digitalWrite(28,HIGH);
digitalWrite(29,HIGH);
digitalWrite(30,LOW);
digitalWrite(31,LOW);
digitalWrite(42,LOW);
digitalWrite(43,LOW);
time1 = 0;
time2 = 0;
time3 = 0;
time4 = 0;
time5 = 0;
time6 = 0;
time7 = 0;
time8 = 0;
reset = 0;
}
}