FORUM: Pic Micro
Tutto quanto riguarda questi microprocessori... progetti, suggerimenti, aiuti, discussioni...ecc
Problema con Serratura Elettronica
Autore
Messaggio
opzioni
Alocin
postato il: 19.01.2021, alle ore 19:39
Problema con Serratura Elettronica
Salve a tutti!
Come da titolo ho un "piccolo " perblema con una serratura elettronica, Spiego meglio : sono giorni che cerco di realizzare una serratura a codice utilizzando un PIC16F877A ed un Keypad a 16 tasti,per quanto riguarda la parte per riconoscere quale tasto sia stato premuto non ho problemi , mentre non riesco proprio a capire come fare per impostare un codice segreto per poi inserirlo tramite keypad e quindi aprire la serratura avevo provato con una banale soluzione ovvero sommare il peso numerico di ogni tasto che compone il mio codice e poi fare una verifica tra il valore prefissato ed il codice inserito, a primo avviso funzionava ma l`inconveniente stava nel fatto che sommando appunto il peso numerico di ogni cifra anche se le digitavo al contrario o a caso il valore e sepre lo stesso. questo e il codice che ho realizzato fino ad ora:
unsigned char colMask []=
{
0b11110111, // colonna 1 posta a massa
0b11111011, // colonna 2 posta a massa
0b11111101, // colonna 3 posta a massa
0b11111110 // colonna 4 posta a massa
};
unsigned char colScan = 0; // va da 0 a 3 per scansionare le colonne
unsigned char rowMask[]=
{
0b10000000,
0b01000000,
0b00100000,
0b00010000
};
unsigned char rowScan = 0;
char code = 192; // codice composto dal peso numerico delle cifre segrete piu il peso numerico del simbolo '*' "123*"
char somma = 0; // variabile per confrontare se il codice e esatto
////////////////////////49//52//55//42//50//53//56//48//51//54//57//35//65//66//67//68
unsigned char keys[] = {'1','4','7','*','2','5','8','0','3','6','9','#','A','B','C','D'};
unsigned char keypressed = 0; // peso numerico del pulsante premuto
char keyok; // flag di pulsante premuto
void setting();
void main(void) {
setting();
LCD_INIT();
__delay_ms(100);
LCD_CLEAR();
LCD_GOTO(1,1);
LCD_PUTS("SERRATURA");
LCD_GOTO(2,1);
LCD_PUTS("ELETTRONICA");
__delay_ms(250);
__delay_ms(250);
__delay_ms(250);
__delay_ms(250);
LCD_CLEAR();
keyok = 0;
ledok = 0;
ledno = 1;
while(1){
LCD_GOTO(1,1);
LCD_PUTS("INSERISCI CODICE");
LCD_GOTO(2,1);
LCD_PUTS("SERRATURA CHIUSA");
for(colScan = 0; colScan < 4; colScan++){ // porto a massa una colonna alla volta
PORTB = 0xFF; // porto ad 1 tutte le colonne
PORTB &=colMask[colScan]; // porto a 0 la colonna attuale
// mi controllo le righe
for(rowScan = 0; rowScan < 4; rowScan++){
if(!(PORTB & rowMask[rowScan])){ // riga rowScan trovata a massa
__delay_ms(50); // ritardo anti rimbalzo
if(!(PORTB & rowMask[rowScan])){
keypressed = rowScan +(4*colScan);
keyok = 1;
}
}
} // fine scansione righe
}// fine scansione colonne
if (keyok ) // è stato premuto un pulsante
{
somma = somma+keys[keypressed]; // sommo i pesi numerici di ogni tasto premuto
if(keys[keypressed]=='*'){ // quando premo * effettuo la comparazione tra codice e somma
if((code - somma)== 0){ // verifico se entrambi i valori sono uguali
ledok = 1;
ledno = 0;
LCD_CLEAR();
LCD_GOTO(1,1);
LCD_PUTS("CODICE ESATTO");
__delay_ms(250);
__delay_ms(250);
__delay_ms(250);
__delay_ms(250);
ledok = 0;
ledno = 1;
somma = 0;
}
else{
somma = 0;
}
}
keyok=0; // resetto il flag di pulsante premuto
// rimango in un ciclo continuo fino a che il pulsante non viene rilasciato
PORTB=0b11110000;
while(PORTB != 0b11110000)
{continue;}
}
}
return;
}
ovviamente la parte che interessa a me e solo come fare ad impostare un codice segreto per poi poter inserirlo tramite keypad per sbloccare la serratura.
Grazie in anticipo per le risposte.
saluti Alocin
Una cosa bella di Grix è la casella in alto a destra con vicino scritto -cerca- se provi a scriverci -serratura- escono una decina di articoli di serrature a codice... comincia a vedere se trovi qualcosa di interessante
Alocin
postato il: 19.01.2021, alle ore 20:34
rcc.roberto: Una cosa bella di Grix è la casella in alto a destra con vicino scritto -cerca- se provi a scriverci -serratura- escono una decina di articoli di serrature a codice... comincia a vedere se trovi qualcosa di interessante
Grazie della dritta ma ci avevo gia provato senza trovare quello che serve a me
molti progetti interessanti ma non utili al mio scopo.
http://www.grix.it/viewer.php?page=4980 Questo articolo l'ho pubblicato io, realmente come scritto ho solo copiato due progetti e messi insieme, pero' funzionano benissimo. Tu puoi usare solo quello della tastiera adattandolo alle tue esigenze.
Io con semplice ricerca 'tastiera' ho trovato questi, magari ce ne sono altri.....basta un po' di fantasia nel digitare le parole chiave di ricerca...
Alocin
postato il: 20.01.2021, alle ore 09:25
Grazie Wile
ho dato un occhiata a queste pagine e si sono come servono a me ma c`e un piccolo problemino, sono tutti in assembler o basic, ed io conosco solo il C ( L`assembler non l`ho mai capito), cerchero ancora con altre parole chiave.
Grazie mille della dritta.
gironico
postato il: 20.01.2021, alle ore 09:46
questo lo ho scritto io, per come è il software puoi inserire 4 chiavi di accesso personalizzate con nume utente e visualizzare chi la ha usato per ultimo...
gironico: questo lo ho scritto io, per come è il software puoi inserire 4 chiavi di accesso personalizzate con nume utente e visualizzare chi la ha usato per ultimo...
Grazie Gironico, avevo notato il tuo articolo ,ma ho provato a scaricare il file ma non me lo legge mi dice che è impossibile leggere il file.
Non è che potresti inviarmi il file sorgente in privato?
Grazie mille!!
Come utente anonimo puoi leggere il contenuto di questo forum ma per aprire una discussione
o per partecipare ad una discussione esistente devi essere registrato ed accedere al sito