PARA EL BETTUGIS

Dependencies:   mbed tsi_sensor MMA8451Q

Committer:
nicoalmaraz
Date:
Sat May 09 19:04:34 2020 +0000
Revision:
0:c16bb842eb18
EEEEEE

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nicoalmaraz 0:c16bb842eb18 1 #include "mbed.h" //Incluye todas las bibliotecas de C++ q se te ocurran mas algunas funciones de mbed
nicoalmaraz 0:c16bb842eb18 2 #include "tsi_sensor.h" //Headers tsi
nicoalmaraz 0:c16bb842eb18 3 #include "MMA8451Q.h" //Headers acelerometro
nicoalmaraz 0:c16bb842eb18 4
nicoalmaraz 0:c16bb842eb18 5 #define ELEC0 9 //Electrodos TSI
nicoalmaraz 0:c16bb842eb18 6 #define ELEC1 10
nicoalmaraz 0:c16bb842eb18 7
nicoalmaraz 0:c16bb842eb18 8 PinName const SDA = PTE25; //Config I2C Acelerometro (NO USAR ESTAS PATAS PARA OTRAS COSAS)
nicoalmaraz 0:c16bb842eb18 9 PinName const SCL = PTE24;
nicoalmaraz 0:c16bb842eb18 10
nicoalmaraz 0:c16bb842eb18 11 //Timer
nicoalmaraz 0:c16bb842eb18 12 Ticker ticker;
nicoalmaraz 0:c16bb842eb18 13
nicoalmaraz 0:c16bb842eb18 14 //UART
nicoalmaraz 0:c16bb842eb18 15 RawSerial pc(USBTX, USBRX); //La placa usa las patas q en el pinout figuran como UART0. NO USAR ESTAS PATAS PARA OTRAS COSAS.
nicoalmaraz 0:c16bb842eb18 16
nicoalmaraz 0:c16bb842eb18 17 //ADC
nicoalmaraz 0:c16bb842eb18 18 AnalogIn nombre_entrada_analogica (/*Pata uC*/); //Entrada Analogica entre 0v y 3.3v. Te tira un valor proporcional entre 0 y 1
nicoalmaraz 0:c16bb842eb18 19
nicoalmaraz 0:c16bb842eb18 20 //PWM
nicoalmaraz 0:c16bb842eb18 21 PwmOut nombre_salida_pwm(/*Pata uC*/);
nicoalmaraz 0:c16bb842eb18 22
nicoalmaraz 0:c16bb842eb18 23
nicoalmaraz 0:c16bb842eb18 24 //DAC
nicoalmaraz 0:c16bb842eb18 25 AnalogOut nombre_salida_analogica(/*Pata uC*/);
nicoalmaraz 0:c16bb842eb18 26
nicoalmaraz 0:c16bb842eb18 27 //GPIO
nicoalmaraz 0:c16bb842eb18 28 DigitalIn nombre_entrada_digital(/*Pata uC*/);
nicoalmaraz 0:c16bb842eb18 29 DigitalOut nombre_salida_digital(/*Pata uC*/);
nicoalmaraz 0:c16bb842eb18 30 DigitalOut lr(LED_RED); //Para usar LEDs de la placa (los podes usar con la salida PWM o la analogica tambien)
nicoalmaraz 0:c16bb842eb18 31 DigitalOut lg(LED_GREEN); //0: PRENDIDO
nicoalmaraz 0:c16bb842eb18 32 DigitalOut lb(LED_BLUE); //1: APAGADO
nicoalmaraz 0:c16bb842eb18 33
nicoalmaraz 0:c16bb842eb18 34 //Funciones q usas como interrupts
nicoalmaraz 0:c16bb842eb18 35 void interrupcion_UART();
nicoalmaraz 0:c16bb842eb18 36 void interrupcion_timer();
nicoalmaraz 0:c16bb842eb18 37
nicoalmaraz 0:c16bb842eb18 38 int milisegundos; //Cuenta milisegundos
nicoalmaraz 0:c16bb842eb18 39 char caracter; //Memoria caracter recibido por Uart
nicoalmaraz 0:c16bb842eb18 40
nicoalmaraz 0:c16bb842eb18 41 int main(void) {
nicoalmaraz 0:c16bb842eb18 42 //Timer
nicoalmaraz 0:c16bb842eb18 43 ticker.attach(&interrupcion_timer,0.001) //Se llama la funcion "timer" cada 0.001 seg (interrupt)
nicoalmaraz 0:c16bb842eb18 44
nicoalmaraz 0:c16bb842eb18 45 //UART
nicoalmaraz 0:c16bb842eb18 46 pc.attach(&interrupcion_UART); //Se llama la funcion interrupcion_UART cada vez q recibis algo (interrupt)
nicoalmaraz 0:c16bb842eb18 47
nicoalmaraz 0:c16bb842eb18 48 //TSI (Slider)
nicoalmaraz 0:c16bb842eb18 49 TSIAnalogSlider tsi(ELEC0, ELEC1, 40); //Config TSI (Slider)
nicoalmaraz 0:c16bb842eb18 50
nicoalmaraz 0:c16bb842eb18 51 //Acelerómetro
nicoalmaraz 0:c16bb842eb18 52 MMA8451Q acc(SDA, SCL, MMA8451_I2C_ADDRESS); //Config acelerómetro
nicoalmaraz 0:c16bb842eb18 53
nicoalmaraz 0:c16bb842eb18 54 double valor_tsi;
nicoalmaraz 0:c16bb842eb18 55 double valor_acelerometro_eje_x;
nicoalmaraz 0:c16bb842eb18 56 double valor_acelerometro_eje_Y;
nicoalmaraz 0:c16bb842eb18 57 double valor_acelerometro_eje_Z;
nicoalmaraz 0:c16bb842eb18 58
nicoalmaraz 0:c16bb842eb18 59 while (true) {
nicoalmaraz 0:c16bb842eb18 60 valor_tsi = tsi.readPercentage(); //Lees valor entre 0 y 1 (proporcional a posicion)
nicoalmaraz 0:c16bb842eb18 61
nicoalmaraz 0:c16bb842eb18 62 //Valores ejes acelerometro. Creo q puede ir entre -1 y 1 (probar)
nicoalmaraz 0:c16bb842eb18 63 valor_acelerometro_eje_x = acc.getAccX(); //Eje X
nicoalmaraz 0:c16bb842eb18 64 valor_acelerometro_eje_Y = acc.getAccY(); //Eje Y
nicoalmaraz 0:c16bb842eb18 65 valor_acelerometro_eje_Z = acc.getAccZ(); //Eje Z
nicoalmaraz 0:c16bb842eb18 66 nombre_saida_analogica = 0.5;
nicoalmaraz 0:c16bb842eb18 67 if(nombre_entrada_analogica<0.6)
nicoalmaraz 0:c16bb842eb18 68 nombre_salida_digital = true;
nicoalmaraz 0:c16bb842eb18 69 else
nicoalmaraz 0:c16bb842eb18 70 nombre_salida_digital = false;
nicoalmaraz 0:c16bb842eb18 71 if(valor_acelerometro_eje_x<0.8) {
nicoalmaraz 0:c16bb842eb18 72 nombre_salida_pwm = 0.1; //Cambias PWM a 0.1% de duty
nicoalmaraz 0:c16bb842eb18 73 nombre_salida_pwm.period(1); //Cambias periodo a 10 seg
nicoalmaraz 0:c16bb842eb18 74 }
nicoalmaraz 0:c16bb842eb18 75 nombre_salida_analogica = 0.6;
nicoalmaraz 0:c16bb842eb18 76 printf("PARA MANDARLE ALGO A LA PC USAR PRINTF\r\n);
nicoalmaraz 0:c16bb842eb18 77 printf("No olvidarse de poner al final \r\n xq es una poronga q se traba todo\r\n");
nicoalmaraz 0:c16bb842eb18 78 }
nicoalmaraz 0:c16bb842eb18 79 }
nicoalmaraz 0:c16bb842eb18 80
nicoalmaraz 0:c16bb842eb18 81 void interrupcion_timer() {
nicoalmaraz 0:c16bb842eb18 82 milisegundos++;
nicoalmaraz 0:c16bb842eb18 83 }
nicoalmaraz 0:c16bb842eb18 84
nicoalmaraz 0:c16bb842eb18 85 void interrupcion_UART() {
nicoalmaraz 0:c16bb842eb18 86 caracter = pc.getc(); //Guardas el byte recibido (caracter ASCII)
nicoalmaraz 0:c16bb842eb18 87 }