![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
control movimiento motor con interfaz
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; }