Программа кодовый замок, небольшой вопрос
- Войдите на сайт для отправки комментариев
Здравствуйте , возникла проблема при сборке схемы "Кодовый замок" использовал дисплей 1602, модульный зумммер( у которого 3 контакта, плюс, минус и логический контакт) и матричная клавиатура. Суть проблемы: при нажатии на клавишу должен издавать подтверждающий кратковременный писк, а на деле при подключении питания, зуммер постоянно пищит. Подключение зуммера к ардуино: VCC-5v, IO-D11, GND-GND , использую arduino NANO сам скетч:
#include <Password.h>
#include <Keypad.h>
#include <LiquidCrystal.h>
Password password = Password("1234"); // password
int dlugosc = 4; // length of the password
LiquidCrystal_I2C lcd(0x3F, 16, 2);
int buzzer = 11;
int ilosc; // number of clicks
const byte ROWS = 5; // строки
const byte COLS = 4; // столбцы
char keys[ROWS][COLS] =
{
{'L','7','4','1'},
{'0','8','5','2'},
{'R','9','6','3'},
{'E','O','D','U'},
{'J','O','D','M'},
};
byte rowPins[ROWS] = {5, 4, 3, 2};
byte colPins[COLS] = {9, 8, 7,};
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
void setup()
{
Serial.begin(9600);
keypad.addEventListener(keypadEvent);
pinMode(buzzer, OUTPUT);
lcd.begin();
lcd.setCursor(1,0);
lcd.print(" :Welcome:");
lcd.setCursor(0,1);
lcd.print("PLEASE ENTER PIN");
}
void loop()
{
keypad.getKey();
}
void keypadEvent(KeypadEvent eKey)
{
switch (keypad.getState())
{
case PRESSED:
int i;
for( i = 1; i <= 1; i++ )
{
digitalWrite(buzzer, HIGH);
delay(60);
digitalWrite(buzzer, LOW);
delay(60);
}
Serial.print("Pressed: ");
Serial.println(eKey);
switch (eKey)
{
/*
case '#':
break;
case '*':
break;
*/
default:
ilosc=ilosc+1;
password.append(eKey);
}
//Serial.println(ilosc);
if(ilosc == 1)
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print(" < PIN >");
lcd.setCursor(0,1);
lcd.print("*_");
}
if(ilosc == 2)
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print(" < PIN >");
lcd.setCursor(0,1);
lcd.print("**_");
}
if(ilosc == 3)
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print(" < PIN >");
lcd.setCursor(0,1);
lcd.print("***_");
}
if(ilosc == 4)
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print(" < PIN >");
lcd.setCursor(0,1);
lcd.print("****_");
}
if(ilosc == 5)
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print(" < PIN >");
lcd.setCursor(0,1);
lcd.print("*****_");
}
if(ilosc == 6)
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print(" < PIN >");
lcd.setCursor(0,1);
lcd.print("******_");
}
if(ilosc == 7)
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print(" < PIN >");
lcd.setCursor(0,1);
lcd.print("*******_");
}
if(ilosc == 8)
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print(" < PIN >");
lcd.setCursor(0,1);
lcd.print("********");
}
if(ilosc == dlugosc)
{
delay(250);
checkPassword();
ilosc = 0;
}
}
}
void checkPassword()
{
if (password.evaluate())
{
int i;
for( i = 1; i <= 2; i++ )
{
digitalWrite(buzzer, HIGH);
delay(70);
digitalWrite(buzzer, LOW);
delay(70);
digitalWrite(buzzer, HIGH);
delay(70);
digitalWrite(buzzer, LOW);
delay(70);
}
ilosc = 0;
Serial.println("Success");
lcd.clear();
lcd.setCursor(2,1);
lcd.print(" « OPEN »");
}
else
{
int i;
for( i = 1; i <= 1; i++ )
{
digitalWrite(buzzer, HIGH);
delay(200);
digitalWrite(buzzer, LOW);
delay(500);
}
ilosc = 0;
password.reset();
Serial.println("Wrong");
lcd.clear();
lcd.setCursor(0,1);
lcd.print(" « CLOSE »");
delay(2000);
lcd.clear();
lcd.setCursor(1,0);
lcd.print(" :Welcome:");
lcd.setCursor(0,1);
lcd.print("PLEASE ENTER PIN");
}
}
// Извиняюсь за кривую тему, дурак. #include <LiquidCrystal_I2C.h> #include <Password.h> #include <Keypad.h> #include <LiquidCrystal.h> Password password = Password("1234"); // password int dlugosc = 4; // length of the password LiquidCrystal_I2C lcd(0x3F, 16, 2); int buzzer = 11; int ilosc; // number of clicks const byte ROWS = 5; // строки const byte COLS = 4; // столбцы char keys[ROWS][COLS] = { {'L','7','4','1'}, {'0','8','5','2'}, {'R','9','6','3'}, {'E','O','D','U'}, {'J','O','D','M'}, }; byte rowPins[ROWS] = {6, 5, 4, 3, 2}; byte colPins[COLS] = {10 ,9, 8, 7,}; Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); void setup() { Serial.begin(9600); keypad.addEventListener(keypadEvent); pinMode(buzzer, OUTPUT); lcd.begin(); lcd.setCursor(1,0); lcd.print(" :Welcome:"); lcd.setCursor(0,1); lcd.print("PLEASE ENTER PIN"); } void loop() { keypad.getKey(); } void keypadEvent(KeypadEvent eKey) { switch (keypad.getState()) { case PRESSED: int i; for( i = 1; i <= 1; i++ ) { digitalWrite(buzzer, HIGH); delay(60); digitalWrite(buzzer, LOW); delay(60); } Serial.print("Pressed: "); Serial.println(eKey); switch (eKey) { /* case '#': break; case '*': break; */ default: ilosc=ilosc+1; password.append(eKey); } //Serial.println(ilosc); if(ilosc == 1) { lcd.clear(); lcd.setCursor(1,0); lcd.print(" < PIN >"); lcd.setCursor(0,1); lcd.print("*_"); } if(ilosc == 2) { lcd.clear(); lcd.setCursor(1,0); lcd.print(" < PIN >"); lcd.setCursor(0,1); lcd.print("**_"); } if(ilosc == 3) { lcd.clear(); lcd.setCursor(1,0); lcd.print(" < PIN >"); lcd.setCursor(0,1); lcd.print("***_"); } if(ilosc == 4) { lcd.clear(); lcd.setCursor(1,0); lcd.print(" < PIN >"); lcd.setCursor(0,1); lcd.print("****_"); } if(ilosc == 5) { lcd.clear(); lcd.setCursor(1,0); lcd.print(" < PIN >"); lcd.setCursor(0,1); lcd.print("*****_"); } if(ilosc == 6) { lcd.clear(); lcd.setCursor(1,0); lcd.print(" < PIN >"); lcd.setCursor(0,1); lcd.print("******_"); } if(ilosc == 7) { lcd.clear(); lcd.setCursor(1,0); lcd.print(" < PIN >"); lcd.setCursor(0,1); lcd.print("*******_"); } if(ilosc == 8) { lcd.clear(); lcd.setCursor(1,0); lcd.print(" < PIN >"); lcd.setCursor(0,1); lcd.print("********"); } if(ilosc == dlugosc) { delay(250); checkPassword(); ilosc = 0; } } } void checkPassword() { if (password.evaluate()) { int i; for( i = 1; i <= 2; i++ ) { digitalWrite(buzzer, HIGH); delay(70); digitalWrite(buzzer, LOW); delay(70); digitalWrite(buzzer, HIGH); delay(70); digitalWrite(buzzer, LOW); delay(70); } ilosc = 0; Serial.println("Success"); lcd.clear(); lcd.setCursor(2,1); lcd.print(" << OPEN >>"); } else { int i; for( i = 1; i <= 1; i++ ) { digitalWrite(buzzer, HIGH); delay(200); digitalWrite(buzzer, LOW); delay(500); } ilosc = 0; password.reset(); Serial.println("Wrong"); lcd.clear(); lcd.setCursor(0,1); lcd.print(" << CLOSE >>"); delay(2000); lcd.clear(); lcd.setCursor(1,0); lcd.print(" :Welcome:"); lcd.setCursor(0,1); lcd.print("PLEASE ENTER PIN"); } }Для начала в сетап добавьте.
Начиная со строки 57 оформите нормально свич, не вижу бряков, зачем вам for если выполняется 1 раз?
buzzer отдельной функцией оформить.
И тут ты ?
Везде спамим ?
Кнопки подключай относительно gnd.
Они в библиотеке подтянуты к +5в
Для начала в сетап добавьте.
А это зачем ?
Что значит относительно gnd?
Что значит относительно gnd?
Значит, что один вывод кнопки на пин, а второй на gnd
Нужно ли так подключить матричную клавиатуру вот такого типа.
Смотри документацию на клавиатуру. Факт, что в библиотеке так прописано.