control movimiento motor con interfaz

Dependencies:   mbed TextLCD

main.cpp

Committer:
juankafil1
Date:
2020-11-22
Revision:
2:64a863ae5850
Parent:
1:98ce9ed49158

File content as of revision 2:64a863ae5850:

#include "string"
#include "mbed.h"
#include "sstream"
#include <string>
#include "TextLCD.h"

TextLCD lcd(PTE20,PTE21,PTE22,PTE23,PTE29,PTE30, TextLCD::LCD16x2);// Rs, E, d4, d5, d6, d7, RW=GND
Serial pc(USBTX,USBRX);
DigitalIn pulso(PTC5);
DigitalOut right(PTC7);
DigitalOut left(PTC0);
DigitalIn start(PTC3),finish(PTC7);
Timer Timer1;
int rea,ns;
string cadena;
using namespace std;
void velocidad(int a,float ad);
int dist(char datos[5]);
PwmOut l1(PTB3),l2(PTC2);
int selec;
float cambio;
float rpm=0,auxrpm=0;
int contador=0;
int distancia=0,disa=0;
bool antirebote=false;
int recorrido=0;
char cade;
//using namespace boost;
float h;
void inicio(){
    while(1){
        if(start==0){
            break;
        }
        velocidad(2,0.5);
    }
    }
void rampa (int sel){
    for(float i=1;i<=10;i++){
     velocidad(sel,i*10);
     wait(0.01);
    }
    }
int main(){
    velocidad(0,0);
    inicio();
    velocidad(0,0);
    lcd.printf("esta en los extremos");
    int red=0;
    char buffer[5];
    while(1){
        if((pulso==0)&&(antirebote==false)){
            contador++;
            disa++;
            antirebote=true;
            auxrpm=Timer1.read_ms();
            Timer1.stop();
            Timer1.reset();
            rpm=10000/auxrpm;
           
            if(recorrido>0){
            Timer1.start();}
            }
        if((pulso==1)&&(antirebote==true)){
            antirebote=false;
            }
         
         if(contador==6){
            
            contador=0;     
                distancia=distancia+1;
               
            //distancia=distancia+1;
            }
           
            if(red>0){
                if(selec==1){
                    velocidad(selec,0.3);
                    pc.printf("uuno");
                    
                    
                    if(disa==2){velocidad(selec,0.4);}
                    if(disa==3){velocidad(selec,0.6);}
                    if(disa==4){velocidad(selec,0.8);}
                    if((disa<recorrido)&&(disa>4)){
                        
                        velocidad(selec,1);   
                    }  if( disa >= red ){
                        distancia=0;
                        disa=0;
                        red=0;
                        recorrido=0;
                        velocidad(0,0);
                    }
                        
                }if (selec==2){
                    velocidad(selec,0.3);
                    pc.printf("dos");
                    
                    if(disa==2){velocidad(selec,0.4);}
                    if(disa==3){velocidad(selec,0.6);}
                    if(disa==4){velocidad(selec,0.8);}
                    if((disa<recorrido)&&(disa>4)){
                        
                        velocidad(selec,1);
                    
                    
                    }if( disa >= red ){
                        distancia=0;
                        selec=0;
                        disa=0;
                        red=0;
                        recorrido=0;
                        velocidad(0,0);
                    }
                } 
            }

         if(pc.readable()){// captura string
         
          pc.gets(buffer,8);
          buffer[0]=' ';
          cade=buffer[1];
          if(red==0){
          red=dist(buffer);
          }
          if(red>0){
              recorrido=red*6;
              }
          //pc.printf("%s",buffer);
         // dist(buffer);
         //pc.printf("%s",cadena);
         pc.printf("%d",recorrido);
         }
        
        if(cade=='d'){
            selec=1; 
            
            } 
        if (cade=='i'){ 
            selec=2; 
            
            
            } 
        if(cade=='n'){selec=0;     
            }
            
            
            
            
             
               
            
          wait(0.01);
         
           // selec=1;
          
          
          //velocidad(selec,cambio);
   
           
       
        }
      
}

void velocidad(int a ,float ad){
    switch (a){
        case 0:
            lcd.cls();
            lcd.locate(0,0);     
            lcd.printf("%d mm",distancia);
            lcd.locate(0,1);
            lcd.printf(" V :%.2f rpm",rpm);
            l1=0;
            l2=0;
            
            break;
        case 1:
            
            if(rpm<10){
                pc.printf("00%.1f ,%d ",rpm,distancia);
                }
            if((rpm>10)&&(rpm<100)){
                pc.printf("0%.1f ,%d ",rpm,distancia);
                } 
            if(rpm>100){
                pc.printf("0%.1f ,%d ",rpm,distancia);
                }  
           
            lcd.cls();
            lcd.locate(0,0);     
            lcd.printf("%d mm",distancia);
            lcd.locate(0,1);
            lcd.printf(" V :%.2f rpm",rpm);
            l1.write(ad); wait(0.02);
            
            l2=0;
            break;
        case 2:
              if(rpm<10){
                pc.printf("00%.1f ,%d ",rpm,distancia);
                }
            if((rpm>10)&&(rpm<100)){
                pc.printf("0%.1f ,%d ",rpm,distancia);
                } 
            if(rpm>100){
                pc.printf("0%.1f ,%d ",rpm,distancia);
                }  
            lcd.cls();   
            lcd.locate(0,0);     
            lcd.printf("%d mm",distancia);
            lcd.locate(0,1);
            lcd.printf("%.2f rpm",rpm);
            wait(0.02);
            l2.write(ad);
            l1=0;
            break;
        
  }  
      
}

int dist(char datos[8]){
   int numero=0,contador=0;
   char c=' ';
    for(int i = 8;i >= 0;i --){
       c=datos[i];
       //pc.putc(c);
       if(c=='0'){contador=contador+1;  }
       if(c=='1'){
            contador=contador+1;
            if(contador==1){numero=numero+1;}
            if(contador==2){numero=numero+10;}
            if(contador==3){numero=numero+100;} }
        if(c=='2'){
            contador=contador+1;
            if(contador==1){numero=numero+2;}
            if(contador==2){numero=numero+20;}
            if(contador==3){numero=numero+200;} }
        if(c=='3'){
            contador=contador+1;
            if(contador==1){numero=numero+3;}
            if(contador==2){numero=numero+30;}
            if(contador==3){numero=numero+300;} }
        if(c=='4'){
            contador=contador+1;
            if(contador==1){numero=numero+4;}
            if(contador==2){numero=numero+40;}
            if(contador==3){numero=numero+400;} }
        if(c=='5'){
            contador=contador+1;
            if(contador==1){numero=numero+5;}
            if(contador==2){numero=numero+50;}
            if(contador==3){numero=numero+500;} }
        if(c=='6'){
            contador=contador+1;
            if(contador==1){numero=numero+6;}
            if(contador==2){numero=numero+60;}
            if(contador==3){numero=numero+600;} }
        if(c=='7'){
            contador=contador+1;
            if(contador==1){numero=numero+7;}
            if(contador==2){numero=numero+70;}
            if(contador==3){numero=numero+700;} }
        if(c=='8'){
            contador=contador+1;
            if(contador==1){numero=numero+8;}
            if(contador==2){numero=numero+80;}
            if(contador==3){numero=numero+800;} }
        if(c=='9'){
            contador=contador+1;
            if(contador==1){numero=numero+9;}
            if(contador==2){numero=numero+90;}
            if(contador==3){numero=numero+900;} }
       
        }
   
    
      
    
     
   return numero;
               
               
            
    
    }