Программа кодовый замок, небольшой вопрос

VODOLAZM
Offline
Зарегистрирован: 06.06.2018

Здравствуйте , возникла проблема при сборке схемы "Кодовый замок" использовал дисплей 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"); 



}

VODOLAZM
Offline
Зарегистрирован: 06.06.2018
// Извиняюсь за кривую тему, дурак.
#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");    
  }
}

 

Efim
Offline
Зарегистрирован: 04.05.2018

Для начала в сетап добавьте. 

digitalWrite(buzzer, LOW);

 

Efim
Offline
Зарегистрирован: 04.05.2018

Начиная со строки 57 оформите нормально свич, не вижу бряков, зачем вам  for если выполняется 1 раз?

 

Efim
Offline
Зарегистрирован: 04.05.2018

buzzer отдельной функцией оформить.

Kakmyc
Offline
Зарегистрирован: 15.01.2018

И тут ты ?
Везде спамим ?
Кнопки подключай относительно gnd.
Они в библиотеке подтянуты к +5в

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Efim пишет:

Для начала в сетап добавьте. 

digitalWrite(buzzer, LOW);

 


А это зачем ?

VODOLAZM
Offline
Зарегистрирован: 06.06.2018

Что значит относительно gnd?

Kakmyc
Offline
Зарегистрирован: 15.01.2018

VODOLAZM пишет:

Что значит относительно gnd?


Значит, что один вывод кнопки на пин, а второй на gnd

VODOLAZM
Offline
Зарегистрирован: 06.06.2018

Нужно ли так подключить матричную клавиатуру вот такого типа.

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Смотри документацию на клавиатуру. Факт, что в библиотеке так прописано.