.

Dependencies:   mbed hcsr04 TextLCD MMA8451Q

main.cpp

Committer:
20172573063
Date:
2020-06-11
Revision:
0:e22e3566f3da

File content as of revision 0:e22e3566f3da:

#include "mbed.h"
#include "rtos.h"
#include "hcsr04.h"
#include "TextLCD.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;

Thread thread;
Thread thread1;
Thread thread2;
Thread thread3;

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;
    }
}
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);
            Thread::wait(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);
            Thread::wait(120);
        }
    }
}
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);
        Thread::wait(100);
    }
}
void Seg()
{
    while (true) {
        unidad=0b1;
        decena=0b0;
        n=uni;
        numeros();
        Thread::wait(5);
        unidad=0b0;
        decena=0b1;
        n=dec;
        numeros();
        Thread::wait(5);
    }
}
int main()
{
    thread.start((numeros));
    //thread.set_priority (osPriorityNormal);
    thread1.start ((lidar));
    thread2.start ((Lcd_I2C));
    thread3.start((Seg));
    thread.join();
}