
PARA EL BETTUGIS
Dependencies: mbed tsi_sensor MMA8451Q
main.cpp@0:c16bb842eb18, 2020-05-09 (annotated)
- Committer:
- nicoalmaraz
- Date:
- Sat May 09 19:04:34 2020 +0000
- Revision:
- 0:c16bb842eb18
EEEEEE
Who changed what in which revision?
User | Revision | Line number | New 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 | } |