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


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.
Logged

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

Hola francisco,

No te preocupes, todos hemos empezado igual, nadie nace sabiendo smiley-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

Code:
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 smiley-wink

Un saludo
Logged

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

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
Logged

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

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 smiley-lol 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 smiley-lol). 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 smiley-lol

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:

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

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

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

Logged

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

...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
Logged

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

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
Logged

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

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

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

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

Saludos
Logged

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

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
Logged

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

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
Logged

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

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

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

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

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

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

No hay de que,

Saludos
Logged

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

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
Logged

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