Tak další problém.. povedlo se mi úspěšně nastavit otvírání na 3 různá hesla, přičemž při každém se objekt otevře, ale na display to napíše pokaždé něco jiného
Ale stihl mě problém s tím, že se mi neaktualizuje čas. Tedy aktualizuje se tehdy, pokud v tom programu, který ten čas vypisuje napíšu
Kód: Vybrat vše
lcd.print(cas); // vypíše cas na displej
delay(1000);
lcd.celar()
ale ta funkce delay mi v celém program udělá neplechu, (asi proto, že pokaždé když tam program dojde, tak se na sekundu zastaví činnost), tak jsem chtěl použít funkci millis.. nastudoval jsem si ji a myslel, že bude fungovat správně, ale nefunguje vůbec. Dám sem kód s tím millis (díky němu se na displey nezobrazí nic ani nic nefunguje)
Kód: Vybrat vše
#include <Keypad.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DS1307.h>
//#define Password_Lenght 5 //délka hesla 5
LiquidCrystal_I2C lcd(0x27,20,4);
//byte data_count = 0, master_count = 0;
//bool Pass_is_good;
char stisknutyznak;
char pressedKey[5] = {'0','0','0','0'}; // sem se budou ukládat stiskuté znaky
long vypiscasu;
char code[5] = {'1','9','4','7'}; // kód pro otevření dveří
char code2[5] = {'1','9','9','9'}; // kód pro otevření dveří
char code3[5] = {'4','0','9','5'}; // kód pro otevření dveří
int rtc[68];
const byte ROWS = 4;
const byte COLS = 3;
char keys[ROWS][COLS] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
byte rowPins[ROWS] = {
8,7,6,5}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {
9,3,2}; //connect to the column pinouts of the keypad
Keypad klavesnice( makeKeymap(keys), rowPins, colPins, ROWS, COLS); //initialize an instance of class NewKeypad
int zamceno;
int magnet = 10;
int sirena = 0;
void setup()
{
pinMode(magnet, INPUT);
pinMode(sirena, OUTPUT);
lcd.begin();// initialize the lcd
lcd.backlight();
lcd.setCursor(4,0); // nastaví kurzor na pozici
RTC.set(DS1307_DATE,13); // nastaví den v měsíci
RTC.set(DS1307_MTH,4); // nastaví měsíc
RTC.set(DS1307_YR,18); // nastaví rok
RTC.set(DS1307_MIN,49); // nastaví minuty
RTC.set(DS1307_HR,11); // nastaví hodiny
RTC.start(); // spustí čas
}
void loop()
{char stisknutyznak = klavesnice.getKey();// vytvoří proměnnou, do které uloží znak stisknuté klávesy
{ if (millis() > (10000 + vypiscasu))
{
RTC.get(rtc,true);
// připraví pole znaků pro čas
char cas[15];
// zapíše do pole znaků cas hodnoty z rtc
sprintf(cas, "%02d.%02d.%02d %02d:%02d", rtc[4],rtc[5],rtc[6],rtc[2],rtc[1]);
lcd.setCursor(3,3); // nastaví kurzor na pozici
lcd.print(cas); // vypíše cas na displej
}
else
vypiscasu = millis();
}
if (stisknutyznak == '#') //když se stiskne křížek, objeví se na display zamčeno
{
zamceno=1;
lcd.setCursor (4,0);
lcd.print("Zamceno");
digitalWrite(magnet, HIGH);// a zapne se magneticky senzor
delay(1000) ;
lcd.clear(); // po 5ti sekundách se nápis "zamčeno" smaže
}
if(digitalRead(magnet) == HIGH and zamceno==1){
digitalWrite(sirena, HIGH);
delay(3000);
digitalWrite(sirena,LOW);
}
else{
digitalWrite(sirena, LOW);
}
{
// přečte stiskuté tlačítko a uloží do customKey
if (stisknutyznak){
// když je stisknuto potvrzovací tlačítko *
if (stisknutyznak == '*')
{
// když se pole kódu rovná poli stiskutých talčítek
if ((pressedKey[0] == code[0]) && (pressedKey[1] == code[1]) && (pressedKey[2] == code[2]) && (pressedKey[3] == code[3]))
{
lcd.print("Vitej Luki");
zamceno=0;
delay(2000);
lcd.clear();
// vynuluj stiskuté tlačítka
pressedKey[0] = '0';
pressedKey[1] = '0';
pressedKey[2] = '0';
pressedKey[3] = '0';
}
else if ((pressedKey[0] == code2[0]) && (pressedKey[1] == code2[1]) && (pressedKey[2] == code2[2]) && (pressedKey[3] == code2[3]))
{
lcd.print("Vitej mami");
zamceno=0;
delay(2000);
lcd.clear();
// vynuluj stiskuté tlačítka
pressedKey[0] = '0';
pressedKey[1] = '0';
pressedKey[2] = '0';
pressedKey[3] = '0';
}
else if ((pressedKey[0] == code3[0]) && (pressedKey[1] == code3[1]) && (pressedKey[2] == code3[2]) && (pressedKey[3] == code3[3]))
{
lcd.print("Vitej tati");
zamceno=0;
delay(2000);
lcd.clear();
// vynuluj stiskuté tlačítka
pressedKey[0] = '0';
pressedKey[1] = '0';
pressedKey[2] = '0';
pressedKey[3] = '0';
}
}
// když není stisknuto potvrzovací tlačítko #
else
{
//přidej znak do pole a znaky posuň
pressedKey[0] = pressedKey[1];
pressedKey[1] = pressedKey[2];
pressedKey[2] = pressedKey[3];
pressedKey[3] = stisknutyznak;
}
}
}
}