Un immense merci J-M.L
Soyez sûr, que nous prenons la note et allons nous y attaquer.
pour l'instant, notre problématique initiale reste la même
soit le cumul de deux actions pour obtenir un résultat,
dans notre cas: taper code sur clavier, ensuite toucher un sensor pour déclencher un solénoïde
notre squelette étant:
input: keypad + touch sensor
output: solenoide + led
- état 1: solénoïde HIGH + led LOW
- action 1: taper code clavier
- état 2: si code bon, solénoïde HIGH, mais led BLINK ( + mise en attente prochaine action ?)
- action 2: toucher sensor
- état 3: solénoïde LOW + led HIGH
nous n'avons pas compris l'erreur de notre premier croquis ( peut-être toute simple ????)
mais entretemps, nous en avons travailler un deuxième, avec l'utilisation de: switch case
nous avons construit au préalable la suite "taper bon code sur keypad fait flasher lumière"(testé et qui marchait)
pourtant lorsque nous l'utilisons dans le croquis actuel: le terme key n'est plus reconnu
KeySensSol2:42: error: 'key' was not declared in this scope
if (key == '*' || key == '#')
^
KeySensSol2:47: error: 'key' was not declared in this scope
if (key == password[position])
notre bibliothèque keypad étant à jour nous déduisons que nous avons fait une erreur de logique :))
si erreur de débutant (certainement: laquelle ?)
sinon, est ce que le premier croquis était une meilleure piste ?
sincèrement
#include <Keypad.h>
#define ENTERING_CODE 0
#define WAITING_SENSOR 1
int state=ENTERING_CODE;
char* password = "1234";
int position = 0;
const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = { 8, 7, 6, 9 };
byte colPins[COLS] = { 5, 4, 3, 2 };
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
int solenoid = 11;
int sensor = 12;
int ledpin = A5;
void setup()
{
pinMode(ledpin, OUTPUT);
pinMode(solenoid, OUTPUT);
pinMode(sensor, INPUT);
}
void loop()
{
switch(state){
case ENTERING_CODE:
if (char key = keypad.getKey());
if (key == '*' || key == '#')
{
position = 0;
}
if (key == password[position])
{
position ++;
}
if (position == 4)
{
while(1);
state=WAITING_SENSOR;
digitalWrite(solenoid, HIGH);
digitalWrite(ledpin, HIGH);
delay(250);
digitalWrite(ledpin, LOW);
delay(250);
}
else
{
digitalWrite(ledpin, LOW);
digitalWrite(solenoid, HIGH);
}break;
case WAITING_SENSOR:
digitalRead(sensor);
if(sensor==HIGH);
digitalWrite(solenoid, LOW);
digitalWrite(ledpin, HIGH);
}}