problema con condicion dentro de una condicion

hola chicos
estoy haciendo un contador de personas, en donde iran 2 lasers hacia 2 fotoresistores distintos, en los cuales estoy tratando de hacer que; si se corta el primer laser, y luego el segundo, se sume 1 al contador, y que si corta el segundo y luego el primero, se reste uno al contador, para asi saber cuando entra y sale la gente. Para esto estoy usando un if dentro de otro

 //resistores
 int R1 = A0;
 int R2 = A1;
 //variables
 int valor1;
 int valor2;
 int contador;
 int a;
//numeros
 int num_array[10][7] = {  { 0,0,0,0,0,0,1 },    // 0
                           { 1,0,0,1,1,1,1 },    // 1
                           { 0,0,1,0,0,1,0 },    // 2
                           { 0,0,0,0,1,1,0 },    // 3
                           { 1,0,0,1,1,0,0 },    // 4
                           { 0,1,0,0,1,0,0 },    // 5
                           { 0,1,0,0,0,0,0 },    // 6
                           { 0,0,0,1,1,1,1 },    // 7
                           { 0,0,0,0,0,0,0 },    // 8
                           { 0,0,0,1,1,0,0 }};   // 9


void Num_Write(int);
// this functions writes values to the sev seg pins  

void setup()
{

  Serial.begin(9600);
  pinMode(R1, INPUT);
  pinMode(R2, INPUT);
  pinMode(2,OUTPUT);
  pinMode(3,OUTPUT);
  pinMode(4,OUTPUT);
  pinMode(5,OUTPUT);
  pinMode(6,OUTPUT);
  pinMode(7,OUTPUT);
  pinMode(8,OUTPUT);

}

void loop()
{ 
  Serial.print("sensor 1: ");
  Serial.println(analogRead(R2));
  Serial.print("sensor 2: ");
  Serial.println(analogRead(R1));
  
  valor1 = analogRead(R1);
  valor2 = analogRead(R2);
  if((valor1 < 400)  && (valor2 > 400)){
    if(valor2<400){
     contador = contador+1;
    }
  }
  if((valor2 < 400) && (valor2 > 400)){
    if(valor1<400){
     contador = contador-1;
    }
  }
 


  
  Serial.println(contador);
  Num_Write(contador);
  delay(2000);
 
}

void Num_Write(int number) 
{
  int pin= 2;
  for (int j=0; j < 7; j++) {
   digitalWrite(pin, num_array[number][j]);
   pin++;
  }
}

cabe mencionar que todo el tema de los numeros y num_write son solo para el 7 segment display que va a mostrar el contador, el problema está en que al tapar un resistor o el otro no se suma ni se resta nada al contador, esperaba que pudiesen ayudarme :slight_smile:

Te voy a dar una pista.
Conoces al personaje FLASH de DC COMICS??
Creo que solo si es Flash quien cruza tu laser podrá leerlo.
Sigamos el código:
Una persona pasa por el primer laserif((valor1 < 400)  && (valor2 > 400)){
y tu lo lees bien, pero pasas a leer el segundo laser en tan solo 0.00000005 segundos que es lo que mas o menos tarda un arduino uno en leer la entrada de tu segundo laser if(valor2<400){.
Intenta hacerlo de otra manera y poco a poco, empieza contando solo las personas que van en una dirección, cuando te funcione ya te liaras con descontar las que salgan.
Por ejemplo:

Personas = 0;
if (valor1 < 400) contador=1;
if ((valor2 < 400) && (contador == 1))
{
  Personas++;
  contador=0;
}

Con esto te cuenta las personas que entran, pero claro, que pasa si se arrepienten y no terminan de pasar??
Y si se quedan atascadas en medio del primer laser??
Luego yo pasaría a utilizar flancos para los cambios en el laser.
Prueba a ver si con esto te cuentan las que entran.

ssfeir:
estoy haciendo un contador de personas, en donde iran 2 lasers hacia 2 fotoresistores distintos, en los cuales estoy tratando de hacer que; si se corta el primer laser, y luego el segundo, se sume 1 al contador, y que si corta el segundo y luego el primero, se reste uno al contador

Debes tener cuidado con los rebotes.

Otra dificultad es que dos personas entren juntas, tendrías que obligar que físicamente cada persona complete el proceso de entra o salida, antes de que otra entre al sistema. El código podría ser algo así:

bool entra,sale;
byte n;

void setup(){
   Serial.begin(115200);
}

void loop(){
   //Entra
   if (analogRead(A0)<400 && !entra && !sale){
      entra = true;
   }
   if (analogRead(A1)>400 && entra && !sale){
      n++;
      entra = false;
      delay(100);
      Serial.println(n);
   }
   
   //Sale
   if (analogRead(A1)<400 && !entra && !sale){
      sale = true;
   }
   if (analogRead(A0)>400 && !entra && sale){
      n--;
      sale = false;
      delay(100);
      Serial.println(n);
   }
}