Pages: 1 [2] 3   Go Down
Author Topic: Ayuda para un novato mayor en programa simple.Gracias  (Read 1699 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 25
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Offline Offline
Full Member
***
Karma: 2
Posts: 137
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley-lol, como puedes ver yo aun estoy en fase prueba/error smiley-lol

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

Un saludo
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 25
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Offline Offline
Full Member
***
Karma: 2
Posts: 137
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

No hay de que hombre,

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

Code:
#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
Logged

Offline Offline
Full Member
***
Karma: 2
Posts: 137
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.

Code:
#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
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 25
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Lo he pasado a hex y lo simulo con Proteus:
El primero que me indicas rectificado, no funciona bien . Si aprecio que al pulsar P1 enciende led1 y si pulso de nuevo P1 lo apaga.  Como me dices Reset no funciona.
El segundo rectificado con timbre...no funcionan los pulsadores ni la campana...hay algun bichito raro...je...je....
Salu2
Logged

Offline Offline
Full Member
***
Karma: 2
Posts: 137
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

El Proteus lo estuve usando yo al principio hasta que me llegaron los componentes, ahora lo monto directamente en la placa board.

Yo lo he montado con un arduino pro mini  con leds y pulsadores y el primer código que te he mandado hoy (el que no lleva el rele) si que funciona bien. Y el segundo el problema que tiene es que al apagar también se activa el rele.

He cambiado la distribución de los pines, igual por eso no te funciona.

Saludos
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 25
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Gracias....a investigar , monteré un mini como tienes tu.....ya será la proxima semana...... te comento resultado.
Lo de el timbre o relé cuando están los leds apagados..no lo entiendo. Agradecería ampliar explicación para TORPES.
Salu2
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 25
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Tengo una duda , quizas por no explicarme bien.
La función tendría que ser :
(Lo mismo para los 4 pulsadores y los 4 leds correspondientes):
Al pulsar P1 enciende Led1, pero si pulso de nuevo P1 el led1 tiene que continuar encendido y no apagarse. Solo led1,led2,led3 y led4 (los que estén encendidos) se apagarán cuando pulse el boton RESET.
Salu2
Logged

Offline Offline
Full Member
***
Karma: 2
Posts: 137
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

El rele tiene que activarse cada vez que se enciende un led, esto funciona bien.

El problema esta en que si hay varios leds encendidos (imaginemos que son tres los leds encendidos), cuando pulsamos el boton1 para apagar el led1 el rele se activa, cuando pulsamos el boton2 para apagar el led2 el rele se activa, pero cuando pulsamos el boton3 para apagar el led3, el rele ya no se activa. El fallo esta en que mientras tengas dos (o mas) leds encendidos cuando apagues uno de ellos el rele se activara.

En definitiva, no se activa cuando se apaga el ultimo de todos los leds que tenias encendidos.

Esto habría que revisarlo para que al apagar algún led, y mientras queden otros en marcha, no se encendiera el rele.

Un saludo
Logged

Offline Offline
Full Member
***
Karma: 2
Posts: 137
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Vale... entendí que se podian encender/apagar con cada pulsador correspondiente y ademas poder apagarlos con un reset general
Logged

Offline Offline
Full Member
***
Karma: 2
Posts: 137
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Aquí lo tienes:

Code:
#define LED1 4             //Donde esta conectado el LED 1
#define boton1 9           //Donde esta conectado el boton 1

#define LED2 5             //Donde esta conectado el LED 2
#define boton2 10          //Donde esta conectado el boton 2

#define LED3 6             //Donde esta conectado el LED 3
#define boton3 11          //Donde esta conectado el boton 3

#define LED4 7             //Donde esta conectado el LED 4
#define boton4 12          //Donde esta conectado el boton 4

#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);
}


void loop(){
 
      //****** ENCENDIDO LEDS ******//
 
  if(digitalRead(boton1)) {digitalWrite(LED1,HIGH);}
  if(digitalRead(boton2)) {digitalWrite(LED2,HIGH);} 
  if(digitalRead(boton3)) {digitalWrite(LED3,HIGH);} 
  if(digitalRead(boton4)) {digitalWrite(LED4,HIGH);}

      //****** APAGAGO LEDS ******//

  if(digitalRead(botonRST)){
    digitalWrite(LED1,LOW);
    digitalWrite(LED2,LOW);
    digitalWrite(LED3,LOW);
    digitalWrite(LED4,LOW);   
  }     
 
      //****** ENCENDIDO SIRENA ******// 
     
  if((contadorTimbre < 3)&&((digitalRead(boton1)) || (digitalRead(boton2)) || (digitalRead(boton3)) || (digitalRead(boton4)))){
    digitalWrite(releTimbre,HIGH);
    delay(1000);
    digitalWrite(releTimbre,LOW);
    contadorTimbre ++;
    delay(500);
    digitalWrite(releTimbre,HIGH);
    delay(1000);
    digitalWrite(releTimbre,LOW);
    contadorTimbre ++;
    delay(500);
    digitalWrite(releTimbre,HIGH);
    delay(1000);
    digitalWrite(releTimbre,LOW);
    contadorTimbre ++;
    delay(500);
  }
  else if((digitalRead(boton1)) || (digitalRead(boton2)) || (digitalRead(boton3)) || (digitalRead(boton4))){
  contadorTimbre = 0; 
  }
}

Así a sido mucho mas fácil smiley-lol

Esta compilado y probado en la placa board.

Edito: Ahora lo interesante seria hacer sonar la sirena con millis en vez de con delay para que así no se te detenga la programación.

Un saludo.
« Last Edit: April 19, 2014, 02:45:11 pm by Dabauza » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 25
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Michísimas GRACIAS....esta perfecto.
 Ahora me toca analizar una por una las instrucciones que  has puesto......
Estamos en contacto...
Salu2
Logged

Offline Offline
Full Member
***
Karma: 2
Posts: 137
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Muchísimas de nadas smiley-wink
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 25
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Agradecería tu email...el mio es :
   fvallverdu@gmail.com

Salu2
Logged

Pages: 1 [2] 3   Go Up
Jump to: