les paso a explicar el funcionamiento.
primero veamos que contiene:
*dos servo motores uno en cada arco
*dos sensores DETECTOR DE OBSTÁCULOS CON SENSOR INFRARROJO
*pantalla lcd 16x2
*placa i2c para lcd 16x2
*RFID
*3 cooler ( trabajan al mismo tiempo alimentado por una fuente a través de un rele )
*2 display 7 segmentos
ahora paso a contar como trabaja el sistema:
para que todo empiece a funcionar el RFID tiene que detectar uno de los usuarios autorizados. lo cual habilita los cooler y mueve los servo para que el disco salga.
habiendo pasado esto empieza a correr un tiempo de milis para saber cuando tiene que cortar el juego o a los 9 goles entre los dos arcos.
durante el juego cada sensor infrarrojo ira contando los goles con cada display de 7 segmentos de cada arco.
finalizado el tiempo se mueven nuevamente los servo al punto inicial y cuando uno de los dos infrarrojo detecte nuevamente apaga los cooler y se termino el el juego hasta pasar nuevamente una usuario habilitado.
no se a donde se encuentra el error pero no me anda como yo quiero y no hay error de compilación.
por favor ayuda.
#include<Servo.h>
#include <LiquidCrystal.h>
#include <MFRC522.h>
#define RST_PIN 9
#define SS_PIN 53
MFRC522 mfrc522(SS_PIN, RST_PIN);
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
Servo servo1 ;
Servo servo2 ;
int cont1 =0;
int cont2 =0;
int inflarrojo1 = 4;
int inflarrojo2 = 5;
long previousMillis = 0;
long interval =1000;
int cooler =1;
void setup() {
Serial.begin(9600);
mfrc522.PCD_Init();
for (int i=22; i<38; i++)
{
pinMode(i, OUTPUT);
}
lcd.begin(16, 2);
lcd.setCursor(2, 0);
lcd.print("pase tarjeta");
lcd.setCursor(2,1);
lcd.print("tiempo 2 min");
servo1.attach(2,650,2400);
servo2.attach(3,650,2400);
pinMode(inflarrojo1,INPUT);
pinMode(inflarrojo2,INPUT);
}
byte ActualUID[4];
byte Usuario1[4]= {0x04, 0xAE, 0x73, 0xFD} ;
byte Usuario2[4]= {0x3C, 0xA9, 0xB1, 0xD5} ;
byte Digit1 [10][8] =
{ { 1,1,1,1,1,1,0,0 },
{ 0,1,1,0,0,0,0,0 },
{ 1,1,0,1,1,0,1,0 },
{ 1,1,1,1,0,0,1,0 },
{ 0,1,1,0,0,1,1,0 },
{ 1,0,1,1,0,1,1,0 },
{ 1,0,1,1,1,1,1,0 },
{ 1,1,1,0,0,0,0,0 },
{ 1,1,1,1,1,1,1,0 },
{ 1,1,1,0,0,1,1,0 }
};
byte Digit2 [10][8] =
{
{ 1,1,1,1,1,1,0,0 },
{ 0,1,1,0,0,0,0,0 },
{ 1,1,0,1,1,0,1,0 },
{ 1,1,1,1,0,0,1,0 },
{ 0,1,1,0,0,1,1,0 },
{ 1,0,1,1,0,1,1,0 },
{ 1,0,1,1,1,1,1,0 },
{ 1,1,1,0,0,0,0,0 },
{ 1,1,1,1,1,1,1,0 },
{ 1,1,1,0,0,1,1,0 }
};
void loop () {
servo1.write(0);
servo2.write(0);
if ( mfrc522.PICC_IsNewCardPresent())
{
if ( mfrc522.PICC_ReadCardSerial())
{
for (byte i = 0; i < mfrc522.uid.size; i++) {
ActualUID[i]=mfrc522.uid.uidByte[i];
}
if((compareArray(ActualUID,Usuario1))or(compareArray(ActualUID,Usuario2)))
{ lcd.setCursor(0, 0);
lcd.print("juego iniciado");
lcd.setCursor(3, 1);
lcd.print("A JUGAR!!!");
digitalWrite(cooler,HIGH);
servo1.write(60);
servo2.write(60);
if(inflarrojo1==LOW)
{
cont1++;
Display1(cont1);
}
if(inflarrojo2==LOW)
{
cont2++;
Display2(cont2);
}
unsigned long currentMillis = millis();
if(( currentMillis- previousMillis ==interval) or (cont1+cont2==14))
{
servo1.write(0);
servo2.write(0);
if((inflarrojo1==LOW) or (inflarrojo2==LOW))
{ digitalWrite(cooler,LOW);
lcd.setCursor(2, 0);
lcd.print("pase tarjeta");
lcd.setCursor(2,1);
lcd.print("tiempo 2 min");
}
}
}
else
{ lcd.setCursor(1, 0);
lcd.print("pase tarjeta");
lcd.setCursor(1, 1);
lcd.print("juego DENEGADO");}
}
}
}
boolean compareArray(byte array1[],byte array2[])
{
if(array1[0] != array2[0])return(false);
if(array1[1] != array2[1])return(false);
if(array1[2] != array2[2])return(false);
if(array1[3] != array2[3])return(false);
return(true);
}
void Display1(int N)
{ for (int i= 0 ; i<7 ; i++)
digitalWrite(i+22 , Digit1[N][i] ) ;
}
void Display2(int L)
{ for (int u=0; u<7 ; u++)
digitalWrite(u+29 , Digit1[L][u] ) ;
}
tejo_final_pagina.ino (3.29 KB)