Lego hoofd Safe (4 / 5 stap)

Stap 4: Code

De code gebruikt bestaande bibliotheken voor de LCD, Servo en toetsenbord. Ik heb mijn eigen code met betrekking tot de wachtwoordsysteem en de algehele functionaliteit. De code bevat drie opties voor de veilige: open, nauwe en ingestelde wachtwoord. Om het wachtwoord te wijzigen, heeft de gebruiker het bestaande wachtwoord weten. De code is volledig toegelicht voor het gemak van een persoon die nieuw voor de programmering.

De volgende en aangesloten is mijn code. Aarzel dan niet om het te gebruiken!

/***************************************************************************************************************************
Titel: Hoofd van de Lego Safe

Auteur: Kaitlin Bellerose

Datum: 11/01/2014

Bijgewerkt: 12/03/2014

Doel: Deze schets biedt het controlesysteem voor de Lego Head veilig.

Deze sketch leent uit meerdere bronnen. De originele bronnen zal hier in het titelblok worden genoemd als algemene benaderingen werden gevolgd.

1) Keypad.h bibliotheek geschreven door Mark Stanley en Alexander Brevig (mstanley alexanderbrevig

2) er is een password.h bibliotheek beschikbaar op Instructables site en vergelijkbare sites. Ik kon het niet schelen voor de uitvoering, dus ik heb mijn eigen gemaakt. ****************************************************************************************************************************/

#include < Wire.h >

#include < LiquidCrystal_I2C.h >

#include < Servo.h >

#include < Keypad.h >

LiquidCrystal_I2C lcd(0x27,16,2); Instantiëren van een 16 x 2 LCD van de I2C display met adres 0x27

Servo myServo; Instantiëren van een servo

int pos; Declareren om servo positiewaarde te houden (Opmerking: "positie is een gereserveerd woord)

int servoSpeed; Declareren om servo snelheid waarde te houden (Opmerking: "snelheid" is een gereserveerd woord) char wachtwoord [3]; Matrix die in het bezit van de master-wachtwoord. Ingesteld op de lengte die u wenst. Ik koos voor 3 voor het gemak van binnenkomst van de char demo [3]; Matrix die in het bezit van de poging van de gebruiker ingevoerde wachtwoord

Booleaanse isAlreadyOpen; Vlag waarmee wordt bijgehouden of veilige is al geopend

Booleaanse isAlreadyClosed; Vlag waarmee wordt bijgehouden of kluis is reeds gesloten

Const byte rijen = 4; Vier rijen in 4 x 4 toetsenbord matrix

Const byte COLS = 4; Vier kolommen in 4 x 4 toetsenbord matrix

char toetsen [ROWS] [COLS] = {/ / kaarten van de waarden van het toetsenblok {'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'}, {'* ', '0', '#', 'D'}};

byte rowPins [ROWS] = {8, 7, 6, 5}; Verbinding maken met de pinouts rij van het toetsenbord

byte colPins [COLS] = {4, 3, 2, 10}; Verbinding maken met de kolom pinouts van het klavier

Gebruik maken van 1 of meer passende pin voor wat ik heb aangeduid als "10"

Mijn Arduino heeft veel dode poorten die ik heb om te navigeren

Toetsenbord toetsenbord toetsenbord = (makeKeymap(keys), rowPins, colPins, rijen, COLS); Een instantie van een toetsenbord met de waarden doorgegeven.

/ *** Set-up functie *** /

void setup {Serial.begin(9600); / / Set seriële tot 9600 baud

myServo.attach(11); Set servo aan op pin 11

isAlreadyOpen = 0; Sets open vlag op false

isAlreadyClosed = 1; Sets gesloten vlag op true

POS = 90; Waarde voor de servo arm positie ingesteld op 90 graden

servoSpeed = 3; Wordt servo snelheid ingesteld op 3 graden per seconde

myServo.write(pos); Servo arm ingesteld op 90 graden

wachtwoord [0] = '1'; Zorg dat de beginwaarde in enkele aanhalingstekens vanwege de aard van de char

wachtwoord [1] = "2"; Tweede waarde in wachtwoord matrix

wachtwoord [2] = '3'; Laatste waarde in het vak wachtwoord. Het wachtwoord wordt standaard "123" wanneer / / stroomonderbreking.

keypad.setDebounceTime(250); Sets de knop debounce tijd voor het toetsenblok

LCD.init(); Initialiseren van de LCD

LCD.backlight(); Instellen van het display worden verlicht

LCD.Print ("Welkom thuis!"); Welkom boodschap aan LCD afdrukken

delay(1000); Bericht weergeven voor 1000 milseconds

LCD.Clear(); Schakel het weergeven

LCD.Print("1) open 2) Close"); Afdrukken van menu-opties

lcd.setCursor(0,1); Cursor naar de tweede lijn

LCD.Print("3) Code ingesteld"); Tweede deel van de opties in het menu afdrukken

delay(3000); Vertraging

}

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

void loop {}

vermelding [0] = NO_KEY; Opnieuw instellen van de toegang array met elke lus of anders

post [1] = NO_KEY; je krijgt "valse" vermeldingen van bestaande waarden

post [2] = NO_KEY; Instellen dat de laatste toetsen aan NO_KEY (lijkt op het installeren / /
waarde op NULL in C++)

char sleutel = keypad.getKey(); De eerste indrukken van een toets met betrekking tot menu te krijgen.

Als (sleutel == '1') {/ / initieert logica als "Open safe" optie is geselecteerd

if(isAlreadyOpen == 1) / / wordt gecontroleerd als de kluis al geopend is. Geen punt bij het openen van iets al open

{

LCD.Clear(); Clear LCD

LCD.Print ("Safe is al"); Bericht afdrukken

lcd.setCursor(0,1); Cursor naar de tweede lijn

LCD.Print("open."); Tweede deel van de opties in het menu afdrukken

delay(2000); Vertraging 2000 miliseconden}

anders / / als de kluis nog niet geopend is, de volgende code neemt {}

LCD.Clear(); Schakelt het LCD-scherm

LCD.Print ("1e sleutel invoeren:"); Bericht aan het werven van de eerste indrukken van een toets

lcd.setCursor(0,1); Cursor verplaatsen naar tweede regel

terwijl (post [0] == NO_KEY) / / de lus wordt uitgevoerd totdat een geldige toetsaanslag wordt gemaakt

`{

vermelding [0] = keypad.getKey(); De eerste waarde van de door de gebruiker ingevoerde poging tot wachtwoord opgeslagen

}

LCD.Print(Entry[0]); De waarde van de prints voor weergave op LCD-scherm. Gebruiken voor foutopsporing en gebruiksgemak. delay(1000); Vertragingen voor 1000 miliseconden

LCD.Clear(); Hiermee wist u de LCD

LCD.Print ("2de sleutel invoeren:"); Voer de tweede indrukken van een toets

lcd.setCursor(0,1); Verplaatsen curosr

terwijl (post [1] == NO_KEY) / / een andere lus die eindeloos wordt uitgevoerd, tenzij een geldig ToetsIndrukken (KeyPress) is gemaakt

{post [1] = keypad.getKey(); / / slaat de tweede waarde van de door de gebruiker ingevoerde poging tot wachtwoord}

LCD.Print(Entry[1]); De waarde van de prints voor weergave op LCD-scherm. Gebruiken voor foutopsporing en gebruiksgemak. delay(1000); Vertraging voor 1000 miliseconden

LCD.Clear(); Clear LCD

LCD.Print ("3de sleutel invoeren:"); Werven van derde indrukken van een toets

lcd.setCursor(0,1); Verplaatst de cursor

terwijl (post [2] == NO_KEY) / / weer een tijdje loop aan continu poll unti een geldige toetsaanslag wordt gemaakt. {

post [2] = keypad.getKey(); Deze eigenschap haalt de laatste indrukken van een toets

}

LCD.Print(Entry[2]); De waarde van de prints voor weergave op LCD-scherm. Gebruiken voor foutopsporing en gebruiksgemak. delay(1000); Vertraging voor 1000 miliseconden

LCD.Clear(); Clear LCD

Als ((post [0] == password[0]) & & post [1] == wachtwoord [1] & & post [2] == password[2]) / / als de gebruiker heeft ingevoerd, overeenkomt met het opgeslagen wachtwoord, deze lus wordt uitgevoerd

{

isAlreadyOpen = 1; IsAlreadyOpen vlag is ingesteld op true/hoog

isAlreadyClosed = 0; IsAlreadyClosed vlag is ingesteld op false/laag

POS = 180; Positie instellen tot 180 graden

myServo.write(pos); De servo ingesteld op 180 graden

LCD.Clear(); Clear LCD in afwachting van bericht

LCD.Print ("Safe is geopend."); Bericht dat het veilig geopend is

delay(2000); Vertraging van 2000 miliseconden}

anders / / als de verkeerde code is ingevoerd, wordt dit uitgevoerd

{

LCD.Clear(); Clear LCD

LCD.Print ("ongeldige code."); Ongeldige code bericht

delay(1000); Vertraging 1000 miliseconden

LCD.Clear(); Clear LCD}}

mainLCDMenu(); Ongeacht of invoeren van wachtwoorden geslaagd is, schopt dit terug naar het belangrijkste menufuncties}

anders als (sleutel == '2')

{/ / Initieert als "Nauwe safe" is geselecteerd

if(isAlreadyClosed == 1) / / als het hoofd al gesloten is, waarom sluit u dit opnieuw?

{

LCD.Clear(); Clear LCD

LCD.Print ("Safe is al"); Begin van bericht dat het veilig al gesloten lcd.setCursor(0,1) is; Cursor naar de tweede lijn

LCD.Print("closed."); Einde bericht

delay(2000); Vertraging voor 2000 miliseconden vertraging}

anders / / als de kluis niet al is gesloten, dit wordt uitgevoerd

{isAlreadyOpen = 0; / / Sets isAlreadyOpen vlag op false/laag

isAlreadyClosed = 1; IsAlreadyClosed markering ingesteld op true/hoog

POS = 90; Pos ingesteld op 90 graden

myServo.write(pos); Sets servo tot 90 graden

LCD.Clear(); Hiermee wist u de LCD

LCD.Print ("Safe is gesloten."); Bericht dat het veilig is gesloten

delay(2000); Vertraging 2000 miliseconden}

LCD.Clear(); Clear LCD

mainLCDMenu(); Hoe dan ook, ga terug naar het hoofdmenu}

anders als (sleutel == '3') {/ / als optie "Set code" is geselecteerd

LCD.Clear(); Clear LCD

LCD.Print ("1e sleutel invoeren:"); De code die volgen is een herhaling van code in optie 1 lcd.setCursor(0,1); De gebruiker heeft met succes het wachtwoord invoeren voordat u deze wijzigt

terwijl (post [0] == NO_KEY)

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

LCD.Print(Entry[0]);

delay(1000);

LCD.Clear();

LCD.Print ("2de sleutel invoeren:");

lcd.setCursor(0,1);

terwijl (post [1] == NO_KEY)

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

LCD.Print(Entry[1]);

delay(1000);

LCD.Clear();

LCD.Print ("3de sleutel invoeren:");

lcd.setCursor(0,1);

terwijl (post [2] == NO_KEY)

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

LCD.Print(Entry[2]);

delay(1000);

LCD.Clear();

Als ((post [0] == password[0]) & & post [1] == wachtwoord [1] & & post [2] == password[2]) / / als het wachtwoord correct zijn ingevoerd, deze logica voert

{wachtwoord [0] = NO_KEY; / / Reset de wachtwoordwaarde 0 nee-KEY wachtwoord [1] = NO_KEY; / / Reset de wachtwoordwaarde 1 NO-KEY wachtwoord [2] = NO_KEY; / / Reset de wachtwoordwaarde 2 aan NO-KEY

LCD.Print ("1e sleutel instellen:"); Eerste belangrijke waarde instellen

lcd.setCursor(0,1);

terwijl (wachtwoord [0] == NO_KEY) / Loops eindeloos totdat geldige toets pers ontvangen / {wachtwoord [0] = keypad.getKey(); / / wachtwoord [0] stelt op nieuwe waarde} lcd.print(password[0]); Prenten uit nieuwe waarde

delay(1000);

LCD.Clear(); Clear LCD

LCD.Print ("2de sleutel instellen:"); Bericht voor 2de sleutel

lcd.setCursor(0,1); Code handmatig verplaatsen

terwijl (wachtwoord [1] == NO_KEY) / Loops eindeloos totdat geldige toets pers ontvangen / {wachtwoord [1] = keypad.getKey(); / / wachtwoord [1] stelt op nieuwe waarde} lcd.print(password[1]); Prenten uit nieuwe waarde

delay(1000); Vertraging 1000 miliseconden

LCD.Clear(); Clear LCD

LCD.Print ("de sleutel van de 3e instellen:"); Bericht voor de derde sleutel

lcd.setCursor(0,1); Cursor verplaatsen

terwijl (wachtwoord [2] == NO_KEY) / Loops eindeloos totdat geldige toets pers ontvangen / {wachtwoord [2] = keypad.getKey(); / / wachtwoord [2] stelt op nieuwe waarde}

LCD.Print(password[2]); Prenten uit nieuwe waarde

delay(1000); Vertraging 1000 miliseconden

LCD.Clear(); Clear LCD}

anders / / dit wordt uitgevoerd als de gebruiker het verkeerde wachtwoord voor verificatie vooraf typt {/ / te wijzigen van het wachtwoord. Gebruiker kan wachtwoord niet wijzigen zonder het wachtwoord te kennen

LCD.Clear(); Clear LCD

LCD.Print ("ongeldige code."); Ongeldige code bericht

delay(1000); Vertraging 1000 miliseconden

LCD.Clear(); Clear LCD}

mainLCDMenu(); Ongeacht het resultaat, ga terug naar het hoofdmenu

} }

Gerelateerde Artikelen

Lego hoofd oorbellen

Lego hoofd oorbellen

ik kocht onlangs honderd 4mm earring bevindingen zodat kegelen oorbellen.  Na het gebruik van tien, twee voor elk paar van elke smaak, besefte ik dat ik nog had negentig links, maar in plaats van denken van dit als een probleem, ik zag het als een ka
Lego hoofd vloeibaar propaan (LPG)-Tank

Lego hoofd vloeibaar propaan (LPG)-Tank

We hebben LEGO liefhebbers in de familie, en die tank onder de grill ziet er gewoon te veel als een LEGO hoofd niet om het te schilderen!Ik vond dat iets vergelijkbaars is al eerder gedaan hier op instructables, maar I 'm gonna ga je gang en post hoe
Propaan fles Lego hoofd

Propaan fles Lego hoofd

een dag merkte ik dat de nederige propaan of LPG gasfles vrijwel een exacte grootschalige versie van het hoofd van een Lego Mini fig is. Dus besloten heb ik om te vrolijken mijn BBQ-fles met een beetje Lego Lovin '.Stap 1: Verf uw gasfles Beginnen me
Hoe maak je Lego hoofd kralen

Hoe maak je Lego hoofd kralen

u nodig heeft,-Lego koppen-Lego hoeden-Super lijm-Drill-DrillbitStap 1: Het vinden van de juiste hoed voor uw Parel als je eenmaal hebt gevonden de juiste hoed voor de juiste hoofd, gaan naar stap 2Stap 2: Gaten boren met behulp van een boor bits dez
Maken van een gepersonaliseerde 3D LEGO mini fig hoofd

Maken van een gepersonaliseerde 3D LEGO mini fig hoofd

Dit is het ultieme cadeau voor een lego-maniak.  Een minifig hoofd met je gezicht erop!Er zijn 4 stappen om dit te doen:1) digitaliseren gezicht2) Combineer digitaal gezicht met lego hoofd3) het maken van 3D-afdruk4) verfAlle software om dit te doen
Emmet lego figuur kostuum uit LEGO film

Emmet lego figuur kostuum uit LEGO film

Mijn zoon wilde zijn Emmet uit LEGO film voor Halloween, dus ik overal naar het kostuum @ elke denkbare detailhandelaar zocht, nadat ik had opraken van de opties heb ik besloten dat ik zou proberen te maken van zijn kostuum thuis. De kop en haren zij
LEGO film maskers: Benny de Spaceman en boos Unikitty

LEGO film maskers: Benny de Spaceman en boos Unikitty

ik heb sommige super cool maskers gemaakt voor mijn vriend en ik voor het laatst Halloween (en dan ik bleef laat op het werk en miste de partij... maar gaan we doen alsof dat niet gebeurde). Mijn vriendje was Benny de Spaceman en ik was boos Unikitty
LEGO Man kostuum!

LEGO Man kostuum!

Spelen met de LEGO is verleden tijd voor velen en heb ik besloten om mijn eigen levensgrote Mini beeldje kostuum voor Halloween. Wanneer ik gepland dit kostuum, ik was het maken van twee voor mezelf en een vriend dus ik begon te werken op dit kostuum
LEGO T-doorsnede LED-verkeerslicht

LEGO T-doorsnede LED-verkeerslicht

Video niet wordt afgespeeld? Zien op YouTube: http://www.youtube.com/watch?v=q0tiiWwC6ZoAchtergrondElke Kerstmis dat we een grote LEGO trein lay-out in een gedeelte van de woonkamer instellen. Dit jaar, uiteindelijk heb ik het winnen van een eBay-vei
Chuck Greene Cosplay (met Servbot Lego masker)

Chuck Greene Cosplay (met Servbot Lego masker)

Ik oorspronkelijk gepland dit voor Halloween, maar was niet in staat het afmaken in de tijd. Ik legde het ongeveer een week na, zodat het kan worden gebruikt voor toekomstige Comic nadelen.De iconische Chuck Greene kostuum bestaat uit een nieuwigheid
Lego Boba Fett Kostuum (kinderen)

Lego Boba Fett Kostuum (kinderen)

Een grote Star Wars / Lego fan, mijn zoon heeft besloten dat hij wilde zijn Lego Boba Fett. Zijn kostuum mini figuur was gemodelleerd naar (Lego ingesteld 9496 - woestijn Skiff)Het kostuum werd gebouwd met behulp van hetzelfde materiaal en dezelfde t
Hoe te maken van een Lego Samurai Jack "Aku" kostuum

Hoe te maken van een Lego Samurai Jack "Aku" kostuum

ik heb om eerlijk te zijn. Ik weet niet echt te veel over Aku noch samurai Jack, maar mijn vriend wilde een kostuum voor een komische conventie. Dit kostuum was eigenlijk het prototype voor de lego Superman kostuum (link hieronder)* Ik zal uitleggen
IJzeren Man Lego kostuum

IJzeren Man Lego kostuum

Stap 1: ik gesneden een doos die ik had bij de hand en de ducttaped het samen.Stap 2: Knip een gat voor het hoofd en armen zorg ervoor het gat voor het hoofd is kleiner dan je lego hoofd of anders het zal niet goed zitten. Ik later toegevoegd schuim
Lego Xbox 360 Headset Blocker

Lego Xbox 360 Headset Blocker

Hallo, mijn naam is xAwesomepantsx en ik ga u tonen hoe te maken van een zaak die ik bel..."De Lego Headset Blocker""Wat doet een Lego hoofd-zaak zelfs doen?" Je zou kunnen vragenNou, het kunt u snel uitschakelen chat (zeer nuttig als