Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed Servo KeypadLib TextLCD
Revision 1:02c938489de7, committed 2018-12-04
- Comitter:
- AndreaS97
- Date:
- Tue Dec 04 11:50:39 2018 +0000
- Parent:
- 0:5f8790dfc90c
- Commit message:
- Yo
Changed in this revision
--- a/Cassaforte.cpp Tue Dec 04 10:11:08 2018 +0000
+++ b/Cassaforte.cpp Tue Dec 04 11:50:39 2018 +0000
@@ -1,59 +1,29 @@
#include "Cassaforte.h"
#include "TextLCD.h"
#include "Servo.h"
+#include "keypad.h"
I2C i2c(D14, D15);
//InterruptIn button(PC_13);
TextLCD_I2C lcd(&i2c, 0x4E, TextLCD_I2C::LCD16x2, TextLCD_I2C::HD44780);
DigitalOut led(LED1);
-Servo servo(D3);
-bool sensore = false;
+Servo servo(D11);
+int dim=4;
+Keypad keypad(D6,D5,D4,D3,D10,D9,D8,D7); //porte del tastierino
+char pass[4]={'1','2','3','4'}; //password di default (è possibile cambiarla dal menu)
+DigitalOut buz(D2); //porta buz
+DigitalIn mag(D1); //porta del magnete
+bool alonoff=true; //variabile booleana per abilitare o disabilitare l'allarme in caso di apertura e chiusura (?)
void inizializza(){
lcd.setMode(TextLCD_I2C::DispOn);
lcd.setCursor(TextLCD_I2C::CurOn_BlkOn);
- if (sensore == true)
- chiuso();
- else aperto();
}
void scrivi(char parola[]){
lcd.cls();
lcd.printf("%s\n", parola);
}
-
-void cambioCodice(){
- led=!led;
- scrivi("Cambio codice di apertura");
- lcd.setAddress(11,1);
- wait(3);
- lcd.cls();
- scrivi("Digitare il nuo_vo codice:");
- lcd.setAddress(10,1);
- inserimento();
- led=!led;
- }
-
-void inserimento(){
- /*for (int i=0; i<4; i++){
- wait(1);
- lcd.putc(i);
- wait(1);
- lcd.setAddress(11+i,1);
- }*/
- wait(1);
- lcd.putc('1');
- wait(1);
- lcd.setAddress(11,1);
- lcd.putc('2');
- wait(1);
- lcd.setAddress(12,1);
- lcd.putc('3');
- wait(1);
- lcd.setAddress(13,1);
- lcd.putc('4');
- wait(1);
- }
-
+
void chiuso(){
servo.position(-90);
@@ -62,4 +32,104 @@
void aperto(){
servo.position(-90);
- }
\ No newline at end of file
+ }
+void inserimento(char a[],int n){ //funzione di acquisizione dal tastierino
+ keypad.enablePullUp();
+ for(int k=0;k<n;k++){
+ keypad.enablePullUp();
+ char val = keypad.getKey();
+ if(val != KEY_RELEASED){ //se qualche tasto è premuto stampalo e mettilo nell'array
+ lcd.putc(val);
+ lcd.setAddress(k,1);
+ a[k]=val;
+ wait(0.4);
+ }
+
+ }
+}
+void menu(){ //funzione menu (si accede quando la password è corretta)
+
+ scrivi("A to open, B to Block, C to Change password ");
+ char val;
+ do{
+ inserimento(&val,1); //inserimento dell'opzione scelta dal tastierino (in questo caso la dimensione è 1 e poichè la funzione
+ if(val!='A' && val!='B' && val!='C'){ //accetta solo variabile indirizzo bisogna mandare l'indirizzo di val)
+ scrivi("Not Valid"); //se il valore è diverso da A, B o C ripeti l'inserimento.
+ }
+ }while(val!='A' && val!='B' && val!='C');
+
+ if(val=='A'){
+ if(mag==1){
+ scrivi("Opening... \n");
+ alonoff=false;
+ aperto();
+ wait(2);
+ menu();
+ }
+ }
+ if(val=='B'){
+ if(mag==0){ //MANCA CHIUSURA CON SERVO
+ scrivi("Closing...");
+ alonoff=true;
+ chiuso(); //chiusura servo e abilitazione allarme, ritorno al reinserimento pass.
+ wait(2);
+ main();
+ }
+ }
+ if(val=='C'){ //cambio password:
+ char v[dim];
+ scrivi("Enter new password: ");
+ inserimento(v,dim);
+ // scrivi("New password is %c %c %c %c, push A to confirm or C to cancel",v[0],v[1],v[2],v[3]);
+ scrivi("Il codice è:");
+ for(int i=0;i<4;i++){
+ lcd.putc(v[i]);
+ lcd.setAddress(i+13,0);
+ }
+ lcd.printf("A:ok, C:annulla");
+ inserimento(&val,1); //conferma della password inserita
+ do{
+ if(val=='A'){ //A=> Cambia la password con quella inserita e torna nel main (dove bisognerà, per
+ scrivi("Password changed \n"); //accedere al menu inserire di nuovo la password)
+ for(int k=0;k<dim;k++){
+ pass[k]=v[k];
+ }
+ main();
+ }
+ if(val=='C'){ //C=>Non cambiare la password e torna di nuovo al menu
+ menu();
+ }
+ if(val!='A' && val!='C'){ //inserimento fin quando il valore è A o C.
+ scrivi("Not valid \n");
+ }
+ }while(val!='A' && val!='C');
+ }
+}
+void alarm(){ //funzione allarme: (DA RIVEDERE)
+ int cont=0;
+ char insa[dim]; //DA VEDERE !!!!
+ do{ //il buz deve suonare durante l'inserimento della password corretta
+ buz=1; //per disattivare l'allarme stesso e accedere al menu
+ wait(0.5);
+ buz=0;
+ wait(0.5);
+
+ inserimento(insa,dim);
+ for(int h=0;h<dim;h++){
+ if(insa[h]==pass[h]){
+ cont++;
+ }
+ }
+
+ if(cont==dim){
+ menu();
+ cont=0;
+ }
+ if (cont!=dim){
+ scrivi("Password not valid \n");
+ cont=0;
+ }
+
+ }while(1);
+
+}
\ No newline at end of file
--- a/Cassaforte.h Tue Dec 04 10:11:08 2018 +0000 +++ b/Cassaforte.h Tue Dec 04 11:50:39 2018 +0000 @@ -1,10 +1,12 @@ #ifndef Cassaforte_H #define Cassaforte_H #include "mbed.h" +int main(); void inizializza(); void scrivi(char parola[]); -void cambioCodice(); -void inserimento(); +void inserimento(char[],int); void chiuso(); void aperto(); +void menu(); +void alarm(); #endif \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/KeypadLib.lib Tue Dec 04 11:50:39 2018 +0000 @@ -0,0 +1,1 @@ +http://developer.mbed.org/users/rlanghbv/code/KeypadLib/#1f7793af2f64
--- a/main.cpp Tue Dec 04 10:11:08 2018 +0000
+++ b/main.cpp Tue Dec 04 11:50:39 2018 +0000
@@ -1,5 +1,5 @@
#include "Cassaforte.h"
-//#include "mbed.h"
+#include "mbed.h"
//#include <TextLCD.h>
//I2C i2c(D14, D15);
//TextLCD_I2C lcd(&i2c, 0x4E, TextLCD_I2C::LCD16x2, TextLCD_I2C::HD44780);
@@ -8,16 +8,14 @@
void cambioCodice();
void inserisci();*/
InterruptIn button(PC_13);
-
+char v[4];
int main() {
/*lcd.setMode(TextLCD_I2C::DispOn);
lcd.setCursor(TextLCD_I2C::CurOn_BlkOn);*/
inizializza();
- button.rise(&cambioCodice);
- while(1) {
- scrivi("Cassaforte");
- wait(0.2);
- }
+ scrivi("Immetti codice:");
+ inserimento(v,4);
+
}
/*void scrivi(char parola[]){