Pages: [1]   Go Down
Author Topic: AYUDA, PROBLEMA CON CONTADOR  (Read 1454 times)
0 Members and 1 Guest are viewing this topic.
Dos Hermanas( Sevilla)
Offline Offline
Jr. Member
**
Karma: 2
Posts: 54
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Alicante (España)
Offline Offline
Full Member
***
Karma: 12
Posts: 223
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Vilalba, Lugo, Spain
Offline Offline
Sr. Member
****
Karma: 23
Posts: 323
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Dos Hermanas( Sevilla)
Offline Offline
Jr. Member
**
Karma: 2
Posts: 54
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Vilalba, Lugo, Spain
Offline Offline
Sr. Member
****
Karma: 23
Posts: 323
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Haber si esto te puede servir:

Code:
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
  }
}
« Last Edit: September 23, 2013, 10:47:01 am by Marcial » Logged

Dos Hermanas( Sevilla)
Offline Offline
Jr. Member
**
Karma: 2
Posts: 54
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Vilalba, Lugo, Spain
Offline Offline
Sr. Member
****
Karma: 23
Posts: 323
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Dos Hermanas( Sevilla)
Offline Offline
Jr. Member
**
Karma: 2
Posts: 54
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Vilalba, Lugo, Spain
Offline Offline
Sr. Member
****
Karma: 23
Posts: 323
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

 smiley-sad-blue

Code:
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...
« Last Edit: September 26, 2013, 12:44:11 pm by Marcial » Logged

Dos Hermanas( Sevilla)
Offline Offline
Jr. Member
**
Karma: 2
Posts: 54
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

muchas gracias marcial
este fin de semana lo probare
Logged

Dos Hermanas( Sevilla)
Offline Offline
Jr. Member
**
Karma: 2
Posts: 54
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Vilalba, Lugo, Spain
Offline Offline
Sr. Member
****
Karma: 23
Posts: 323
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
« Last Edit: September 30, 2013, 01:58:23 am by Marcial » Logged

Pages: [1]   Go Up
Jump to: