Hi everyone, I have a working Auction code that I need to improve from the actual 2 buttons and leds up to 10 of both. I'll use two 16 channels Multiplexers, model CD74HC4067 (one as Multiplexer for the buttons and one as Demultiplexer for the leds ). I tried o look for tutorials but didn't work.
Any kind of help would be appreciated )
just remember that I already put randomly all the buttons and leds pins, excpet for the first two that i used to try the code with my Arduino Uno.
const int BUZZER = 5;
//------------------------------------------------
//LED ADDRESSING
const int LED_A = 13;
const int LED_B = 8;
const int LED_C = 20;
const int LED_D = 21;
const int LED_E = 22;
const int LED_F = 23;
const int LED_G = 24;
const int LED_H = 25;
const int LED_I = 26;
const int LED_L = 27;
//------------------------------------------------
// BUTTONS ADDRESSING
const int BUTTON_A = 2;
const int BUTTON_B = 3;
const int BUTTON_C = 28;
const int BUTTON_D = 29;
const int BUTTON_E = 30;
const int BUTTON_F = 31;
const int BUTTON_G = 32;
const int BUTTON_H = 33;
const int BUTTON_I = 34;
const int BUTTON_L = 35;
//--------------------------------------------------
//BIDDER NAMES
String but1 = "Pino";
String but2 = "Manuel";
String but3 = "Luca";
String but4 = "Giuseppe";
String but5 = "Simone";
String but6 = "Danilo";
String but7 = "Daniele";
String but8 = "Mario";
String but9 = "Pino";
String but10 = "Manuel";
String winner;
int pinButton[] = { BUTTON_A, BUTTON_B, BUTTON_C, BUTTON_D, BUTTON_E, BUTTON_F, BUTTON_G, BUTTON_G, BUTTON_I, BUTTON_L };
boolean AuctionFinish = false;
boolean running = false;
static unsigned long lastAuctionTime;
int count = 0;
int lastBidder;
void isr_A() { if(lastBidder != BUTTON_A) { startAuction(BUTTON_A); } }
void isr_B() { if(lastBidder != BUTTON_B) { startAuction(BUTTON_B); } }
void isr_C() { if(lastBidder != BUTTON_C) { startAuction(BUTTON_C); } }
void isr_D() { if(lastBidder != BUTTON_D) { startAuction(BUTTON_D); } }
void isr_E() { if(lastBidder != BUTTON_E) { startAuction(BUTTON_E); } }
void isr_F() { if(lastBidder != BUTTON_F) { startAuction(BUTTON_F); } }
void isr_G() { if(lastBidder != BUTTON_G) { startAuction(BUTTON_G); } }
void isr_H() { if(lastBidder != BUTTON_H) { startAuction(BUTTON_H); } }
void isr_I() { if(lastBidder != BUTTON_I) { startAuction(BUTTON_I); } }
void isr_L() { if(lastBidder != BUTTON_L) { startAuction(BUTTON_L); } }
void deactivateButtons() {
attachInterrupt(digitalPinToInterrupt(BUTTON_A), isr_A, LOW);
attachInterrupt(digitalPinToInterrupt(BUTTON_B), isr_B, LOW);
attachInterrupt(digitalPinToInterrupt(BUTTON_C), isr_C, LOW);
attachInterrupt(digitalPinToInterrupt(BUTTON_D), isr_D, LOW);
attachInterrupt(digitalPinToInterrupt(BUTTON_E), isr_E, LOW);
attachInterrupt(digitalPinToInterrupt(BUTTON_F), isr_F, LOW);
attachInterrupt(digitalPinToInterrupt(BUTTON_G), isr_G, LOW);
attachInterrupt(digitalPinToInterrupt(BUTTON_H), isr_H, LOW);
attachInterrupt(digitalPinToInterrupt(BUTTON_I), isr_I, LOW);
attachInterrupt(digitalPinToInterrupt(BUTTON_L), isr_L, LOW);
}
void activateButtons() {
attachInterrupt(digitalPinToInterrupt(BUTTON_A), isr_A, FALLING);
attachInterrupt(digitalPinToInterrupt(BUTTON_B), isr_B, FALLING);
attachInterrupt(digitalPinToInterrupt(BUTTON_C), isr_C, FALLING);
attachInterrupt(digitalPinToInterrupt(BUTTON_D), isr_D, FALLING);
attachInterrupt(digitalPinToInterrupt(BUTTON_E), isr_E, FALLING);
attachInterrupt(digitalPinToInterrupt(BUTTON_F), isr_F, FALLING);
attachInterrupt(digitalPinToInterrupt(BUTTON_G), isr_G, FALLING);
attachInterrupt(digitalPinToInterrupt(BUTTON_H), isr_H, FALLING);
attachInterrupt(digitalPinToInterrupt(BUTTON_I), isr_I, FALLING);
attachInterrupt(digitalPinToInterrupt(BUTTON_L), isr_L, FALLING);
}
void setup() {
Serial.begin(9600);
pinMode(BUZZER, OUTPUT);
pinMode(LED_A, OUTPUT);
pinMode(LED_B, OUTPUT);
pinMode(LED_C, OUTPUT);
pinMode(LED_D, OUTPUT);
pinMode(LED_E, OUTPUT);
pinMode(LED_F, OUTPUT);
pinMode(LED_G, OUTPUT);
pinMode(LED_H, OUTPUT);
pinMode(LED_I, OUTPUT);
pinMode(LED_L, OUTPUT);
pinMode(BUTTON_A, INPUT_PULLUP);
pinMode(BUTTON_B, INPUT_PULLUP);
pinMode(BUTTON_C, INPUT_PULLUP);
pinMode(BUTTON_D, INPUT_PULLUP);
pinMode(BUTTON_E, INPUT_PULLUP);
pinMode(BUTTON_F, INPUT_PULLUP);
pinMode(BUTTON_G, INPUT_PULLUP);
pinMode(BUTTON_H, INPUT_PULLUP);
pinMode(BUTTON_I, INPUT_PULLUP);
pinMode(BUTTON_L, INPUT_PULLUP);
activateButtons();
deactivateLed();
Serial.println("--- System ready to start an auction ---");
}
void deactivateLed() {
digitalWrite(LED_A, LOW);
digitalWrite(LED_B, LOW);
digitalWrite(LED_C, LOW);
digitalWrite(LED_D, LOW);
digitalWrite(LED_E, LOW);
digitalWrite(LED_F, LOW);
digitalWrite(LED_G, LOW);
digitalWrite(LED_H, LOW);
digitalWrite(LED_I, LOW);
digitalWrite(LED_L, LOW);
}
int searchButton(int button) {
int pos = -1;
for (int i = 0; i < sizeof(pinButton); i++) {
if (button == pinButton[i]) {
pos = i;
break;
}
}
return pos;
}
void loop() {
if ((running) && (millis() - lastAuctionTime >= 25)) {
static unsigned long lastBuzzerTime = 0;
noTone(BUZZER);
if (millis() - lastBuzzerTime >= 1000) {
tone(BUZZER, 500, 800);
count++;
Serial.println(count);
lastBuzzerTime = millis();
}
if (count == 3) {
running = false;
AuctionFinish = true;
deactivateButtons();
}
lastAuctionTime = millis();
} else if (AuctionFinish) {
unsigned long LoopStartTime = millis();
Serial.println(String("--- The Auction winner is: ") + winner + String("! ---"));
AuctionFinish = false;
Serial.println("--- Auction completed ---");
delay(6000);
activateButtons();
lastBidder = -1;
deactivateLed();
Serial.println("\n--- It is possible to start an Autcion ---");
tone(BUZZER, 1500, 150);
delay(200);
tone(BUZZER, 1500, 150);
delay(200);
tone(BUZZER, 1500, 150);
delay(200);
tone(BUZZER, 1500, 150);
delay(200);
tone(BUZZER, 1500, 150);
}
}
void startAuction(int button) {
deactivateLed();
running = true;
winner = "";
lastAuctionTime = 0;
count = 0;
switch (searchButton(button)) {
case 0:
winner = but1;
lastBidder = BUTTON_A;
Serial.println(String("Actual winner: ") + winner);
digitalWrite(LED_A, HIGH);
break;
case 1:
winner = but2;
lastBidder = BUTTON_B;
Serial.println(String("Actual winner: ") + winner);
digitalWrite(LED_B, HIGH);
break;
case 2:
winner = but3;
lastBidder = BUTTON_C;
Serial.println(String("Actual winner: ") + winner);
digitalWrite(LED_C, HIGH);
break;
case 3:
winner = but4;
lastBidder = BUTTON_D;
Serial.println(String("Actual winner: ") + winner);
digitalWrite(LED_D, HIGH);
break;
case 4:
winner = but5;
lastBidder = BUTTON_E;
Serial.println(String("Actual winner: ") + winner);
digitalWrite(LED_E, HIGH);
break;
case 5:
winner = but6;
lastBidder = BUTTON_F;
Serial.println(String("Actual winner: ") + winner);
digitalWrite(LED_F, HIGH);
break;
case 6:
winner = but7;
lastBidder = BUTTON_G;
Serial.println(String("Actual winner: ") + winner);
digitalWrite(LED_G, HIGH);
break;
case 7:
winner = but8;
lastBidder = BUTTON_H;
Serial.println(String("Actual winner: ") + winner);
digitalWrite(LED_A, HIGH);
break;
case 8:
winner = but9;
lastBidder = BUTTON_I;
Serial.println(String("Actual winner: ") + winner);
digitalWrite(LED_I, HIGH);
break;
case 9:
winner = but10;
lastBidder = BUTTON_L;
Serial.println(String("Actual winner: ") + winner);
digitalWrite(LED_L, HIGH);
break;
default:
break;
}
}