Ola pessoal, estou trabalhando em um projeto onde a fechadura de uma porta é aberta por uma senha de 6 digitos num teclado 4x3.
Na atual fase do projeto , após digitar a senha errada por 3 vezes , a porta bloqueia impossibilitando o usuario de digitar a senha novamentre, ou seja bloqueia a porta de vez.
Gostaria da ajuda de voces para adicionar um comando onde apos 3 tentativas, a porta ficasse bloqueada por apenas 30 segundos e logo liberasse para mais 3 tentativas, bloqueando novamente quando errar por 30 segundos e assim por diante.
Quem puder me ajudar ficarei muito agradecido. Obrigado desde já.
Segue a programação, ela foi realizada no programa MikroC.
- sbit LCD_RS at RC4_bit;
- sbit LCD_EN at RC5_bit;
- sbit LCD_D4 at RC0_bit;
- sbit LCD_D5 at RC1_bit;
- sbit LCD_D6 at RC2_bit;
- sbit LCD_D7 at RC3_bit;
- sbit LCD_RS_Direction at TRISC4_bit;
- sbit LCD_EN_Direction at TRISC5_bit;
- sbit LCD_D4_Direction at TRISC0_bit;
- sbit LCD_D5_Direction at TRISC1_bit;
- sbit LCD_D6_Direction at TRISC2_bit;
- sbit LCD_D7_Direction at TRISC3_bit;
- char keypadPort at PORTD;
- char kp;
- char cliques = 0;
- char tentativas = 0;
- char *senha = "000000";
- char *textos[6] = {" Senha OK ",
- " Senha Errada ",
- " Nova Senha OK ",
- " Digite a senha ",
- " Digite a nova senha",
- " Fim "};
- char *Ptr1, *Ptr2;
- char CompararSenha()
- {
- char i = 0;
- for(i=0; i /span> 6; i++)
- {
- if(senha[i] != Eeprom_Read(i)) return(0);
- }
- return (1);
- }
- void GravarSenhaNaEeprom()
- {
- char i;
- for(i=0; i /span> 6; i++)
- {
- Eeprom_Write(i, senha[i]);
- }
- }
- void LimparSenha()
- {
- char i;
- for(i=0; i /span> 6; i++)
- {
- senha[i] = '0';
- }
- }
- void main()
- {
- char i;
- TRISB=0b10000000;
- PORTB=0;
- Keypad_Init();
- Lcd_Init();
- Lcd_Cmd(_LCD_CLEAR);
- Lcd_Cmd(_LCD_CURSOR_OFF);
- Ptr2 = textos[3];
- Lcd_Out(1, 1, Ptr2);
- while(1)
- {
- if(tentativas /span> 3)
- {
- kp = Keypad_Key_Click();
- if(kp)
- {
- if(kp % 4 == 0)
- {
- }
- else if(kp == 13)
- {
- LimparSenha();
- cliques = 0;
- }
- else if(kp == 15)
- {
- cliques = 0;
- if(PORTB.F7 == 1)
- {
- if(CompararSenha())
- {
- PORTB.F0 = ~PORTB.F0;
- Ptr1 = textos[0];
- LimparSenha();
- }
- else
- {
- tentativas++;
- Ptr1 = textos[1];
- LimparSenha();
- }
- }
- else
- {
- GravarSenhaNaEeprom();
- Ptr1 = textos[2];
- LimparSenha();
- }
- Lcd_Out(1, 1, Ptr1);
- Delay_ms(2000);
- }
- else
- {
- switch(kp)
- {
- case 1: kp = 49; break;
- case 2: kp = 50; break;
- case 3: kp = 51; break;
- case 5: kp = 52; break;
- case 6: kp = 53; break;
- case 7: kp = 54; break;
- case 9: kp = 55; break;
- case 10: kp = 56; break;
- case 11: kp = 57; break;
- case 14: kp = 48; break;
- }
- if(cliques /span> 6)
- {
- for(i=0; i /span> 5; i++)
- senha[i] = senha[i+1];
- senha[5] = kp;
- }
- }
- }
- else
- {
- if(PORTB.F7) Ptr2 = textos[3];
- else Ptr2 = textos[4];
- }
- }
- else
- {
- Ptr2 = textos[5];
- PORTB.F1 = 1;
- }
- Lcd_Out(1,1, Ptr2);
- Lcd_Out(2,8, senha);
- Delay_ms(100);
- }
- }
Tags:
-
▶ Responder esta