Go Down

Topic: AYUDA, PROBLEMA CON CONTADOR (Read 1 time) previous topic - next topic

pincho41700

Hola a todos,
tengo el siguiente problema con un descontador y estoi atascado y no salgo de esto.
cuando pulso un contador me tiene que descontar hacia 0, hasta aqui todo normal.
el problema viene que cuando quiero parar el contador  con un pulsador antes de 0 no puedo.
y mucho menos cuando le vuelvo a pulsar y que vuelva a arrancar.
ademas quiero que cuando he pulsado el contador la primera vez y cuando llegue a 0 a los 2 segundos vualva el contador al nuemro anterior que teniamos al empezar en vez de quedarse en 0.
Muchas gracias de antemano.

Jopapa

No lo tengo claro
¿Quieres que te ayudemos con el código que has hecho (que no veo) o prefieres que te hagamos el programa completo aquí?

Jopapa

Marcial

El contador (descontador) q descuenta, segundos??
y el pulsador es el mismo para todo??

pincho41700

hola de nuevo,
jopapa lo que quiero hacer es lo siguiente,
tengo una variable llamada contador al cual le doy un numero a partir de unos pulsadores, y hasta aqui todo perfecto y probado.
el problema viene ahora
esa variable contador con un numero inferior a 999 hasta 0, es decimas de segundo o sea desde 99,9 seg a 0 seg
le hago un for y descuenta hasta cero sin problema,
lo que quiero hacer es que cuando pulse un pulsador llamado starstop vaya descontando y cuando le pulse otra vez pare el contador y vuelvo a pulsar, siga contando hasta que llegue a cero y durante el desconteo el pin13 led funcionando.
cuando llegue a 0,el contador se tiene que volver al numero que tenia la variable contador.
Me gustaria que me ayudases con el codigo porque me he quedado cojido.
Marcial el contador es desde max 99,9 seg a 0.
un saludo

Marcial

#4
Sep 23, 2013, 05:45 pm Last Edit: Sep 23, 2013, 05:47 pm by Marcial Reason: 1
Haber si esto te puede servir:

Code: [Select]

int Contador = 999;                                      // Variable con el numero de deciams a contar
int AuxContador = 0;                                     // Auxiliar para no perder el valor original
boolean Pausa=true;                                      // Descontoar o no
boolean Pulsado=false;                                   // Boton pulsado, esperar a soltarlo
int StartStop=5;                                         // Pin del pulsador startstop, pon el tuyo
int Led=13;                                              // pin del led a encender
long Anteriormillis=0;                                   // Para controlar cada cuanto se puede pulsar
long Intervalo=100;                                      // 100 milisegundos = 1 decima
void setup()
{
 pinMode(StartStop, INPUT);                             // pin del pulsador
 pinMode(Led, OUTPUT);                                  // pin del led
 digitalWrite(Led, LOW);                                // led apagado hasta pulsar startstop
 AuxContador=Contador;                                  // Decimas programadas
 Anteriormillis=millis();                               // Almacenamos el valor de millis para controlar cuanto tiempo ha pasado
}
void loop()
{
 if (digitalRead(StartStop) && !Pulsado)                // Si pulsamos starstop y no estaba pulsado antes
 {
   Pulsado=true;                                        // Ahora si esta pulsado
   if (Pausa)                                           // Si el cosntador esta en pausa pasarlo a activo y vicebersa
   {
     Pausa=false;                                       // Tiene permiso para descontar
     digitalWrite(Led, HIGH);                           // esta descontando, led encendido
   }
   else
   {
     Pausa=true;                                        // No tiene permiso para descontar
     digitalWrite(Led, LOW);                            // No esta descontando, led apagado
   }
 }
 if (!digitalRead(StartStop) && Pulsado)                // Hemos soltado el pulsador
 {
   Pulsado=false;                                       // Podemos volver a pulsar
 }
 if (!Pausa && millis()-Anteriormillis>Intervalo)       // Si ha pasado el tiempo programado y no esta en pausa
 {
   AuxContador--;                                       // Descontar
   if (AuxContador=0){AuxContador=Contador;}            // Llego a cero, almacenar el valor original
   Anteriormillis=millis();                               // Almacenamos el valor de millis para controlar cuanto tiempo ha pasado 
// Al finalizar el tiempo, arancaria de nuevo a descontar, no se si es lo q quieres
 }
}

pincho41700

hola marcial.
muchas gracias por hacer el programita
esta noche lo probare y te digo algo.
no entiendo muy bien tus instrucciones pero lo probare a ver que tal
muchas gracias
un saludo

Marcial

normal, están en ingles, jejejeje.

Ahora en serio, donde pone
long Intervalo=100;
pon
long Intervalo=1000;
para que cuente segundos en vez de decimas para poder ver lo que hace

cuando acaba el contador reinica solo, no se si es lo que querias.

Ya me contaras.

pincho41700

hola de nuevo marcial,
El programa que me mandaste no funciona porque la variable contador siempre esta en 999 y no sube ni baja
si es verdad que cuando pulso el boton se enciende el led y vuelvo a pulsar se apaga el led.
lo que quiero es que cuando el contador se pare a cero el contador se vualva al numero que le dije antes al empezar a contar pero que no vuelva a empezar a contar hasta que le de al pulsador de nuevo.
un saludo

Marcial

#8
Sep 26, 2013, 07:40 pm Last Edit: Sep 26, 2013, 07:44 pm by Marcial Reason: 1
:smiley-sad-blue:

Code: [Select]
int Contador = 999;                                      // Variable con el numero de deciams a contar
int AuxContador = 0;                                     // Auxiliar para no perder el valor original
boolean Pausa=true;                                      // Descontoar o no
boolean Pulsado=false;                                   // Boton pulsado, esperar a soltarlo
int StartStop=5;                                         // Pin del pulsador startstop, pon el tuyo
int Led=13;                                              // pin del led a encender
long Anteriormillis=0;                                   // Para controlar cada cuanto se puede pulsar
long Intervalo=10;                                      
void setup()
{
 //Serial.begin(9600);
 pinMode(StartStop, INPUT);                             // pin del pulsador
 pinMode(Led, OUTPUT);                                  // pin del led
 digitalWrite(Led, LOW);                                // led apagado hasta pulsar startstop
 AuxContador=Contador;                                  // Decimas programadas
 Anteriormillis=millis();                               // Almacenamos el valor de millis para controlar cuanto tiempo ha pasado
}
void loop()
{
 if (digitalRead(StartStop) && !Pulsado)                // Si pulsamos starstop y no estaba pulsado antes
 {
   Pulsado=true;                                        // Ahora si esta pulsado
   if (Pausa)                                           // Si el cosntador esta en pausa pasarlo a activo y vicebersa
   {
     Pausa=false;                                       // Tiene permiso para descontar
     digitalWrite(Led, HIGH);                           // esta descontando, led encendido
   }
   else
   {
     Pausa=true;                                        // No tiene permiso para descontar
     digitalWrite(Led, LOW);                            // No esta descontando, led apagado
   }
 }
 if (!digitalRead(StartStop) && Pulsado)                // Hemos soltado el pulsador
 {
   Pulsado=false;                                       // Podemos volver a pulsar
 }
 
 if (!Pausa && millis()-Anteriormillis>Intervalo)       // Si ha pasado el tiempo programado y no esta en pausa
 {
   //Serial.println(AuxContador);
   AuxContador--;                                       // Descontar
   if (AuxContador==0)                                  // Llego a cero, almacenar el valor original
   {
     AuxContador=Contador;                              // Cargamos timepo del conador
     Pausa=true;                                        // No tiene permiso para descontar
     digitalWrite(Led, LOW);                            // No esta descontando, led apagado      
   }
   Anteriormillis=millis();                             // Almacenamos el valor de millis para controlar cuanto tiempo ha pasado
 }
}


de los errores se aprende...

cambia el valor de "long Intervalo=10; " para contar segundos, decimas, centesimas...

pincho41700

muchas gracias marcial
este fin de semana lo probare

pincho41700

MArcial eres un maquina
funciona a la perfeccion
le he hecho un par de arreglos y va como quiero
el problema que tengo ahora es que en windows 7 a 64 bit va de maravilla y con windows xp no funciona ni siquiera el puerto serial,
me lo prodrias decir porque?
un saludo

Marcial

#11
Sep 30, 2013, 08:55 am Last Edit: Sep 30, 2013, 08:58 am by Marcial Reason: 1
Me alegro q te funcione bien la aplicacion, lo del xp,  creo q tienes q descargarte un programa que hace un puerto virtual o algo asi.

un saludo


PD. revisa el punto 4
http://arduino.cc/es/Guide/Windows

Go Up