Go Down

Topic: Al pulsar "n" veces el led empieza a parpadear (Read 187 times) previous topic - next topic

wesma

Hola, llevo un tiempo intentando hacer que, al pulsar un pulsador "n" veces se encienda un led, pero no antes. Mi problema es que no soy capaz de acumular el numero de pulsaciones que hago en el boton en una variable. Este es el destrozo que he hecho

Code: [Select]
const int LED = 13;
  const int BUTTON = 7;
  int val = 0;
   
void setup() {
 
  pinMode(LED, OUTPUT);
  pinMode(BUTTON, INPUT);
  Serial.begin(9600);
}

void loop() {

  Serial.print(val);
  val = digitalRead(BUTTON);
    if (val == HIGH){
      val +1;
    }
    else{
      digitalWrite(LED, LOW);
    }

    if (val == 2){
      digitalWrite(LED, HIGH);
    }
    else{
     digitalWrite(LED, LOW);
    }
}


Gracias :D

surbyte

Esto

Code: [Select]
Serial.print(val);
  val = digitalRead(BUTTON);
    if (val == HIGH){
      val +1;
    }
    else{
      digitalWrite(LED, LOW);
    }


cuando tu presionas el botón, se incrementa como loco... pero además lo haría si estuviera bien programado.

val + 1 no compila, luce y estoy seguro que es una tarea escolar pero... como te has esforzado te diré como hacerlo.

Corrijamos ese error debes usar esto
Code: [Select]

val++;           // o

val = val +1; // o
val += 1;


cualquier forma es aceptable.

en lugar de mirar si esta en HIGH mira el cambio de estado, para ver si cambio de estado tienes que memorizar el estado anterior.


Code: [Select]
#define  N          5
const byte LED    = 13;
const byte BUTTON = 7;
bool val;
bool valAnt       = false;
   
void setup() {
 
  pinMode(LED, OUTPUT);
  pinMode(BUTTON, INPUT);
  Serial.begin(9600);
}

void loop() {

  Serial.print(val);
  val = digitalRead(BUTTON);
  if (val && !valAnt ){
      val++;
  }
  valAnt = val;

  if (val == N){  // Si presionaste N veces se enciende el Led sino sigue apagado
      digitalWrite(LED, HIGH);
  }
  else{
      digitalWrite(LED, LOW);
  }
}

Go Up