Arduino Polska Forum

Pełna wersja: Drzwi na kod.
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Witam,
próbuje zrobić drzwi na hasło z arduino, ale mam jeden problem którego nie potrafię rozwiązać.
Chodzi mi o to, że jeżeli mam kod "123"i wpisuje go w klawiaturę to wszystko działa, ale gdy wpiszę np. "0123" to też działa (a nie chce).
Chcę żeby był jakiś limit do trzech liczb żeby odczytywało w taki sposób: "012" a nie taki "0123".

Liczę na waszą pomoc! [Obrazek: icon_wink.gif]

Tutaj kod:

#include <Servo.h>
#include <Keypad.h>
Servo ServoMotor;
char* password = "123";
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] = { 9, 8, 7, 6 };
byte colPins[COLS] = { 5, 4, 3, 2 };
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
int RedpinLock = 12;
int GreenpinUnlock = 13;
void setup()
{
pinMode(RedpinLock, OUTPUT);
pinMode(GreenpinUnlock, OUTPUT);
ServoMotor.attach(11);
LockedPosition(true);
}
void loop()
{
char key = keypad.getKey();
if (key == '*' || key == '#')
{
position = 0;
LockedPosition(true);
}
if (key == password[position])
{
position ++;
}
if (position == 3)
{
LockedPosition(false);
}
delay(100);
}
void LockedPosition(int locked)
{
if (locked)
{
digitalWrite(RedpinLock, HIGH);
digitalWrite(GreenpinUnlock, LOW);
ServoMotor.write(11);
}
else
{
digitalWrite(RedpinLock, LOW);
digitalWrite(GreenpinUnlock, HIGH);
ServoMotor.write(90);
}
}
position ++; to nie jest dobry pomysł, masz w password tablicę na trzy znaki + 0, czyli cztery elementy.
position++ może być tylko wtedy jeżeli jest mniejsze równe 2. Pod indeksem 3 ma być zawsze 0 kończące napis.
if (position<=2) position++; else position=0;
Nie porównuj literek tylko cały przypisany napis do napisu zawierającego hasło.
Oczywiście jak wszędzie nauka obsługi czasu, kiedy upłynie np. 10s od wciśnięcia ostatniego znaku decyzja, że hasło błędne, reset na pozycję 0.