Go Down

Topic: Orden de pulsación de botones (Read 833 times) previous topic - next topic

aitortxu

Buenas tardes:

Estoy comenzando con Arduino y quisiera encender un led solamente si se han pulsado una serie de botones en un orden concreto, es decir, que el led se encienda si he pulsado el boton 1 y luego el 2 pero si pulso el 2 y después el 1 no pase nada.

Hasta ahora he llegado a encender el led al pulsar los dos botones,  pero soy incapaz de establecer el orden, ¿alguién puede darme alguna orientación sobre que tema podría mirar al respecto?

Muchas gracias y saludos.

Sergegsx

los botones estan conectados a pines digitales,no? es decir, no son botones del teclado que envias por puerto de serie.

bueno pues no se si sera la mejor opcion pero se me ocurre en plan rapido que podrias convertir cada boton en un numero. y luego crear una especie de contraseña.
es decir,
el boton1 -> 1
el boton2 -> 2
etc.

cuando pulsas un boton se añade ese numero a un String.
Este String lo puedes comparar con otro String que contenga la contraseña.

String contraseñaguardada = "1823"
String contraseñaintroducida

if (boton 1 apretado) contraseñaintroducida = contraseñaintroducida + "1"
por lo que contraseñaintroducida == "1"
if boton 8 apretado contraseñaintroducida =contraseñaintroducida + "8"
por lo que contraseñaintroducida  == "18"

igual no es la mejor opcion, o no funciona, pero es un principio.

yOPERO

Code: [Select]
/#include <Password.h>

#include <Keypad.h>

Password password = Password( "1234" );

const byte ROWS = 4; // Four rows
const byte COLS = 3; // Three columns
// Define the Keymap
char keys[ROWS][COLS] = {
  {'1','2','3',},
  {'4','5','6',},
  {'7','8','9',},
  {'*','0','#',}
};
// Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins.
byte rowPins[ROWS] = { 2, 3, 4, 5, };// Connect keypad COL0, COL1 and COL2 to these Arduino pins.
byte colPins[COLS] = { 6, 7, 8 };


// Create the Keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

#define ledPin 13

void setup(){

  digitalWrite(ledPin, LOW);   // sets the LED on
  Serial.begin(9600);
  keypad.addEventListener(keypadEvent); //add an event listener for this keypad
  keypad.setDebounceTime(250);
}

void loop(){
  keypad.getKey();
}

//take care of some special events
void keypadEvent(KeypadEvent eKey){
  switch (keypad.getState()){
    case PRESSED:
Serial.print("Pressed: ");
Serial.println(eKey);
switch (eKey){
  case '#': guessPassword(); break;
   default:
   password.append(eKey);
  }
}}

void guessPassword(){
     Serial.print("Guessing password... ");
     if (password.evaluate()){
     digitalWrite(ledPin,HIGH); //activates garaged door relay
             delay(500);               
             digitalWrite(ledPin,LOW); //turns off door relay after .5 sec
     Serial.println("VALID PASSWORD "); //
              password.reset(); //resets password after correct entry
     }else{
     digitalWrite(ledPin,LOW);
     Serial.println("INVALID PASSWORD ");
              password.reset(); //resets password after INCORRECT entry
     }
}
Engineering is the art of
making what you want from
things you can get.

     

[SOLUCIONADO]

Go Up