Go Down

Topic: Duda rápida pulsador (Read 1 time) previous topic - next topic

PascuaL

No entiendo lo que dices exactamente, a poder ser, si no es mucha molestia me gustaria ver el código con el pulsador.
Gracias!

0xDA_bit

Para no complicarte mucho aunque el post de PepeChorva es perfecto usaria esta alternativa:

Code: [Select]

contador=1;
buttonState=analogRead(pulsador);
if(buttonState==HIGH){
   if(buttonState==LOW){         //Esta parte es solo para asegurar que el pulsador se ha pulsado una vez
      if(contador==1){
         digitalWrite(led, HIGH);
         contador--;                  //Puedes usar esta instrucción o asginarle directamente contador=0;
      }
      else{
         digitalWrite(led, LOW);
         contador++;                 //Puedes usar esta instrucción o asginarle directamente contador=1;
      }
   }
}


Espero haberte ayudado
riKon
visita mi blog tallerarduino.wordpress.com

PepeChorva

He probado lo de estado ~=estado y no me funciona, cámbialo por estado = !estado;

Te explico el código;
Code: [Select]
int estado =0 //comprobador de estado (para encendido/apagado)
setup(){
...
}
void loop(){
buttonState = digitalRead(buttonPin); //lectura del botón, si esta pulsado entrará
  if (buttonState == HIGH) {
    if(estado) //comprueba el valor de estado (1 o 0) encendido o apagado
        digitalWrite(ledPin, HIGH);
   else
        digitalWrite(ledPin, LOW);
   estado = !estado; //niega el valor de estado, si era 1, pasa a ser 0 y viceversa
  }
}


En la otra forma que te decía, en lugar de negar el valor de estado, le va sumando 1 y comprueba si el valor es par o impar, para decidir si encender o apagar el led
Code: [Select]

int estado =0
setup(){
...
}
void loop(){
buttonState = digitalRead(buttonPin);
  if (buttonState == HIGH) {
    if(estado%2==0) //comprueba si estado es par o impar, si es par enciende el led
        digitalWrite(ledPin, HIGH);
   else //si es impar, apaga el led
        digitalWrite(ledPin, LOW);
   estado++; //estado va acumulando el valor de 1 en 1 (par e impar) para las siguientes comprobaciones
  }
}
---
Saludos,
José Chorva
www.pepechorva.com
@pepechorva on twitter

roca


En la otra forma que te decía, en lugar de negar el valor de estado, le va sumando 1 y comprueba si el valor es par o impar, para decidir si encender o apagar el led
Code: [Select]

int estado =0
setup(){
...
}
void loop(){
buttonState = digitalRead(buttonPin);
  if (buttonState == HIGH) {
    if(estado%2==0) //comprueba si estado es par o impar, si es par enciende el led
        digitalWrite(ledPin, HIGH);
   else //si es impar, apaga el led
        digitalWrite(ledPin, LOW);
   estado++; //estado va acumulando el valor de 1 en 1 (par e impar) para las siguientes comprobaciones
  }
}



No tendrías problemas de overflow con al variable "estado"? Porque siempre la haces crecer y llegara al máximo permitido. Utilizando tu código y poniendo la asignación de estado=estado%2 se solucionaría, quedaría así:

Code: [Select]

int estado =0
setup(){
...
}
void loop(){
buttonState = digitalRead(buttonPin);
  if (buttonState == HIGH) {
    estado=estado%2;
    if(estado==0) //comprueba si estado es par o impar, si es par enciende el led
        digitalWrite(ledPin, HIGH);
   else //si es impar, apaga el led
        digitalWrite(ledPin, LOW);
   estado++; //estado va acumulando el valor de 1 en 1 (par e impar) para las siguientes comprobaciones
  }
}

PepeChorva

#9
Dec 23, 2011, 01:28 pm Last Edit: Dec 23, 2011, 01:42 pm by PepeChorva Reason: 1
Cierto roca, pero tendrías que pulsar el botón millones de veces, no se yo si el botón lo resisitiría  :smiley-mr-green:

Tu forma sería más correcta, sí señor.

Edito; me he dejado un detalle que quizás es relevante, un delay, para que de tiempo a quitar el dedo del botón:
Code: [Select]
const int buttonPin = 8;
const int ledPin =  13;
int estado = 0;

void setup() {
  pinMode(ledPin, OUTPUT);     
  pinMode(buttonPin, INPUT);     
}

void loop(){
  if (digitalRead(buttonPin) == HIGH) {
    delay(500);
    if(estado)
        digitalWrite(ledPin, HIGH);
   else
        digitalWrite(ledPin, LOW);
   estado = ~estado;
  }
}
---
Saludos,
José Chorva
www.pepechorva.com
@pepechorva on twitter

Go Up