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

Dependencies:   mbed

Committer:
CCastrop1012
Date:
Fri Sep 03 05:22:19 2021 +0000
Revision:
0:3a37f6734913
Programa finalizado y funcional.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
CCastrop1012 0:3a37f6734913 1 #include "mbed.h"
CCastrop1012 0:3a37f6734913 2 #include "Motor.h"
CCastrop1012 0:3a37f6734913 3 #include "scolor_TCS3200.h"
CCastrop1012 0:3a37f6734913 4
CCastrop1012 0:3a37f6734913 5 // Puerto de comunicacion Serial
CCastrop1012 0:3a37f6734913 6 Serial CoolTerm(USBTX, USBRX);
CCastrop1012 0:3a37f6734913 7
CCastrop1012 0:3a37f6734913 8 // Motores m1step
CCastrop1012 0:3a37f6734913 9 TraccionD Motores(PB_5, PB_3, PB_10, PB_4, 200, 3.75, 15.5) ;
CCastrop1012 0:3a37f6734913 10
CCastrop1012 0:3a37f6734913 11 /// PWM OUTPUTS
CCastrop1012 0:3a37f6734913 12 PwmOut Buzzer(D10); // LED1
CCastrop1012 0:3a37f6734913 13
CCastrop1012 0:3a37f6734913 14 // Temporizadores
CCastrop1012 0:3a37f6734913 15 Ticker MuestrearCOLOR;
CCastrop1012 0:3a37f6734913 16
CCastrop1012 0:3a37f6734913 17 // SENSOR DE COLOR
CCastrop1012 0:3a37f6734913 18 scolor_TCS3200 SENSOR_COLOR (PA_9, PC_7, PB_6, PA_7, PA_8);
CCastrop1012 0:3a37f6734913 19
CCastrop1012 0:3a37f6734913 20
CCastrop1012 0:3a37f6734913 21 // Lecturas Analogas de Joystick
CCastrop1012 0:3a37f6734913 22 AnalogIn JEjeX(A0);
CCastrop1012 0:3a37f6734913 23 AnalogIn JEjeY(A1);
CCastrop1012 0:3a37f6734913 24
CCastrop1012 0:3a37f6734913 25
CCastrop1012 0:3a37f6734913 26 // Salidas digitales
CCastrop1012 0:3a37f6734913 27 DigitalOut LED(PA_5);
CCastrop1012 0:3a37f6734913 28
CCastrop1012 0:3a37f6734913 29
CCastrop1012 0:3a37f6734913 30 //******************************************************************************
CCastrop1012 0:3a37f6734913 31 /// Declarar Variables Globales
CCastrop1012 0:3a37f6734913 32
CCastrop1012 0:3a37f6734913 33
CCastrop1012 0:3a37f6734913 34 /// Variables sensor de color
CCastrop1012 0:3a37f6734913 35 long red; //Almacenan el Tiempo que dura el CicloUtil de la frecuencia
CCastrop1012 0:3a37f6734913 36 long blue; //Generada por el Sensor TSC3200, al leer el componente
CCastrop1012 0:3a37f6734913 37 long green; //R, G, B o Clear del color que tenga en Frente
CCastrop1012 0:3a37f6734913 38 long clear;
CCastrop1012 0:3a37f6734913 39
CCastrop1012 0:3a37f6734913 40
CCastrop1012 0:3a37f6734913 41 /// Constantes Sensor de Color
CCastrop1012 0:3a37f6734913 42 #define CMD_rojo 0x01
CCastrop1012 0:3a37f6734913 43 #define CMD_azul 0x02
CCastrop1012 0:3a37f6734913 44 #define CMD_verde 0x03
CCastrop1012 0:3a37f6734913 45 #define CMD_clear 0x04
CCastrop1012 0:3a37f6734913 46 #define ColorNoIdentificado 0x00
CCastrop1012 0:3a37f6734913 47
CCastrop1012 0:3a37f6734913 48
CCastrop1012 0:3a37f6734913 49 uint8_t color_identificado = ColorNoIdentificado;
CCastrop1012 0:3a37f6734913 50
CCastrop1012 0:3a37f6734913 51
CCastrop1012 0:3a37f6734913 52
CCastrop1012 0:3a37f6734913 53 /// Varialbles Buzzer
CCastrop1012 0:3a37f6734913 54 uint8_t duracion_tono = 1; // Variable que almacena el Tiempo que es ESCUCHARÁ el Tono
CCastrop1012 0:3a37f6734913 55 uint8_t tipo_tono = 1; // Variable que almacena el Tono que se desee escuchar
CCastrop1012 0:3a37f6734913 56
CCastrop1012 0:3a37f6734913 57 /// Constantes Buzzer
CCastrop1012 0:3a37f6734913 58 #define TONO_DO 0x01 /// si tipo_tono == 0x01, se escuchará un DO
CCastrop1012 0:3a37f6734913 59 #define TONO_RE 0x02 /// si tipo_tono == 0x02, se escuchará un RE
CCastrop1012 0:3a37f6734913 60 #define TONO_MI 0x03 /// si tipo_tono == 0x03, se escuchará un MI
CCastrop1012 0:3a37f6734913 61 #define TONO_SI 0x04 /// si tipo_tono == 0x04, se escuchará un SI
CCastrop1012 0:3a37f6734913 62
CCastrop1012 0:3a37f6734913 63 #define DO 3.78 /// Duración del periodo en ms, que se pondrá en el Buzzer.period_ms() PARA ESCUCHAR UN DO
CCastrop1012 0:3a37f6734913 64 #define RE 3.36 /// Duración del periodo en ms, que se pondrá en el Buzzer.period_ms() PARA ESCUCHAR UN RE
CCastrop1012 0:3a37f6734913 65 #define MI 3.03 /// Duración del periodo en ms, que se pondrá en el Buzzer.period_ms() PARA ESCUCHAR UN MI
CCastrop1012 0:3a37f6734913 66 #define SI 2.82 /// Duración del periodo en ms, que se pondrá en el Buzzer.period_ms() PARA ESCUCHAR UN SI
CCastrop1012 0:3a37f6734913 67
CCastrop1012 0:3a37f6734913 68
CCastrop1012 0:3a37f6734913 69
CCastrop1012 0:3a37f6734913 70
CCastrop1012 0:3a37f6734913 71 #define limite 0.727
CCastrop1012 0:3a37f6734913 72
CCastrop1012 0:3a37f6734913 73 // variables de control y flujo de programa
CCastrop1012 0:3a37f6734913 74
CCastrop1012 0:3a37f6734913 75 uint8_t programa_ejecutar = 0; // Variable que almacena la ORDEN (Telemetria ó Telecomando)
CCastrop1012 0:3a37f6734913 76 // enviada desde el CoolTerm
CCastrop1012 0:3a37f6734913 77 uint8_t coolterm_data; // Se almacenan Todos los Caracteres recividos por el CoolTerm.
CCastrop1012 0:3a37f6734913 78
CCastrop1012 0:3a37f6734913 79
CCastrop1012 0:3a37f6734913 80 // Constantes de velocidad
CCastrop1012 0:3a37f6734913 81
CCastrop1012 0:3a37f6734913 82 #define VelAlta 300
CCastrop1012 0:3a37f6734913 83 #define VelMedia 200
CCastrop1012 0:3a37f6734913 84 #define VelBaja 100
CCastrop1012 0:3a37f6734913 85
CCastrop1012 0:3a37f6734913 86
CCastrop1012 0:3a37f6734913 87 //******************************************************************************
CCastrop1012 0:3a37f6734913 88 // COMANDOS
CCastrop1012 0:3a37f6734913 89
CCastrop1012 0:3a37f6734913 90 #define iniciar_telemetria 0xFE
CCastrop1012 0:3a37f6734913 91 #define iniciar_telecomando 0xFF
CCastrop1012 0:3a37f6734913 92
CCastrop1012 0:3a37f6734913 93 #define telemetria_1 0x01 //
CCastrop1012 0:3a37f6734913 94 #define telemcomando_1 0x01
CCastrop1012 0:3a37f6734913 95
CCastrop1012 0:3a37f6734913 96 #define C_LeerColor 0x00
CCastrop1012 0:3a37f6734913 97 #define C_Sonido1 0x01
CCastrop1012 0:3a37f6734913 98 #define C_Sonido2 0x02
CCastrop1012 0:3a37f6734913 99 #define C_Sonido3 0x03
CCastrop1012 0:3a37f6734913 100 #define C_Sonido4 0x04
CCastrop1012 0:3a37f6734913 101 #define C_Adelante 0x05
CCastrop1012 0:3a37f6734913 102 #define C_Atras 0x06
CCastrop1012 0:3a37f6734913 103 #define C_Izquierda 0x07
CCastrop1012 0:3a37f6734913 104 #define C_Derecha 0x08
CCastrop1012 0:3a37f6734913 105 #define C_Velocidad 0x09
CCastrop1012 0:3a37f6734913 106 #define C_Joistck 0x0A
CCastrop1012 0:3a37f6734913 107 int comando_joystick = 0;
CCastrop1012 0:3a37f6734913 108
CCastrop1012 0:3a37f6734913 109
CCastrop1012 0:3a37f6734913 110 // variables y constantes del Joystick
CCastrop1012 0:3a37f6734913 111
CCastrop1012 0:3a37f6734913 112 uint8_t estado_x;
CCastrop1012 0:3a37f6734913 113 uint8_t estado_y;
CCastrop1012 0:3a37f6734913 114 #define E_Derecha 1
CCastrop1012 0:3a37f6734913 115 #define E_Izquier 0
CCastrop1012 0:3a37f6734913 116 #define E_Adelante 1
CCastrop1012 0:3a37f6734913 117 #define E_Atras 0
CCastrop1012 0:3a37f6734913 118 #define E_Centro 3
CCastrop1012 0:3a37f6734913 119 #define Lim_JKIn 150
CCastrop1012 0:3a37f6734913 120 #define Lim_JKSup 180
CCastrop1012 0:3a37f6734913 121
CCastrop1012 0:3a37f6734913 122 //****************************************************************************
CCastrop1012 0:3a37f6734913 123 // Prototipo de funciones
CCastrop1012 0:3a37f6734913 124
CCastrop1012 0:3a37f6734913 125 void ReadPort(void); // Lee el puerto Serial
CCastrop1012 0:3a37f6734913 126 void MainConfig(void); // Configuracion Inicial de los Perifericos del uC
CCastrop1012 0:3a37f6734913 127 void Buzzer_Tone(uint8_t tipo_tono, uint8_t duracion_tono); // configura el tono y la duracion escuchada a travez del Buzzer
CCastrop1012 0:3a37f6734913 128 void leer_color(void); // funcion que retorna los componentes
CCastrop1012 0:3a37f6734913 129 // RGB y Clear del color leido
CCastrop1012 0:3a37f6734913 130 void leer_Joystick(); // Ejerce control sobre el Movimiento del carro desde el Joistick
CCastrop1012 0:3a37f6734913 131
CCastrop1012 0:3a37f6734913 132 //****************************************************************************
CCastrop1012 0:3a37f6734913 133 //
CCastrop1012 0:3a37f6734913 134 #define valorInicial 0xAA
CCastrop1012 0:3a37f6734913 135 uint8_t n_interrupcion = 0;
CCastrop1012 0:3a37f6734913 136 uint8_t ComandoRecivido = valorInicial, Parametro = valorInicial;
CCastrop1012 0:3a37f6734913 137
CCastrop1012 0:3a37f6734913 138 void ReadPort()
CCastrop1012 0:3a37f6734913 139 {
CCastrop1012 0:3a37f6734913 140
CCastrop1012 0:3a37f6734913 141 //if(CoolTerm.writable()) CoolTerm.abort_write(); // ELIMINA LO QUE ESTEMOS ESCRIBIENDO AL COOLTERM
CCastrop1012 0:3a37f6734913 142
CCastrop1012 0:3a37f6734913 143 if (n_interrupcion == 0) { coolterm_data = CoolTerm.getc(); }
CCastrop1012 0:3a37f6734913 144 if (n_interrupcion == 1) { ComandoRecivido = CoolTerm.getc(); n_interrupcion++; }
CCastrop1012 0:3a37f6734913 145 if (n_interrupcion == 2) { Parametro = CoolTerm.getc(); n_interrupcion = 0;}
CCastrop1012 0:3a37f6734913 146 if (coolterm_data == iniciar_telecomando) { programa_ejecutar = iniciar_telecomando; n_interrupcion++; }
CCastrop1012 0:3a37f6734913 147 if (ComandoRecivido == 0x0A) comando_joystick = 0; // Da valores diferentes al inicial de cada variable
CCastrop1012 0:3a37f6734913 148
CCastrop1012 0:3a37f6734913 149 }
CCastrop1012 0:3a37f6734913 150
CCastrop1012 0:3a37f6734913 151 ///******************************************+
CCastrop1012 0:3a37f6734913 152
CCastrop1012 0:3a37f6734913 153
CCastrop1012 0:3a37f6734913 154 void leer_Joystick()
CCastrop1012 0:3a37f6734913 155 {
CCastrop1012 0:3a37f6734913 156
CCastrop1012 0:3a37f6734913 157 /// Variables Joystick
CCastrop1012 0:3a37f6734913 158 float EjeX;
CCastrop1012 0:3a37f6734913 159 float EjeY;
CCastrop1012 0:3a37f6734913 160 float Vx;
CCastrop1012 0:3a37f6734913 161 float Vy;
CCastrop1012 0:3a37f6734913 162
CCastrop1012 0:3a37f6734913 163 while (comando_joystick == 1) //
CCastrop1012 0:3a37f6734913 164 {
CCastrop1012 0:3a37f6734913 165
CCastrop1012 0:3a37f6734913 166 EjeX = JEjeX.read();
CCastrop1012 0:3a37f6734913 167 Vx = EjeX * 3300;
CCastrop1012 0:3a37f6734913 168 wait (0.1);
CCastrop1012 0:3a37f6734913 169 EjeY = JEjeY.read();
CCastrop1012 0:3a37f6734913 170 Vy = EjeY * 3300;
CCastrop1012 0:3a37f6734913 171
CCastrop1012 0:3a37f6734913 172 // CoolTerm.printf ("ejex: %f ejey: %f Vx: %f Vy: %f \n ", EjeX, EjeY, Vx, Vy);
CCastrop1012 0:3a37f6734913 173
CCastrop1012 0:3a37f6734913 174 if(int(Vx/10) > Lim_JKIn && int(Vx/10) < Lim_JKSup) {estado_x = E_Centro; }//(CoolTerm.printf ("Estado X Centro \n"); }
CCastrop1012 0:3a37f6734913 175 if(int(Vy/10) > Lim_JKIn && int(Vy/10) < Lim_JKSup) {estado_y = E_Centro; }//CoolTerm.printf ("Estado Y Centro \n"); }
CCastrop1012 0:3a37f6734913 176
CCastrop1012 0:3a37f6734913 177 if(int(Vx/10) > Lim_JKSup && estado_y == E_Centro){ estado_x = E_Izquier; }// CoolTerm.printf ("Estado X Izquierda\n"); }
CCastrop1012 0:3a37f6734913 178 if(int(Vy/10) > Lim_JKSup && estado_x == E_Centro){ estado_y = E_Atras; }// CoolTerm.printf ("Estado Y Adelante\n"); }
CCastrop1012 0:3a37f6734913 179
CCastrop1012 0:3a37f6734913 180 if(int(Vx/10) < Lim_JKIn && estado_y == E_Centro){ estado_x = E_Derecha; } //CoolTerm.printf ("Estado X Derecha\n"); }
CCastrop1012 0:3a37f6734913 181 if(int(Vy/10) < Lim_JKIn && estado_x == E_Centro){ estado_y = E_Adelante; } //CoolTerm.printf ("Estado Y Atras\n"); }
CCastrop1012 0:3a37f6734913 182
CCastrop1012 0:3a37f6734913 183
CCastrop1012 0:3a37f6734913 184 // CoolTerm.printf ("\n\n X = %d Y = %d \n",estado_x , estado_y);
CCastrop1012 0:3a37f6734913 185 // wait(2);
CCastrop1012 0:3a37f6734913 186 // Combinacion de estados para STOP
CCastrop1012 0:3a37f6734913 187 if( estado_x == E_Centro && estado_y == E_Centro){ Motores.Stop(); CoolTerm.printf ("MOTORES STOP\n"); }
CCastrop1012 0:3a37f6734913 188
CCastrop1012 0:3a37f6734913 189 // Combinacion de estados para ADELANTE
CCastrop1012 0:3a37f6734913 190 if(estado_x == E_Centro && estado_y == E_Adelante) { Motores.Back(); Motores.Run(1);CoolTerm.printf ("MOTORES BACK\n"); }
CCastrop1012 0:3a37f6734913 191
CCastrop1012 0:3a37f6734913 192 // Combinacion de estados para ATRAS
CCastrop1012 0:3a37f6734913 193 if(estado_x == E_Centro && estado_y == E_Atras) { Motores.Forward(); Motores.Run(1);CoolTerm.printf ("MOTORES FORWARD\n"); }
CCastrop1012 0:3a37f6734913 194
CCastrop1012 0:3a37f6734913 195
CCastrop1012 0:3a37f6734913 196 // Combinacion de estados para DERECHA
CCastrop1012 0:3a37f6734913 197 if(estado_y == E_Centro && estado_x == E_Derecha) { Motores.Giro(15, false); Motores.Run(1); CoolTerm.printf ("MOTORES DERECHA\n"); }
CCastrop1012 0:3a37f6734913 198
CCastrop1012 0:3a37f6734913 199 // Combinacion de estados para IZQUIERDA
CCastrop1012 0:3a37f6734913 200 if(estado_y == E_Centro && estado_x == E_Izquier) { Motores.Giro(15, true); Motores.Run(1); CoolTerm.printf ("MOTORES IZQUIERDA\n"); }
CCastrop1012 0:3a37f6734913 201 //wait(1.5);
CCastrop1012 0:3a37f6734913 202 }
CCastrop1012 0:3a37f6734913 203 comando_joystick = 0;
CCastrop1012 0:3a37f6734913 204
CCastrop1012 0:3a37f6734913 205 }
CCastrop1012 0:3a37f6734913 206
CCastrop1012 0:3a37f6734913 207
CCastrop1012 0:3a37f6734913 208 int main() {
CCastrop1012 0:3a37f6734913 209
CCastrop1012 0:3a37f6734913 210 Buzzer.write(0); ///configura el ciclo util
CCastrop1012 0:3a37f6734913 211 Motores.StepFreq(VelMedia);
CCastrop1012 0:3a37f6734913 212 CoolTerm.attach(&ReadPort, Serial::RxIrq); //// se Habilita la interrupcion serial o recepcion de datos
CCastrop1012 0:3a37f6734913 213 //MuestrearCOLOR.attach(&leer_color, 0.6);
CCastrop1012 0:3a37f6734913 214
CCastrop1012 0:3a37f6734913 215 //CoolTerm.printf("Hello World, System Run !!\n"); // mensaje inicial
CCastrop1012 0:3a37f6734913 216 //leer_Joystick ();
CCastrop1012 0:3a37f6734913 217
CCastrop1012 0:3a37f6734913 218 while(1)
CCastrop1012 0:3a37f6734913 219 {
CCastrop1012 0:3a37f6734913 220
CCastrop1012 0:3a37f6734913 221
CCastrop1012 0:3a37f6734913 222 /// Espera hasta recivir OxFF
CCastrop1012 0:3a37f6734913 223 while(programa_ejecutar != iniciar_telecomando)wait(0.01);
CCastrop1012 0:3a37f6734913 224
CCastrop1012 0:3a37f6734913 225 /// Espera hasta que reciva algo diferente de 0xAA
CCastrop1012 0:3a37f6734913 226 while(ComandoRecivido == valorInicial)wait(0.01);
CCastrop1012 0:3a37f6734913 227
CCastrop1012 0:3a37f6734913 228 /// Espera hasta que reciva algo diferente de 0xAA
CCastrop1012 0:3a37f6734913 229 while(Parametro == valorInicial)wait(0.01);
CCastrop1012 0:3a37f6734913 230
CCastrop1012 0:3a37f6734913 231
CCastrop1012 0:3a37f6734913 232 //// Desactivamos la interrupcion serial o recepcion de datos PORQUE NO NECESITAMOS recibir mas datos por AHORA
CCastrop1012 0:3a37f6734913 233 CoolTerm.attach(NULL, Serial::RxIrq);
CCastrop1012 0:3a37f6734913 234
CCastrop1012 0:3a37f6734913 235 switch(ComandoRecivido)
CCastrop1012 0:3a37f6734913 236 {
CCastrop1012 0:3a37f6734913 237
CCastrop1012 0:3a37f6734913 238 //case C_LeerColor: // Ejecutamos la Funcion LeerColor();
CCastrop1012 0:3a37f6734913 239 // leer_color();
CCastrop1012 0:3a37f6734913 240 //break;
CCastrop1012 0:3a37f6734913 241 case C_Sonido1: //CoolTerm.printf("SONIDO 1\n");
CCastrop1012 0:3a37f6734913 242 duracion_tono = Parametro; // lo almacenamos en: duracion_tono
CCastrop1012 0:3a37f6734913 243 tipo_tono = TONO_DO;
CCastrop1012 0:3a37f6734913 244 Buzzer_Tone(tipo_tono, duracion_tono);
CCastrop1012 0:3a37f6734913 245 break;
CCastrop1012 0:3a37f6734913 246 case C_Sonido2: //CoolTerm.printf("SONIDO 2\n");
CCastrop1012 0:3a37f6734913 247 duracion_tono = Parametro; // lo almacenamos en: duracion_tono
CCastrop1012 0:3a37f6734913 248 tipo_tono = TONO_RE;
CCastrop1012 0:3a37f6734913 249 Buzzer_Tone(tipo_tono, duracion_tono);
CCastrop1012 0:3a37f6734913 250 break;
CCastrop1012 0:3a37f6734913 251 case C_Sonido3: //CoolTerm.printf("SONIDO 3\n");
CCastrop1012 0:3a37f6734913 252 duracion_tono = Parametro; // lo almacenamos en: duracion_tono
CCastrop1012 0:3a37f6734913 253 tipo_tono = TONO_MI;
CCastrop1012 0:3a37f6734913 254 Buzzer_Tone(tipo_tono, duracion_tono);
CCastrop1012 0:3a37f6734913 255 break;
CCastrop1012 0:3a37f6734913 256 case C_Sonido4: //CoolTerm.printf("SONIDO 4\n");
CCastrop1012 0:3a37f6734913 257 duracion_tono = Parametro; // lo almacenamos en: duracion_tono
CCastrop1012 0:3a37f6734913 258 tipo_tono = TONO_SI;
CCastrop1012 0:3a37f6734913 259 Buzzer_Tone(tipo_tono, duracion_tono);
CCastrop1012 0:3a37f6734913 260 break;
CCastrop1012 0:3a37f6734913 261 case C_Adelante: Motores.Forward(); Motores.RunRound(Parametro);
CCastrop1012 0:3a37f6734913 262 break;
CCastrop1012 0:3a37f6734913 263 case C_Atras: Motores.Back(); Motores.RunRound(Parametro);
CCastrop1012 0:3a37f6734913 264 break;
CCastrop1012 0:3a37f6734913 265 case C_Izquierda: Motores.Giro(65, true);
CCastrop1012 0:3a37f6734913 266 break;
CCastrop1012 0:3a37f6734913 267 case C_Derecha: Motores.Giro(65, false);
CCastrop1012 0:3a37f6734913 268 break;
CCastrop1012 0:3a37f6734913 269 case C_Velocidad: if(Parametro == 0x01)Motores.StepFreq(VelBaja);
CCastrop1012 0:3a37f6734913 270 if(Parametro == 0x02)Motores.StepFreq(VelMedia);
CCastrop1012 0:3a37f6734913 271 if(Parametro == 0x03)Motores.StepFreq(VelAlta);
CCastrop1012 0:3a37f6734913 272 break;
CCastrop1012 0:3a37f6734913 273 case C_Joistck: comando_joystick = 1; leer_Joystick();
CCastrop1012 0:3a37f6734913 274 break;
CCastrop1012 0:3a37f6734913 275 default: break;
CCastrop1012 0:3a37f6734913 276
CCastrop1012 0:3a37f6734913 277
CCastrop1012 0:3a37f6734913 278 }
CCastrop1012 0:3a37f6734913 279
CCastrop1012 0:3a37f6734913 280 //CoolTerm.printf("ProgramaFinalizado!!\n");
CCastrop1012 0:3a37f6734913 281
CCastrop1012 0:3a37f6734913 282 // Re inicializamos nuestras variables de control a sus valores iniciales
CCastrop1012 0:3a37f6734913 283 // Para no seguir entrando a las sentencias IF
CCastrop1012 0:3a37f6734913 284 programa_ejecutar = 0; coolterm_data = 0;
CCastrop1012 0:3a37f6734913 285 ComandoRecivido = valorInicial; Parametro = valorInicial;
CCastrop1012 0:3a37f6734913 286 //// HABILITAMOS NUEVAMENTE la interrupcion serial o recepcion de datos
CCastrop1012 0:3a37f6734913 287 CoolTerm.attach(&ReadPort, Serial::RxIrq);
CCastrop1012 0:3a37f6734913 288
CCastrop1012 0:3a37f6734913 289 }
CCastrop1012 0:3a37f6734913 290
CCastrop1012 0:3a37f6734913 291 }
CCastrop1012 0:3a37f6734913 292
CCastrop1012 0:3a37f6734913 293
CCastrop1012 0:3a37f6734913 294
CCastrop1012 0:3a37f6734913 295 void Buzzer_Tone(uint8_t tipo_tono, uint8_t duracion_tono)
CCastrop1012 0:3a37f6734913 296 {
CCastrop1012 0:3a37f6734913 297
CCastrop1012 0:3a37f6734913 298
CCastrop1012 0:3a37f6734913 299 switch (tipo_tono)
CCastrop1012 0:3a37f6734913 300 {
CCastrop1012 0:3a37f6734913 301
CCastrop1012 0:3a37f6734913 302 case TONO_DO: Buzzer.period_ms(DO);
CCastrop1012 0:3a37f6734913 303 //CoolTerm.printf("Tono Seleccionado DO!!\n");
CCastrop1012 0:3a37f6734913 304
CCastrop1012 0:3a37f6734913 305 break; // salimos del SWITCH
CCastrop1012 0:3a37f6734913 306
CCastrop1012 0:3a37f6734913 307 case TONO_RE: Buzzer.period_ms(RE);
CCastrop1012 0:3a37f6734913 308 //CoolTerm.printf("Tono Seleccionado RE!!\n");
CCastrop1012 0:3a37f6734913 309
CCastrop1012 0:3a37f6734913 310 break; // salimos del SWITCH
CCastrop1012 0:3a37f6734913 311
CCastrop1012 0:3a37f6734913 312 case TONO_MI: Buzzer.period_ms(MI);
CCastrop1012 0:3a37f6734913 313 //CoolTerm.printf("Tono Seleccionado MI!!\n");
CCastrop1012 0:3a37f6734913 314
CCastrop1012 0:3a37f6734913 315 break; // salimos del SWITCH
CCastrop1012 0:3a37f6734913 316
CCastrop1012 0:3a37f6734913 317 case TONO_SI: Buzzer.period_ms(SI);
CCastrop1012 0:3a37f6734913 318 //CoolTerm.printf("Tono Seleccionado SI!!\n");
CCastrop1012 0:3a37f6734913 319
CCastrop1012 0:3a37f6734913 320 break; // salimos del SWITCH
CCastrop1012 0:3a37f6734913 321
CCastrop1012 0:3a37f6734913 322 // si no fue ninguno de los valores anteriores entonces:
CCastrop1012 0:3a37f6734913 323 default: //CoolTerm.printf("teleComando desconocido, inicie nuevamente !!\n");
CCastrop1012 0:3a37f6734913 324
CCastrop1012 0:3a37f6734913 325 break; // salimos del SWITCH
CCastrop1012 0:3a37f6734913 326
CCastrop1012 0:3a37f6734913 327 }
CCastrop1012 0:3a37f6734913 328 // COMO EL CICLO UTIL DEL BUZZER ESTABA EN 0, POR LO CUAL NO SONABA
CCastrop1012 0:3a37f6734913 329 // SE PONE AL 50% DEL PERIODO
CCastrop1012 0:3a37f6734913 330 Buzzer.write(0.5);
CCastrop1012 0:3a37f6734913 331 // SE ESPERA DURANTE EN TIEMPO INGRESADO (EN SEGUNDOS )
CCastrop1012 0:3a37f6734913 332 wait(duracion_tono);
CCastrop1012 0:3a37f6734913 333
CCastrop1012 0:3a37f6734913 334 // Se Reinicializa el Periodo y el Ciclo útil de la señal PWM
CCastrop1012 0:3a37f6734913 335 // que va al Buzzer
CCastrop1012 0:3a37f6734913 336 Buzzer.period_ms(1);
CCastrop1012 0:3a37f6734913 337 Buzzer.write(0);
CCastrop1012 0:3a37f6734913 338
CCastrop1012 0:3a37f6734913 339
CCastrop1012 0:3a37f6734913 340
CCastrop1012 0:3a37f6734913 341 }
CCastrop1012 0:3a37f6734913 342
CCastrop1012 0:3a37f6734913 343
CCastrop1012 0:3a37f6734913 344
CCastrop1012 0:3a37f6734913 345 void leer_color()
CCastrop1012 0:3a37f6734913 346 {
CCastrop1012 0:3a37f6734913 347
CCastrop1012 0:3a37f6734913 348 red = SENSOR_COLOR.ReadRed(); // OBTENEMOS EL TIEMPO DEL CICLO UTIL DE LA FRECUENCIA DE SALIDA
CCastrop1012 0:3a37f6734913 349 green = SENSOR_COLOR.ReadGreen();
CCastrop1012 0:3a37f6734913 350 blue = SENSOR_COLOR.ReadBlue();
CCastrop1012 0:3a37f6734913 351 clear = SENSOR_COLOR.ReadClear();
CCastrop1012 0:3a37f6734913 352
CCastrop1012 0:3a37f6734913 353 //printf("RED: %5d GREEN: %5d BLUE: %5d CLEAR: %5d \n ", red, green, blue, clear);
CCastrop1012 0:3a37f6734913 354
CCastrop1012 0:3a37f6734913 355 red *= 2; // Calculamos EL PERIODO de la frecuencia generada por la lectura del fotodiodo rojo
CCastrop1012 0:3a37f6734913 356 blue *= 2; // Calculamos EL PERIODO de la frecuencia generada por la lectura del fotodiodo rojo
CCastrop1012 0:3a37f6734913 357 green *= 2; // Calculamos EL PERIODO de la frecuencia generada por la lectura del fotodiodo rojo
CCastrop1012 0:3a37f6734913 358 clear *= 2; // Calculamos EL PERIODO de la frecuencia generada por la lectura del fotodiodo rojo
CCastrop1012 0:3a37f6734913 359
CCastrop1012 0:3a37f6734913 360 //printf("RED: %5d GREEN: %5d BLUE: %5d CLEAR: %5d \n ", red, green, blue, clear);
CCastrop1012 0:3a37f6734913 361
CCastrop1012 0:3a37f6734913 362
CCastrop1012 0:3a37f6734913 363 //////////////////////////////////////////////////////////////
CCastrop1012 0:3a37f6734913 364 //// identificar azul
CCastrop1012 0:3a37f6734913 365
CCastrop1012 0:3a37f6734913 366
CCastrop1012 0:3a37f6734913 367 if(red <=42 && red >=24)
CCastrop1012 0:3a37f6734913 368 {
CCastrop1012 0:3a37f6734913 369 if(green >= 20 && green <= 28 )
CCastrop1012 0:3a37f6734913 370 {
CCastrop1012 0:3a37f6734913 371 if(blue >= 10 && blue <= 16)
CCastrop1012 0:3a37f6734913 372 {
CCastrop1012 0:3a37f6734913 373 color_identificado = CMD_azul;
CCastrop1012 0:3a37f6734913 374 CoolTerm.putc( iniciar_telemetria);
CCastrop1012 0:3a37f6734913 375 CoolTerm.putc( CMD_azul );
CCastrop1012 0:3a37f6734913 376 //Buzzer.period_ms(DO);
CCastrop1012 0:3a37f6734913 377 //Buzzer.write(0.5);
CCastrop1012 0:3a37f6734913 378 //wait(4);
CCastrop1012 0:3a37f6734913 379 //Buzzer.write(0);
CCastrop1012 0:3a37f6734913 380
CCastrop1012 0:3a37f6734913 381 }
CCastrop1012 0:3a37f6734913 382 }
CCastrop1012 0:3a37f6734913 383 }
CCastrop1012 0:3a37f6734913 384
CCastrop1012 0:3a37f6734913 385
CCastrop1012 0:3a37f6734913 386
CCastrop1012 0:3a37f6734913 387
CCastrop1012 0:3a37f6734913 388 /////////////////////////////////////////////////////////////
CCastrop1012 0:3a37f6734913 389 /// identificar rojo
CCastrop1012 0:3a37f6734913 390 if(red <= 12 )
CCastrop1012 0:3a37f6734913 391 {
CCastrop1012 0:3a37f6734913 392 if(green >= 10 && green <= 28 )
CCastrop1012 0:3a37f6734913 393 {
CCastrop1012 0:3a37f6734913 394 if(blue >= 18 && blue <= 24)
CCastrop1012 0:3a37f6734913 395 {
CCastrop1012 0:3a37f6734913 396 color_identificado = CMD_rojo;
CCastrop1012 0:3a37f6734913 397 CoolTerm.putc( iniciar_telemetria);
CCastrop1012 0:3a37f6734913 398 CoolTerm.putc( CMD_rojo );
CCastrop1012 0:3a37f6734913 399 //Buzzer.period_ms(RE);
CCastrop1012 0:3a37f6734913 400 //Buzzer.write(0.5); //PERIODO UTIL
CCastrop1012 0:3a37f6734913 401 //wait(4); //TIEMPO ACTIVO DEL BUZZER
CCastrop1012 0:3a37f6734913 402 //Buzzer.write(0.0);
CCastrop1012 0:3a37f6734913 403 }
CCastrop1012 0:3a37f6734913 404 }
CCastrop1012 0:3a37f6734913 405
CCastrop1012 0:3a37f6734913 406 if(green < 10 && green >= 6 )
CCastrop1012 0:3a37f6734913 407 {
CCastrop1012 0:3a37f6734913 408 if(blue <= 12 )
CCastrop1012 0:3a37f6734913 409 {
CCastrop1012 0:3a37f6734913 410 color_identificado = CMD_clear;
CCastrop1012 0:3a37f6734913 411 CoolTerm.putc( iniciar_telemetria);
CCastrop1012 0:3a37f6734913 412 CoolTerm.putc( CMD_clear );
CCastrop1012 0:3a37f6734913 413 //Buzzer.period_ms(MI);
CCastrop1012 0:3a37f6734913 414 //Buzzer.write(0.5);
CCastrop1012 0:3a37f6734913 415 //wait(4);
CCastrop1012 0:3a37f6734913 416 //Buzzer.write(0);
CCastrop1012 0:3a37f6734913 417 }
CCastrop1012 0:3a37f6734913 418
CCastrop1012 0:3a37f6734913 419 }
CCastrop1012 0:3a37f6734913 420
CCastrop1012 0:3a37f6734913 421 }
CCastrop1012 0:3a37f6734913 422
CCastrop1012 0:3a37f6734913 423
CCastrop1012 0:3a37f6734913 424 if(green >= 36 && green <= 44 )
CCastrop1012 0:3a37f6734913 425 {
CCastrop1012 0:3a37f6734913 426 if(red >= 40 && red <= 50 )
CCastrop1012 0:3a37f6734913 427
CCastrop1012 0:3a37f6734913 428 {
CCastrop1012 0:3a37f6734913 429 color_identificado = CMD_verde;
CCastrop1012 0:3a37f6734913 430 CoolTerm.putc( iniciar_telemetria);
CCastrop1012 0:3a37f6734913 431 CoolTerm.putc( CMD_verde );
CCastrop1012 0:3a37f6734913 432 //Buzzer.period_ms(SI);
CCastrop1012 0:3a37f6734913 433 //Buzzer.write(0.5);
CCastrop1012 0:3a37f6734913 434 //wait(4);
CCastrop1012 0:3a37f6734913 435 //Buzzer.write(0);
CCastrop1012 0:3a37f6734913 436
CCastrop1012 0:3a37f6734913 437
CCastrop1012 0:3a37f6734913 438 }
CCastrop1012 0:3a37f6734913 439 }
CCastrop1012 0:3a37f6734913 440
CCastrop1012 0:3a37f6734913 441 if (color_identificado == ColorNoIdentificado)
CCastrop1012 0:3a37f6734913 442 {
CCastrop1012 0:3a37f6734913 443
CCastrop1012 0:3a37f6734913 444
CCastrop1012 0:3a37f6734913 445 CoolTerm.putc( iniciar_telemetria);
CCastrop1012 0:3a37f6734913 446 CoolTerm.putc( ColorNoIdentificado);
CCastrop1012 0:3a37f6734913 447 //Buzzer.period_ms(10);
CCastrop1012 0:3a37f6734913 448 //Buzzer.write(0.5);
CCastrop1012 0:3a37f6734913 449 //wait(4);
CCastrop1012 0:3a37f6734913 450 //Buzzer.write(0);
CCastrop1012 0:3a37f6734913 451
CCastrop1012 0:3a37f6734913 452
CCastrop1012 0:3a37f6734913 453 }
CCastrop1012 0:3a37f6734913 454
CCastrop1012 0:3a37f6734913 455 color_identificado = ColorNoIdentificado;
CCastrop1012 0:3a37f6734913 456 }
CCastrop1012 0:3a37f6734913 457
CCastrop1012 0:3a37f6734913 458