Joc amb LEDS


IES Port d'Alcúdia

1. Introducció

Es tracta d'un senzill joc de 2 jugadors que en el que s'ha de pitjar el polsador just en el moment en que està encés el Led Groc de la part de cada jugador. Cada cop s'accelera més el joc i perd el judagor que no aconsegueix  pijtar el botó  en el moment que li pertoca.

2. Esquema de muntatge

esquema

3. Programació Arduino



/************************************************************
* 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);
}

}
}
}