ptoo elq ue lo lea

Dependencies:   mbed MAX7219

main.cpp

Committer:
michaelrodriguezg
Date:
2020-11-03
Revision:
4:fcfb02e6a11f
Parent:
3:06223ec42c88
Child:
5:8d56c59a45a8

File content as of revision 4:fcfb02e6a11f:

char whoAmI ;
#define MPU6050                          0x68<<1  // Device address when ADO = 0
#define RA_WHO_AM_I         0x75
#define RA_CONFIG           0x1A
#define RA_USER_CTRL        0x6A
#define RA_PWR_ADDR         0x6B
#define RA_SMPLRT_DIV       0x19
#define RA_GYRO_CONFIG      0x1B
#define RA_ACCEL_CONFIG     0x1C
#define RA_INT_PIN_CFG      0x37
#define RA_ACCEL_XOUT_H     0x3B
#define RA_ACCEL_XOUT_L     0x3C
#define RA_ACCEL_YOUT_H     0x3D
#define RA_ACCEL_YOUT_L     0x3E
#define RA_ACCEL_ZOUT_H     0x3F
#define RA_ACCEL_ZOUT_L     0x40
#define RA_TEMP_OUT_H       0x41
#define RA_TEMP_OUT_L       0x42
#define RA_GYRO_XOUT_H      0x43
#define RA_GYRO_XOUT_L      0x44
#define RA_GYRO_YOUT_H      0x45
#define RA_GYRO_YOUT_L      0x46
#define RA_GYRO_ZOUT_H      0x47
#define RA_GYRO_ZOUT_L      0x48
#define AF_SEL                          0x00 
#define ACC_HPF                         0x00  
#define FS_SEL                          0x00  
#define RA_PWR_MGMT_1           0x00
#define USER_CTRL               0x00
#define ACC_SELF_TEST_X         0x00
#define ACC_SELF_TEST_Y         0x00
#define ACC_SELF_TEST_Z         0x00
#define G_SELF_TEST_X           0x00
#define G_SELF_TEST_Y           0x00
#define G_SELF_TEST_Z           0x00
#define PIN_CFG                         2
#define CONFIG                          4
#define SMPLRT_DIV                  19
                       
                              
#include "mbed.h"
#include "MFRC522.h"
#include "main.h"
#include "max7219.h" 
// Nucleo Pin for MFRC522 reset (pick another D pin if you need D8)
#define MF_RESET    D8
Max7219 pantalla(D11, D12, D13, D10);//MOSI-MISO-CLK-SSEL
void Print_pantalla_tabla(unsigned char *pValor);
DigitalOut led(D4);
DigitalOut ledG(D3);
DigitalOut led3(D5);
DigitalIn boton(PC_13); // 0 - presionado 
int aux = 0 ;
int aux2 = 0;
int signal = 0;
unsigned char personal[8]= {0x0,0x0,0,0,0,0,0,0};  
    unsigned char filas[8]= {1,3,7,0x0f,0x1f,0x3f,0x7f,0xff};
//Serial connection to PC for output
Serial pc(SERIAL_TX, SERIAL_RX);
I2C i2c(D14, D15);
MFRC522    RfChip   (SPI_MOSI, SPI_MISO, SPI_SCK, SPI_CS, MF_RESET);
void giroscope();
void rfid();
void InitMPU();
//int ReadData(int adress_L, int adress_H);
char reg_value[2];
 void WriteData(uint8_t address, uint8_t subAddress, uint8_t data);
int ReadData(int adress_L, int adress_H);
void giroscope(){
    while(1) { 
                pc.printf(" ");
/*
        pc.printf("*");
        pc.printf("%i\t",ReadData(RA_ACCEL_XOUT_L ,RA_ACCEL_XOUT_H));
        pc.printf("%i\t",ReadData(RA_ACCEL_YOUT_L ,RA_ACCEL_YOUT_H));
        pc.printf("%i\t",ReadData(RA_ACCEL_ZOUT_L ,RA_ACCEL_ZOUT_H));
        pc.printf("\n\r");*/
       // pc.printf("%i\t",ReadData(RA_GYRO_XOUT_L ,RA_GYRO_XOUT_H));
        pc.printf("%i\t",ReadData(RA_GYRO_YOUT_L ,RA_GYRO_YOUT_H));
        //pc.printf("%i\t",ReadData(RA_GYRO_ZOUT_L ,RA_GYRO_ZOUT_H));
        pc.printf("\n\r");
        //wait_us(2e6);        
  }
}
void Print_pantalla_tabla(unsigned char *pValor){
    for (int i =0;i<8;i++)
    pantalla.write_digit(1,i+1,pValor[i]);  
}
void matrix(){
    max7219_configuration_t cfg = {
        .device_number = 1,
        .decode_mode = 0,
        .intensity = Max7219::MAX7219_INTENSITY_5,
        .scan_limit = Max7219::MAX7219_SCAN_8
    };
        pantalla.init_device(cfg);
        pantalla.enable_device(1);
        pantalla.set_display_test();
        wait_ms(1000);
        pantalla.clear_display_test();
        while(ledG==1){
                                    for(int i=0;i<3;i++){
                                    i=i;
                                    Print_pantalla_tabla(led2);
                                    wait_ms(200);
                                    Print_pantalla_tabla(led1);
                                    wait_ms(200);
                                    }
                                    ledG=0;
                                    Print_pantalla_tabla(personal);
                                        wait_ms(100);
                                    }
    }
void rfid(){
    while(true){
    if (boton == 0){
        led = !led;
        pc.printf("boton presionado\n\r");
        pc.printf(" %X02",aux);
        }
             led=0;
            // Look for new cards
            if ( ! RfChip.PICC_IsNewCardPresent()){
              wait_ms(200);
              //pc.printf("1 ");
              pc.printf("%i\t\n\r",ReadData(RA_GYRO_YOUT_L ,RA_GYRO_YOUT_H));
              
              continue;
            }
            // Select one of the cards
            if ( ! RfChip.PICC_ReadCardSerial())
            {
              wait_ms(200);
              continue;
            }
            led=1;
            // Print Card UID
           // pc.printf("Card UID: ");
            for (uint8_t i = 0; i < RfChip.uid.size; i++){
             /* pc.printf(" %X02", RfChip.uid.uidByte[i]);
              pc.printf("-A1-\n\r");*/
                         if (aux == 0) {    
                          aux = RfChip.uid.uidByte[i]; //registra la primera tarjeta que entre
                          led3 = 1;
                          aux2 = 2;                         
                        }else if (aux2 ==2){
                            aux2 = RfChip.uid.uidByte[i]; //registrar tarjeta
                            ledG = 1;
                            led3 = 0; 
                            signal = 1;
                       }else if (RfChip.uid.uidByte[i] == aux){                         
                            ledG = 1;  
                            led3 = 0;
                            signal = 1; 
                            pc.printf("15000\n\r");
                            /*------*/
                            wait_us(5e6);                                          
                            matrix();
                            ledG = 0;
                            signal = 0;
                            pc.printf("-15000\n\r");
                            led3 = 1;    
                       }     
            }        
        pc.printf("\n\r");        
    }
}
/*void leer (){
    if (boton == 1){
        led = !led;
        pc.printf("boton presionado\n\r");
        }
}*/
int ReadData(int adress_L, int adress_H){
    char data_L;
    char data_H;
    char adress_data_L[1] ;
    char adress_data_H[1] ;
    adress_data_L[0]= adress_L;
    adress_data_H[0]= adress_H;
    i2c.write(MPU6050, adress_data_L, 1,1);
    i2c.read(MPU6050,&data_L, 1,0);
    i2c.write(MPU6050, adress_data_H, 1,1);
    i2c.read(MPU6050,&data_H, 1,0);
    return (int16_t)((data_H<<8) | data_L);
}
 void WriteData(uint8_t address, uint8_t subAddress, uint8_t data){
   char data_write[2];
   data_write[0] = subAddress;
   data_write[1] = data;
   i2c.write(address, data_write, 2, false);
}
void InitMPU(){
    WriteData(MPU6050,RA_PWR_ADDR,RA_PWR_MGMT_1);   
    wait(0.1);
    WriteData(MPU6050,RA_USER_CTRL,USER_CTRL);   
    WriteData(MPU6050, RA_INT_PIN_CFG,PIN_CFG);
    WriteData(MPU6050,RA_SMPLRT_DIV,SMPLRT_DIV); 
    int GConfig = G_SELF_TEST_X | G_SELF_TEST_Y | G_SELF_TEST_Z | FS_SEL;
    int AConfig = ACC_SELF_TEST_X | ACC_SELF_TEST_Y | ACC_SELF_TEST_Z | AF_SEL | ACC_HPF;
    WriteData(MPU6050,RA_GYRO_CONFIG,GConfig); 
    WriteData(MPU6050,RA_ACCEL_CONFIG,AConfig); 
}
int main(void) { //MENSAJE INICIAL
  pc.baud(9600);
  i2c.frequency(400000);
  InitMPU(); 
  pc.printf(".............STARTING.............\n\r");
  // Init. RC522 Chip
  RfChip.PCD_Init();  
    
  while (true) {
    pc.printf(".............BUSCANDO.............\n\r");   
    rfid();
  }
}