Buenos dias.
En primer lugar dar enormemente las gracias aquellas personas que utilizan el bien mas preciado (su tiempo) a ayudar a los demás. espero alguna vez tener el suficiente nivel para poder hacer lo mismo.
Llevo tiempo en arduino pero como si empezara porque soy un poco torpe en la materia.
Estaba intentando hacer un contador de personas con una placa arduino y dos modulos de sensores de infrarrojos. Estos modulos como sabeis dan la señal invertida.
He visto varios proyectos similares, pero queria hacer mi propio codigo para intentar solucionar algunos detalles.
El principal problema que me encuentro es que a veces se hace un lio y en vez de sumar resta y viceversa cuando no ha realizado la secuencia correcta completa.(Puede darse el caso en la realidad)
Secuencia de entrada Fase 1: Sensor1 = 1, Sensor 2 = 0(Iniciando entrada)
Fase 2 : Sensor 1 =1 , sensor 2 = 1(Persona en medio de la puerta).
Fase3 : Sensor 1 = 0, Sensor 2 =1(Persona a punto de terminar de entar)
Fase4 : Sensor 1= 0, Sensor 2 = 0(Persona ya ha entrado )
En el caso de salir la secuencia es en modo inverso como adjunto en el codigo.
No se si debo anidar algun if o introducir algun else para solucionarlo pero cada vez que lo toco lo dejo peor.
Otro problema y este es muy tonto es que le pongo que si hay numeros negativos ponga 0 y ni caso,sigue poniéndomelos negativo.
Los sensores irian en paralelo y las personas entarian o saldrian de una en una ya que es una puerta pequeña.
Ante todo gracias por vuestro tiempo.
int pinSensor1 = 2;
int pinSensor2 = 12;
String estado = "empezando";
int cuenta;
void setup() {
Serial.begin(9600);
pinMode(pinSensor1, INPUT);
pinMode(pinSensor2, INPUT);
}
void loop() {
int sensor1 = digitalRead(pinSensor1); /* Leemos el valor del Sensor 1*/
int sensor1Def = !sensor1; /*Invertimos el valor del sensor 1*/
int sensor2 = digitalRead(pinSensor2); /*Leemos el valor del Sensor 1*/
int sensor2Def = !sensor2; /* Invertimoss el valor del sensor 2 */
if (estado == "empezando" && sensor1Def == 1 && sensor2Def == 0) { // empezamos and sensor1=1 y sensor2=0
estado = "iniciando_entrada"; //Ponemos estado en "iniciando entrada"
}
if ( estado == "iniciando_entrada" && sensor1Def == 1 && sensor2Def == 1) { // Entrada al 50%
estado = "Entrada_50%";
}
if (estado == "Entrada_50%" && sensor1Def == 0 && sensor2Def == 1) { // A punto de finlizar la entrada
estado = "Entrada_75%";
}
if (estado == "Entrada_75%" && sensor1Def == 0 && sensor2Def == 0) { // Fin de entrada
estado = "empezando";
cuenta = cuenta + 1;
}
////////////////////////////// SALIDA/////////////////////////////////
if (estado == "empezando" && sensor1Def == 0 && sensor2Def == 1) { //Si empezamos and sensor1 detecta y sensor2=0
estado = "iniciando_salida"; //Ponemos estado en "iniciando entrada"
}
if ( estado == "iniciando_salida" && sensor1Def == 1 && sensor2Def == 1) { // Entrada al 50%
estado = "Salida_50%";
}
if (estado == "Salida_50%" && sensor1Def == 1 && sensor2Def == 0) { // A punto de finlizar la entrada
estado = "Salida_75%";
}
if (estado == "Salida_75%" && sensor1Def == 0 && sensor2Def == 0) { // Fin de entrada
estado = "empezando";
cuenta = cuenta - 1;
if (cuenta == -1) {
cuenta == 0;
}
}
/*Serial.print("Valor del sensor1 ");
Serial.println(sensor1Def);
Serial.print("Valor del sensor2 ");
Serial.println(sensor2Def);
*/
//Serial.print("NUMERO DE PERSONAS");
Serial.println(cuenta);
}