Obracím se k vám o průběžnou pomoc s celým projektem a říkám si, že pokud by mi někdo opravdu hodně pomohl, nebyl by problém ho nějak finančně odměnit. Každopádně tu je problém.
Mám za úkol vytvořit Elektronický zabezpečovací systém.
obsahuje tyto komponenty (LCD I2C display, 3x4 klávesnice, Sirénka, RTC modul, Modul na paměťovou kartu, magnetický senzor na dveře)
Měl by fungovat následovně:
Jsem doma. Chci odejít, tak zavřu dveře a na klávesnici zmáčknu křížek, napíše se na displeji na 5s 'zamčeno' Systém se přepne do režimu, že při otevření dveří se sepne sirénka a po 10s se vypne. Pak se vrátím domů. Zadám 4ciferné heslo, které za prvé zapíše mé jméno(podle hesla) a čas příchodu na paměťovou kartu a přepne se zpět do režimu, který dovolí otevřít dveře bez zabzučení sirénky.
Komponenty mám nakoupené a zapojené, vše jsem zkomunikoval s dalším prvkem (Display s RTC, Display s klávesnicí, magn. senzor se sirénkou, akorát modul na paměťovou kartu ještě ne, ale to nebude problém)
Teď píšu program a zaseknul jsem se.. mám funkční část, že se zapne arduino a pokud stisknu '#', přepne se do režimu, kdy začne houkat sirénka při otevření dvěří.. tu jsem chtěl dát dohromady s prostým vypsání aktuálního data a času na display. Oba programy samostatně fungují, ale když je dám dohromady, pouze funguje zobrazení času na displeji a na stisknutí křížku nic nereaguje. Zjistil jsem, že v tom celém kódu dělá problém řádek
sprintf(cas, "%02d.%02d.%02d %02d:%02d", rtc[4],rtc[5],rtc[6],rtc[2],rtc[1]);
ale nevím vůbec proč.. jinak tady je kod
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);
char Data[Password_Lenght]; // 6 is the number of chars it can hold + the null char = 7
char Master[Password_Lenght] = "1";
byte data_count = 0, master_count = 0;
bool Pass_is_good;
char stisknutyznak;
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,11); // 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,11); // nastaví minuty
RTC.set(DS1307_HR,10); // nastaví hodiny
RTC.start(); // spustí čas
}
void loop()
{
char stisknutyznak = klavesnice.getKey();// vytvoří proměnnou, do které uloží znak stisknuté klávesy
RTC.get(rtc,true);
// připraví pole znaků pro čas
char cas[9];
// 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
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);
}
}