// ************************************************************************************************
//
// Documentation for this, and the rest of the LC libraries that make this up.
// Here's the book : https://github.com/leftCoast/LC_libraryDocs/blob/main/LC_libraries.pdf
// Search for : mechButton & timeObj
//
// ************************************************************************************************
#include <mechButton.h>
#include <timeObj.h>
#define led1Pin 2
#define led2Pin 3
#define led3Pin 4
#define led4Pin 5
#define led5Pin 6
#define led6Pin 7
#define btn1Pin 8
#define btn2Pin 9
#define btn3Pin 10
#define btn4Pin 11
#define btn5Pin 12
#define btn6Pin 13
#define MOLE_TIME 500 // ms
mechButton btn1(btn1Pin);
mechButton btn2(btn2Pin);
mechButton btn3(btn3Pin);
mechButton btn4(btn4Pin);
mechButton btn5(btn5Pin);
mechButton btn6(btn6Pin);
timeObj moleTimer(MOLE_TIME);
bool selected;
int mole;
int playerAScore;
int playerBScore;
void setup() {
Serial.begin(9600);
pinMode(led1Pin, OUTPUT);
pinMode(led2Pin, OUTPUT);
pinMode(led3Pin, OUTPUT);
pinMode(led4Pin, OUTPUT);
pinMode(led5Pin, OUTPUT);
pinMode(led6Pin, OUTPUT);
btn1.setCallback(btn1Clk);
btn2.setCallback(btn2Clk);
btn3.setCallback(btn3Clk);
btn4.setCallback(btn4Clk);
btn5.setCallback(btn5Clk);
btn6.setCallback(btn6Clk);
selected = false;
playerAScore = 0;
playerBScore = 0;
}
void setLEDSOff(void) {
digitalWrite(led1Pin, LOW);
digitalWrite(led2Pin, LOW);
digitalWrite(led3Pin, LOW);
digitalWrite(led4Pin, LOW);
digitalWrite(led5Pin, LOW);
digitalWrite(led6Pin, LOW);
}
void btn1Clk(void) {
if (mole!=1) return; // Not our mole, bail.
if (!btn1.getState()) { // btn1 grounded!
if (!selected) { // If we are first?!?
selected = true; // We got it!
setLEDSOff();
digitalWrite(led1Pin, HIGH); // Show our LED.
playerAScore++; // We get a point.
}
}
}
void btn2Clk(void) {
if (mole!=2) return; // Not our mole, bail.
if (!btn2.getState()) { // btn2 grounded!
if (!selected) { // If we are first?!?
selected = true; // We got it!
setLEDSOff(); // Clear LEDs
digitalWrite(led2Pin, HIGH); // Show our LED.
playerAScore++; // We get a point.
}
}
}
void btn3Clk(void) {
if (mole!=3) return; // Not our mole, bail.
if (!btn3.getState()) { // btn3 grounded!
if (!selected) { // If we are first?!?
selected = true; // We got it!
setLEDSOff(); // Clear LEDs
digitalWrite(led3Pin, HIGH); // Show our LED.
playerAScore++; // We get a point.
}
}
}
void btn4Clk(void) {
if (mole!=1) return; // Not our mole, bail.
if (!btn4.getState()) { // btn4 grounded!
if (!selected) { // If we are first?!?
selected = true; // We got it!
setLEDSOff(); // Clear LEDs
digitalWrite(led4Pin, HIGH); // Show our LED.
playerBScore++; // We get a point.
}
}
}
void btn5Clk(void) {
if (mole!=2) return; // Not our mole, bail.
if (!btn5.getState()) { // btn5 grounded!
if (!selected) { // If we are first?!?
selected = true; // We got it!
setLEDSOff(); // Clear LEDs
digitalWrite(led5Pin, HIGH); // Show our LED.
playerBScore++; // We get a point.
}
}
}
void btn6Clk(void) {
if (mole!=3) return; // Not our mole, bail.
if (!btn6.getState()) { // btn6 grounded!
if (!selected) { // If we are first?!?
selected = true; // We got it!
setLEDSOff(); // Clear LEDs
digitalWrite(led6Pin, HIGH); // Show our LED.
playerBScore++; // We get a point.
}
}
}
void showScore(void) {
Serial.print("Player A :\t");
Serial.println(playerAScore);
Serial.print("Player B :\t");
Serial.println(playerBScore);
Serial.println("******************");
}
void loop() {
idle();
if (moleTimer.ding()) { // Time's up!
showScore();
mole = random(1,4);
Serial.println(mole);
selected = false;
setLEDSOff();
switch(mole) {
case 1 :
digitalWrite(led1Pin, HIGH); // Show mole LED.
digitalWrite(led4Pin, HIGH); // Show other mole LED.
break;
case 2 :
digitalWrite(led2Pin, HIGH); // Show mole LED.
digitalWrite(led5Pin, HIGH); // Show other mole LED.
break;
case 3 :
digitalWrite(led3Pin, HIGH); // Show mole LED.
digitalWrite(led6Pin, HIGH); // Show other mole LED.
break;
}
moleTimer.start();
}
}