Tête de LEGO Safe (4 / 5 étapes)

Étape 4: Code

Le code utilisé des bibliothèques existantes pour le LCD, Servo et clavier. J’ai créé mon propre code en ce qui concerne le système de mot de passe et de la fonctionnalité globale. Le code propose trois options pour le coffre-fort : ouvert, étroite et définir mot de passe. Afin de changer le mot de passe, l’utilisateur doit connaître le mot de passe existant. Le code est entièrement commenté pour la facilité d’une personne nouvelle à la programmation.

Attaché et suivants sont mon code. S’il vous plaît n’hésitez pas à l’utiliser !

/***************************************************************************************************************************
Titre : Tête de Lego Safe

Auteur : Kaitlin Bellerose

Date : 01/11/2014

Mise à jour : 03/12/2014

But : Cette esquisse fournit le système de contrôle pour le Lego Head sans danger.

Cette esquisse s’inspire de sources multiples. Les sources originales seront citées ici dans la cartouche quand les approches générales ont été observées.

1) Bibliothèque de Keypad.h écrite par Mark Stanley et Alexander Brevig (mstanley alexanderbrevig

2) il existe une bibliothèque password.h sur Instructables et des sites similaires. J’ai ne se souciait pas de la mise en œuvre, donc j’ai créé mon propre. ****************************************************************************************************************************/

#include < Wire.h >

#include < LiquidCrystal_I2C.h >

#include < Servo.h >

#include < Keypad.h >

LiquidCrystal_I2C lcd(0x27,16,2) ; Instancier un LCD 16 x 2 I2C avec adresse 0 x 27

Servo myServo ; Instancier un servo

int pos ; Déclarer la variable destinée à contenir la valeur de position servo (NOTE: « la position est un mot réservé)

int servoSpeed ; Déclarer la variable destinée à contenir la valeur de vitesse de servo (NOTE: « vitesse » est un mot réservé) mot de passe de char [3] ; Tableau qui contient le mot de passe principal. Affectez à la longueur que vous désirez. J’ai choisi 3 pour faciliter l’entrée de char démo [3] ; Tableau qui contient la tentative de l’utilisateur a entré le mot de passe

Boolean isAlreadyOpen ; Indicateur qui suit si sûre est déjà ouvert

Boolean isAlreadyClosed ; Indicateur qui suit si le coffre est déjà fermé

const byte rangs = 4 ; Quatre lignes de matrice clavier 4x4

const byte COLS = 4 ; Quatre colonnes de la matrice clavier 4x4

char des touches [lignes] [colonnes] = {/ / mappe les valeurs de clavier {« 1 », « 2 », '3', 'A'}, {« 4 », « 5 », "6", "B"}, {« 7 », « 8 », "9", "C"}, {'* ', « 0 », « # »,'d '}} ;

rowPins Byte [rangs] = {7, 8, 5, 6} ; Se connecter à la ligne de brochage du clavier

colPins Byte [CDL] = {4, 3, 2, 10} ; Se connecter à la liste des broches colonne du clavier

Utiliser la broche 1 ou plus approprié pour ce que j’ai étiqueté comme « 10 »

Mon Arduino dispose de nombreux ports morts que je dois naviguer autour

Clavier clavier = clavier (makeKeymap(keys), rowPins, colPins, lignes, colonnes) ; Instancie un clavier avec les valeurs passées.

/ *** Montage fonction *** /

void setup() {Serial.begin(9600); / / Set série à 9600 bauds

myServo.attach(11) ; Set servo sur la broche 11

isAlreadyOpen = 0 ; Ensembles ouvrir faux

isAlreadyClosed = 1 ; Drapeau des ensembles fermés true

POS = 90 ; Définit la valeur pour la position du bras servo à 90 degrés

servoSpeed = 3 ; Définit la vitesse du servo à 3 degrés par seconde

myServo.write(pos) ; Bras de servo ensembles à 90 degrés

mot de passe [0] = « 1 » ; N’oubliez pas de mettre la valeur initiale dans des guillemets simples en raison de sa nature de char

mot de passe [1] = « 2 » ; Deuxième valeur dans tableau de mot de passe

mot de passe [2] = « 3 » ; Dernière valeur de mot de passe. Le mot de passe par défaut est « 123 » quand / / puissance est perdue.

keypad.setDebounceTime(250) ; Définit le bouton debounce temps pour le clavier

LCD.init() ; Initialiser l’écran LCD

LCD.backlight() ; Définir l’affichage rétro-éclairé

LCD.Print ("Welcome Home!") ; Imprimer le message de bienvenue pour LCD

Delay(1000) ; Avez une message pour 1000 milseconds

LCD.Clear() ; Effacer l’affichage

LCD.Print("1) Open 2) étroite ») ; Menu options d’impression

lcd.setCursor(0,1) ; Déplacer le curseur à la deuxième ligne

"LCD.Print("3) Set Code ») ; Imprimer la deuxième partie des options du menu

Delay(3000) ; Delay

}

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

void loop() {}

entrée [0] = NO_KEY ; Réinitialiser le tableau d’entrée dont chaque boucle ou autre

entrée [1] = NO_KEY ; vous obtiendrez des « fausses » entrées de valeurs existantes

entrée [2] = NO_KEY ; Programmer le clavier final à NO_KEY (similaire au paramètre / /
valeur null en C++)

clé char = keypad.getKey() ; Téléchargez la première presse clée en ce qui concerne le menu.

Si (clé == « 1 ») {/ / établit la logique si « Coffre ouvert » est cochée

if(isAlreadyOpen == 1) / / vérifie si le coffre est déjà ouvert. Inutile d’ouvrir quelque chose de déjà ouvert

{

LCD.Clear() ; Clear LCD

LCD.Print ("Safe is already") ; Message de tirages

lcd.setCursor(0,1) ; Déplacer le curseur à la deuxième ligne

LCD.Print("Open.") ; Imprimer la deuxième partie des options du menu

Delay(2000) ; Millisecondes de retard 2000}

else / / si le coffre n’est pas déjà ouvert, le code suivant s’engage {}

LCD.Clear() ; Effacer l’écran LCD

LCD.Print ("entrez clé 1er:") ; Message pour solliciter la première pression de touche

lcd.setCursor(0,1) ; Déplace le curseur à la deuxième ligne

tandis que (entrée [0] == NO_KEY) / / la boucle s’exécute jusqu'à ce qu’une touche valide est rendue

`{

entrée [0] = keypad.getKey() ; Stocke la valeur première de la tentative d’entrées par l’utilisateur mot de passe

}

LCD.Print(entry[0]) ; Imprime la valeur pour l’affichage sur écran LCD. Utiliser pour le débogage et la facilité d’utilisation. Delay(1000) ; Retards pour 1000 millisecondes

LCD.Clear() ; Efface l’écran LCD

LCD.Print ("entrez la touche 2nd:") ; Entrez la deuxième pression de touche

lcd.setCursor(0,1) ; Déménagement curosr

tandis que (entrée [1] == NO_KEY) / / une autre boucle qui s’exécute indéfiniment à moins que la pression d’une touche valide est faite

{entrée [1] = keypad.getKey(); / / stocke la seconde valeur de la tentative d’entrées par l’utilisateur mot de passe}

LCD.Print(entry[1]) ; Imprime la valeur pour l’affichage sur écran LCD. Utiliser pour le débogage et la facilité d’utilisation. Delay(1000) ; Délai pour 1000 millisecondes

LCD.Clear() ; Clear LCD

LCD.Print ("entrez clé 3:") ; Solliciter des tiers sur une touche

lcd.setCursor(0,1) ; Déplacé le curseur

tandis que (entrée [2] == NO_KEY) / / encore une fois, un certain temps une boucle à continuellement sondage unti une touche valide est faite. {

entrée [2] = keypad.getKey() ; Obtient la touche finale

}

LCD.Print(entry[2]) ; Imprime la valeur pour l’affichage sur écran LCD. Utiliser pour le débogage et la facilité d’utilisation. Delay(1000) ; Délai pour 1000 millisecondes

LCD.Clear() ; Clear LCD

Si ((entrée [0] == password[0]) & & entrée [1] == mot de passe [1] & & entrée [2] == password[2]) / / si correspond à ce que l’utilisateur a entré le mot de passe stockée, cette boucle est exécutée

{

isAlreadyOpen = 1 ; Drapeau d’isAlreadyOpen la valeur true/haut

isAlreadyClosed = 0 ; Drapeau d’isAlreadyClosed la valeur false/faible

POS = 180 ; Position réglée à 180 degrés

myServo.write(pos) ; Mettre le servo à 180 degrés

LCD.Clear() ; Clear LCD en prévision du message

LCD.Print ("Safe est ouvert.") ; Message que le coffre est ouvert

Delay(2000) ; Retard de 2000 millisecondes}

else / / si un code incorrect a été entré, elle exécute

{

LCD.Clear() ; Clear LCD

LCD.Print ("code non valide.") ; Message de code non valide

Delay(1000) ; Retard de 1000 millisecondes

LCD.Clear() ; Clear LCD}}

mainLCDMenu() ; Peu importe si l’entrée de mot de passe a réussi, c’est utilisé retour aux fonctions menu principal}

ElseIf (clé == « 2 »)

{/ / Établit si « Safe étroite » est sélectionnée

if(isAlreadyClosed == 1) / / si la tête est déjà fermée, pourquoi le refermer ?

{

LCD.Clear() ; Clear LCD

LCD.Print ("Safe is already") ; Commencer le message que le coffre est déjà fermée lcd.setCursor(0,1) ; Déplacer le curseur à la deuxième ligne

LCD.Print("Closed.") ; Message de finition

Delay(2000) ; Retard du retard milisecondes 2000}

else / / si le coffre n’est pas déjà fermé, elle exécute

{isAlreadyOpen = 0; / / affecte à l’indicateur isAlreadyOpen sur false/low

isAlreadyClosed = 1 ; Affecte à l’indicateur isAlreadyClosed true/haut

POS = 90 ; Définit le point de vente à 90 degrés

myServo.write(pos) ; Servo d’ensembles à 90 degrés

LCD.Clear() ; Efface l’écran LCD

LCD.Print ("Safe est fermé.") ; Message que le coffre est fermé

Delay(2000) ; Millisecondes de retard 2000}

LCD.Clear() ; Clear LCD

mainLCDMenu() ; Quoi qu’il en soit, revenir au menu principal}

ElseIf (clé == « 3 ») {/ / si l’option « Set code » est sélectionnée

LCD.Clear() ; Clear LCD

LCD.Print ("entrez clé 1er:") ; Le code qui suivent est une répétition du code en option 1 lcd.setCursor(0,1) ; L’utilisateur doit entrer le mot de passe avec succès avant d’en changer

tandis que (entrée [0] == NO_KEY)

{entrée [0] = keypad.getKey();}

LCD.Print(entry[0]) ;

Delay(1000) ;

LCD.Clear() ;

LCD.Print ("entrez la touche 2nd:") ;

lcd.setCursor(0,1) ;

tandis que (entrée [1] == NO_KEY)

{entrée [1] = keypad.getKey();}

LCD.Print(entry[1]) ;

Delay(1000) ;

LCD.Clear() ;

LCD.Print ("entrez clé 3:") ;

lcd.setCursor(0,1) ;

tandis que (entrée [2] == NO_KEY)

{entrée [2] = keypad.getKey();}

LCD.Print(entry[2]) ;

Delay(1000) ;

LCD.Clear() ;

Si ((entrée [0] == password[0]) & & entrée [1] == mot de passe [1] & & entrée [2] == password[2]) / / si le mot de passe a été entré correctement, cette logique s’exécute

{mot de passe [0] = NO_KEY; / / réinitialiser la valeur de mot de passe 0 à mot de passe sans clavette [1] = NO_KEY; / / réinitialiser la valeur de mot de passe 1 mot de passe sans clavette [2] = NO_KEY; / / réinitialiser la valeur de mot de passe 2 à sans clavette

LCD.Print ("Set key 1er:") ; Première valeur clé

lcd.setCursor(0,1) ;

tandis que (mot de passe [0] == NO_KEY) / / boucles sans cesse jusqu'à ce que valide key press a reçu {mot de passe [0] = keypad.getKey(); / / définit le mot de passe [0] nouvelle valeur} lcd.print(password[0]) ; Imprime les nouvelle valeur

Delay(1000) ;

LCD.Clear() ; Clear LCD

LCD.Print ("Set touche 2nd:") ; Message pour la 2ème clé

lcd.setCursor(0,1) ; Déplacez le code

tandis que (mot de passe [1] == NO_KEY) / / boucles sans cesse jusqu'à ce que valide key press a reçu {mot de passe [1] = keypad.getKey(); / / définit le mot de passe [1] nouvelle valeur} lcd.print(password[1]) ; Imprime les nouvelle valeur

Delay(1000) ; Retard de 1000 millisecondes

LCD.Clear() ; Clear LCD

LCD.Print ("Set 3e clé:") ; Message pour troisième clé

lcd.setCursor(0,1) ; Déplacer le curseur

tandis que (mot de passe [2] == NO_KEY) / / boucles sans cesse jusqu'à ce que valide key press a reçu {mot de passe [2] = keypad.getKey(); / / définit le mot de passe [2] à la nouvelle valeur}

LCD.Print(Password[2]) ; Imprime les nouvelle valeur

Delay(1000) ; Retard de 1000 millisecondes

LCD.Clear() ; Clear LCD}

else / / cela s’exécute si l’utilisateur a entré le mauvais mot de passe pour avant vérification {/ / pour changer le mot de passe. L’utilisateur ne peut pas changer de mot de passe sans connaître le mot de passe

LCD.Clear() ; Clear LCD

LCD.Print ("code non valide.") ; Message de code non valide

Delay(1000) ; Retard de 1000 millisecondes

LCD.Clear() ; Clear LCD}

mainLCDMenu() ; Quel que soit le résultat, revenir au menu principal

} }

Articles Liés

LEGO Safe fonctionne!!

LEGO Safe fonctionne!!

C'est seulement pour l'amusement, il n'est pas un véritable coffre-fort. J'ai voulu faire un coffre-fort de legos et voici ce que je suis venu avec. L'idée était simple mais il m'a fallu quelques heures pour faire cependant quand vous pouvez trouver
LEGO Safe 2.0

LEGO Safe 2.0

ce coffre-fort que j'ai fait de la version « IPROBERRY ». La cage sur le dessus est de tenir les « clés ». Pour construire le coffre-fort original aller à Il existe 2 mécanismes de verrouillage dans cette version trop. Il y a également différents typ
Fusée de LEGO!!!

Fusée de LEGO!!!

Il s'agit d'un tutoriel sur les fusées de lego!!! OK, donc c'est une fusée de bouteille (eau ou co2) c'est le feu d'artifice ones. Oui matériaux = tape, bottle rockets, ciseaux et legos... maintenant ce sont des machines volantes impressionnants car
Mini Canon pour Lego

Mini Canon pour Lego

Faire un mini Canon sur un morceau de boulon en acier.Étape 1: Ce que vous devez OutilsPerceuse à colonne/tourFichierSand Papers (facultatif)PointeauForet de perçageMeule à polirMatériaux1 boulon en acierComposé de polissageSécuritéLunettes de sécuri
LEGO Iphone / Ipod Chargeur Dock

LEGO Iphone / Ipod Chargeur Dock

Il s'agit de mon iphone chargeur dock. Il a pris forme lego comme tant d'autres, mais celui-ci n'utilise aucun colle et n'est pas l'épave des lego ou fils. La seule partie non-lego est deux petits morceaux de ruban adhésif. Il est solide et portable
LEGO MINDSTORMS Pet Feeder Version 2.0

LEGO MINDSTORMS Pet Feeder Version 2.0

Voici le nouveau LEGO MINDSTORMS Pet Feeder Version 2.0 ! Cette création est une amélioration de son prédécesseur. C'est le même appareil que vous connaissez et appréciez, mais maintenant il est mieux que jamais ! Quelles sont les nouveautés vous dem
LEGO boîte à lunch ordinateur

LEGO boîte à lunch ordinateur

Avez-vous jamais voulu construire un ordinateur Raspberry Pi dans une boîte à lunch en utilisant les Legos ou autres briques emboîtables compatibles ? Tout d'abord, vous devrez mettre la main sur une boîte à lunch.Vous aurez besoin :Boîte à lunch 8 x
Bot de chien : Lego Robot Rover avec Webcam

Bot de chien : Lego Robot Rover avec Webcam

Voici comment faire un robot Lego, que vous pouvez contrôler de n'importe quel écran via wifi. Il a également une webcam donc vous pouvez voir où votre cours et la LED s'allume pour les yeux ! Il s'agit d'un grand projet à faire avec vos enfants car
Voiture Lego à télécommande (1997 Volvo 850)

Voiture Lego à télécommande (1997 Volvo 850)

Construisez votre propre voiture de Lego de télécommande ! La vidéo et les photos ci-dessus sont ma Lego Volvo, une maquette de 14:1 de l'une de mes voitures préférées, le wagon de la fin des années 90 Volvo 850. Cette instructable va vous montrer co
DIY Lego USB Flashdrive

DIY Lego USB Flashdrive

vous êtes un fan de Legos ? Besoin d'un cas pour ce petit appareil USB, tel qu'un lecteur flash ou un dongle USB. Votre au bon endroit. Ce projet est assez simple à faire, vous avez juste besoin de certaines compétences de base avec un couple d'outil
LEGO bricolage Pegboard

LEGO bricolage Pegboard

Dans notre espace atelier de Bricolage de Studio à l' Exploratorium de San Francisco, nous avons découvert que les pièces LEGO offrent beaucoup de possibilités pour bricoler avec des requêtes, des mécanismes et des liens. Comme nous avons fait des ex
NOUVEAU EV3Dprinter : LEGO MINDSTORMS imprimante 3D (3e génération)

NOUVEAU EV3Dprinter : LEGO MINDSTORMS imprimante 3D (3e génération)

Une chouette imprimante 3D DIY avec MINDSTORMS EV3 et le stylo 3D de 3ème génération issue de Banggood.comMon premier instructables portait sur une imprimante 3D LEGO MINDSTORMS, appelée EV3Dprinter. Après avoir acheté un nouveau stylo 3D, j'ai créé
Super simple Lego Technic RC quadcopter cadre

Super simple Lego Technic RC quadcopter cadre

Salut, je partage les instructions simples pour créer un cadre pour quadcopters, à l'aide de la célèbre Lego technic.La photo montre ma configuration :brossé moteurs 8mm.hélices 60mm.Quanum Pico 32bits brossé vol de contrôle des stupéfiants.Mais vous
MÉCATRONIQUES BADASS LEGO MINDSTORMS ailes

MÉCATRONIQUES BADASS LEGO MINDSTORMS ailes

Ils se déplacent ! Créer des ailes mécatroniques badass, construire en utilisant votre MindStorms EV3 et divers éléments Technic. Pour tous les anges déchus qui ont besoin de leurs ailes restaurés - et juste, - pour créer l'impossible. LEGO-ailes ! C