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);


}