/************************************************************
* JOC Leds Rebots
* Data: 16/01/2024
* Autor: T.Salas (tsalas@iesportdalcudia.org)
***********************************************************/
#define LED_PIN_1 13
#define LED_PIN_2 12
#define LED_PIN_3 11
#define LED_PIN_4 10
#define LED_PIN_5 9
#define LED_PIN_6 8
#define LED_PIN_7 7
#define LED_PIN_8 6
#define LED_PIN_9 5
#define LED_PIN_10 4
#define BOTO_PIN_1 3
#define BOTO_PIN_2 2
#define LED_NUM 10
byte LEDArray[LED_NUM] = { LED_PIN_1,
LED_PIN_2,
LED_PIN_3,
LED_PIN_4,
LED_PIN_5,
LED_PIN_6,
LED_PIN_7,
LED_PIN_8,
LED_PIN_9,
LED_PIN_10 };
int LEDIndex = 1;
unsigned long periode = 1000; //començam amb 1 segon
bool sentit = true; //true cap a la dreta, false cap a l'esquerra
bool running = true;
bool pitjat = false;
String colorLedActiu = "vermell";
unsigned long temps;
void iniciaLEDS()
{
pinMode( 4, INPUT);
for (int i = 0; i < LED_NUM; i++) {
pinMode(LEDArray[i], OUTPUT);
}
}
void encenLEDSeleccionat( int index )
{
for (int i = 0; i < LED_NUM; i++) {
if (i == index) {
digitalWrite(LEDArray[i], HIGH);
switch (i) {
case 0:
colorLedActiu = "vermell";
if( !pitjat ) {
running = false;
}
break;
case 1:
colorLedActiu = "groc1";
break;
case 2:
colorLedActiu = "verd";
break;
case 3:
colorLedActiu = "verd";
break;
case 4:
colorLedActiu = "verd";
break;
case 5:
colorLedActiu = "verd";
break;
case 6:
colorLedActiu = "verd";
break;
case 7:
colorLedActiu = "verd";
break;
case 8:
colorLedActiu = "groc2";
break;
case 9:
colorLedActiu = "vermell";
if( !pitjat ) {
running = false;
}
break;
}
}
else {
digitalWrite(LEDArray[i], LOW);
}
}
}
void nextLED()
{
if( sentit ) { //cap a la dreta
LEDIndex++;
if (LEDIndex >= LED_NUM-1) {
sentit = false;
}
} else { //cap a l'esquerra
LEDIndex--;
if (LEDIndex <= 0) {
sentit = true;
}
}
encenLEDSeleccionat(LEDIndex);
}
void setup()
{
iniciaLEDS();
temps = millis();
}
void loop() {
if( running) {
pitjat = false;
temps=temps+periode;
while( millis() <= temps+periode) { //delay del periode led a led
if( ( digitalRead(BOTO_PIN_1) == false ) && (!sentit) ) { //si pitjam jugador 1
pitjat = true;
if( colorLedActiu == "groc1" ) {
running = true;
} else {
running = false;
}
}
if( ( digitalRead(BOTO_PIN_2) == false ) && (sentit) ) { //si pitjam jugador 2
pitjat = true;
if( colorLedActiu == "groc2" ) {
running = true;
} else {
running = false;
}
}
}
nextLED();
periode = periode*0.97; //Cada ronda nova acceleram un 3%
} else { //acaba el joc
for (int i = 0; i < LED_NUM; i++) {
digitalWrite(LEDArray[i], LOW);
}
if( pitjat ) {
if( sentit ) {
digitalWrite(LEDArray[9], HIGH);
delay(300);
digitalWrite(LEDArray[9], LOW);
delay(300);
} else {
digitalWrite(LEDArray[0], HIGH);
delay(300);
digitalWrite(LEDArray[0], LOW);
delay(300);
}
} else {
if( sentit ) {
digitalWrite(LEDArray[0], HIGH);
delay(300);
digitalWrite(LEDArray[0], LOW);
delay(300);
} else {
digitalWrite(LEDArray[9], HIGH);
delay(300);
digitalWrite(LEDArray[9], LOW);
delay(300);
}
}
}
}