je cherche à écrire un mot de passe sur le serialRead, qui permettra de réaliser tel ou tel action sur mon arduino.
Avec un chiffre ou une lettre j'y arrive, mais pas avec des chiffres ou des lettres...
// include the library code:
#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
// variables will change:
int val = 0; // reading data from the seral port
// constants won't change:
const int ledPin1 = 6;
const int ledPin2 = 13;
void setup()
{
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
// Print a message to the LCD.
lcd.print("Test Serial Read");
pinMode(ledPin1,OUTPUT);
pinMode(ledPin2,OUTPUT);
Serial.begin(9600);
}
void loop()
{
val = Serial.read();
if (val == 'A') // if the number 1 is recieved from the serial port
{
digitalWrite(ledPin1, HIGH); // change the state of pin 3.
digitalWrite(ledPin2, LOW); // change the state of pin 3.
}
if (val == 'B') // if the number 1 is recieved from the serial port
{
digitalWrite(ledPin1, LOW); // change the state of pin 3.
digitalWrite(ledPin2, HIGH); // change the state of pin 3.
}
lcd.setCursor(0, 4);
lcd.print(Serial.read());
}
il faut stocker les caracteres dans un buffer au fur et à mesure de la lecture du port serie.
Quand le charactere lu est '\n' (entrée), on fait une comparaison entre le mot de passe et la valeur stockée.
Donc en gros (il peut y avoir des erreurs, je code à la volée).
char buffer[25]; // Buffer de stockage des caractères entrés
byte bufferPos=0; // Index pour stocker les caracteres entrés
char ch; // valeur à lire
boolean enterPressed = false; // flag pour savoir si Enter a été préssé
void setup()
{
Serial.begin(9600);
}
void loop()
{
if (Serial.available()) // Il y a des caracteres dispos sur le port serie
{
ch = Serial.read(); // On en lit 1
enterPressed = false; // On set le flag a faux
if (ch!='\n') // Si ch n'est pas Enter
{
buffer[bufferPos++]=ch; // On stocke dans le buffer et on augmente l'index
if (bufferPos>24) // Si on tape trop de caractere on revient à zero
bufferPos = 0;
}
else // C'est enter qui est pressé
{
buffer[bufferPos]='\x0'; // on le remplace par 'fin de chaine'
enterPressed = true; // On valide le flag
}
}
if (enterPressed==true) // Enter a été pressé !
{
if (strstr(buffer, "MOTDEPASSE")) // On compare au mot de passe
{
Serial.println("Ok vous êtes autorisé");
}
else
{
Serial.println("Mauvais mot de passe");
}
}
}