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: MFRC522 eeprom mbed
Revision 0:fa7c728bf941, committed 2017-07-05
- Comitter:
- thiagohuang
- Date:
- Wed Jul 05 20:41:03 2017 +0000
- Child:
- 1:fd613df5ffd3
- Commit message:
- Versao final nao comentada
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MFRC522.lib Wed Jul 05 20:41:03 2017 +0000 @@ -0,0 +1,1 @@ +http://developer.mbed.org/users/AtomX/code/MFRC522/#63d729186747
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eeprom.lib Wed Jul 05 20:41:03 2017 +0000 @@ -0,0 +1,1 @@ +http://developer.mbed.org/users/walterlma/code/eeprom/#5791c7513043
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Wed Jul 05 20:41:03 2017 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/64910690c574 \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/teste.cpp Wed Jul 05 20:41:03 2017 +0000
@@ -0,0 +1,440 @@
+#include "mbed.h"
+#include "eeprom.h"
+#include "MFRC522.h"
+#include "stdlib.h"
+
+//interrupcao botao
+InterruptIn button1(PTA13);
+InterruptIn button2(PTA17);
+InterruptIn button3(PTA16);
+DigitalOut led1(LED1);
+DigitalOut led2(LED2);
+DigitalOut flash(LED4);
+//Timer debounce;
+
+//LCD
+#define tuss 2
+#define tusl 20
+#define tms 2
+
+SPI lcd(PTE3, PTE1, PTE2);
+DigitalOut cs(PTE4);
+DigitalOut res(PTD5);
+DigitalOut dc(PTC12);
+
+//KL25Z Pins for MFRC522 SPI interface
+ #define SPI_MOSI PTC6
+ #define SPI_MISO PTC7
+ #define SPI_SCLK PTC5
+ #define SPI_CS PTC4
+// KL25Z Pin for MFRC522 reset
+ #define MF_RESET PTC3
+
+//Pinos EEPROM
+#define SDA PTC2 // I2C SDA pin
+#define SCL PTC1 // I2C SCL pin
+#define EEPROM_CONTROL_BYTE 0xA0
+#define I2C_READ 0x01
+
+#define OFF 1
+#define ON 0
+
+DigitalOut LedRed (LED_RED);
+DigitalOut LedGreen (LED_GREEN);
+
+EEPROM i2c(SDA, SCL, 0, EEPROM::T24C16); // T24C01 should work for the 24AA02E48 eeprom
+MFRC522 RfChip (SPI_MOSI, SPI_MISO, SPI_SCLK, SPI_CS, MF_RESET);
+
+//I2C i2c(PTE0, PTE1); // sda, scl on KL25Z
+Serial pc(USBTX, USBRX); // tx, rx
+
+int flag_identificacao=1,flag_cadastro=0,flag_descadastro=0,flag_mudamodo=0;
+
+void init_LCD(){
+ res = 0;
+ dc = 0;
+ cs = 1;
+ wait(0.1);
+ res = 1;
+ // k = 0;
+ cs = 0;
+ lcd.write(0x3C);
+ wait_us(tuss);
+ cs = 1;
+ wait_ms(tms);
+ cs = 0;
+ lcd.write(0x0C);
+ wait_us(tuss);
+ cs = 1;
+ wait_us(tusl);
+ cs = 0;
+ lcd.write(0x01);
+ wait_us(tuss);
+ cs = 1;
+ wait_ms(tms);
+ cs = 0;
+ lcd.write(0x06);
+ wait_us(tuss);
+ cs = 1;
+ wait_ms(tms);
+ dc = 1;
+ wait_ms(tms);
+
+ return;
+}
+
+void pula_linha(){
+ dc = 0;
+ wait_ms(tms);
+ cs = 0;
+ lcd.write(0xC0);
+ wait_us(tuss);
+ cs = 1;
+ wait_ms(tms);
+ dc = 1;
+ wait_ms(tms);
+
+ return;
+}
+
+void limpa_lcd(void){
+
+ dc = 0;
+ wait_ms(tms);
+ cs = 0;
+ lcd.write(0x01);
+ wait_us(tuss);
+ cs = 1;
+ wait_ms(tms);
+ dc = 1;
+ wait_ms(tms);
+
+ return;
+}
+
+void escreve_lcd (char *s){
+
+ while(*s){
+ cs = 0;
+ lcd.write(*s);
+ wait_us(tuss);
+ cs = 1;
+ wait_ms(tms);
+ s++;
+ }
+ return ;
+}
+
+void escreve_mem(int8_t dado, uint8_t i){
+ int8_t buf, elementos;
+
+ LedGreen = 0;
+ i2c.read(0, elementos); wait_ms(1);
+ buf=dado;
+ i2c.write(5*elementos+1+i, buf); wait_ms(1);//escreve na memoria
+}
+
+char read_mem(uint8_t posicao, uint8_t i){
+ char x;
+ int8_t buf, elementos;
+
+ i2c.read(0, elementos);
+ wait_ms(1);
+ if (elementos < posicao){
+ printf("A posicao requisitada excede o numero de elementos registrados na memoria\n\r");
+ return -1;
+ }else{
+ i2c.read(5*(posicao-1)+1+i, buf); wait_ms(1);
+ x=buf;
+ return x;
+ }
+}
+
+void pega_id (char *s){
+
+ int i=0;
+ int8_t buf=0;
+
+ while(true){
+
+ inicio:
+
+ if(flag_mudamodo==1)
+ return;
+
+ if ( ! RfChip.PICC_IsNewCardPresent()){ // Look for new cards
+ wait_ms(500);
+ goto inicio;
+ }
+ if ( ! RfChip.PICC_ReadCardSerial()){ // Select one of the cards
+
+ }
+ LedGreen = 0;
+ wait(0.3);
+ LedGreen = 1;
+ for (i=0; i < RfChip.uid.size; i++){
+ buf=RfChip.uid.uidByte[i];
+ *(s+i)=buf;
+ }
+
+ break ;
+ }
+ return ;
+}
+
+/* Verifica se o ID passado ja esta na memoria
+ Caso ja esteja, o programa retorna 1. Caso contrario, retorna 0 */
+int jaexiste (char *idcartao){
+
+ int k,i;
+ int8_t buf,elementos;
+ char compara[4];
+
+ i2c.read(0, elementos); wait_ms(1);
+
+ for (k=0;k<elementos;k++){
+ for (i=0; i < 4; i++){
+ i2c.read(5*k+1+i, buf); wait_ms(1);
+ compara[i]=buf;
+ }
+
+ if ( (compara[0] == *(idcartao)) && (compara[1] == *(idcartao+1)) && (compara[2] == *(idcartao+2)) && (compara[3] == *(idcartao+3)) )
+ return k+1;
+
+ }
+ return 0;
+
+}
+
+void printa_id (char *id){
+
+ int i;
+
+ for (i=0; i<4 ; i++){
+ printf("%d ",*(id+i));
+ }
+
+}
+
+
+void colocamemoria(char *idcartao){
+
+ int8_t elementos,i,buf,senha;
+
+ for (i=0; i < 4; i++){
+ escreve_mem( *(idcartao+i), i);
+ }
+
+ printf("Digite a senha: ");
+ scanf("%d", &senha);
+ buf=senha;
+
+ i2c.read(0, elementos); wait_ms(1);
+ elementos++;
+ i2c.write(5*elementos, buf); wait_ms(1);
+
+ printf("\n\n\rCartao de ID ");
+ printa_id(idcartao);
+ printf("com SENHA %d cadastrado com sucesso.\n\r",senha);
+
+
+ i2c.write(0, elementos); wait_ms(1);
+
+ return;
+}
+
+void modo_cadastro (){
+
+ char id_cartao[4];
+ int8_t elementos;
+
+ i2c.read(0, elementos); wait_ms(1);
+ printf("\n\rMODO CADASTRO ATIVADO.\n\r");
+ printf("Aproxime Cartao do Leitor. \n\r");
+
+ pega_id(id_cartao); // Detecta o ID do cartao aproximado e coloca no vetor id_cartao
+ if(flag_mudamodo==1){
+ flag_mudamodo=0;
+ return;
+ }
+ wait_ms(10);
+
+ if( jaexiste(id_cartao)!=0 ){
+ printf("O cartao de ID ");
+ printa_id(id_cartao);
+ printf("ja esta cadastrado.\n\r");
+ }
+ else
+ colocamemoria(id_cartao);
+
+ wait_ms(50);
+
+ return ;
+}
+
+void modo_descadastro (){
+
+ char id_cartao[4],aux[5];
+ int8_t elementos,k,i,buf;
+
+ i2c.read(0, elementos); wait_ms(1);
+
+ printf("\n\rMODO DESCADASTRO ATIVADO.\n\r");
+ printf("Aproxime Cartao do Leitor. \n\r");
+
+ pega_id(id_cartao); // Detecta o ID do cartao aproximado e coloca no vetor id_cartao
+ if(flag_mudamodo==1){
+ flag_mudamodo=0;
+ return;
+ }
+ k=jaexiste(id_cartao);
+ if( k!=0 ){
+ if(elementos==1){
+ printf("Cartao de ID ");
+ printa_id(id_cartao);
+ printf("descadastrado com sucesso.\n\r");
+ elementos--;
+ i2c.write(0,elementos); wait_ms(1);
+ printf("Nao Ha Cartao Cadastrado, Ativando Modo Cadastro...\n\r");
+ flag_identificacao=0;
+ flag_cadastro=1;
+ flag_descadastro=0;
+ return;
+ }
+ else{
+ for (i=0; i < 5; i++){
+ i2c.read(5*(elementos-1)+1+i, buf); wait_ms(1);
+ aux[i]=buf;
+ }
+ for (i=0; i < 5; i++){
+ i2c.write(5*(k-1)+1+i, aux[i]); wait_ms(1);//escreve na memoria
+ }
+ printf("Elemento %d desregistrado com sucesso.\n\r",k);
+ elementos--;
+ i2c.write(0,elementos); wait_ms(1);
+ return;
+ }
+ }
+ else{
+ printf("Cartao nao esta registrado.\n\r");
+ }
+
+
+ return ;
+}
+
+void modo_identificacao (){
+
+ int k;
+ char id_cartao[4];
+ int8_t elementos,senha,buf;
+
+ i2c.read(0, elementos); wait_ms(1);
+ printf("\n\rMODO IDENTIFICACAO ATIVADO\n\r");
+ printf("Aproxime Cartao do Leitor. \n\r");
+
+ pega_id(id_cartao); // Detecta o ID do cartao aproximado e coloca no vetor id_cartao
+ if(flag_mudamodo==1){
+ flag_mudamodo=0;
+ return;
+ }
+ k=jaexiste(id_cartao);
+ if(k!=0){
+ printf("Digite a senha: \n\r");
+ scanf("%d",&senha);
+ i2c.read(5*k, buf); wait_ms(1);
+
+ if (senha==buf) printf("Senha Correta - Acesso Permitido.\n\r");
+ else printf("Senha Incorreta - Acesso Negado.\n\r");
+ }
+ else
+ printf("Cartao Nao Esta Cadastrado.\n\r\n\r");
+
+ return;
+
+}
+
+
+void isr1() {
+
+ if(flag_identificacao==0)
+ flag_mudamodo=1;
+
+ flag_identificacao=1;
+ flag_cadastro=0;
+ flag_descadastro=0;
+}
+
+void isr2() {
+
+ if(flag_descadastro==0)
+ flag_mudamodo=1;
+
+ flag_identificacao=0;
+ flag_cadastro=0;
+ flag_descadastro=1;
+
+}
+
+
+void isr3() {
+
+ if(flag_cadastro==0)
+ flag_mudamodo=1;
+
+ flag_identificacao=0;
+ flag_cadastro=1;
+ flag_descadastro=0;
+
+}
+
+
+int main(void) {
+
+ int8_t elementos=0;
+
+ pc.baud(9600);
+ //debounce.start();
+
+
+ //Init. RC522 Chip
+ RfChip.PCD_Init();
+
+ //init LCD
+ init_LCD();
+
+ i2c.write(0, 0); wait_ms(1);//escreve 0 elementos na memoria
+
+ i2c.read(0,elementos); wait_ms(1);
+
+ button1.rise(&isr1);
+ button2.fall(&isr2);
+ button3.fall(&isr3);
+
+ while (true){
+
+ if(flag_identificacao==1){
+ limpa_lcd();
+ escreve_lcd ("IDENTICACAO");
+ pula_linha();
+ escreve_lcd ("PASSE CARTAO");
+ modo_identificacao();
+ }
+ if(flag_cadastro==1){
+ limpa_lcd();
+ escreve_lcd ("CADASTRO");
+ pula_linha();
+ escreve_lcd ("PASSE CARTAO");
+ modo_cadastro();
+ }
+ if(flag_descadastro==1){
+ limpa_lcd();
+ escreve_lcd ("DESCADASTRO");
+ pula_linha();
+ escreve_lcd ("PASSE CARTAO");
+ modo_descadastro();
+ }
+
+ }
+
+}
\ No newline at end of file