Radar detector de obstáculos con sensor ultrasonido y motor paso a paso

Dependencies:   mbed mbed-STM32F103C8T6 USBDevice_STM32F103 TextLCD HCSR04

main.cpp

Committer:
michjpr
Date:
2021-11-18
Revision:
0:29c68dc30a1e

File content as of revision 0:29c68dc30a1e:

#include "stm32f103c8t6.h"
#include "USBSerial.h"
#include "mbed.h"
//#include "HCSR04.h"
#include "hcsr04.h"
#include "TextLCD.h" 
Serial pc(USBTX,USBRX);
HCSR04 ultra(PA_0,PA_1);
//BusOut motor(PA_4,PA_5,PA_6,PA_7);
DigitalOut a(PA_4);
DigitalOut a_(PA_5);
DigitalOut b(PA_6);
DigitalOut b_(PA_7);
int Velocidad = 10000;
I2C i2c_lcd(PB_9,PB_8); // SDA, SCL
TextLCD_I2C lcd(&i2c_lcd,0x4E, TextLCD::LCD16x2, TextLCD::HD44780);
unsigned int dist;
float range=0;
int centimetros=0;
int distancias[2][24];
int menord=10000;
int menora=180;
int tiempo=10000;
BusOut Anodos(PA_8, PA_9, PA_10, PA_11, PA_12, PA_15, PB_3);
BusOut Catodos(PB_4,PB_5);
Ticker ticker1;
int numeroSeg[10]={0b0111111, 0b0000110, 0b1011011, 0b1001111, 0b1100110, 0b1101101, 0b1111101, 0b0000111, 0b1111111, 0b1101111};
int numeroCat[2]={0b01, 0b10};
int menorvec[2];
int contadorsegmentos=0;
int i=0;
   void rotate(){
     if(i>3){
        i=0; }
    else if(i<0){
         i=3; }
    if(i==0){
        a=1;
        a_=0;
        b=0;
        b_=1; }
    else if(i==1){
        a=1;
        a_=0;
        b=1;
        b_=0; }
    else if(i==2){
        a=0;
        a_=1;
        b=1;
        b_=0; }
    else if(i==3){
        a=0;
        a_=1;
        b=0;
        b_=1; }      
   wait(0.01);
}
void cw(uint16_t step){
  for(int count=0;count<step;count++){
        i++;
        rotate();
    }
}

void Radar(){
lcd.setBacklight(TextLCD::LightOff);//LightOff, LightOn
lcd.setCursor(TextLCD::CurOff_BlkOff);//CurOff_BlkOff, CurOn_BlkOff, CurOff_BlkOn, CurOn_BlkOn  
  confSysClock(); 
  USBSerial usbSerial(0x1f00, 0x2012, 0x0001,  false);
    for(int i=0;i<24;i++){
        ultra.start();
        wait_ms(500); 
        dist=ultra.get_dist_cm();
        cw(170);//170
        lcd.cls ();
        lcd.locate(0,0);
        lcd.printf("Fuck you men");
        lcd.locate(0,1);
        lcd.printf("Gonorrea");
            distancias[1][i]=i*(360/24);
            distancias[0][i]=dist;    
        }        
        for(int i=0;i<24;i++){
        if(distancias[0][i]<menord){
            menord=distancias[0][i];
            menora=distancias[1][i];
            } 
            usbSerial.printf(" [%icm ,", distancias[0][i]);
            usbSerial.printf(" %i]", distancias[1][i]);
           }
        usbSerial.printf(" menor distancia %icm,\r\n", menord);
        usbSerial.printf(" angulo  %i.\r\n", menora);   
        lcd.cls ();
        lcd.locate(0,0);
        lcd.printf("menor distancia cm:%ld",menord );
        wait(5);
        menorvec[0]=menord/100;
        menorvec[1]=(menord%100)/10;
       // menorvec[2]=menord%10;
        }
        void segmentos(){
            
           Catodos=numeroCat[contadorsegmentos];
           Anodos=numeroSeg[menorvec[contadorsegmentos]];
           contadorsegmentos+=1;
           if (contadorsegmentos>2){
               contadorsegmentos=0;
               }
           }
int main()
{
    ticker1.attach(&segmentos, 0.002);
    Catodos=0b00;

    confSysClock(); 
 USBSerial usbSerial(0x1f00, 0x2012, 0x0001,  false); 
 
    while(1) {
        Radar();  
    }
}