RTOS
Dependencies: mbed mbed-rtos hcsr04 TextLCD MMA8451Q
main.cpp
- Committer:
- Diego_Mbed
- Date:
- 2020-06-11
- Revision:
- 0:a07af2ea22c3
File content as of revision 0:a07af2ea22c3:
#include "mbed.h" #include "rtos.h" #include "hcsr04.h" #include "TextLCD.h" //#include "platform/mbed_thread.h" #include "MMA8451Q.h" #define MMA8451_I2C_ADDRESS (0x1d<<1) BusOut Dis7seg(PTE20,PTB2,PTB0,PTE21,PTE23,PTB3,PTB1); DigitalOut unidad(PTE2); DigitalOut decena(PTE3); DigitalOut centena(PTE5); Serial pc(USBTX, USBRX); // tx, rx HCSR04 usensor(PTD0,PTD5); // Trigger, Echo PwmOut servo(PTA13); DigitalOut led_1(LED1); SPI spi(PTD2, NC, PTD1); // puertos (MOSI, MISO, SCLK) DigitalOut cs(PTE31); // Chip select MMA8451Q acc(PTE25, PTE24, MMA8451_I2C_ADDRESS); //(SDA,SCL,Direc) // I2C Communication I2C i2c_lcd(PTE0,PTE1); // SDA, SCL // LCD instantiation TextLCD_I2C lcd(&i2c_lcd, 0x4E, TextLCD::LCD16x2, TextLCD::WS0010); unsigned int dist; int distancias[12]; int incremento; int Decremento; int uni =5; int dec =2; int n=0; int p=0; //------------------------------------Funcion de números-------------------------------------------------------- void numeros(){ switch(n){ case 0: Dis7seg=0x01; break; case 1: Dis7seg=0x4F; break; case 2: Dis7seg=0x12; break; case 3: Dis7seg=0x06; break; case 4: Dis7seg=0x4C; break; case 5: Dis7seg=0x24; break; case 6: Dis7seg=0x60; break; case 7: Dis7seg=0x0F; break; case 8: Dis7seg=0x00; break; case 9: Dis7seg=0x0C; break; } } //---------------------------------Sensor ultrasonico con servo------------------------------------------------------------------- void lidar(){ servo.period_ms(20); while(true){ for(int i=0;i<=12;i++){ incremento= i*159; usensor.start(); dist=usensor.get_dist_cm(); distancias[i]=dist; servo.pulsewidth_us(600+incremento); ThisThread::sleep_for(120); } for(int i=0;i<=12;i++){ Decremento= i*159; usensor.start(); usensor.get_dist_cm(); distancias[i]=dist; servo.pulsewidth_us(2508-Decremento); ThisThread::sleep_for(120); } } } //---------------------------------------Lcd_I2C--------------------------------------------------------- void Lcd_I2C(){ lcd.cls(); lcd.locate(0,0); lcd.setBacklight(TextLCD::LightOn); while(true) { lcd.cls(); lcd.locate(0,0); lcd.printf("cm:%u hola mundo",dist); ThisThread::sleep_for(100); } } //--------------------------------Visualizacion Display 7 segmentos--------------------------------------------- void Seg(){ while (true) { unidad=0b1; decena=0b0; n=uni; numeros(); thread_sleep_for(5); unidad=0b0; decena=0b1; n=dec; numeros(); thread_sleep_for(5); } } //--------------------------Hilos tareas------------------------------------------------------------------- Thread Thread_lidar (osPriorityNormal1,OS_STACK_SIZE,nullptr, "tarea lidar"); Thread Thread_Lcd (osPriorityNormal,OS_STACK_SIZE,nullptr, "tarea Lcd"); Thread Thread_Dis7seg (osPriorityNormal,OS_STACK_SIZE,nullptr, "tarea 7seg"); int main(){ //Thread_lidar.start(lidar); Thread_Lcd.start(Lcd_I2C); Thread_Dis7seg.start(Seg); }