Ayuda para un novato mayor en programa simple.Gracias

Agradecería su ayuda.....
Encender 4 led con 4 pulsadores y con otro pulsador apagar los 4 leds si hay alguno encendido...es como un reset.
Pulsado1 enciende led 1
Pulsador2 enciende led2
pulsador3 enciende led3
pulsador4 enciende led4

pulsador5 apaga los led 1,2,3 y 4 si están encendidos.

Intento programar y tengo muchos errores por mi poca experiencia.
Muchas gracias por ayudarme.

Hola francisco,

No te preocupes, todos hemos empezado igual, nadie nace sabiendo :wink:

Te recomiendo que leas mucho y que trates de comprender los códigos de los demás ya que si te dedicas a hacer copia/pega no aprenderás.

Aquí te dejo el código, esta sin probar

boolean estadoActual=0; //Guarda el estado actual del botón
boolean estadoUltimo=0; //Guarda el último estado del botón
boolean contador=0;     //Guarda las veces que se pulsa el botón

void setup()
{
  pinMode(4, OUTPUT); //Donde esta conectado el LED
  pinMode(8, INPUT);  //Donde esta conectado el pulsador
}

void loop()
{
//Leo el nuevo estado actual del botón
  estadoActual=digitalRead(8);
  
//Si este cambia respecto al estado justo anterior...  
  if (estadoActual != estadoUltimo)
    {
      if (estadoActual == HIGH)
        {
          contador = contador +1;
        }
    }
//Guardo el estado actual para la siguiente comprobación  
  estadoUltimo=estadoActual;
  if (contador % 2 == 0)
    {
      digitalWrite (4,LOW);
    }  
  else
    {
      digitalWrite(4,HIGH);
    }
}

Es para un pulsador, a ver si consigues sacar tu los otros 3 y el apagado general :wink:

Un saludo

Muchas gracias por tu ayuda.
Tengo 55 años y soy técnico en electrónica...pero en microcontroladores...nada de nada. (Ya empieza a ser hora...je...je...).
Necesito documentarme, es cierto, pero me puedes indicar algún manual con el cual pueda empezar......por ejemplo los de la página oficial de arduíno......etc. He intentado localizar ejemplos de esta necesidad y nada de nada....ó...no se encontrarlos. He intentado programar pero me hago un lío con las llaves ....je...je.....y demás.....claro que poco a poco como todo.
Salu2

Hola de nuevo,

Tampoco te creas que yo llevo mucho tiempo con Arduino, empece hace unos tres meses. Pero a base de mucho leer, rebanarme los sesos y pedir socorro en algún momento dado XD me voy defendiendo.

Yo me compre el libro del que aquí se habla:

http://forum.arduino.cc/index.php?topic=145725.0

La verdad es que va bastante bien ya que empieza desde 0 (con decirte que empieza desde la ley de Ohm XD). Ademas, hay un ejemplo como el código que yo te he puesto.

El único "pero" que le encuentro al libro es que los ejemplos suelen ser solo de lo que se esta explicando en ese momento, no hay ejemplos de "miniproyectos" por así decirlo.

Y si no en youtube hay bastantes tutoriales que también empiezan desde 0.

Yo te recomiendo las dos cosas XD

Las llaves son como las paréntesis de las ecuaciones en matemáticas (por verlo de alguna manera) siempre que abres una tienes que cerrarla, yo lo que hago para no liarme es siempre que abro una llave la cierro también y escribo en el medio así seguro que no me la dejo sin poner jejejeje.

En cuanto a tu código si quieres controlar cuatro luces con cuatro pulsadores es escribir cuatro veces lo mismo, y para el apagado general lo que puedes hacer es poner a 0 el contador:

boolean estadoActual1=0; //Guarda el estado actual del botón1
boolean estadoUltimo1=0; //Guarda el último estado del botón1
boolean contador1=0;     //Guarda las veces que se pulsa el botón1

boolean estadoActual2=0; //Guarda el estado actual del botón2
boolean estadoUltimo2=0; //Guarda el último estado del botón2
boolean contador2=0;     //Guarda las veces que se pulsa el botón2

boolean estadoActual3=0; //Guarda el estado actual del botón3
boolean estadoUltimo3=0; //Guarda el último estado del botón3
boolean contador3=0;     //Guarda las veces que se pulsa el botón3

boolean estadoActual4=0; //Guarda el estado actual del botón4
boolean estadoUltimo4=0; //Guarda el último estado del botón4
boolean contador4=0;     //Guarda las veces que se pulsa el botón4

void setup()
{
  pinMode(4, OUTPUT); //Donde esta conectado el LED1
  pinMode(5, OUTPUT); //Donde esta conectado el LED2
  pinMode(6, OUTPUT); //Donde esta conectado el LED3
  pinMode(7, OUTPUT); //Donde esta conectado el LED4
  
  pinMode(8, INPUT);  //Donde esta conectado el pulsador1
  pinMode(9, INPUT);  //Donde esta conectado el pulsador2
  pinMode(10, INPUT);  //Donde esta conectado el pulsador3
  pinMode(11, INPUT);  //Donde esta conectado el pulsador4
  pinMode(12, INPUT);  //Donde esta conectado el pulsador5
}

void loop()
{
//Leo el nuevo estado actual del botón1
  estadoActual1=digitalRead(8);
  
//Si este cambia respecto al estado justo anterior...  
  if (estadoActual1 != estadoUltimo1){
      if (estadoActual1 == HIGH){
          contador1 = contador1 +1;
        }
    }
//Guardo el estado actual para la siguiente comprobación  
  estadoUltimo1=estadoActual1;
  if (contador1 % 2 == 0)
    {
      digitalWrite (4,LOW);
    }  
  else
    {
      digitalWrite(4,HIGH);
    }

//Leo el nuevo estado actual del botón2
  estadoActual2=digitalRead(9);
  
//Si este cambia respecto al estado justo anterior...  
  if (estadoActual2 != estadoUltimo2){
      if (estadoActual2 == HIGH){
          contador2 = contador2 +1;
        }
    }
//Guardo el estado actual para la siguiente comprobación  
  estadoUltimo2=estadoActual2;
  if (contador2 % 2 == 0)
    {
      digitalWrite (5,LOW);
    }  
  else
    {
      digitalWrite(5,HIGH);
    }    

//Leo el nuevo estado actual del botón3
  estadoActual2=digitalRead(10);
  
//Si este cambia respecto al estado justo anterior...  
  if (estadoActual3 != estadoUltimo3){
      if (estadoActual3 == HIGH){
          contador3 = contador3 +1;
        }
    }
//Guardo el estado actual para la siguiente comprobación  
  estadoUltimo3=estadoActual3;
  if (contador3 % 2 == 0)
    {
      digitalWrite (6,LOW);
    }  
  else
    {
      digitalWrite(6,HIGH);
    }  

//Leo el nuevo estado actual del botón4
  estadoActual2=digitalRead(11);
  
//Si este cambia respecto al estado justo anterior...  
  if (estadoActual4 != estadoUltimo4){
      if (estadoActual4 == HIGH){
          contador4 = contador4 +1;
        }
    }
//Guardo el estado actual para la siguiente comprobación  
  estadoUltimo4=estadoActual4;
  if (contador4 % 2 == 0)
    {
      digitalWrite (7,LOW);
    }  
  else
    {
      digitalWrite(7,HIGH);
    }

  if(digitalRead(12)==HIGH){
    contador1 == 0;
    contador2 == 0;
    contador3 == 0;
    contador4 == 0;    
  } 
}

Se podría simplificar usando algún que otro "for", pero te lo dejo así por que se vera mas claro.

(Por cierto esta sin probar)

Un saludo

Gracias de nuevo....voy ha estudiar como lo has hecho...linea por linea ., anotare mis comentarios larguísimos para comprender y asimilar.....je...je...con tu ayuda un pasito más.
Salu2

...ABUSANDO de tu tiempo y ayuda, sería de gran interés para mi idea, acoplar una salida nueva para un relé que se active tres veces y se pare, cuando se encienda alguno de los 4 leds.......más lío.........lo siento.....je...je..... (no se si será posible...?)
Salu2

Otra vez yo...que plomo.
Mi salen estos errores:

conserje1_pde_pde:0: error: function definition does not declare parameters
conserje1_pde_pde.cpp: In function 'void loop()':
conserje1_pde_pde:34: error: 'estadoActual1' was not declared in this scope

PERDON....si me compila bien, ahora lo aplicaré al simulador de Proteus.....para ver como furula.
Salu2

Perdona, pero no acabo de entender lo del relé. ¿Es que genere impulsos? ¿Cada cuanto tiempo?

Saludos

Lo de el relé es para conectar un buzzer/sirena pequeña. Es para oir cuando uno led de los 4 esta encendido/activo. Cuando uno de los 4 leds esta encendido el relé tendría que activarse tres veces y pararse aunque el led siga encendido. El tiempo podría ser 2 segundos activo 1 segundo apagado( aproximadamente). La utilización es para saber cuando han pulsado algún pulsador y oírlo por medio de una sirenita sin tener que estar mirando constantemente si hay algún led encendido.
Espero expresarme mejor.
Salu2

Ok, esta tarde a ver si me pongo y te mando el código, que ahora estoy desde el móvil y es un poco rollo escribir desde aquí.

Un saludo

Hola,

Perdona, pero estoy liado con varios asuntos y no me da tiempo a todo, aquí te dejo el código. Esta hecho con delays, lo ideal seria usar millis() ya que el delay te pausa la programacion (por asi decirlo) y mientras esta en marcha el delay no puedes hacer nada mas, por eso he acortado los tiempos del timbre.

Esta sin probar

boolean estadoActual1=0; //Guarda el estado actual del botón1
boolean estadoUltimo1=0; //Guarda el último estado del botón1
boolean contador1=0;     //Guarda las veces que se pulsa el botón1

boolean estadoActual2=0; //Guarda el estado actual del botón2
boolean estadoUltimo2=0; //Guarda el último estado del botón2
boolean contador2=0;     //Guarda las veces que se pulsa el botón2

boolean estadoActual3=0; //Guarda el estado actual del botón3
boolean estadoUltimo3=0; //Guarda el último estado del botón3
boolean contador3=0;     //Guarda las veces que se pulsa el botón3

boolean estadoActual4=0; //Guarda el estado actual del botón4
boolean estadoUltimo4=0; //Guarda el último estado del botón4
boolean contador4=0;     //Guarda las veces que se pulsa el botón4

void setup()
{
  pinMode(4, OUTPUT); //Donde esta conectado el LED1
  pinMode(5, OUTPUT); //Donde esta conectado el LED2
  pinMode(6, OUTPUT); //Donde esta conectado el LED3
  pinMode(7, OUTPUT); //Donde esta conectado el LED4
  pinMode(13,OUTPUT); //Donde esta conectado el timbre
  
  pinMode(8, INPUT);  //Donde esta conectado el pulsador1
  pinMode(9, INPUT);  //Donde esta conectado el pulsador2
  pinMode(10, INPUT);  //Donde esta conectado el pulsador3
  pinMode(11, INPUT);  //Donde esta conectado el pulsador4
  pinMode(12, INPUT);  //Donde esta conectado el pulsador5
}

void loop()
{
//Leo el nuevo estado actual del botón1
  estadoActual1=digitalRead(8);
  
//Si este cambia respecto al estado justo anterior...  
  if (estadoActual1 != estadoUltimo1){
      if (estadoActual1 == HIGH){
          contador1 = contador1 +1;
        }
    }
//Guardo el estado actual para la siguiente comprobación  
  estadoUltimo1=estadoActual1;
  if (contador1 % 2 == 0)
    {
      digitalWrite (4,LOW);
    }  
  else
    {
      digitalWrite(4,HIGH);
      timbre();    //LLamada a funcion timbre
    }

//Leo el nuevo estado actual del botón2
  estadoActual2=digitalRead(9);
  
//Si este cambia respecto al estado justo anterior...  
  if (estadoActual2 != estadoUltimo2){
      if (estadoActual2 == HIGH){
          contador2 = contador2 +1;
        }
    }
//Guardo el estado actual para la siguiente comprobación  
  estadoUltimo2=estadoActual2;
  if (contador2 % 2 == 0)
    {
      digitalWrite (5,LOW);
    }  
  else
    {
      digitalWrite(5,HIGH);
      timbre();    //LLamada a funcion timbre
    }    

//Leo el nuevo estado actual del botón3
  estadoActual2=digitalRead(10);
  
//Si este cambia respecto al estado justo anterior...  
  if (estadoActual3 != estadoUltimo3){
      if (estadoActual3 == HIGH){
          contador3 = contador3 +1;
        }
    }
//Guardo el estado actual para la siguiente comprobación  
  estadoUltimo3=estadoActual3;
  if (contador3 % 2 == 0)
    {
      digitalWrite (6,LOW);
    }  
  else
    {
      digitalWrite(6,HIGH);
      timbre();    //LLamada a funcion timbre      
    }  

//Leo el nuevo estado actual del botón4
  estadoActual2=digitalRead(11);
  
//Si este cambia respecto al estado justo anterior...  
  if (estadoActual4 != estadoUltimo4){
      if (estadoActual4 == HIGH){
          contador4 = contador4 +1;
        }
    }
//Guardo el estado actual para la siguiente comprobación  
  estadoUltimo4=estadoActual4;
  if (contador4 % 2 == 0)
    {
      digitalWrite (7,LOW);
    }  
  else
    {
      digitalWrite(7,HIGH);
      timbre();    //LLamada a funcion timbre      
    }

  if(digitalRead(12)==HIGH){
    contador1 == 0;
    contador2 == 0;
    contador3 == 0;
    contador4 == 0;    
  }
} 

void timbre(){
digitalWrite(13,HIGH);
delay(1000);
digitalWrite(13,LOW);
delay(500);
digitalWrite(13,HIGH);
delay(1000);
digitalWrite(13,LOW);
delay(500);
digitalWrite(13,HIGH);
delay(1000);
digitalWrite(13,LOW);
delay(500);
}

Espero que te sirva

Un saludo

Muchísimas gracias por tu amabilidad y ayuda. Estaremos en contacto y yo aprendiendo.
Salu2.....desde Tenerife... y.... feliz Semana Santa.

No hay de que,

Saludos

Siento molestar de nuevo. Al realizar la simulación me pasa lo siguiente:
Al pulsar P1 se enciende el led1 y el timbre se pone intermitente y no se para. Reset no funciona. (será por el timbre funcionando...?)
Al pulsar P2 se enciende el le2 y el timbre se pone intermitente y no se para. Reset no funciona.
Al pulsar P3 no se enciende el le3 ni el timbre.
Al pulsar P4 no se enciende el led4 ni el timbre.

Te pido socorro de nuevo para cuando tengas un poco de tiempo.
Salu2

Con mi pobre capacidad he rectificado unas lineas en que el número a leer estaba mal P3 y P4 ( creo que es le suerte del principiante).
Ahora encienden correctamente:
Al pulsar P1, el led1 enciende. Timbre siempre con intermitencia no se para.
Al pulsar P2 el led2 enciende.Timbre siempre con intermitencia no se para.
Al pulsar P3 el led3 enciende.Timbre siempre con intermitencia no se para.
alpulsar P4 el led4 enciende.Timbre siempre con intermitencia no se para.

Creo que al estar intermitente la sirena sin parar no puedo aplicar la función de Reset.
Bueno maestro ya dirás yo sigo investigando a paso tortuga....je...je

Hola de nuevo,

Prueba a ver si con el segundo código funciona el reset y así descartamos que sea del timbre o que el código este mal.

Me da a mi que no se para por que cuando hay una pulsación "par" esta constantemente haciendo la llamada a la función timbre.

Eso de "maestro" es discutible XD, como puedes ver yo aun estoy en fase prueba/error XD

Cuando tenga un rato simplificare un poco el código y lo montare en la placa board y a ver que pasa.

Un saludo

Gracias por atenderme....con el "segundo código" no funciona el reset. Hace correctas todas las funciones excepto el timbre que queda intermitente constantemente.
Me imagino que no resetea al estar la sirena continuamente de forma intermitente activada y la función delay bloquea la orden de resetar.
Salu2

No hay de que hombre,

Aqui te dejo el codigo (sin la salida para el rele):

#define boton1 9
#define LED1 4
boolean estadoActual1=0; //Guarda el estado actual del botón1
boolean estadoUltimo1=0; //Guarda el último estado del botón1
boolean contador1=0;     //Guarda las veces que se pulsa el botón1

#define boton2 10
#define LED2 5
boolean estadoActual2=0; //Guarda el estado actual del botón2
boolean estadoUltimo2=0; //Guarda el último estado del botón2
boolean contador2=0;     //Guarda las veces que se pulsa el botón2

#define LED3 6
#define boton3 11
boolean estadoActual3=0; //Guarda el estado actual del botón3
boolean estadoUltimo3=0; //Guarda el último estado del botón3
boolean contador3=0;     //Guarda las veces que se pulsa el botón3

#define LED4 7
#define boton4 12
boolean estadoActual4=0; //Guarda el estado actual del botón4
boolean estadoUltimo4=0; //Guarda el último estado del botón4
boolean contador4=0;     //Guarda las veces que se pulsa el botón4

#define botonRST 13

void setup()
{
  pinMode(LED1, OUTPUT); //Donde esta conectado el LED1
  pinMode(LED2, OUTPUT); //Donde esta conectado el LED2
  pinMode(LED3, OUTPUT); //Donde esta conectado el LED3
  pinMode(LED4, OUTPUT); //Donde esta conectado el LED4
  
  pinMode(boton1, INPUT);  //Donde esta conectado el pulsador1
  pinMode(boton2, INPUT);  //Donde esta conectado el pulsador2
  pinMode(boton3, INPUT);  //Donde esta conectado el pulsador3
  pinMode(boton4, INPUT);  //Donde esta conectado el pulsador4
  pinMode(botonRST, INPUT);  //Donde esta conectado el pulsador5
}

void loop(){

  
      //****** ENCENDIDO LED 1 ******//
  
//Leo el nuevo estado actual del botón1
  estadoActual1=digitalRead(boton1);
  
//Si este cambia respecto al estado justo anterior...  
  if (estadoActual1 != estadoUltimo1){
      if (estadoActual1 == HIGH){
          contador1 = contador1 +1;
        }
    }
    
//Guardo el estado actual para la siguiente comprobación  
  estadoUltimo1=estadoActual1;
  if (contador1 % 2 == 0)
    {
      digitalWrite (LED1,LOW);
    }  
  else
    {
      digitalWrite(LED1,HIGH);
    }
    

    
      //****** ENCENDIDO LED 2 ******//    

//Leo el nuevo estado actual del botón2
  estadoActual2=digitalRead(boton2);
  
//Si este cambia respecto al estado justo anterior...  
  if (estadoActual2 != estadoUltimo2){
      if (estadoActual2 == HIGH){
          contador2 = contador2 +1;
        }
    }
//Guardo el estado actual para la siguiente comprobación  
  estadoUltimo2=estadoActual2;
  if (contador2 % 2 == 0)
    {
      digitalWrite (LED2,LOW);
    }  
  else
    {
      digitalWrite(LED2,HIGH);
    }    



      //****** ENCENDIDO LED 3 ******//

//Leo el nuevo estado actual del botón3
  estadoActual3=digitalRead(boton3);
  
//Si este cambia respecto al estado justo anterior...  
  if (estadoActual3 != estadoUltimo3){
      if (estadoActual3 == HIGH){
          contador3 = contador3 +1;
        }
    }
//Guardo el estado actual para la siguiente comprobación  
  estadoUltimo3=estadoActual3;
  if (contador3 % 2 == 0)
    {
      digitalWrite (LED3,LOW);
    }  
  else
    {
      digitalWrite(LED3,HIGH);
    }  



      //****** ENCENDIDO LED 4 ******//

//Leo el nuevo estado actual del botón4
  estadoActual4=digitalRead(boton4);
  
//Si este cambia respecto al estado justo anterior...  
  if (estadoActual4 != estadoUltimo4){
      if (estadoActual4 == HIGH){
          contador4 = contador4 +1;
        }
    }
//Guardo el estado actual para la siguiente comprobación  
  estadoUltimo4=estadoActual4;
  if (contador4 % 2 == 0)
    {
      digitalWrite (LED4,LOW);
    }  
  else
    {
      digitalWrite(LED4,HIGH);
    }




      //****** RESET LEDS ******//

  if(digitalRead(botonRST)==HIGH){
    contador1 = 0;
    contador2 = 0;
    contador3 = 0;
    contador4 = 0;    
  } 
}

Como puedes apreciar, no hacia el reset por que en vez de poner "== 0" hay que poner "= 0" (fallo mio)

== quiere decir que si contador1 es igual a 0 (se usa para hacer comparaciones)
= lo que te hace es igualar lo que hay antes del igual al valor que hay después.

Voy a ponerme con lo del rele y ahora te lo subo

Un saludo

En este código si que funciona el rele del timbre, lo malo es que también funciona cuando se apagan los leds siempre que quede alguno encendido, míralo a ver si lo terminas de apañar.

#define LED1 4             //Donde esta conectado el LED1
#define boton1 9           //Donde esta conectado el boton 1
boolean estadoActual1 = 0; //Guarda el estado actual del botón1
boolean estadoUltimo1 = 0; //Guarda el último estado del botón1
boolean contador1 = 0;     //Guarda las veces que se pulsa el botón1

#define LED2 5             //Donde esta conectado el LED 1
#define boton2 10          //Donde esta conectado el boton 2
boolean estadoActual2 = 0; //Guarda el estado actual del botón2
boolean estadoUltimo2 = 0; //Guarda el último estado del botón2
boolean contador2=0;       //Guarda las veces que se pulsa el botón2

#define LED3 6             //Donde esta conectado el LED 3
#define boton3 11          //Donde esta conectado el boton 3
boolean estadoActual3 = 0; //Guarda el estado actual del botón3
boolean estadoUltimo3 = 0; //Guarda el último estado del botón3
boolean contador3=0;       //Guarda las veces que se pulsa el botón3

#define LED4 7             //Donde esta conectado el LED4
#define boton4 12          //Donde esta conectado el boton 4
boolean estadoActual4 = 0; //Guarda el estado actual del botón4
boolean estadoUltimo4 = 0; //Guarda el último estado del botón4
boolean contador4 = 0;     //Guarda las veces que se pulsa el botón4

#define botonRST 13        //Donde esta conectado el boton RESET

#define releTimbre 8       //Donde esta conectado el rele del timbre
byte contadorTimbre = 0;

void setup()
{
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
  pinMode(LED3, OUTPUT); 
  pinMode(LED4, OUTPUT); 
  pinMode(releTimbre, OUTPUT); 
  
  pinMode(boton1, INPUT);
  pinMode(boton2, INPUT);
  pinMode(boton3, INPUT);
  pinMode(boton4, INPUT);
  pinMode(botonRST, INPUT);
  Serial.begin(9600);
}

void loop(){

  
      //****** ENCENDIDO LED 1 ******//
  
//Leo el nuevo estado actual del botón1
  estadoActual1=digitalRead(boton1);
  
//Si este cambia respecto al estado justo anterior...  
  if (estadoActual1 != estadoUltimo1){
      if (estadoActual1 == HIGH){
          contador1 = contador1 +1;
        }
    }
    
//Guardo el estado actual para la siguiente comprobación  
  estadoUltimo1=estadoActual1;
  if (contador1 % 2 == 0)
    {
      digitalWrite (LED1,LOW);    
    }  
  else
    {
      digitalWrite(LED1,HIGH);
      timbre();    //Llama a la funcion timbre
    }
    

    
      //****** ENCENDIDO LED 2 ******//    

//Leo el nuevo estado actual del botón2
  estadoActual2=digitalRead(boton2);
  
//Si este cambia respecto al estado justo anterior...  
  if (estadoActual2 != estadoUltimo2){
      if (estadoActual2 == HIGH){
          contador2 = contador2 +1;
        }
    }
//Guardo el estado actual para la siguiente comprobación  
  estadoUltimo2=estadoActual2;
  if (contador2 % 2 == 0)
    {
      digitalWrite (LED2,LOW);
    }  
  else
    {
      digitalWrite(LED2,HIGH);
      timbre();    //Llama a la funcion timbre     
    }    



      //****** ENCENDIDO LED 3 ******//

//Leo el nuevo estado actual del botón3
  estadoActual3=digitalRead(boton3);
  
//Si este cambia respecto al estado justo anterior...  
  if (estadoActual3 != estadoUltimo3){
      if (estadoActual3 == HIGH){
          contador3 = contador3 +1;
        }
    }
//Guardo el estado actual para la siguiente comprobación  
  estadoUltimo3=estadoActual3;
  if (contador3 % 2 == 0)
    {
      digitalWrite (LED3,LOW);
    }  
  else
    {
      digitalWrite(LED3,HIGH);
      timbre();    //Llama a la funcion timbre 
    }  



      //****** ENCENDIDO LED 4 ******//

//Leo el nuevo estado actual del botón4
  estadoActual4=digitalRead(boton4);
  
//Si este cambia respecto al estado justo anterior...  
  if (estadoActual4 != estadoUltimo4){
      if (estadoActual4 == HIGH){
          contador4 = contador4 +1;
        }
    }
//Guardo el estado actual para la siguiente comprobación  
  estadoUltimo4=estadoActual4;
  if (contador4 % 2 == 0)
    {
      digitalWrite (LED4,LOW);
    }  
  else
    {
      digitalWrite(LED4,HIGH);
      timbre();    //Llama a la funcion timbre 
    }



      //****** RESET LEDS ******//

  if(digitalRead(botonRST)==HIGH){
    contador1 = 0;
    contador2 = 0;
    contador3 = 0;
    contador4 = 0;    
  } 
}

void timbre(){
  if(contadorTimbre < 3){
    digitalWrite(releTimbre,HIGH);
    delay(1000);
    digitalWrite(releTimbre,LOW);
    contadorTimbre ++;
    Serial.println(contadorTimbre);
    delay(500);
    digitalWrite(releTimbre,HIGH);
    delay(1000);
    digitalWrite(releTimbre,LOW);
    contadorTimbre ++;
    Serial.println(contadorTimbre);
    delay(500);
    digitalWrite(releTimbre,HIGH);
    delay(1000);
    digitalWrite(releTimbre,LOW);
    contadorTimbre ++;
    Serial.println(contadorTimbre);
    delay(500);
  }
  else if((digitalRead(boton1))||(digitalRead(boton2))||(digitalRead(boton3))||(digitalRead(boton4))){
   contadorTimbre = 0; 
  }
}

Un saludo