• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Drzwi na kod.
#1
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);
}
}
 
Odpowiedź
#2
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.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości