/*En el siguiente código se establecerá un protocolo de comunicación seríal entre nuestro Arduino
y una PC para intercambio de información con respecto a las funciones y tareas que Arduino desempeñará
detectar cual boton, de entre 3 botones, ha sido presionado primero e informarle a la PC sobre dicho
dato para saber que concursante responderá primero
*/
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // inicializa la interfaz I2C del LCD 16x2
// ****************** se declaran las variables a usar
int jugador1 = A0;
int jugador2 = A1;
int jugador3 = A2;
int jugador4 = A3;
int ledAzul = 8;
int ledAmarillo = 9;
int ledVerde = 10;
int ledRojo = 11;
int a = 0;
int b = 0;
int c = 0;
int d = 0;
int estado1 = 0;
int estado2 = 0;
int estado3 = 0;
int estado4 = 0;
boolean g1;
boolean g2;
boolean g3;
boolean g4;
char confirmacion;
char noGano;
int x = 0;
int y;
int ganoSi = 0;
int ganoNo = 0;
// ***************************** VOID SETUP *****************************
void setup() {
// *************** INICIALIZAR LA PANTALLA LCD ***************
Wire.begin();
lcd.init();
lcd.backlight(); // Coloca luz de fondo al LCD
lcd.clear(); // Borra el LCD
// sección para configurar pines a usar en nuestro arduino y habilitar la comunicación serial
pinMode(jugador1, INPUT);
pinMode(jugador2, INPUT);
pinMode(jugador3, INPUT);
pinMode(jugador4, INPUT);
pinMode(ganoSi, INPUT);
pinMode(ganoNo, INPUT);
pinMode(ledAzul, OUTPUT); //Define el Led del Jugador 1 (azul)
pinMode(ledAmarillo, OUTPUT);
pinMode(ledVerde, OUTPUT);
pinMode(ledRojo, OUTPUT);
//********************* iniciamos nuestro puerto serial
Serial.begin(9600);
while (!Serial) { //espera a que se conecte el puerto serial a la PC
}
}
// ***************************** VOID LOOP *****************************
void loop() {
// código principal donde se establecerán las funciones que realizará nuestro arduino
//Se realiza lectura de entradas a usar
estado1 = digitalRead(jugador1);
estado2 = digitalRead(jugador2);
estado3 = digitalRead(jugador3);
estado4 = digitalRead(jugador4);
pantallaPuntos();
condicionesPrimarias();
}
// **************************** FINAL DEL LOOP **************************
void pantallaPuntos() {
lcd.setCursor(0,0);
lcd.print("Azul=");
lcd.print(a);
lcd.setCursor(9,0);
lcd.print("Amar=");
lcd.print(b);
lcd.setCursor(0,1);
lcd.print("Verd=");
lcd.print(c);
lcd.setCursor(9,1);
lcd.print("Rojo=");
lcd.print(d);
}
// **************************** condiciones primarias ********************
void condicionesPrimarias() {
if (estado1 == HIGH) {
y = ledAzul;
x = a;
estadoColorAzul(); //Rutina su presionan boton Azul primero
a = x;
ledAzul = y;
}
if (estado2 == HIGH) {
y = ledAmarillo;
x = b;
estadoColorAmarillo(); //Rutina su presionan boton Amarillo primero
b = x;
ledAmarillo = y;
}
if (estado3 == HIGH) {
y = ledVerde;
x = c;
estadoColorVerde(); //Rutina su presionan boton verde primero
c = x;
ledVerde = y;
}
if (estado4 == HIGH) {
y = ledRojo;
x = d;
estadoColorRojo(); //Rutina su presionan boton Rojo primero
d = x;
ledRojo = y;
}
}
// ******* RUTINAS DE COMPROBACION ***********
// **********************************JUGADOR AZUL (1) ****************************
void estadoColorAzul() {
if (estado1 == HIGH) {
digitalWrite(y, HIGH);
//delay(500);
Serial.print("Azul = ");// envío de parámetro de respuesta de jugador 1
Serial.println (x); // imprime en pantalla el valor actual del jugador 1
confirmarSiGano();
}
}
// **********************************JUGADOR AMARILLO (2) ***************************
void estadoColorAmarillo() {
if (estado2 == HIGH) {
digitalWrite(ledAmarillo, HIGH);
Serial.print("Amarillo = ");// envío de parámetro de respuesta de jugador 2
Serial.println (x); // imprime en pantalla el valor actual del jugador 2
confirmarSiGano();
}
}
// **********************************JUGADOR verde (3) ****************************
void estadoColorVerde() {
if (estado3 == HIGH) {
digitalWrite(ledVerde, HIGH); //delay(500);// retardo de medio segundo para evitar que las pulsaciones de los demás jugadores sean percibidas
Serial.print("Verde = "); // envío de parámetro de respuesta de jugador 2
Serial.println (x); // imprime en pantalla el valor actual del jugador 2
confirmarSiGano();
}
}
// **********************************JUGADOR ROJO (4)****************************
void estadoColorRojo() {
if (estado4 == HIGH) {
digitalWrite(ledRojo, HIGH);
Serial.print("Rojo = ");// envío de parámetro de respuesta de jugador 4
Serial.println (x); // imprime en pantalla el valor actual del jugador 4
confirmarSiGano();
}
}
void confirmarSiGano(){
//bucle de espera por confirmación para jugador 1
do { //verifica boton de reset
//delay(50);
ganoSi = digitalRead(12);
ganoNo = digitalRead(13);
if (ganoSi == HIGH) {
x = x + 5;
Serial.print("Total = ");// envío de parámetro de respuesta de jugador 1
Serial.println (x); // imprime en pantalla el valor actual del jugador 1
confirmacion = 'p';
noGano = 's';
Serial.println("Si GANÓ");
digitalWrite(y, LOW);
}
else if (ganoNo == HIGH) {
x = x - 2;
Serial.print("Total = ");// envío de parámetro de respuesta de jugador 1
Serial.println (x); // imprime en pantalla el valor actual del jugador 1
confirmacion = 'p';
noGano = 's';
Serial.println("No GANO");
digitalWrite(y, LOW);
}
else {
//lee del puerto la confirmación para el jugador 3
confirmacion = Serial.read();
}
}
while (confirmacion != 'p' || noGano != 's');
//al recibir confirmación por parte de la PC la variable "confirmacion" es borrada
confirmacion = ' ';
noGano = ' ';
}