IButton garage-dörröppnare (Arduino) (7 / 10 steg)
Steg 7: Den sista skissen
Nu behöver jag att sammanställa alla tre skisser till en fungerande skiss!
Jag använde klocka-sketch som bas att lägga till de andra två skisserna till. Jag lagt till funktioner för att blockera iButtons och Arduino loggar de senaste 10 posterna.
Av bugg som var i min första skiss är fast nu. Om du använt koden som var postat här före den 2 oktober 2011, än att ändra denna kod. Om du redan mixtrar med den, så låt mig veta och jag kommer att förklara ett enkelt sätt att sätta fast vägglusen.
Skiss:
#include //adding tid-biblioteket
#include //adding LCD-skärmen bibliotek
#include //adding iButton biblioteket
LiquidCrystal lcd (11, 10, 5, 4, 3, 2); stiften som LCD-skärmen är ansluten på
int knoptijd = 400. ställa in alla variabler för klocka delen (ledsen för de holländska namn)
int uur = 12.
int minuut = 15.
int seconde = 0;
int dag = 10;
int maand = 9.
int Johansson = 2011.
int knopset = 9;
int knopmode = 8;
int setwaarde = 0;
int modewaarde = 0;
OneWire ds(12); ange variablerna för iButton delen
byte addr [8].
int but1 [6] = {0,149,107,48,13,0}. koden för iButtton ***
Sträng namn1 = "Burton"; namnet bör alltid 6 siffror
byte uit1 = 1;
int but2 [6] = {0,65,177,47,13,0}.
Sträng name2 = "Aca";
byte uit2 = 1;
int but3 [6] = {0,235,75,138,9,0}.
Sträng name3 = "Peter";
byte uit3 = 1;
int but4 [6] = {0,3,0,0,0,0}.
String name4 = "Men 4";
byte uit4 = 1;
int but5 [6] = {0,87,171,46,13,0}.
String name5 = "Jelle";
byte uit5 = 1;
String keyStatus = "";
byte welkeBut = 0;
String namn = "";
Sträng geheugen [10] = {"leeg10", "leeg 9", "leeg 8", "leeg 7", "leeg 6", "leeg 5", "leeg 4", "leeg 3", "leeg 2", "leeg 1"};
int memHour [10] = {99,99,99,99,99,99,99,99,99,99}.
int memMinute [10] = {99,99,99,99,99,99,99,99,99,99}.
int memDay [10] = {99,99,99,99,99,99,99,99,99,99}.
int memMonth [10] = {99,99,99,99,99,99,99,99,99,99}.
int jag = 0;
void setup() {
pinMode (knopset, ingång);
pinMode (knopmode, ingång);
pinMode (7, OUTPUT); öppna dörren
LCD.BEGIN (20, 2); ställa in storleken på LCD-skärmen
setTime(uur,minuut,seconde,dag,maand,jaar); Ange starttid för klockan när den startar
}
void loop() {
setklok(); testning för tider som måste ändras
digitalClockDisplay(); Visa klockan
Delay(1000);
getKeyCode(); att få iButton koden
testKeyCode(); testa iButton koden
modeklok();
}
void setklok() {//setting klockan
modewaarde = digitalRead(knopmode);
om (modewaarde == låg) {//if [mode]-knappen är pusched
LCD.Clear();
LCD.Print ("tijd instellen");
lcd.setCursor (0, 1); ställa in timmarna
LCD.Print ("uur:");
lcd.setCursor (9, 1);
LCD.Print(uur);
LCD.Print("");
Delay(knoptijd);
modewaarde = digitalRead(knopmode);
medan (modewaarde == hög) {
Delay(knoptijd);
setwaarde = digitalRead(knopset);
om (setwaarde == låg) {
uur ++;
om (uur > 24) uur = 1;
lcd.setCursor(9,1);
LCD.Print(uur);
LCD.Print("");
}
modewaarde = digitalRead(knopmode);
}
miljö i minuter
lcd.setCursor (0, 1);
LCD.Print("minuut");
lcd.setCursor (9, 1);
LCD.Print(minuut);
LCD.Print("");
Delay(knoptijd);
modewaarde = digitalRead(knopmode);
medan (modewaarde == hög) {
Delay(knoptijd);
setwaarde = digitalRead(knopset);
om (setwaarde == låg) {
minuut ++;
om (minuut > 59) minuut = 0;
lcd.setCursor (9, 1);
LCD.Print(minuut);
LCD.Print("");
}
modewaarde = digitalRead(knopmode);
}
ställa in månad
lcd.setCursor (0, 1);
LCD.Print ("maand");
lcd.setCursor (9, 1);
LCD.Print(maand);
LCD.Print("");
Delay(knoptijd);
modewaarde = digitalRead(knopmode);
medan (modewaarde == hög) {
Delay(knoptijd);
setwaarde = digitalRead(knopset);
om (setwaarde == låg) {
maand ++;
om (maand > 12) maand = 1;
lcd.setCursor (9, 1);
LCD.Print(maand);
LCD.Print("");
}
modewaarde = digitalRead(knopmode);
}
att dag
lcd.setCursor (0, 1);
LCD.Print ("dag");
lcd.setCursor (9, 1);
LCD.Print(dag);
LCD.Print("");
Delay(knoptijd);
modewaarde = digitalRead(knopmode);
medan (modewaarde == hög) {
Delay(knoptijd);
setwaarde = digitalRead(knopset);
om (setwaarde == låg) {
dag ++;
om (maand == 1 || maand == 3 || maand == 5 || maand == 7 || maand == 8 || maand == 10 || maand == 12) {
om (dag > 31) dag = 1;
}
om (maand == 4 || maand == 6 || maand == 9 || maand == 11) {
om (dag > 30) dag = 1;
}
om (maand == 2) {
om (dag > 28) dag = 1;
}
lcd.setCursor (9, 1);
LCD.Print(dag);
LCD.Print("");
}
modewaarde = digitalRead(knopmode);
}
setTime(uur,minuut,seconde,dag,maand,jaar);
LCD.Clear();
}
}
void digitalClockDisplay() {//printing tid och datum
lcd.setCursor(0,0);
LCD.Print("");
lcd.setCursor(0,0);
LCD.Print(Hour());
printDigits(minute());
LCD.Print("");
LCD.Print(Day());
LCD.Print("/");
LCD.Print(Month());
LCD.Print("");
}
void printDigits (int siffror) {
verktyget funktion för digital klocka: utskrifter före kolon och ledande 0
LCD.Print(":");
IF(digits < 10)
LCD.Print('0');
LCD.Print(digits);
}
void getKeyCode() {//getting koden från Nyckelringsfäste
byte närvarande = 0;
byte data [12].
keyStatus = "";
om (! ds.search(addr)) {
DS.reset_search();
hemkomst.
}
om (OneWire::crc8 (addr, 7)! = addr[7]) {
keyStatus = "Ogiltig CRC";
hemkomst.
}
om (addr [0]! = 0x01) {
keyStatus = "inte DS1990A";
hemkomst.
}
keyStatus = "ok";
DS.Reset();
}
void modeklok() {//testing för botten-knappen ###
setwaarde = digitalRead(knopset);
om (setwaarde == låg) {//if knappen [Ange] är pusched
LCD.Clear();
LCD.Print ("underhåll av Internet Explorer. Buiten sluiten?");
lcd.setCursor (0, 1); kontroll av minnet
LCD.Print(geheugen[9]);
LCD.Print("");
LCD.Print(memHour[9]);
LCD.Print(":");
LCD.Print(memMinute[9]);
LCD.Print("");
LCD.Print(memDay[9]);
LCD.Print("/");
LCD.Print(memMonth[9]);
LCD.Print("");
Delay(knoptijd);
setwaarde = digitalRead(knopset);
Jag = 8.
medan (modewaarde == hög) {
om (setwaarde == låg) {
Jag--;
lcd.setCursor(0,1);
LCD.Print(geheugen[i]);
LCD.Print("");
LCD.Print(memHour[i]);
LCD.Print(":");
LCD.Print(memMinute[i]);
LCD.Print("");
LCD.Print(memDay[i]);
LCD.Print("/");
LCD.Print(memMonth[i]);
LCD.Print("");
Delay(knoptijd);
IF(i==0) {
LCD.Clear();
lcd.setCursor (0, 1); att sätta sist in tillbaka på skärmen
LCD.Print(geheugen[9]);
LCD.Print("");
LCD.Print(memHour[9]);
LCD.Print(":");
LCD.Print(memMinute[9]);
LCD.Print("");
LCD.Print(memDay[9]);
LCD.Print("/");
LCD.Print(memMonth[9]);
LCD.Print("");
loop();
hemkomst.
}
}
setwaarde = digitalRead(knopset);
modewaarde = digitalRead(knopmode);
}
Delay(knoptijd);
Jag = 0;
While(i == 0) {//keeping ut iButton 1
lcd.setCursor(0,0);
LCD.Print ("buitensluiten? Ja -> ");
lcd.setCursor(0,1);
LCD.Print(name1);
LCD.Print ("nee ->").
Delay(knoptijd); Dubble väntetiden här
Delay(knoptijd);
modewaarde = digitalRead(knopmode);
setwaarde = digitalRead(knopset);
om (modewaarde == låg) {
uit1 = 0;
lcd.setCursor(0,0);
LCD.Print ("buitengesloten!"); Lägg av
Delay(1000);
Jag = 1;
}
om (setwaarde == låg) {
uit1 = 1;
lcd.setCursor(0,0);
LCD.Print ("mag er i"); Kom in
Delay(1000);
Jag = 1;
}
}
Jag = 0;
While(i == 0) {//keeping ut iButton 2
lcd.setCursor(0,0);
LCD.Print ("buitensluiten? Ja -> ");
lcd.setCursor(0,1);
LCD.Print(name2);
LCD.Print ("nee ->").
Delay(knoptijd); Dubble väntetiden här
Delay(knoptijd);
modewaarde = digitalRead(knopmode);
setwaarde = digitalRead(knopset);
om (modewaarde == låg) {
uit2 = 0;
lcd.setCursor(0,0);
LCD.Print ("buitengesloten!"); Lägg av
Delay(1000);
Jag = 1;
}
om (setwaarde == låg) {
uit2 = 1;
lcd.setCursor(0,0);
LCD.Print ("mag er i"); Kom in
Delay(1000);
Jag = 1;
}
}
Jag = 0;
While(i == 0) {//keeping ut iButton 3
lcd.setCursor(0,0);
LCD.Print ("buitensluiten? Ja -> ");
lcd.setCursor(0,1);
LCD.Print(name3);
LCD.Print ("nee ->").
Delay(knoptijd); Dubble väntetiden här
Delay(knoptijd);
modewaarde = digitalRead(knopmode);
setwaarde = digitalRead(knopset);
om (modewaarde == låg) {
uit3 = 0;
lcd.setCursor(0,0);
LCD.Print ("buitengesloten!"); Lägg av
Delay(1000);
Jag = 1;
}
om (setwaarde == låg) {
uit3 = 1;
lcd.setCursor(0,0);
LCD.Print ("mag er i"); Kom in
Delay(1000);
Jag = 1;
}
}
Jag = 0;
While(i == 0) {//keeping ut iButton 4
lcd.setCursor(0,0);
LCD.Print ("buitensluiten? Ja -> ");
lcd.setCursor(0,1);
LCD.Print(name4);
LCD.Print ("nee ->").
Delay(knoptijd); Dubble väntetiden här
Delay(knoptijd);
modewaarde = digitalRead(knopmode);
setwaarde = digitalRead(knopset);
om (modewaarde == låg) {
uit4 = 0;
lcd.setCursor(0,0);
LCD.Print ("buitengesloten!"); Lägg av
Delay(1000);
Jag = 1;
}
om (setwaarde == låg) {
uit4 = 1;
lcd.setCursor(0,0);
LCD.Print ("mag er i"); Kom in
Delay(1000);
Jag = 1;
}
}
Jag = 0;
While(i == 0) {//keeping ut iButton 5
lcd.setCursor(0,0);
LCD.Print ("buitensluiten? Ja -> ");
lcd.setCursor(0,1);
LCD.Print(name5);
LCD.Print ("nee ->").
Delay(knoptijd); Dubble väntetiden här
Delay(knoptijd);
modewaarde = digitalRead(knopmode);
setwaarde = digitalRead(knopset);
om (modewaarde == låg) {
uit5 = 0;
lcd.setCursor(0,0);
LCD.Print ("buitengesloten!"); Lägg av
Delay(1000);
Jag = 1;
}
om (setwaarde == låg) {
uit5 = 1;
lcd.setCursor(0,0);
LCD.Print ("mag er i"); Kom in
Delay(1000);
Jag = 1;
}
}
LCD.Clear();
}
}
void testKeyCode() {//check om iButton presenteras är rätta
lcd.setCursor (0, 1);
IF(keyStatus=="OK") {
om (addr [1] == but1 [1] & & addr [2] == but1 [2] & & addr [3] == but1 [3] & & addr [4] == but1 [4] & & uit1 == 1) {welkeBut = 1; namn = name1;}
om (addr [1] == but2 [1] & & addr [2] == but2 [2] & & addr [3] == but2 [3] & & addr [4] == but2 [4] & & uit2 == 1) {welkeBut = 2; namn = name2;}
om (addr [1] == but3 [1] & & addr [2] == but3 [2] & & addr [3] == but3 [3] & & addr [4] == but3 [4] & & uit3 == 1) {welkeBut = 3; namn = name3;}
om (addr [1] == but4 [1] & & addr [2] == but4 [2] & & addr [3] == but4 [3] & & addr [4] == but4 [4] & & uit4 == 1) {welkeBut = 4; namn = name4;}
om (addr [1] == but5 [1] & & addr [2] == but5 [2] & & addr [3] == but5 [3] & & addr [4] == but5 [4] & & uit5 == 1) {welkeBut = 5; namn = name5;}
om (welkeBut == 1 || welkeBut == 2 || welkeBut == 3 || welkeBut == 4 || welkeBut == 5) {
LCD.Print(Name);
LCD.Print("");
LCD.Print(Hour());
printDigits(minute());
LCD.Print("");
LCD.Print(Day());
LCD.Print("/");
LCD.Print(Month());
LCD.Print("");
digitalWrite (7, hög).
Delay(500);
digitalWrite (7, låg).
bewaren(); Lägg sista besök i minne
}
om (welkeBut! = 1 & & welkeBut! = 2 & & welkeBut! = 3 & & welkeBut! = 4 & & welkeBut! = 5) {
digitalWrite (7, låg).
LCD.Print("");
lcd.setCursor (0, 1);
byte i.
för (jag = 5; jag > 0; i--) {
LCD.Print(":");
LCD.Print (addr [i], DEC);
}
Delay(1000);
lcd.setCursor (0, 1);
LCD.Print("");
}
}
annat {
welkeBut = 0;
om (keyStatus! = "") {
lcd.setCursor (0, 1);
LCD.Print(keyStatus);
Delay(1000);
lcd.setCursor (0, 1);
LCD.Print("");
}
}
}
void bewaren() {//put senaste besök i minnet
geheugen [0] = geheugen [1].
geheugen [1] = geheugen [2].
geheugen [2] = geheugen [3].
geheugen [3] = geheugen [4].
geheugen [4] = geheugen [5]. varje besök går en minnesplats
geheugen [5] = geheugen [6].
geheugen [6] = geheugen [7].
geheugen [7] = geheugen [8].
geheugen [8] = geheugen [9].
geheugen [9] = namn; senaste besöket läggs
memHour [0] = memHour [1]. samma för timmarna
memHour [1] = memHour [2].
memHour [2] = memHour [3].
memHour [3] = memHour [4].
memHour [4] = memHour [5].
memHour [5] = memHour [6].
memHour [6] = memHour [7].
memHour [7] = memHour [8].
memHour [8] = memHour [9].
memHour [9] = hour();
memMinute [0] = memMinute [1].
memMinute [1] = memMinute [2].
memMinute [2] = memMinute [3].
memMinute [3] = memMinute [4].
memMinute [4] = memMinute [5].
memMinute [5] = memMinute [6].
memMinute [6] = memMinute [7].
memMinute [7] = memMinute [8].
memMinute [8] = memMinute [9].
memMinute [9] = minute();
memDay [0] = memDay [1].
memDay [1] = memDay [2].
memDay [2] = memDay [3].
memDay [3] = memDay [4].
memDay [4] = memDay [5].
memDay [5] = memDay [6].
memDay [6] = memDay [7].
memDay [7] = memDay [8].
memDay [8] = memDay [9].
memDay [9] = day();
memMonth [0] = memMonth [1].
memMonth [1] = memMonth [2].
memMonth [2] = memMonth [3].
memMonth [3] = memMonth [4].
memMonth [4] = memMonth [5].
memMonth [5] = memMonth [6].
memMonth [6] = memMonth [7].
memMonth [7] = memMonth [8].
memMonth [8] = memMonth [9].
memMonth [9] = month();
}