LEGO huvud Safe (4 / 5 steg)

Steg 4: kod

Koden används befintliga bibliotek för LCD, Servo och knappsats. Jag har skapat min egen kod lösenord system och övergripande funktionaliteten. Koden innehåller tre alternativ för säkert: öppet, nära och ange lösenord. För att ändra lösenord, har användaren veta den existerande lösenordet. Koden är fullt kommenterade för välbefinnande av en person som är ny på programmering.

Följande och bifogade är min kod. Du får gärna använda det!

/***************************************************************************************************************************
Titel: Lego huvud Safe

Författare: Inga-Lill Bellerose

Datum: 11/01/2014

Uppdaterad: 12/03/2014

Syfte: Denna skiss ger kontrollsystemet för Lego Head säker.

Denna skiss lånar från flera källor. De ursprungliga källorna kommer att nämnas här i rubrikblocket när allmänna tillvägagångssätt följdes.

1) Keypad.h bibliotek Skrivet av Mark Stanley och Alexander Brevig (mstanley alexanderbrevig

2) det finns ett password.h bibliotek på Instructables och liknande sajter. Jag brydde mig inte för genomförandet, så jag skapade mitt eget. ****************************************************************************************************************************/

#include < Wire.h >

#include < LiquidCrystal_I2C.h >

#include < Servo.h >

#include < Keypad.h >

LiquidCrystal_I2C lcd(0x27,16,2); Instansiera en 16 x 2 I2C LCD display med adress 0x27

Servo myServo; Instansiera en servo

int pos; Ange variabeln att hålla servo position värde (Obs: "är ett reserverat ord)

int servoSpeed; Ange variabeln att hålla servo hastighet värde (Obs: "fart" är ett reserverat ord) röding lösenord [3]. Matris som innehar huvudlösenord. Ange längd du vill ha. Jag valde 3 för enkel demo char posten [3]. Matris som innehar användarsparade lösenord försök

booleska isAlreadyOpen; Flagga som spårar om säker är redan öppen

booleska isAlreadyClosed; Flagga som spårar om säker är redan stängd

CONST byte rader = 4; Fyra rader i 4 x 4 knappsatsen matris

CONST byte COLS = 4; Fyra kolumner i 4 x 4 knappsatsen matris

char nycklar [rader] [COLS] = {/ / kartor knappsatsen värdena {'1', '2', '3', 'A'}, {"4", "5", "6", "B"}, {'7', '8', '9', 'C'}, {'* ', '0', '#', 'D'}};

byte rowPins [rader] = {8, 7, 6, 5}; Ansluta till rad Stifttilldelningar för knappsatsen

byte colPins [COLS] = {4, 3, 2, 10}; Ansluta till kolumn Stifttilldelningar för knappsatsen

Använd 1 eller mer lämpligt stift för vad jag har märkt som "10"

Min Arduino har många döda hamnar jag har att navigera runt

Tangentbordet knappsatsen = knappsatsen (makeKeymap(keys), rowPins, colPins, rader, kolumner); Instansierar en knappsats med värden gått.

/ *** Set-up funktion *** /

void setup() {Serial.begin(9600); / / Ställ in följetong till 9600 baud

myServo.attach(11); Ställ in servo till stift 11

isAlreadyOpen = 0; Uppsättningar öppna flagga falskt

isAlreadyClosed = 1; Uppsättningar stängt flaggan True

POS = 90. Anger värde för servo arm position i 90 grader

servoSpeed = 3; Ställer in servo hastighet till 3 grader per sekund

myServo.write(pos); Ställer in servo arm till 90 grader

lösenord [0] = '1'; Se till att sätta initiala värdet i enkla citattecken på grund av dess char natur

lösenord [1] = '2'; Andra värdet i lösenord matris

lösenord [2] = '3'; Senaste värdet i lösenord. Lösenordet används som standard för "123" när / / power är förlorad.

keypad.setDebounceTime(250); SET knappen Dämpningstid tid för knappsatsen

LCD.init(); Initiera LCD

LCD.backlight(); Ställa in displayen vara bakgrundsbelyst

LCD.Print ("Välkommen hem!"); Skriva ut meddelandet så att LCD

Delay(1000); Har meddelande visas för 1000 milseconds

LCD.Clear(); Avmarkera Visa

LCD.Print("1) Open 2) nära"); Skriva ut menyn Alternativ

lcd.setCursor(0,1); Flytta markören till andra raden

LCD.Print("3) Ange kod"); Skriva ut andra delen av menyalternativ

Delay(3000); Dröjsmål

}

/***************Main Loop*****************/

void loop() {

posten [0] = NO_KEY; Återställa posten matrisen med varje slinga eller annars

Inlägg [1] = NO_KEY; får du "false" poster från befintliga värden

posten [2] = NO_KEY; Ange det sista tangentbordet till NO_KEY (liknar inställningen / /
värdet null i C++)

char nyckel = keypad.getKey(); Få den första knapptryckning när det gäller menyn.

om (nyckel == '1') {/ / initierar logik om "Öppna safe" är markerat

IF(isAlreadyOpen == 1) / / kontrollerar om säker redan är öppen. Ingen idé att öppna något redan öppen

{

LCD.Clear(); Clear LCD

LCD.Print ("Safe är redan"); Skriver ut meddelandet

lcd.setCursor(0,1); Flytta markören till andra raden

LCD.Print("Open."); Skriva ut andra delen av menyalternativ

Delay(2000); Dröjsmål 2000 millisekunder}

annat / / om säker inte redan är öppen följande kod engagerar {

LCD.Clear(); Tydlig LCD

LCD.Print ("Ange 1 nyckel:"); Meddelande att värva den första tryckning

lcd.setCursor(0,1); Flyttar markören till andra raden

medan (post [0] == NO_KEY) / / loopen kör tills en giltig nyckel pressa görs

`{

posten [0] = keypad.getKey(); Lagrar det första värdet av användarangivna försök på lösenord

}

LCD.Print(Entry[0]); Skriver ut värdet för visning på LCD. Använda för felsökning och användarvänlighet. Delay(1000); Förseningar för 1000 millisekunder

LCD.Clear(); Clear LCD

LCD.Print ("Ange 2. nyckel:"); Ange den andra tryckning

lcd.setCursor(0,1); Flytta curosr

medan (post [1] == NO_KEY) / / annan slinga som kommer att köras oändlighet såvida inte en giltig knapptryckning görs

{posten [1] = keypad.getKey(); / / butiker det andra värdet av användarangivna försök på lösenord}

LCD.Print(Entry[1]); Skriver ut värdet för visning på LCD. Använda för felsökning och användarvänlighet. Delay(1000); Fördröjning för 1000 millisekunder

LCD.Clear(); Clear LCD

LCD.Print ("Ange 3. nyckel:"); Värva tredje tryckning

lcd.setCursor(0,1); Flyttas markören

medan (post [2] == NO_KEY) / / igen, ett tag loop att kontinuerligt poll tills en giltig nyckel pressa görs. {

posten [2] = keypad.getKey(); Blir den slutliga tryckning

}

LCD.Print(Entry[2]); Skriver ut värdet för visning på LCD. Använda för felsökning och användarvänlighet. Delay(1000); Fördröjning för 1000 millisekunder

LCD.Clear(); Clear LCD

om ((post [0] == password[0]) & & post [1] == lösenord [1] & & post [2] == password[2]) / / om vad användaren angett matchar det lagrade lösenordet, denna loop körs

{

isAlreadyOpen = 1; Ange isAlreadyOpen-flaggan till true/hög

isAlreadyClosed = 0; Ange isAlreadyClosed-flaggan till falskt/låg

POS = 180; Ange position till 180 grader

myServo.write(pos); Ställa in servo till 180 grader

LCD.Clear(); Clear LCD i väntan på meddelande

LCD.Print ("Safe är öppet."); Meddelande att kassaskåpet är öppen

Delay(2000); Fördröjning av 2000 millisekunder}

annat / / om fel kod angetts ska detta utför

{

LCD.Clear(); Clear LCD

LCD.Print ("ogiltig kod."). Ogiltig kod meddelande

Delay(1000); Dröjsmål 1000 millisekunder

LCD.Clear(); Clear LCD}}

mainLCDMenu(); Oavsett om lösenord inträde var framgångsrik, sparkar detta tillbaka till huvudmenyn funktioner}

annars om (nyckel == "2")

{/ / Initierar om "Nära safe" är markerat

IF(isAlreadyClosed == 1) / / om huvudet är redan stängd, varför stänga den igen?

{

LCD.Clear(); Clear LCD

LCD.Print ("Safe är redan"); Börja meddelandet att säker redan är slutna lcd.setCursor(0,1); Flytta markören till andra raden

LCD.Print("closed."); Slutmeddelande

Delay(2000); Fördröjning för 2000 millisekunder dröjsmål}

annat / / om säker inte är redan stängd, detta körs

{isAlreadyOpen = 0; / / anger isAlreadyOpen flagga till falskt/låg

isAlreadyClosed = 1; Anger isAlreadyClosed flagga till true/hög

POS = 90. Anger pos till 90 grader

myServo.write(pos); Uppsättningar servo till 90 grader

LCD.Clear(); Clear LCD

LCD.Print ("Safe stängs."); Meddelande att kassaskåpet är stängd

Delay(2000); Dröjsmål 2000 millisekunder}

LCD.Clear(); Clear LCD

mainLCDMenu(); Hursomhelst, gå tillbaka till huvudmenyn}

annars om (nyckel == "3") {/ / om "Ange kod" alternativet

LCD.Clear(); Clear LCD

LCD.Print ("Ange 1 nyckel:"); Den kod som följer är en upprepning av koden i alternativ 1 lcd.setCursor(0,1); Användaren måste ange lösenordet framgångsrikt innan du ändrar det

medan (post [0] == NO_KEY)

{posten [0] = keypad.getKey();}

LCD.Print(Entry[0]);

Delay(1000);

LCD.Clear();

LCD.Print ("Ange 2. nyckel:");

lcd.setCursor(0,1);

medan (post [1] == NO_KEY)

{posten [1] = keypad.getKey();}

LCD.Print(Entry[1]);

Delay(1000);

LCD.Clear();

LCD.Print ("Ange 3. nyckel:");

lcd.setCursor(0,1);

medan (post [2] == NO_KEY)

{posten [2] = keypad.getKey();}

LCD.Print(Entry[2]);

Delay(1000);

LCD.Clear();

om ((post [0] == password[0]) & & post [1] == lösenord [1] & & post [2] == password[2]) / / om lösenordet har angetts korrekt, denna logik utför

{lösenord [0] = NO_KEY; / / återställa lösenordsvärdet 0 till NO-nyckel lösenord [1] = NO_KEY; / / återställa lösenordsvärdet 1 till nr-nyckel lösenord [2] = NO_KEY; / / återställa lösenordsvärdet 2 till NO-nyckel

LCD.Print ("Ange 1 nyckel:"); Ange första nyckelvärde

lcd.setCursor(0,1);

medan (lösenord [0] == NO_KEY) / / loopar oändlighet tills giltig nyckel tryck emot {lösenord [0] = keypad.getKey(); / / sätter lösenord [0] nytt värde} lcd.print(password[0]); Skriver ut nytt värde

Delay(1000);

LCD.Clear(); Clear LCD

LCD.Print ("2: a nyckeln:"); Meddelande för 2: a nyckel

lcd.setCursor(0,1); Flytta kod

medan (lösenord [1] == NO_KEY) / / loopar oändlighet tills giltig nyckel tryck emot {lösenord [1] = keypad.getKey(); / / sätter lösenord [1] till nytt värde} lcd.print(password[1]); Skriver ut nytt värde

Delay(1000); Dröjsmål 1000 millisekunder

LCD.Clear(); Clear LCD

LCD.Print ("3: e nyckeln:"); Meddelande för tredje nyckel

lcd.setCursor(0,1); Flytta markören

medan (lösenord [2] == NO_KEY) / / loopar oändlighet tills giltig nyckel tryck emot {lösenord [2] = keypad.getKey(); / / sätter lösenord [2] till nytt värde}

LCD.Print(Password[2]); Skriver ut nytt värde

Delay(1000); Dröjsmål 1000 millisekunder

LCD.Clear(); Clear LCD}

annat / / detta körs om användaren skriver in fel lösenord för verifiering innan {/ / för att ange lösenord. Användaren kan inte ändra lösenordet utan att veta lösenordet

LCD.Clear(); Clear LCD

LCD.Print ("ogiltig kod."). Ogiltig kod meddelande

Delay(1000); Dröjsmål 1000 millisekunder

LCD.Clear(); Clear LCD}

mainLCDMenu(); Oavsett resultatet, gå tillbaka till huvudmenyn

} }

Se Steg
Relaterade Ämnen

LEGO huvud flytande propan (LP) Tank

vi har LEGO lovers i familjen, och den tanken under grillen ser bara för mycket som en LEGO huvud att inte måla det!Jag upptäckte att något liknande har redan gjorts tidigare här på instructables men jag ska gå vidare och lägga ändå för att visa en n...

LEGO huvud örhängen

jag köpte nyligen ett hundra 4mm örhänge resultaten för att göra käglor örhängen. Efter att ha använt tio, två för varje par av varje smak, jag insåg jag hade nittio fortfarande kvar över men snarare än att tänka på detta som ett problem, jag såg det...

Propan flaska Lego huvud

en dag märkte jag att den ödmjuka propan eller LPG gas flaskan är ganska mycket en exakt storskalig version av en Lego mini fig huvud. Så jag bestämde mig att muntra upp min BBQ flaska med lite Lego lovin'.Steg 1: Måla din Gas flaska Börjar med en gr...

Hur till göra Lego huvud pärlor

du behöver,-Lego heads-Lego hattar-Super lim-Drill-DrillbitSteg 1: Hitta rätt hatten för din pärla när du har hittat rätt hatten för rätt huvudet, gå vidare till steg 2Steg 2: Borra hål med en borr lite samma storlek som hålet i huvudet under, borra...

Chuck Greene Cosplay (med Servbot Lego Mask)

Jag ursprungligen planerat detta Halloween, men kunde inte avsluta den i tid. Jag blev klar ungefär en vecka efter så att det kan användas för framtida Comic nackdelar.Den ikoniska Chuck Greene kostym består av en nyhet giant Lego-liknande huvud (Ser...

LEGO film masker: Benny spacemanen och arga Unikitty

jag gjorde några super coola masker för min pojkvän och jag sist Halloween (och sedan jag bodde sen på jobbet och missade festen... men vi låtsas att inte hända). Min pojkvän var Benny spacemanen och jag var arg Unikitty, båda tecknen från Lego filme...

Bruden och brudgummen Lego par Halloween kostymer

i ett särskilt dumt ögonblick beslutade vi att gå stora och göra perfekt proportionerade lego huvuden för halloween parad i New York City. Cheferna skulle bäras som en del av ett par Lego par (brudparet). Detta är en snabb guide om hur vi gjort kosty...

LEGO Xbox 360 Headset Blocker

Hej, mitt namn är xAwesomepantsx och jag ska visa dig hur man gör en sak som jag kallar..."Lego Headset Blocker""Vad är en Lego huvud-sak ännu?" Du kan frågaTja, det låter dig snabbt stänga chat (mycket användbar om du använder kinect)...

LEGO Batman kostym på snabbt & billiga!

Det är den tiden på året igen när jag tillbringa somrarna bort och få kreativa safter pumpa i hög hastighet.Så när det var dags att bestämma vad jag skulle bli jag funderade och då slog det mig. Jag älskar Lego's, jag älskar batman, jag älskade Lego...

Lego speldator

Här ligger där ett intro till denna skapelse bör vara; men tyvärr är det inte.Specifikationer, design historia och systemet i aktion kommer att presenteras vid ett senare tillfälle.För nu, njuta av bilder och tre videos Inlagd; WoO! =](När jag har al...

LEGO linck cap från legened av zelda

Steg 1: samla materialdu behöver en lego elf hatt från lego minifig serien en lego huvud grön konstruktion papper grönt och svart markörer en liten lera amd saxarSteg 2: sätta ihop mössan 1. Fyll insidan av mössan med lera2. lägga pice konstruktion p...

Gör en personlig 3D LEGO mini fikon huvudet

Detta är den ultimata presenten till alla lego-galning. En minifig huvud med ditt ansikte på det!Det finns 4 steg för att göra detta:1) digitalisera ansikte2) digitalt kombinera ansikte med lego huvud3) skapa 3d utskrift4) färgAll programvara för att...

LEGO Mini figur hår

LEGO Geisha hårSteg 1: Verktyg och materialMaterial: Lera verktyg, POLYMERLERA, två TANDPETARE, A LEGO PERSON, ALUMINIUMFOLIE och HAND WIPES (för handtvättning).Steg 2: Din LEGO PesonAnvända en normal LEGO person, men jag rekommenderar en person med...

Hur man gör en Lego minifigur

Steg 1: bitar Behöver du: en lego huvud, ben, en hatt (tillval) och kroppen.Steg 2: Fäster benen i kroppenSteg 3: Bifoga huvudet till kroppenSteg 4: Fästa hatten på huvudet och du är klar...

Stora LEGO MineCraft Creeper Bot

Vi kommer att bygga en två fot hög robotic Minecraft Creeper drivs av en LEGO Mindstorms EV3! Om du inte har en EV3 kit kan du fortfarande bygga ranka! Detta skapades ursprungligen för Hjärnan apor i Ann Arbor.Detta är en stor tillbringar veckoslutet...

Sugru LEGO penna Toppers

Detta var ett av de projekt vi genomfört på vår Sugru LEGO bygga natt i September. Våra program är ofta deltog familjer så vi behövde en lätt och billig idé för vår bygga natt. Barn och vuxna hade mycket roligt gräva igenom vår samling av LEGOs och a...

Stig (Lego stil)

om du tittar på Top Gear på BBC America och History Channel, du vet vem The Stig är. Han är en av världens bästa Formel 1 förare. Här är ett berömt citat. Vissa säger att han i stället för att hålla en bild av sig själv, håller en bild på sin bil i s...

LEGO MiniFig jätte

detta en snabb och enkel... Även om jag inte tog bilder för alltid steg för att göra den gigantiska Lego mini figuren, jag ingår mönster att göra egna! Det var kul att göra och Lego MiniFigs är ännu mer cool jätte storlek! Plus att de är poseable!Ste...

Emmet lego figur kostym från LEGO film

Min son ville vara Emmet från LEGO film för Halloween så jag tittade över för kostym @ alla tänkbara återförsäljare, efter jag hade slut på alternativ bestämde jag mig för att jag skulle försöka göra hans kostym hemma. Huvud och hår är bara ett blad...