Seria pulsar un pulsador y que se encienda un led y cuando se vuelva a pulsar que se apague.No me estoy refiriendo a un delay y que se quede un tiempo, sino que se encienda y apague tiempo indefinido.
Muchas gracias de antemano.
Seria pulsar un pulsador y que se encienda un led y cuando se vuelva a pulsar que se apague.No me estoy refiriendo a un delay y que se quede un tiempo, sino que se encienda y apague tiempo indefinido.
Muchas gracias de antemano.
Busca la librería "Button.h" y escoge la opción "button.onpress"
Tienes que crearte un registro para saber en qué estado está el led, y luego variar su estado en cada pulsación, algo así;
int estado =0
setup(){
...
}
void loop(){
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH) {
if(estado)
digitalWrite(ledPin, HIGH);
else
digitalWrite(ledPin, LOW);
estado ~= estado;
}
}
Ok pruebo y te digo algo.Muchas gracias!
la línea de estado ~= estado; no la he probado, no se si funcionaría, espero que sí.
Si no funciona, puedes usar este otro método;
...
if( estado%2 != 0)
...
estado++;
...
No entiendo lo que dices exactamente, a poder ser, si no es mucha molestia me gustaria ver el código con el pulsador.
Gracias!
Para no complicarte mucho aunque el post de PepeChorva es perfecto usaria esta alternativa:
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
He probado lo de estado ~=estado y no me funciona, cámbialo por estado = !estado;
Te explico el código;
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
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
}
}
PepeChorva:
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 ledint 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í:
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
}
}
Cierto roca, pero tendrías que pulsar el botón millones de veces, no se yo si el botón lo resisitiría
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:
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;
}
}
OLE, OLE Y OLE!!
Muchísimas gracias a todo vuestro apoyo, funciona 100%.He utilizado el último código de PepeChorva.
Feliz Navidad!=)