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.
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
El contador (descontador) q descuenta, segundos??
y el pulsador es el mismo para todo??
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
Haber si esto te puede servir:
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
}
}
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
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.
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
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...
muchas gracias marcial
este fin de semana lo probare
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
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