Se leen comando por el puerto serial realiza las siguientes funciones según el comando: - Genera distintos tonos por un buzzer. - Controla el movimiento de un carro (con 2 motores) con comandos - Controla el movimiento de un carro (con 2 motores) con Joystick. - Lee y envía el color leido por el puerto serial al PC
Motor.h
00001 #ifndef Motor_H 00002 #define Motor_H 00003 #include "mbed.h" 00004 /* ************************************************************************** 00005 00006 @CCastrop 00007 cristiank.castrop@ecci.edu.co 00008 00009 L1 Terminal A del motor 00010 L2 Terminal B del motor 00011 SpeedPin Pin de salida PWM 00012 00013 LastVersion: 21 - Abril - 2019 7:45pm 00014 ******************************************************************************/ 00015 00016 00017 class MotorContinuo { 00018 public: 00019 /// Constructores para Motores Continuos 00020 MotorContinuo(PinName _L1, PinName _L2, PinName _speedPin, PinName _encodin, PinName _PosInicial, int _EncodPulses); 00021 00022 void Forward(); // Da un sentido de giro al motor 00023 void Back(); // Genera un sentido de giro contrario al de Forward 00024 void Stop(); // Detiene el motor dejando el movimiento libre 00025 void StopT(); // Detiene el motor truncando o enclavando el movimiento(Lo mantiene quieto). 00026 void SpeedDuty(int v); // Varia la velocidad de giro del motor de 0 a 100% 00027 void SpinLength_ms(float t); // Duración del giro en ms 00028 void SpinLength(float t); // Duración del giro 00029 00030 private: 00031 00032 DigitalOut L1; 00033 DigitalOut L2; 00034 PwmOut speedPin; 00035 DigitalIn encodin; 00036 DigitalIn PosInicial; 00037 int EncodPulses; 00038 00039 00040 00041 00042 }; 00043 00044 00045 class MotorDiscreto { 00046 public: 00047 /// Constructores para Motores Continuos 00048 MotorDiscreto(PinName _Dir, PinName _Step, int _NPasos, PinName _encodin, PinName _PosInicial, int _EncodPulses); 00049 00050 MotorDiscreto(void); 00051 00052 void Forward(); // Da un sentido de giro al motor 00053 void Back(); // Genera un sentido de giro contrario al de Forward 00054 void Stop(); // Detiene el motor dejando el movimiento libre. Pin Enable = 0 00055 void StopT(); // Detiene el motor truncando o enclavando el movimiento(Lo mantiene quieto). 00056 void StepFreq(long n); // Configura la Velocidad en Número(n) de pasos por segundos. Es decir la Frecuencia de paso. 00057 void RunStep(long n); // Se mueve el motor la cantidad de pasos ingresada 00058 void Run(float t); // Gira el motor durante el tiempo ingresado, si es 0 indefinidamente hasta llamada a Stop(). 00059 void RunRound(int n); // Girar n vueltas 00060 void Ustep(int resolucion, PinName M0, PinName M1, PinName M2); 00061 // Configura los pasos a 1/2, 1/4, 1/8, 1/16, 1/32 00062 long getStepOnHold(void); 00063 00064 long StepOnHold; // Pasos faltantes por ejecutar 00065 long StepsBySecond; // Pasos por segundo 00066 00067 private: 00068 00069 void moveMotor(void); 00070 00071 DigitalOut Dir; 00072 DigitalOut Step; 00073 int NPasos; 00074 DigitalIn encodin; 00075 DigitalIn PosInicial; 00076 int EncodPulses; 00077 00078 DigitalOut* EnablePin; 00079 DigitalOut* M0; 00080 DigitalOut* M1; 00081 DigitalOut* M2; 00082 00083 Ticker Move; /// Timer de interrupcion 00084 float TStep; /// periodo del paso TStep = 1/StepsBySecond; 00085 00086 int entradas; /// registra cada 2 ingresos a la interrupcion 00087 bool _moveMotorStopped; // en 1 cuando se da la orden al motor de detenerse 00088 }; 00089 00090 00091 00092 00093 class TraccionD 00094 { 00095 00096 public: 00097 00098 TraccionD(PinName _StepMI, PinName _DirMI, PinName _StepMD, PinName _DirMD, int _NPasos, float _r, float _L); // para giro declarar primero la frecuencia de paso 00099 00100 void Forward(); // Da un sentido de giro al motor 00101 void Back(); // Genera un sentido de giro contrario al de Forward 00102 void Left(); // Configura el sentido de giro de ambos motores de manera contraria para girar hacia la izquierda 00103 void Right(); // Configura el sentido de giro de ambos motores de manera contraria e inverso al de Left() para girar hacia la derecha 00104 void Stop(); // Detiene el motor dejando el movimiento libre. Pin Enable = 0 00105 void StopT(); // Detiene el motor truncando o enclavando el movimiento(Lo mantiene quieto). 00106 void StepFreq(long n);//maximo~350 // Configura la Velocidad en Número(n) de pasos por segundos. Es decir la Frecuencia de paso. 00107 void RunStep(long n); // Se mueve el motor la cantidad de pasos ingresada 00108 void Run(float t); // Gira el motor durante el tiempo ingresado, si es 0 indefinidamente hasta llamada a Stop(). 00109 void RunRound(int n); // Girar n vueltas 00110 void Giro(long grados, bool sentido); // IMPORTANTE: Para llamar esta funcino PRIMERO se debe definir la frecuencia de paso 00111 // Gira el movil la cantidad de grados indicados en sentido indicado. 00112 // en función del radio de las llantas y el radio del eje que une las llantas. 00113 // ejemplo: (90, Horario) o (120, AntiHorario) 00114 00115 long getStepOnHold(void); 00116 00117 00118 private: 00119 00120 void moveMotor(void); // Funcion que es ejecutada cada interupcion del Ticker Move 00121 00122 // Configuracion de los pines 00123 DigitalOut StepMI,DirMI; 00124 DigitalOut StepMD, DirMD; 00125 int NPasos; 00126 float r; // Radio de la llanta 00127 float L; // Longitud desde del eje medido entre las 2 llantas dividido en 2. 00128 float Rl; // Relacion(Rl) de distacia entre los dos Radios(r y L) 00129 long StepOnHold; // Pasos faltantes por ejecutar 00130 long StepsBySecond; // Pasos por segundo 00131 00132 DigitalOut* EnablePinM1; 00133 DigitalOut* EnablePinM2; 00134 00135 Ticker Move; /// Timer de interrupcion 00136 float TStep; /// periodo del paso TStep = 1/StepsBySecond; 00137 00138 int entradas; /// registra cada 2 ingresos a la interrupcion 00139 00140 00141 00142 00143 00144 }; 00145 #endif 00146 00147 00148 00149 00150 00151 00152 00153 00154 00155 00156 00157 00158 00159 00160
Generated on Tue Aug 23 2022 04:08:16 by
1.7.2