[SOLUCIONADO ] 7 segmentos - activar alarma cuando llegue a un valor

hola buen día.
Soy nuevo en esto de Arduino y me han solicitado diseñar un sistema de conteo para control de aforo de personas en un lugar. Pues bien el tema del contador lo tengo ya con un display 7 segmentos de 2 dígitos que se inicia en 00 y que muestra un numero que asciende o desciende por medio de 2 pulsadores lo que me causa problemas hasta el momento es que una vez alcanzado un valor fijo de personas (por ejemplo 9 personas), el sistema debe lanzar una alarma sonora o visual (led) y esta ultima parte no se como hacerla, pensé como en mi curso de electrónica pasada que una forma seria mirar el estado de cada led del 7 segmentos evaluando cuando este en HIGH y de esa manera determinar el numero que esta en pantalla en ese instante y así activar la alarma (no tengo claro como se haría) ; pero creo me estoy complicando ¿podrían darme una idea sobre ello de que manera podría resolverlo quizás algo mas sencillo?

saludos comunidad.

Imagino que tu contador incrementa o decrementa el valor una variable para luego mostrarla en el display, entonces simplemente te fijas, con un simple if, si la variable (o sea la cuenta) llegó al valor que deseas y actúas en consecuencia.

Saludos

Mira los ejemplos del IDE para encender leds. Tu Alarma o buzzer sera lo mismo que un led sea a traves de un RELE o usando un transistor (Buzzer de 5V).
As ique un simple BlinkWithoutDelay.ino te servirá.
Por que elijo este ejemplo y no el Blink.ino común?
Pues porque Blink.ino usa delay(1000) y cuando usas delay() el programa se detiene y no presetará atención a tu pulsador x ese tiempo, por eso debes usar millis() que da la sensación de que nada ocurre.
Ve a Documentación => Indice de temas tutoriales => millis() y aprende al respecto.

Para ordenar las cosas porque ambos comentarios son complementarios...
Para saber cuándo disparar la señal sonora o visual (buzzer o LED) haces lo que te sugiero, cuando ya disparas la señal, haces lo que te sugiere @surbyte, para manejar el tiempo que quieres que esa señal esté encendida.

Saludos

Tiene mucha razón @gatul.

perfecto chicos muchas gracias por tomarse el tiempo probare su recomendación y ya les contaré como resulta

ah quedado perfecto gracias @surbyte y @gatul la parte del delay aun no la entiendo del todo como manejarlo pero el código ha funcionado como se pensó en un primer momento.

const int  a = 6;
const int  b = 7;
const int  c = 8;
const int  d = 9;
const int  e = 10;
const int  f = 11;
const int  g = 12;
const int alarmaocupacion=13;
const int alarmasalavacia=2;
const int botonIncremento = 4;           
const int botonDecremento = 3;    
const int tiempoAntiRebote = 3; 

int cuenta = 0;                          
int estadoBotonIncremento;
int estadoBotonAnteriorIncremento;
int estadoBotonDecremento;
int estadoBotonAnteriorDecremento;

boolean antirebote(int pin){
  int contador = 0;
  boolean estado;                                           
  boolean estadoAnterior;                                   

  do {
    estado = digitalRead(pin);
    if (estado != estadoAnterior){
      contador = 0;
      estadoAnterior = estado;
      }
      else {
        contador = contador + 1;                             
      }
      delay(1);
  } while(contador < tiempoAntiRebote);

   return estado;
}
void setup() {
 pinMode(6,OUTPUT);//a                             
 pinMode(7,OUTPUT);//b                           
 pinMode(8,OUTPUT);//c
 pinMode(9,OUTPUT);//d
 pinMode(10,OUTPUT);//e
 pinMode(11,OUTPUT);//f
 pinMode(12,OUTPUT);//g
 pinMode(13,OUTPUT);//alarmadeocupacion
 pinMode(2,OUTPUT);//alarmasalavacia
 pinMode(botonIncremento, INPUT);                          
 pinMode(botonDecremento, INPUT);                           
 
    Serial.begin(9600);
    
  }
  
void actualizarNumero()  {
  switch(cuenta) {
    case 0:                                                  //numero 0

    digitalWrite (6, HIGH);
    digitalWrite (7, HIGH);
    digitalWrite (8, HIGH);
    digitalWrite (9, HIGH);
    digitalWrite (10, HIGH);
    digitalWrite (11, HIGH);
    digitalWrite (12, LOW);
    digitalWrite (2, HIGH);
    digitalWrite (13, LOW);
    break;

    case 1:                                                  //numero 1
     
    digitalWrite (6, LOW);
    digitalWrite (7, HIGH);
    digitalWrite (8, HIGH);
    digitalWrite (9, LOW);
    digitalWrite (10, LOW);
    digitalWrite (11, LOW);
    digitalWrite (12, LOW);
    digitalWrite (2, LOW);
    digitalWrite (13, LOW);
    break; 

    case 2:                                                  //numero 2
  
    digitalWrite (6, HIGH);
    digitalWrite (7, HIGH);
    digitalWrite (8, LOW);
    digitalWrite (9, HIGH);
    digitalWrite (10, HIGH);
    digitalWrite (11, LOW);
    digitalWrite (12, HIGH);
    digitalWrite (2, LOW);
    digitalWrite (13, LOW);
    break;

    case 3:                                                  //numero 3
   
    digitalWrite (6, HIGH); 
    digitalWrite (7, HIGH);
    digitalWrite (8, HIGH);
    digitalWrite (9, HIGH);
    digitalWrite (10, LOW);
    digitalWrite (11, LOW);
    digitalWrite (12, HIGH);
    digitalWrite (2, LOW);
    digitalWrite (13, LOW);
    break;

    case 4:                                                  //numero 4
    
    digitalWrite (6, LOW);
    digitalWrite (7, HIGH);
    digitalWrite (8, HIGH);
    digitalWrite (9, LOW);
    digitalWrite (10, LOW);
    digitalWrite (11, HIGH);
    digitalWrite (12, HIGH);
    digitalWrite (2, LOW);
    digitalWrite (13, LOW);
    break;

    case  5:                                                  //numero 5
     
    digitalWrite (6, HIGH);
    digitalWrite (7, LOW);
    digitalWrite (8, HIGH);
    digitalWrite (9, HIGH);
    digitalWrite (10, LOW);
    digitalWrite (11, HIGH);
    digitalWrite (12, HIGH);
    digitalWrite (2, LOW);
    digitalWrite (13, LOW);
    break;

    case 6:                                                  //numero 6
  
    digitalWrite (a, HIGH);
    digitalWrite (b, LOW);
    digitalWrite (c, HIGH);
    digitalWrite (d, HIGH);
    digitalWrite (e, HIGH);
    digitalWrite (f, HIGH);
    digitalWrite (g, HIGH);
    digitalWrite (2, LOW);
    digitalWrite (13, HIGH);
    break;
  }
}


void loop() {
  
 estadoBotonIncremento = digitalRead(botonIncremento);    
 if(estadoBotonIncremento !=estadoBotonAnteriorIncremento) {
  if(antirebote(botonIncremento)) {                       
    cuenta++;                                             
    if(cuenta >6) {
      cuenta = 6; 
{
  String cadena;
    Serial.print("ha ingresado un paciente");
    Serial.println("sobre cupo en la clinica "+cadena);
  }                                             
      
    }
  }
 }
estadoBotonAnteriorIncremento = estadoBotonIncremento;        
estadoBotonDecremento = digitalRead(botonDecremento);    
if(estadoBotonDecremento !=estadoBotonAnteriorDecremento) { 
  if(antirebote(botonDecremento)) {                      
    cuenta--;
    if(cuenta <= 0) {
      cuenta = 0;
      {
  String cadena;
    Serial.print("se ha desocupado las salas ");
    Serial.println("La alarma verde se activa cuando esta vacia la sala "+cadena);
  }
   
    }
  }
}

Coloca [SOLUCIONADO] en el titulo inicial y cierro el hilo.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.