programando

Hola que tal amigos, tengo una duda sobre como programar con un sensor ultrasónico, espero alguien de ustedes o del que lea me puedan ayudar, mi problema es que estoy elaborando un proyecto sobre un contador de objetos ya tengo la parte donde dos sensores ultrasónicos cuentan, pero ahora no se como hacer que si uno de los sensores se interrumpe el otro se desactive por un momento para que no cuenten los dos al mismo tiempo, si alguien pudiera ayudarme con eso se lo agradecería muchísimo porfa no ignoren soy un poco principiante.. este es el código del que hablo...

#include <rgb_lcd.h>

#include <stdlib.h>



rgb_lcd lcd;

const int colorR = 255;
const int colorG = 0;
const int colorB = 0;

 int distancia;
 long tiempo;
 char buffer[5];
 int cont;
 int umbral;
 boolean hayobjeto;

 int distancia1;
 long tiempo1;
 char buff[5];
 int cont1;
 int umbral1;
 boolean hayobjeto1;


 void setup() {
     //run once:
       // Se inicializa el lcd con lcd.pins
      lcd.begin(16, 2);
    
    lcd.setRGB(colorR, colorG, colorB);
 

       //pin 12 como salida: para el pulso ultrasónico
       pinMode(12, OUTPUT); 
       //pin 11 como entrada: tiempo que tarda e pulso en rebotar
       pinMode(11, INPUT); 

       //pin 12 como salida: para el pulso ultrasónico
       pinMode(9, OUTPUT); 
       //pin 11 como entrada: tiempo que tarda e pulso en rebotar
       pinMode(10, INPUT); 
       
       //Inicializamos las variables
       cont=0;
       umbral = 35;
       hayobjeto = true;

       cont1=0;
       umbral1 = 35;
       hayobjeto1 = true;
      
     }
 

 void loop() {
    //run repeatedly:
       //Ponemos en el pin que envia el pulso a 0
       digitalWrite(12,LOW); 
       delayMicroseconds(5);
       //Ahora mandamos 1 para activar el pulso del sensor 
       digitalWrite(12, HIGH); 
       delayMicroseconds(10);
       //Recogemos el tiempo que ha tardado el pin 11 en recoger el impulso del sonar (ya rebotado)
       tiempo=pulseIn(11, HIGH,3000);
       //Formula para calcular la distancia mediante el tiempo que tarda en volver el impulso
       distancia= 0.017*tiempo; 
       
       //Si la distancia > umbral (no detecta objeto)
       if (distancia >= umbral)
       {
         //si antes habia objeto, ahora ya no está
         if (hayobjeto == true)
         {
             hayobjeto = false;
         } 
       }
       //Sino, detecta un objeto
       else
       {
         //Si antes no habia objeto, ahora lo hay y por lo tanto sumamos 1 al contador
         if (hayobjeto == false)
         {
             hayobjeto = true;
             cont = cont+1;
         } 
       }
        
       //Escribimos en el LCD la distancia 
       
       sprintf (buffer, "% d", distancia);
       lcd.setCursor(0,0);
       lcd.print("D:");
       lcd.print(buffer);
       lcd.print("cm. ");

       //Escribimos en el LCD el contador de objetos 
           
        sprintf (buffer, "% d", cont); 
        lcd.setCursor(0,1);
        lcd.print("C: ");
        lcd.print(buffer);  

        delay (800);

        
//////////////////////////////////////////////////////////////////segundo sensor ultrasonico///////////////////////////////////////////////
    
      //Ponemos en el pin que envia el pulso a 0
       digitalWrite(9,LOW); 
       delayMicroseconds(5);
       //Ahora mandamos 1 para activar el pulso del sensor 
       digitalWrite(9, HIGH); 
       delayMicroseconds(10);
       //Recogemos el tiempo que ha tardado el pin 11 en recoger el impulso del sonar (ya rebotado)
       tiempo1=pulseIn(10, HIGH,3000);
       //Formula para calcular la distancia mediante el tiempo que tarda en volver el impulso
       distancia1= 0.017*tiempo1; 
       
       //Si la distancia > umbral (no detecta objeto)
       if (distancia1 >= umbral1)
       {
         //si antes habia objeto, ahora ya no está
         if (hayobjeto1 == true)
         {
             hayobjeto1 = false;
         } 
       }
       //Sino, detecta un objeto
       else
       {
         //Si antes no habia objeto, ahora lo hay y por lo tanto sumamos 1 al contador
         if (hayobjeto1 == false)
         {
             hayobjeto1 = true;
             cont1 = cont1+1;
         } 
       }
        
       //Escribimos en el LCD la distancia 
       
       sprintf (buff, "% d", distancia1);
       lcd.setCursor(7,0);
       lcd.print("D1:");
       lcd.print(buff);
       lcd.print("cm. ");

       //Escribimos en el LCD el contador de objetos 
           
        sprintf (buff, "% d", cont1); 
        lcd.setCursor(8,1);
        lcd.print("C1:");
        lcd.print(buff); 

       

       //hacemos un retardo de 1 segundo para evitar posibles variaciones
       delay(1000);      

 }

Prueba esto a ver, si te da algun error intenta resolverlo.

#include <rgb_lcd.h>
#include <stdlib.h>

rgb_lcd lcd;

const int colorR = 255;
const int colorG = 0;
const int colorB = 0;

int distancia;
long tiempo;
char buffer[5];
int cont;
int umbral;
boolean hayobjeto;

int distancia1;
long tiempo1;
char buff[5];
int cont1;
int umbral1;
boolean hayobjeto1;


void setup() {
    //run once:
    // Se inicializa el lcd con lcd.pins
    lcd.begin(16, 2);

    lcd.setRGB(colorR, colorG, colorB);


    //pin 12 como salida: para el pulso ultrasónico
    pinMode(12, OUTPUT); 
    //pin 11 como entrada: tiempo que tarda e pulso en rebotar
    pinMode(11, INPUT); 

    //pin 12 como salida: para el pulso ultrasónico
    pinMode(9, OUTPUT); 
    //pin 11 como entrada: tiempo que tarda e pulso en rebotar
    pinMode(10, INPUT); 

    //Inicializamos las variables
    cont=0;
    umbral = 35;
    hayobjeto = true;

    cont1=0;
    umbral1 = 35;
    hayobjeto1 = true;
      
}
 

void loop() {
    //run repeatedly:
    if (!hayobjeto1 ) {   // es lo mismo que poner hayobjeto1 == false
        distancia = ultrasonico(10, 11);    
        //Escribimos en el LCD la distancia 
        //Si la distancia > umbral (no detecta objeto)
        if (distancia >= umbral)   {
            //si antes habia objeto, ahora ya no está
            if (hayobjeto == true) {
               hayobjeto = false;
            } 
        }
        //Sino, detecta un objeto
        else   {
            //Si antes no habia objeto, ahora lo hay y por lo tanto sumamos 1 al contador
            if (hayobjeto == false)    {
               hayobjeto = true;
               cont = cont+1;
            } 
        }

        sprintf (buffer, "% d", distancia);
        lcd.setCursor(0,0);
        lcd.print("D:");
        lcd.print(buffer);
        lcd.print("cm. ");

        //Escribimos en el LCD el contador de objetos 
           
        sprintf (buffer, "% d", cont); 
        lcd.setCursor(0,1);
        lcd.print("C: ");
        lcd.print(buffer);  
    }
            
//////////////////////////////////////////////////////////////////segundo sensor ultrasonico///////////////////////////////////////////////
    if (!hayobjeto) {   // es lo mismo que poner hayobjeto == false
        //Ponemos en el pin que envia el pulso a 0
        distancia1 = ultrasonico(9, 10);   
        
        //Si la distancia > umbral (no detecta objeto)
        if (distancia1 >= umbral1)  {
            //si antes habia objeto, ahora ya no está
            if (hayobjeto1 == true) {
               hayobjeto1 = false;
            } 
        }
        //Sino, detecta un objeto
        else    {
            //Si antes no habia objeto, ahora lo hay y por lo tanto sumamos 1 al contador
            if (hayobjeto1 == false) {
                hayobjeto1 = true;
                cont1 = cont1+1;
            } 
        }

        //Escribimos en el LCD la distancia 

        sprintf (buff, "% d", distancia1);
        lcd.setCursor(7,0);
        lcd.print("D1:");
        lcd.print(buff);
        lcd.print("cm. ");

        //Escribimos en el LCD el contador de objetos 
         
        sprintf (buff, "% d", cont1); 
        lcd.setCursor(8,1);
        lcd.print("C1:");
        lcd.print(buff); 
    }


    //hacemos un retardo de 1 segundo para evitar posibles variaciones
    delay(1000);      
    if (hayobjeto1 && hayobjeto) {  // si los dos dan que hay objeto dejaran de medir
                                    // asi que fuerzo a que sigan midiendo.
        hayobjeto  = false;
        hayobjeto1 = false;
    }
 }

int ultrasonico(byte trigger_pin, byte eco_pin) {

    //Ponemos en el pin que envia el pulso a 0
    digitalWrite(trigger_pin,LOW); 
    delayMicroseconds(5);
    //Ahora mandamos 1 para activar el pulso del sensor 
    digitalWrite(trigger_pin, HIGH); 
    delayMicroseconds(10);
    //Recogemos el tiempo que ha tardado el pin 11 en recoger el impulso del sonar (ya rebotado)
    tiempo = pulseIn(eco_pin, HIGH,3000);
    //Formula para calcular la distancia mediante el tiempo que tarda en volver el impulso
    distancia = 0.017*tiempo; 

    return distancia;
}

Es posible que diga que no conoce la funcion ultrasonico(bla, bla) asi que si eso pasa la pones antes del setup

ok lo checare y te aviso si me sirvió y lo subo por si a alguien mas le sirve.. muchas gracias

hola yo de nuevo, he estado intentando con el código que me proporciono, efectivamente me marcaba error en "ultrasónico", pero ahora no solo me marca lo de un sensor sin hacer nada, perdón por la molestia pero que podría estar fallando? esta es una imagen de lo que hace y ahí se queda sin hacer nada mas.

Hola que tal, Gracias a Surbyte, he conseguido un contador mas funcional que el que ya tenia, y de igual forma mejor estructurado, ahora el objetivo que busco es hacer que cuente los objetos o cosas que pasen de un lugar a otro y decir que entraron, salieron, ejemplo: 5 personas entraron y salieron 2, les comparto el código de contador con dos sensores ultrasónicos.

#include <rgb_lcd.h>
#include <stdlib.h>

rgb_lcd lcd;

const int colorR = 255;
const int colorG = 0;
const int colorB = 0;

#define UMBRAL0     35
int distancia;
int cont;
boolean hayobjeto = false, hayobjetoAnt = false;

#define UMBRAL1     35
int distancia1;
int cont1;
boolean hayobjeto1 = false, hayobjeto1Ant = false;


void setup() {
    //run once:
    Serial.begin(115200); // Inicio puerto serie
    // Se inicializa el lcd con lcd.pins
    lcd.begin(16, 2);
    lcd.setRGB(colorR, colorG, colorB);


    //pin 12 como salida: para el pulso ultrasónico
    pinMode(12, OUTPUT); 
    //pin 11 como entrada: tiempo que tarda e pulso en rebotar
    pinMode(11, INPUT); 

    //pin 12 como salida: para el pulso ultrasónico
    pinMode(9, OUTPUT); 
    //pin 11 como entrada: tiempo que tarda e pulso en rebotar
    pinMode(10, INPUT); 

    //Inicializamos las variables
    cont        = 0;
    cont1       = 0;
     
}
 

void loop() {
    char buffer[30];
    
    distancia  = ultrasonico(12, 11);
    distancia1 = ultrasonico(9, 10);
    
    hayobjeto  = objeto(distancia, UMBRAL0); 
    hayobjeto1 = objeto(distancia1, UMBRAL1); 
    
    if (hayobjeto && !hayobjetoAnt) 
        cont++;
    hayobjetoAnt = hayobjeto;
    
    if (hayobjeto1 && !hayobjeto1Ant) 
        cont1++;
    hayobjeto1Ant = hayobjeto1;
    
    presento_datos(1, distancia, cont);
    presento_datos(2, distancia1, cont1);

 }

bool objeto(int dist, int iumbral) {
    return (dist <= iumbral)?1:0;  // devuelve 1 si el objeto esta cerca 0 lejos
}

int ultrasonico(byte trigger_pin, byte eco_pin) {
    int temp;
    long tiempo;
    
    //Ponemos en el pin que envia el pulso a 0
    digitalWrite(trigger_pin,LOW); 
    delayMicroseconds(5);
    //Ahora mandamos 1 para activar el pulso del sensor 
    digitalWrite(trigger_pin, HIGH); 
    delayMicroseconds(10);
    //Recogemos el tiempo que ha tardado el pin 11 en recoger el impulso del sonar (ya rebotado)
    tiempo = pulseIn(eco_pin, HIGH, 3000);
    //Formula para calcular la distancia mediante el tiempo que tarda en volver el impulso
    temp = 0.017*tiempo; 

    return temp;
}

void presento_datos(byte sensor, int dist, int cuenta) {
    char buffer[40];
    //Escribimos en el LCD el contador de objetos 
    //                012345678901234567890
    sprintf (buffer, "D: %3d C: %4d       ", dist, cuenta);        // %3d indica que reserva 3 espacios a izq del entero. o sea 999 será bien presentado ya 9999 no
    if (sensor == 1) {       
        lcd.setCursor(0,0);    
    }
    else {
        lcd.setCursor(0,1); 
    }
    lcd.print(buffer);
    
    sprintf (buffer, "S%1d dist : %4d cont: %4d", sensor, dist, cuenta);
    Serial.println(buffer);
    
}

Hola, yo de nuevo, comento que mi contador con dos sensores ultrasónicos esta funcionando, con la gran ayuda de Surbyte, y aqui les dejo mi código funcional por si a alguien le sirve para algún proyecto como a mi, muchas gracias Surbyte por la atención brindada, Saludos desde Pachuca de Soto Hidalgo México.

#include <NewPing.h> // https://bitbucket.org/teckel12/arduino-new-ping/downloads/

 // distancia  = ultrasonico(12, 11);
 // distancia1 = ultrasonico(9, 10);
#define TRIGGER_PIN1 12
#define ECHO_PIN1    11

#define TRIGGER_PIN2  9
#define ECHO_PIN2    10

#define UMBRAL       35
#define MAX_DISTANCE 200

bool S1, S2;
byte estado = 0, anterior;
int cantPersonas = 0;
int valor1, valor2;
 
NewPing sonar1(TRIGGER_PIN1, ECHO_PIN1, MAX_DISTANCE);
NewPing sonar2(TRIGGER_PIN2, ECHO_PIN2, MAX_DISTANCE);
 
void setup() {
  Serial.begin(115200);
  Serial.println("Cnntador listo.");
}
 
void loop() {
  char buffer[30];
  valor1 = sonar1.ping_cm();
    
  anterior = estado;
  if (valor1 < UMBRAL && valor1 != 0) {
      S1 = 1; // hay objeto
      Mostrar_Estado();
  }
  else {
      S1 = 0; // no hay objeto
      Mostrar_Estado();
  }

  valor2 = sonar2.ping_cm();
  if (valor2 < UMBRAL && valor2 != 0) {
      estado = 2+S1; // hay objeto
      Mostrar_Estado();
  }
  else {
      estado = S1; // no hay objeto      
      Mostrar_Estado();
  }

    //Escribimos en el LCD el contador de objetos 
    //                012345678901234567890
   //sprintf (buffer, "S1= %3d S2= %3d", valor1, valor2); 
   //Serial.println(buffer);

  if (anterior == 2 && estado == 3) {
     cantPersonas++;
     Serial.println();
     sprintf(buffer, "Hay %d personas", cantPersonas);
     Serial.println(buffer);

  }
  if (anterior == 3 && estado == 2) {
     cantPersonas--;
     Serial.println();
     sprintf(buffer, "Hay %d personas", cantPersonas);
     Serial.println(buffer);
  }
}

void Mostrar_Estado() {
    char buf[20];
    sprintf(buf, "%d", estado);
    Serial.print(buf);
}