
Proyecto final de semestre: Se desarrollo un vehículo que recibe comandos por el puerto serial y realiza las siguientes funciones según el comando sea el comando recibido: - 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 - Muestra los colores leídos por una pantalla FFT instalada en el vehículo.
Revision 0:3a420fc22672, committed 2021-09-03
- Comitter:
- CCastrop1012
- Date:
- Fri Sep 03 05:26:27 2021 +0000
- Commit message:
- Proyecto de final de semestre, finalizado y funcional.
Changed in this revision
diff -r 000000000000 -r 3a420fc22672 Motor.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Motor.cpp Fri Sep 03 05:26:27 2021 +0000 @@ -0,0 +1,180 @@ +#include "mbed.h" +#include "Motor.h" +#include "Ticker.h" + +#define Pi 3.14159265 +#define Horario 1 +#define AntiHorario 0 + +///************ MOTOR CONTINUO ********************************// + +/// CONSTRUCTOR +MotorContinuo::MotorContinuo(PinName _L1, PinName _L2, PinName _speedPin, PinName _encodin, PinName _PosInicial, int _EncodPulses) : +L1(_L1), L2(_L2), speedPin(_speedPin), encodin(_encodin), PosInicial(_PosInicial), EncodPulses(_EncodPulses) +{ + speedPin.period_ms(2); + speedPin.write(0); + +}; + + + +void MotorContinuo::Forward() { L1=1; L2=0;} +void MotorContinuo::Back() { L1=0; L2=1;} +void MotorContinuo::Stop() { L1=0; L2=0;} +void MotorContinuo::StopT() { L1=1; L2=1;} +void MotorContinuo::SpeedDuty(int v) { speedPin.write(float(v/100.0));} +void MotorContinuo::SpinLength_ms(float t) { t++;}// Duración del giro en ms +void MotorContinuo::SpinLength(float t) { t++;}; + + + +///************ MOTOR DISCRETO ********************************// + +/// CONSTRUCTOR +MotorDiscreto::MotorDiscreto(PinName _Dir, PinName _Step, int _NPasos, PinName _encodin, PinName _PosInicial, int _EncodPulses) : +Dir(_Dir), Step(_Step), NPasos(_NPasos), encodin(_encodin), PosInicial(_PosInicial), EncodPulses(_EncodPulses) +{ +}; + + + // ************* METODOS ***************** /// + +void MotorDiscreto::moveMotor(void) + { + if (StepOnHold != 0 && _moveMotorStopped == false) + { + Step = !Step; // Se hace elcambio de estado en el pin Step + entradas++; // se registra cada paso efectivo el cual es valido cada 2 entradas + // 1ra entrada: tiempo en Bajo + // 2da entrada: tiempo en Alto + // Es decir cuando Step cumple un periodo. + if (entradas >= 2) // cuando se registran 2 entradas se disminuye un paso + { + StepOnHold--; // Se elimina 1 paso de los pendientes + entradas = 0; + } + + Move.attach(callback(this,&MotorDiscreto::moveMotor), (TStep/2) ); // Reiniciamos el tiempo de imterrupcion + + } + else if (StepOnHold == 0 || _moveMotorStopped == true) // si no hay mas pasos pendientes + { + Move.detach(); // desabilita la interrupcion + entradas = 0; + } + } + + +void MotorDiscreto::Forward() { Dir=1;} +void MotorDiscreto::Back() { Dir=0;} +void MotorDiscreto::Stop() { EnablePin = 0; _moveMotorStopped = true;} +void MotorDiscreto::StopT() { Move.detach(); _moveMotorStopped = true;} +void MotorDiscreto::StepFreq(long n) { StepsBySecond = n; TStep = (1/float(n));} +void MotorDiscreto::RunStep(long n) { StepOnHold = n; Move.attach(callback(this,&MotorDiscreto::moveMotor), (TStep/2) ); _moveMotorStopped = false; }// Duración del giro en ms +void MotorDiscreto::Run(float t) { float Fp = (1/TStep); StepOnHold = long(t*Fp); Move.attach(callback(this,&MotorDiscreto::moveMotor), (TStep/2) ); _moveMotorStopped = false; } +void MotorDiscreto::RunRound(int n) { StepOnHold = (NPasos * n); Move.attach(callback(this,&MotorDiscreto::moveMotor), (TStep/2) ); _moveMotorStopped = false; } +long MotorDiscreto::getStepOnHold(void){return StepOnHold; } + +void Ustep(int resolucion, DigitalOut* _M0, DigitalOut* _M1, DigitalOut* _M2) + { + + switch(resolucion) + { + case 1: *_M0 = 0; *_M1 = 0; *_M2 = 0; + break; + case 2: *_M0 = 1; *_M1 = 0; *_M2 = 0; + break; + case 4: *_M0 = 0; *_M1 = 1; *_M2 = 0; + break; + case 8: *_M0 = 1; *_M1 = 1; *_M2 = 1; + break; + case 16: *_M0 = 0; *_M1 = 0; *_M2 = 1; + break; + case 32: *_M0 = 1; *_M1 = 0; *_M2 = 1; + break; + + default: *_M0 = 0; *_M1 = 0; *_M2 = 0; + + + } + + + } + + +///************ TRACCIONDISCRETA ********************************// + + +/// ***************** CONSTRUCTOR ********************** /// +TraccionD::TraccionD(PinName _StepMI, PinName _DirMI, PinName _StepMD, PinName _DirMD, int _NPasos, float _r, float _L ): + StepMI(_StepMI), DirMI(_DirMI), StepMD(_StepMD), DirMD(_DirMD), NPasos(_NPasos), r(_r), L(_L) + { + // 1. se halla la Relacion(Rl) de distacia entre los dos Radios(r y L) + Rl = (L / r); + + }; + + // ************* METODOS ***************** /// + +void TraccionD::moveMotor(void) + { + if (StepOnHold != 0) + { + + + StepMI = !StepMI; // Se hace elcambio de estado en el pin Step para ambos motores + StepMD = StepMI; + + entradas++; // se registra cada paso efectivo el cual es valido cada 2 entradas + // 1ra entrada: tiempo en Bajo + // 2da entrada: tiempo en Alto + // Es decir cuando Step cumple un periodo. + if (entradas >= 2) // cuando se registran 2 entradas se disminuye un paso + { + StepOnHold--; // Se elimina 1 paso de los pendientes + entradas = 0; + } + + Move.attach(callback(this,&TraccionD::moveMotor), (TStep/2) ); // Reiniciamos el tiempo de imterrupcion + + } + else if (StepOnHold == 0) // si no hay mas pasos para dar se deshabilita las interrupciones. + { + Move.detach(); + } + } + + +void TraccionD::Forward() { DirMI=1; DirMD=1;} // Configua de giro de ambos motores el el mismo sentido para avanzar hacia adelante +void TraccionD::Back() { DirMI=0; DirMD=0;} // Configua el sentido giro en ambos motores contrario al de Forward(), para avanzar hacia atras +void TraccionD::Left() { DirMI=0; DirMD=1;} // Configura el sentido de giro de ambos motores de manera contraria para girar hacia la izquierda +void TraccionD::Right() { DirMI=1; DirMD=0;} // Configura el sentido de giro de ambos motores de manera contraria e inverso al de Left() para girar hacia la derecha +void TraccionD::Stop() { EnablePinM1 = 0; EnablePinM2 = 0;} +void TraccionD::StopT() { Move.detach();} +void TraccionD::StepFreq(long n) { StepsBySecond = n; TStep = (1/float(n));} +void TraccionD::RunStep(long n){ StepOnHold = n; Move.attach(callback(this,&TraccionD::moveMotor), (TStep/2) ); }// Duración del giro en ms +void TraccionD::Run(float t) { float Fp = (1/TStep); StepOnHold = long(t*Fp); Move.attach(callback(this,&TraccionD::moveMotor), (TStep/2) ); } +void TraccionD::RunRound(int n) { StepOnHold = (NPasos * n); Move.attach(callback(this,&TraccionD::moveMotor), (TStep/2) ); } +long TraccionD::getStepOnHold(void){return StepOnHold; } + +void TraccionD::Giro(long grados, bool sentido) +{ + + StepOnHold = grados * int(Rl * NPasos); + StepOnHold /= 360; + if(sentido == true) Right(); else if (sentido == false) Left(); + Move.attach(callback(this,&TraccionD::moveMotor), (TStep/2) ); + +} + + + + + + + + + + +
diff -r 000000000000 -r 3a420fc22672 Motor.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Motor.h Fri Sep 03 05:26:27 2021 +0000 @@ -0,0 +1,160 @@ +#ifndef Motor_H +#define Motor_H +#include "mbed.h" + /* ************************************************************************** + +@CCastrop +cristiank.castrop@ecci.edu.co + + L1 Terminal A del motor + L2 Terminal B del motor + SpeedPin Pin de salida PWM + + LastVersion: 21 - Abril - 2019 7:45pm +******************************************************************************/ + + +class MotorContinuo { + public: + /// Constructores para Motores Continuos + MotorContinuo(PinName _L1, PinName _L2, PinName _speedPin, PinName _encodin, PinName _PosInicial, int _EncodPulses); + + void Forward(); // Da un sentido de giro al motor + void Back(); // Genera un sentido de giro contrario al de Forward + void Stop(); // Detiene el motor dejando el movimiento libre + void StopT(); // Detiene el motor truncando o enclavando el movimiento(Lo mantiene quieto). + void SpeedDuty(int v); // Varia la velocidad de giro del motor de 0 a 100% + void SpinLength_ms(float t); // Duración del giro en ms + void SpinLength(float t); // Duración del giro + + private: + + DigitalOut L1; + DigitalOut L2; + PwmOut speedPin; + DigitalIn encodin; + DigitalIn PosInicial; + int EncodPulses; + + + + +}; + + +class MotorDiscreto { + public: + /// Constructores para Motores Continuos + MotorDiscreto(PinName _Dir, PinName _Step, int _NPasos, PinName _encodin, PinName _PosInicial, int _EncodPulses); + + MotorDiscreto(void); + + void Forward(); // Da un sentido de giro al motor + void Back(); // Genera un sentido de giro contrario al de Forward + void Stop(); // Detiene el motor dejando el movimiento libre. Pin Enable = 0 + void StopT(); // Detiene el motor truncando o enclavando el movimiento(Lo mantiene quieto). + void StepFreq(long n); // Configura la Velocidad en Número(n) de pasos por segundos. Es decir la Frecuencia de paso. + void RunStep(long n); // Se mueve el motor la cantidad de pasos ingresada + void Run(float t); // Gira el motor durante el tiempo ingresado, si es 0 indefinidamente hasta llamada a Stop(). + void RunRound(int n); // Girar n vueltas + void Ustep(int resolucion, PinName M0, PinName M1, PinName M2); + // Configura los pasos a 1/2, 1/4, 1/8, 1/16, 1/32 + long getStepOnHold(void); + + long StepOnHold; // Pasos faltantes por ejecutar + long StepsBySecond; // Pasos por segundo + + private: + + void moveMotor(void); + + DigitalOut Dir; + DigitalOut Step; + int NPasos; + DigitalIn encodin; + DigitalIn PosInicial; + int EncodPulses; + + DigitalOut* EnablePin; + DigitalOut* M0; + DigitalOut* M1; + DigitalOut* M2; + + Ticker Move; /// Timer de interrupcion + float TStep; /// periodo del paso TStep = 1/StepsBySecond; + + int entradas; /// registra cada 2 ingresos a la interrupcion + bool _moveMotorStopped; // en 1 cuando se da la orden al motor de detenerse +}; + + + + +class TraccionD +{ + + public: + + TraccionD(PinName _StepMI, PinName _DirMI, PinName _StepMD, PinName _DirMD, int _NPasos, float _r, float _L); // para giro declarar primero la frecuencia de paso + + void Forward(); // Da un sentido de giro al motor + void Back(); // Genera un sentido de giro contrario al de Forward + void Left(); // Configura el sentido de giro de ambos motores de manera contraria para girar hacia la izquierda + void Right(); // Configura el sentido de giro de ambos motores de manera contraria e inverso al de Left() para girar hacia la derecha + void Stop(); // Detiene el motor dejando el movimiento libre. Pin Enable = 0 + void StopT(); // Detiene el motor truncando o enclavando el movimiento(Lo mantiene quieto). + void StepFreq(long n);//maximo~350 // Configura la Velocidad en Número(n) de pasos por segundos. Es decir la Frecuencia de paso. + void RunStep(long n); // Se mueve el motor la cantidad de pasos ingresada + void Run(float t); // Gira el motor durante el tiempo ingresado, si es 0 indefinidamente hasta llamada a Stop(). + void RunRound(int n); // Girar n vueltas + void Giro(long grados, bool sentido); // IMPORTANTE: Para llamar esta funcino PRIMERO se debe definir la frecuencia de paso + // Gira el movil la cantidad de grados indicados en sentido indicado. + // en función del radio de las llantas y el radio del eje que une las llantas. + // ejemplo: (90, Horario) o (120, AntiHorario) + + long getStepOnHold(void); + + + private: + + void moveMotor(void); // Funcion que es ejecutada cada interupcion del Ticker Move + + // Configuracion de los pines + DigitalOut StepMI,DirMI; + DigitalOut StepMD, DirMD; + int NPasos; + float r; // Radio de la llanta + float L; // Longitud desde del eje medido entre las 2 llantas dividido en 2. + float Rl; // Relacion(Rl) de distacia entre los dos Radios(r y L) + long StepOnHold; // Pasos faltantes por ejecutar + long StepsBySecond; // Pasos por segundo + + DigitalOut* EnablePinM1; + DigitalOut* EnablePinM2; + + Ticker Move; /// Timer de interrupcion + float TStep; /// periodo del paso TStep = 1/StepsBySecond; + + int entradas; /// registra cada 2 ingresos a la interrupcion + + + + + +}; +#endif + + + + + + + + + + + + + + +
diff -r 000000000000 -r 3a420fc22672 UniGraphic.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/UniGraphic.lib Fri Sep 03 05:26:27 2021 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/teams/GraphicsDisplay/code/UniGraphic/#f87f06292637
diff -r 000000000000 -r 3a420fc22672 corregido.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/corregido.txt Fri Sep 03 05:26:27 2021 +0000 @@ -0,0 +1,472 @@ +#include "mbed.h" +#include "Motor.h" +#include "scolor_TCS3200.h" + +// Puerto de comunicacion Serial +Serial CoolTerm(USBTX, USBRX); + +// Motores m1step +TraccionD Motores(PB_5, PB_3, PB_10, PB_4, 200, 3.75, 15.5) ; + +/// PWM OUTPUTS +PwmOut Buzzer(D10); // LED1 + +// Temporizadores +Ticker MuestrearCOLOR; + +// SENSOR DE COLOR +scolor_TCS3200 SENSOR_COLOR (PA_9, PC_7, PB_6, PA_7, PA_8); + + +// Lecturas Analogas de Joystick +AnalogIn JEjeX(A0); +AnalogIn JEjeY(A1); + + +// Salidas digitales +DigitalOut LED(PA_5); + + +//****************************************************************************** +/// Declarar Variables Globales + + +/// Variables sensor de color +long red; //Almacenan el Tiempo que dura el CicloUtil de la frecuencia +long blue; //Generada por el Sensor TSC3200, al leer el componente +long green; //R, G, B o Clear del color que tenga en Frente +long clear; + + +/// Constantes Sensor de Color +#define CMD_rojo 0x01 +#define CMD_azul 0x02 +#define CMD_verde 0x03 +#define CMD_clear 0x04 +#define ColorNoIdentificado 0x00 + + +uint8_t color_identificado = ColorNoIdentificado; + + + +/// Varialbles Buzzer +uint8_t duracion_tono = 1; // Variable que almacena el Tiempo que es ESCUCHARÁ el Tono +uint8_t tipo_tono = 1; // Variable que almacena el Tono que se desee escuchar + +/// Constantes Buzzer +#define TONO_DO 0x01 /// si tipo_tono == 0x01, se escuchará un DO +#define TONO_RE 0x02 /// si tipo_tono == 0x02, se escuchará un RE +#define TONO_MI 0x03 /// si tipo_tono == 0x03, se escuchará un MI +#define TONO_SI 0x04 /// si tipo_tono == 0x04, se escuchará un SI + +#define DO 3.78 /// Duración del periodo en ms, que se pondrá en el Buzzer.period_ms() PARA ESCUCHAR UN DO +#define RE 3.36 /// Duración del periodo en ms, que se pondrá en el Buzzer.period_ms() PARA ESCUCHAR UN RE +#define MI 3.03 /// Duración del periodo en ms, que se pondrá en el Buzzer.period_ms() PARA ESCUCHAR UN MI +#define SI 2.82 /// Duración del periodo en ms, que se pondrá en el Buzzer.period_ms() PARA ESCUCHAR UN SI + + + + +#define limite 0.727 + +// variables de control y flujo de programa + +uint8_t programa_ejecutar = 0; // Variable que almacena la ORDEN (Telemetria ó Telecomando) + // enviada desde el CoolTerm +uint8_t coolterm_data; // Se almacenan Todos los Caracteres recividos por el CoolTerm. + + +// Constantes de velocidad + +#define VelAlta 300 +#define VelMedia 200 +#define VelBaja 100 + + +//****************************************************************************** +// COMANDOS + +#define iniciar_telemetria 0xFE +#define iniciar_telecomando 0xFF + +#define telemetria_1 0x01 // +#define telemcomando_1 0x01 + +#define C_LeerColor 0x00 +#define C_Sonido1 0x01 +#define C_Sonido2 0x02 +#define C_Sonido3 0x03 +#define C_Sonido4 0x04 +#define C_Adelante 0x05 +#define C_Atras 0x06 +#define C_Izquierda 0x07 +#define C_Derecha 0x08 +#define C_Velocidad 0x09 +#define C_Joistck 0x0A +int comando_joystick = 0; + + +// variables y constantes del Joystick + +uint8_t estado_x; +uint8_t estado_y; +#define E_Derecha 1 +#define E_Izquier 0 +#define E_Adelante 1 +#define E_Atras 0 +#define E_Centro 3 +#define Lim_JKIn 150 +#define Lim_JKSup 180 + +//**************************************************************************** +// Prototipo de funciones + +void ReadPort(void); // Lee el puerto Serial +void MainConfig(void); // Configuracion Inicial de los Perifericos del uC +void Buzzer_Tone(uint8_t tipo_tono, uint8_t duracion_tono); // configura el tono y la duracion escuchada a travez del Buzzer +void leer_color(void); // funcion que retorna los componentes + // RGB y Clear del color leido +void leer_Joystick(); // Ejerce control sobre el Movimiento del carro desde el Joistick + +//**************************************************************************** +// +#define valorInicial 0xAA +uint8_t n_interrupcion = 0; +uint8_t ComandoRecivido = valorInicial, Parametro = valorInicial; + +bool comm_pendi=false; +void ReadPort() +{ + uint8_t tm=CoolTerm.getc(); + //if(CoolTerm.writable()) CoolTerm.abort_write(); // ELIMINA LO QUE ESTEMOS ESCRIBIENDO AL COOLTERM + if (comm_pendi==false){ + switch(n_interrupcion){ + case 00: + coolterm_data = tm; + if (coolterm_data == iniciar_telecomando) + n_interrupcion=1; + break; + case 01:ComandoRecivido = tm; n_interrupcion=2; break; + case 02: + Parametro = tm; + n_interrupcion = 0; + comm_pendi=true; + break; + } + + } +// printf("%d",tm); +} + +///******************************************+ + + +void leer_Joystick() +{ + +/// Variables Joystick +float EjeX; +float EjeY; +float Vx; +float Vy; + + while (comando_joystick == 1) // + { + + EjeX = JEjeX.read(); + Vx = EjeX * 3300; + wait (0.1); + EjeY = JEjeY.read(); + Vy = EjeY * 3300; + +// CoolTerm.printf ("ejex: %f ejey: %f Vx: %f Vy: %f \n ", EjeX, EjeY, Vx, Vy); + + if(int(Vx/10) > Lim_JKIn && int(Vx/10) < Lim_JKSup) {estado_x = E_Centro; }//(CoolTerm.printf ("Estado X Centro \n"); } + if(int(Vy/10) > Lim_JKIn && int(Vy/10) < Lim_JKSup) {estado_y = E_Centro; }//CoolTerm.printf ("Estado Y Centro \n"); } + + if(int(Vx/10) > Lim_JKSup && estado_y == E_Centro){ estado_x = E_Izquier; }// CoolTerm.printf ("Estado X Izquierda\n"); } + if(int(Vy/10) > Lim_JKSup && estado_x == E_Centro){ estado_y = E_Atras; }// CoolTerm.printf ("Estado Y Adelante\n"); } + + if(int(Vx/10) < Lim_JKIn && estado_y == E_Centro){ estado_x = E_Derecha; } //CoolTerm.printf ("Estado X Derecha\n"); } + if(int(Vy/10) < Lim_JKIn && estado_x == E_Centro){ estado_y = E_Adelante; } //CoolTerm.printf ("Estado Y Atras\n"); } + + + // CoolTerm.printf ("\n\n X = %d Y = %d \n",estado_x , estado_y); + // wait(2); + // Combinacion de estados para STOP + if( estado_x == E_Centro && estado_y == E_Centro){ Motores.Stop(); CoolTerm.printf ("MOTORES STOP\n"); } + + // Combinacion de estados para ADELANTE + if(estado_x == E_Centro && estado_y == E_Adelante) { Motores.Back(); Motores.Run(1);CoolTerm.printf ("MOTORES BACK\n"); } + + // Combinacion de estados para ATRAS + if(estado_x == E_Centro && estado_y == E_Atras) { Motores.Forward(); Motores.Run(1);CoolTerm.printf ("MOTORES FORWARD\n"); } + + + // Combinacion de estados para DERECHA + if(estado_y == E_Centro && estado_x == E_Derecha) { Motores.Giro(15, false); Motores.Run(1); CoolTerm.printf ("MOTORES DERECHA\n"); } + + // Combinacion de estados para IZQUIERDA + if(estado_y == E_Centro && estado_x == E_Izquier) { Motores.Giro(15, true); Motores.Run(1); CoolTerm.printf ("MOTORES IZQUIERDA\n"); } + //wait(1.5); +} + comando_joystick = 0; + +} + + +int main() { + + CoolTerm.printf("inicio"); + Buzzer.write(0); ///configura el ciclo util + Motores.StepFreq(VelMedia); + CoolTerm.attach(&ReadPort, Serial::RxIrq); //// se Habilita la interrupcion serial o recepcion de datos + MuestrearCOLOR.attach(&leer_color, 0.6); + + //CoolTerm.printf("Hello World, System Run !!\n"); // mensaje inicial + //leer_Joystick (); + + while(1) + { + + /// Espera hasta recivir OxFF + // while(programa_ejecutar != iniciar_telecomando); + + /// Espera hasta que reciva algo diferente de 0xAA + // while(ComandoRecivido == valorInicial); + + /// Espera hasta que reciva algo diferente de 0xAA + // while(Parametro == valorInicial); + + while(comm_pendi ==false); + + printf("okey comando :%d %d ", ComandoRecivido, Parametro); + + //// Desactivamos la interrupcion serial o recepcion de datos PORQUE NO NECESITAMOS recibir mas datos por AHORA + // CoolTerm.attach(NULL, Serial::RxIrq); + comm_pendi= false; + + switch(ComandoRecivido) + { + + //case C_LeerColor: // Ejecutamos la Funcion LeerColor(); + // leer_color(); + //break; + case C_Sonido1: //CoolTerm.printf("SONIDO 1\n"); + duracion_tono = Parametro; // lo almacenamos en: duracion_tono + tipo_tono = TONO_DO; + Buzzer_Tone(tipo_tono, duracion_tono); + break; + case C_Sonido2: //CoolTerm.printf("SONIDO 2\n"); + duracion_tono = Parametro; // lo almacenamos en: duracion_tono + tipo_tono = TONO_RE; + Buzzer_Tone(tipo_tono, duracion_tono); + break; + case C_Sonido3: //CoolTerm.printf("SONIDO 3\n"); + duracion_tono = Parametro; // lo almacenamos en: duracion_tono + tipo_tono = TONO_MI; + Buzzer_Tone(tipo_tono, duracion_tono); + break; + case C_Sonido4: //CoolTerm.printf("SONIDO 4\n"); + duracion_tono = Parametro; // lo almacenamos en: duracion_tono + tipo_tono = TONO_SI; + Buzzer_Tone(tipo_tono, duracion_tono); + break; + case C_Adelante: Motores.Forward(); Motores.RunRound(Parametro); + break; + case C_Atras: Motores.Back(); Motores.RunRound(Parametro); + break; + case C_Izquierda: Motores.Giro(65, true); + break; + case C_Derecha: Motores.Giro(65, false); + break; + case C_Velocidad: if(Parametro == 0x01)Motores.StepFreq(VelBaja); + if(Parametro == 0x02)Motores.StepFreq(VelMedia); + if(Parametro == 0x03)Motores.StepFreq(VelAlta); + break; + case C_Joistck: comando_joystick = 1; leer_Joystick(); + break; + default: break; + + } + comm_pendi= false; + //CoolTerm.printf("ProgramaFinalizado!!\n"); + + // Re inicializamos nuestras variables de control a sus valores iniciales + // Para no seguir entrando a las sentencias IF +// programa_ejecutar = 0; coolterm_data = 0; + // ComandoRecivido = valorInicial; Parametro = valorInicial; + //// HABILITAMOS NUEVAMENTE la interrupcion serial o recepcion de datos + // CoolTerm.attach(&ReadPort, Serial::RxIrq); + + } + +} + + + +void Buzzer_Tone(uint8_t tipo_tono, uint8_t duracion_tono) + { + + + switch (tipo_tono) + { + + case TONO_DO: Buzzer.period_ms(DO); + //CoolTerm.printf("Tono Seleccionado DO!!\n"); + + break; // salimos del SWITCH + + case TONO_RE: Buzzer.period_ms(RE); + //CoolTerm.printf("Tono Seleccionado RE!!\n"); + + break; // salimos del SWITCH + + case TONO_MI: Buzzer.period_ms(MI); + //CoolTerm.printf("Tono Seleccionado MI!!\n"); + + break; // salimos del SWITCH + + case TONO_SI: Buzzer.period_ms(SI); + //CoolTerm.printf("Tono Seleccionado SI!!\n"); + + break; // salimos del SWITCH + + // si no fue ninguno de los valores anteriores entonces: + default: //CoolTerm.printf("teleComando desconocido, inicie nuevamente !!\n"); + + break; // salimos del SWITCH + + } + // COMO EL CICLO UTIL DEL BUZZER ESTABA EN 0, POR LO CUAL NO SONABA + // SE PONE AL 50% DEL PERIODO + Buzzer.write(0.5); + // SE ESPERA DURANTE EN TIEMPO INGRESADO (EN SEGUNDOS ) + wait(duracion_tono); + + // Se Reinicializa el Periodo y el Ciclo útil de la señal PWM + // que va al Buzzer + Buzzer.period_ms(1); + Buzzer.write(0); + + + + } + + + +void leer_color() + { + + red = SENSOR_COLOR.ReadRed(); // OBTENEMOS EL TIEMPO DEL CICLO UTIL DE LA FRECUENCIA DE SALIDA + green = SENSOR_COLOR.ReadGreen(); + blue = SENSOR_COLOR.ReadBlue(); + clear = SENSOR_COLOR.ReadClear(); + + //printf("RED: %5d GREEN: %5d BLUE: %5d CLEAR: %5d \n ", red, green, blue, clear); + + red *= 2; // Calculamos EL PERIODO de la frecuencia generada por la lectura del fotodiodo rojo + blue *= 2; // Calculamos EL PERIODO de la frecuencia generada por la lectura del fotodiodo rojo + green *= 2; // Calculamos EL PERIODO de la frecuencia generada por la lectura del fotodiodo rojo + clear *= 2; // Calculamos EL PERIODO de la frecuencia generada por la lectura del fotodiodo rojo + + //printf("RED: %5d GREEN: %5d BLUE: %5d CLEAR: %5d \n ", red, green, blue, clear); + + + ////////////////////////////////////////////////////////////// + //// identificar azul + + + if(red <=42 && red >=24) + { + if(green >= 20 && green <= 28 ) + { + if(blue >= 10 && blue <= 16) + { + color_identificado = CMD_azul; + CoolTerm.putc( iniciar_telemetria); + CoolTerm.putc( CMD_azul ); + //Buzzer.period_ms(DO); + //Buzzer.write(0.5); + //wait(4); + //Buzzer.write(0); + + } + } + } + + + + + ///////////////////////////////////////////////////////////// + /// identificar rojo + if(red <= 12 ) + { + if(green >= 10 && green <= 28 ) + { + if(blue >= 18 && blue <= 24) + { + color_identificado = CMD_rojo; + CoolTerm.putc( iniciar_telemetria); + CoolTerm.putc( CMD_rojo ); + //Buzzer.period_ms(RE); + //Buzzer.write(0.5); //PERIODO UTIL + //wait(4); //TIEMPO ACTIVO DEL BUZZER + //Buzzer.write(0.0); + } + } + + if(green < 10 && green >= 6 ) + { + if(blue <= 12 ) + { + color_identificado = CMD_clear; + CoolTerm.putc( iniciar_telemetria); + CoolTerm.putc( CMD_clear ); + //Buzzer.period_ms(MI); + //Buzzer.write(0.5); + //wait(4); + //Buzzer.write(0); + } + + } + + } + + + if(green >= 36 && green <= 44 ) + { + if(red >= 40 && red <= 50 ) + + { + color_identificado = CMD_verde; + CoolTerm.putc( iniciar_telemetria); + CoolTerm.putc( CMD_verde ); + //Buzzer.period_ms(SI); + //Buzzer.write(0.5); + //wait(4); + //Buzzer.write(0); + + + } + } + + if (color_identificado == ColorNoIdentificado) + { + + + CoolTerm.putc( iniciar_telemetria); + CoolTerm.putc( ColorNoIdentificado); + //Buzzer.period_ms(10); + //Buzzer.write(0.5); + //wait(4); + //Buzzer.write(0); + + + } + + color_identificado = ColorNoIdentificado; + } + +
diff -r 000000000000 -r 3a420fc22672 main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Fri Sep 03 05:26:27 2021 +0000 @@ -0,0 +1,647 @@ +#include "mbed.h" +#include "Motor.h" +#include "scolor_TCS3200.h" + +#include "Arial12x12.h" +#include "Arial24x23.h" +#include "Arial43x48_numb.h" +#include "pict.h" +#include "pavement_48x34.h" +#include "ILI9341.h" + +// Puerto de comunicacion Serial +Serial CoolTerm(USBTX, USBRX); + +// TFT +ILI9341* tft; + +// Motores m1step +TraccionD Motores(PB_5, PB_3, PB_10, PB_4, 200, 3.75, 15.5) ; + +/// PWM OUTPUTS +PwmOut Buzzer(D14); // LED1 + +// Temporizadores +Ticker MuestrearCOLOR; + +// SENSOR DE COLOR +scolor_TCS3200 SENSOR_COLOR (PA_9, PC_7, PB_6, PA_7, PA_8); + + +// Lecturas Analogas de Joystick +AnalogIn JEjeX(A0); +AnalogIn JEjeY(A1); + + +// Salidas digitales +DigitalOut LED(PA_5); + + +// Interrupcion Externa +InterruptIn button1(USER_BUTTON); + + +//****************************************************************************** +/// Declarar Variables Globales + + + + +/// Variables sensor de color +long red; //Almacenan el Tiempo que dura el CicloUtil de la frecuencia +long blue; //Generada por el Sensor TSC3200, al leer el componente +long green; //R, G, B o Clear del color que tenga en Frente +long clear; + + + +/// Variables y Constantes para Interrupcion Serial +#define valorInicial 0xAA +uint8_t n_interrupcion = 0; +uint8_t ComandoRecivido = valorInicial; +uint8_t Parametro = valorInicial; + + +/// Constantes Sensor de Color +#define CMD_rojo 0x01 +#define CMD_azul 0x02 +#define CMD_verde 0x03 +#define CMD_clear 0x04 +#define ColorNoIdentificado 0x00 + + +uint8_t color_identificado = ColorNoIdentificado; +uint8_t color_anterior = 0; + + +/// Varialbles Buzzer +uint8_t duracion_tono = 1; // Variable que almacena el Tiempo que es ESCUCHARÁ el Tono +uint8_t tipo_tono = 1; // Variable que almacena el Tono que se desee escuchar + +/// Constantes Buzzer +#define TONO_DO 0x01 /// si tipo_tono == 0x01, se escuchará un DO +#define TONO_RE 0x02 /// si tipo_tono == 0x02, se escuchará un RE +#define TONO_MI 0x03 /// si tipo_tono == 0x03, se escuchará un MI +#define TONO_SI 0x04 /// si tipo_tono == 0x04, se escuchará un SI + +#define DO 3.78 /// Duración del periodo en ms, que se pondrá en el Buzzer.period_ms() PARA ESCUCHAR UN DO +#define RE 3.36 /// Duración del periodo en ms, que se pondrá en el Buzzer.period_ms() PARA ESCUCHAR UN RE +#define MI 3.03 /// Duración del periodo en ms, que se pondrá en el Buzzer.period_ms() PARA ESCUCHAR UN MI +#define SI 2.82 /// Duración del periodo en ms, que se pondrá en el Buzzer.period_ms() PARA ESCUCHAR UN SI + +Timeout TimeBuzzer; + + +#define limite 0.727 + +// variables de control y flujo de programa + +uint8_t programa_ejecutar = 0; // Variable que almacena la ORDEN (Telemetria ó Telecomando) + // enviada desde el CoolTerm +uint8_t coolterm_data; // Se almacenan Todos los Caracteres recividos por el CoolTerm. + +uint8_t new_command = 0; +// Constantes de velocidad + +#define VelAlta 300 +#define VelMedia 200 +#define VelBaja 100 + + +//****************************************************************************** +// COMANDOS + +#define iniciar_telemetria 0xFE +#define iniciar_telecomando 0xFF + +#define telemetria_1 0x01 // +#define telemcomando_1 0x01 + +#define C_LeerColor 0x00 +#define C_Sonido1 0x01 +#define C_Sonido2 0x02 +#define C_Sonido3 0x03 +#define C_Sonido4 0x04 +#define C_Adelante 0x05 +#define C_Atras 0x06 +#define C_Izquierda 0x07 +#define C_Derecha 0x08 +#define C_Velocidad 0x09 +#define C_Joistck 0x0A + +int comando_joystick = 0; + + +// variables y constantes del Joystick + +uint8_t estado_x; +uint8_t estado_y; +#define E_Derecha 1 +#define E_Izquier 0 +#define E_Adelante 1 +#define E_Atras 0 +#define E_Centro 3 +#define Lim_JKIn 150 +#define Lim_JKSup 180 + + + +// Variables y constantes pulsador +volatile bool button1_pressed = false; // Used in the main loop +volatile bool button1_enabled = true; // Used for debouncing +Timeout button1_timeout; // Used for debouncing + + + +bool ComandPend = true; + +//**************************************************************************** +// Prototipo de funciones +void Configuracion_Inicial(void); +void ReadPort(void); // Lee el puerto Serial +void MainConfig(void); // Configuracion Inicial de los Perifericos del uC +void Buzzer_Tone(uint8_t tipo_tono, uint8_t duracion_tono); // configura el tono y la duracion escuchada a travez del Buzzer +void leer_color(void); // funcion que retorna los componentes + // RGB y Clear del color leido +void leer_Joystick(void); // Ejerce control sobre el Movimiento del carro desde el Joistick +void intTimeBuzzer(void); + +void button1_enabled_cb(void); +void button1_onpressed_cb(void); + + +//**************************************************************************** +// + +/// Variables y constantes para la TFT + +const unsigned short FOREGROUND_COLORS[] = {White, Cyan, Red, Magenta, Yellow, Orange, GreenYellow}; +const unsigned short BACKGROUND_COLORS[] = {Black, Green, Yellow, Blue, Magenta, Black, Red}; +unsigned short backgroundColor; +unsigned short foregroundColor; +unsigned short colorIndex = 0; +char orient = 1; + + +void Configuracion_Inicial() +{ + + Buzzer.write(0); // configura el ciclo util + Motores.StepFreq(VelMedia); // Valor inicial de velocidad = Media + CoolTerm.attach(&ReadPort, Serial::RxIrq); // Se Habilita la interrupcion serial o recepcion de datos + //MuestrearCOLOR.attach(&leer_color, 0.6); // Se Habilita una interrupcion cada 0.6 Segundos para leer el color + tft = new ILI9341(SPI_8, 10000000, PC_12, PC_11, PC_10, PA_13, PA_14, PA_15, "tft"); // SPI type, SPI speed, mosi, miso, sclk, cs, reset, dc + tft->set_orientation(orient); // horizontal 1 + + CoolTerm.baud(115200); + //CoolTerm.printf("\n\nSystem Core Clock = %.3f MHZ\r\n",(float)SystemCoreClock/1000000); + //tft->printf("\n\nSystem Core Clock = %.3f MHZ\r\n",(float)SystemCoreClock/1000000); + foregroundColor = FOREGROUND_COLORS[0]; // white + backgroundColor = BACKGROUND_COLORS[0];// DarkCyan + + tft->background(backgroundColor); // set background to black + tft->set_orientation(orient); + tft->cls(); // clear the screen + + + + + + tft->set_font((unsigned char*) Arial24x23,32,127,false); //variable width disabled + tft->locate(80,80); + tft->printf("COLOR \n\t\t NO \n\tIDENTIFICADO \r\n"); + + + //button1.mode(PullUp); // Activate pull-up + button1.fall(callback(button1_onpressed_cb)); // Attach ISR to handle button press event + + +} + + + + + + +// Enables button when bouncing is over +void button1_enabled_cb(void) +{ + button1_enabled = true; + if (button1_enabled) + { + // Reinicializamos nuestras variables de control a sus valores iniciales + // Para no seguir entrando a las sentencias IF + programa_ejecutar = 0; + coolterm_data = 0; + ComandoRecivido = valorInicial; + Parametro = valorInicial; + Motores.Stop(); + TimeBuzzer.attach(&intTimeBuzzer, 0); + ComandPend = false; + } +} + +// ISR handling button pressed event +void button1_onpressed_cb(void) +{ + if (button1_enabled) + { // Disabled while the button is bouncing + button1_enabled = false; + button1_pressed = true; // To be read by the main loop + button1_timeout.attach(callback(button1_enabled_cb), 0.3); // Debounce time 300 ms + } + + + +} + + + + +void ReadPort() +{ + uint8_t temp = CoolTerm.getc(); + //if(CoolTerm.writable()) CoolTerm.abort_write(); // ELIMINA LO QUE ESTEMOS ESCRIBIENDO AL COOLTERM + if (ComandPend == true) + { + switch(n_interrupcion) + { + case 00: coolterm_data = temp; + if (coolterm_data == iniciar_telecomando) + n_interrupcion = 1; + break; + case 01: ComandoRecivido = temp; + n_interrupcion=2; + break; + case 02: Parametro = temp; + n_interrupcion = 0; + ComandPend=false; + break; + + } + + } + + +} + +///******************************************+ + + +void leer_Joystick() +{ + + /// Variables Joystick + float EjeX; + float EjeY; + float Vx; + float Vy; + + while ( ComandPend == true ) + { + + EjeX = JEjeX.read(); + Vx = EjeX * 3300; + wait (0.1); + EjeY = JEjeY.read(); + Vy = EjeY * 3300; + + // CoolTerm.printf ("ejex: %f ejey: %f Vx: %f Vy: %f \n ", EjeX, EjeY, Vx, Vy); + + if(int(Vx/10) > Lim_JKIn && int(Vx/10) < Lim_JKSup) {estado_x = E_Centro; }//(CoolTerm.printf ("Estado X Centro \n"); } + if(int(Vy/10) > Lim_JKIn && int(Vy/10) < Lim_JKSup) {estado_y = E_Centro; }//CoolTerm.printf ("Estado Y Centro \n"); } + + if(int(Vx/10) > Lim_JKSup && estado_y == E_Centro){ estado_x = E_Izquier; }// CoolTerm.printf ("Estado X Izquierda\n"); } + if(int(Vy/10) > Lim_JKSup && estado_x == E_Centro){ estado_y = E_Atras; }// CoolTerm.printf ("Estado Y Adelante\n"); } + + if(int(Vx/10) < Lim_JKIn && estado_y == E_Centro){ estado_x = E_Derecha; } //CoolTerm.printf ("Estado X Derecha\n"); } + if(int(Vy/10) < Lim_JKIn && estado_x == E_Centro){ estado_y = E_Adelante; } //CoolTerm.printf ("Estado Y Atras\n"); } + + + // Combinacion de estados para STOP + if( estado_x == E_Centro && estado_y == E_Centro){ Motores.Stop(); }//CoolTerm.printf ("MOTORES STOP\n"); } + + // Combinacion de estados para ADELANTE + if(estado_x == E_Centro && estado_y == E_Adelante) { Motores.Back(); Motores.Run(0.5); }// CoolTerm.printf ("MOTORES BACK\n"); } + + // Combinacion de estados para ATRAS + if(estado_x == E_Centro && estado_y == E_Atras) { Motores.Forward(); Motores.Run(0.5); }// CoolTerm.printf ("MOTORES FORWARD\n"); } + + + // Combinacion de estados para DERECHA + if(estado_y == E_Centro && estado_x == E_Derecha) { Motores.Giro(15, false); Motores.Run(0.5); } // CoolTerm.printf ("MOTORES DERECHA\n"); } + + // Combinacion de estados para IZQUIERDA + if(estado_y == E_Centro && estado_x == E_Izquier) { Motores.Giro(15, true); Motores.Run(0.5); } // CoolTerm.printf ("MOTORES IZQUIERDA\n"); } + //wait(1.5); + + if (ComandoRecivido == C_Joistck && Parametro == 0x02) break; + } + + +} + + + +int main() +{ + + Configuracion_Inicial(); + + MuestrearCOLOR.attach(&leer_color, 1.5); // Se Habilita una interrupcion cada 0.6 Segundos para leer el color + + while(1) + { + + /// Espera hasta que no se tengan comandos pendientes + while(ComandPend == true)wait_ms(1); + ComandPend = true; + + + // Desactivamos la interrupcion serial o recepcion de datos PORQUE NO NECESITAMOS recibir mas datos por AHORA + // CoolTerm.attach(NULL, Serial::RxIrq); + + switch(ComandoRecivido) + { + + //case C_LeerColor: // Ejecutamos la Funcion LeerColor(); + // leer_color(); + //break; + case C_Sonido1: //CoolTerm.printf("SONIDO 1\n"); + duracion_tono = Parametro; // lo almacenamos en: duracion_tono + tipo_tono = TONO_DO; + Buzzer_Tone(tipo_tono, duracion_tono); + break; + case C_Sonido2: //CoolTerm.printf("SONIDO 2\n"); + duracion_tono = Parametro; // lo almacenamos en: duracion_tono + tipo_tono = TONO_RE; + Buzzer_Tone(tipo_tono, duracion_tono); + break; + case C_Sonido3: //CoolTerm.printf("SONIDO 3\n"); + duracion_tono = Parametro; // lo almacenamos en: duracion_tono + tipo_tono = TONO_MI; + Buzzer_Tone(tipo_tono, duracion_tono); + break; + case C_Sonido4: //CoolTerm.printf("SONIDO 4\n"); + duracion_tono = Parametro; // lo almacenamos en: duracion_tono + tipo_tono = TONO_SI; + Buzzer_Tone(tipo_tono, duracion_tono); + break; + case C_Adelante: Motores.Forward(); Motores.RunRound(Parametro); + break; + case C_Atras: Motores.Back(); Motores.RunRound(Parametro); + break; + case C_Izquierda: Motores.Giro(65, true); + break; + case C_Derecha: Motores.Giro(65, false); + break; + case C_Velocidad: if(Parametro == 0x01)Motores.StepFreq(VelBaja); + if(Parametro == 0x02)Motores.StepFreq(VelMedia); + if(Parametro == 0x03)Motores.StepFreq(VelAlta); + break; + case C_Joistck: leer_Joystick(); + break; + default: break; + + + } + + + // Reinicializamos nuestras variables de control a sus valores iniciales + // Para no seguir entrando a las sentencias IF + if(ComandPend == true) + { + programa_ejecutar = 0; + coolterm_data = 0; + ComandoRecivido = valorInicial; Parametro = valorInicial; + + } + + //// HABILITAMOS NUEVAMENTE la interrupcion serial o recepcion de datos + // CoolTerm.attach(&ReadPort, Serial::RxIrq); + + } + +} + + + +void Buzzer_Tone(uint8_t tipo_tono, uint8_t duracion_tono) + { + + + switch (tipo_tono) + { + + case TONO_DO: Buzzer.period_ms(DO); + //CoolTerm.printf("Tono Seleccionado DO!!\n"); + + break; // salimos del SWITCH + + case TONO_RE: Buzzer.period_ms(RE); + //CoolTerm.printf("Tono Seleccionado RE!!\n"); + + break; // salimos del SWITCH + + case TONO_MI: Buzzer.period_ms(MI); + //CoolTerm.printf("Tono Seleccionado MI!!\n"); + + break; // salimos del SWITCH + + case TONO_SI: Buzzer.period_ms(SI); + //CoolTerm.printf("Tono Seleccionado SI!!\n"); + + break; // salimos del SWITCH + + // si no fue ninguno de los valores anteriores entonces: + default: //CoolTerm.printf("teleComando desconocido, inicie nuevamente !!\n"); + + break; // salimos del SWITCH + + } + + // COMO EL CICLO UTIL DEL BUZZER ESTABA EN 0, POR LO CUAL NO SONABA + // SE PONE AL 50% DEL PERIODO + Buzzer.write(0.5); + // SE ESPERA DURANTE EN TIEMPO INGRESADO (EN SEGUNDOS ) + // wait(duracion_tono); + + TimeBuzzer.attach(&intTimeBuzzer, duracion_tono); + + // Se Reinicializa el Periodo y el Ciclo útil de la señal PWM + // que va al Buzzer + // Buzzer.period_ms(1); + // Buzzer.write(0); + + + + } + + + +void intTimeBuzzer(void) +{ + + // Se Reinicializa el Periodo y el Ciclo útil de la señal PWM + // que va al Buzzer + Buzzer.period_ms(1); + Buzzer.write(0); + + + } + + +void leer_color() + { + MuestrearCOLOR.attach(NULL, 1.5); // Se Habilita una interrupcion cada 0.6 Segundos para leer el color + + red = SENSOR_COLOR.ReadRed(); // OBTENEMOS EL TIEMPO DEL CICLO UTIL DE LA FRECUENCIA DE SALIDA + green = SENSOR_COLOR.ReadGreen(); + blue = SENSOR_COLOR.ReadBlue(); + clear = SENSOR_COLOR.ReadClear(); + + //printf("RED: %5d GREEN: %5d BLUE: %5d CLEAR: %5d \n ", red, green, blue, clear); + + red *= 2; // Calculamos EL PERIODO de la frecuencia generada por la lectura del fotodiodo rojo + blue *= 2; // Calculamos EL PERIODO de la frecuencia generada por la lectura del fotodiodo rojo + green *= 2; // Calculamos EL PERIODO de la frecuencia generada por la lectura del fotodiodo rojo + clear *= 2; // Calculamos EL PERIODO de la frecuencia generada por la lectura del fotodiodo rojo + + //printf("RED: %5d GREEN: %5d BLUE: %5d CLEAR: %5d \n ", red, green, blue, clear); + + + ////////////////////////////////////////////////////////////// + //// identificar azul + + + if(red <=42 && red >=24) + { + if(green >= 20 && green <= 28 ) + { + if(blue >= 10 && blue <= 16) + { + color_identificado = CMD_azul; + CoolTerm.putc( iniciar_telemetria); + CoolTerm.putc( CMD_azul ); + if (color_anterior != CMD_azul) + { + foregroundColor = FOREGROUND_COLORS[0]; // white + backgroundColor = BACKGROUND_COLORS[3];// DarkCyan + tft->background(backgroundColor); // set background to black + tft->set_font((unsigned char*) Arial24x23,32,127,false); //variable width disabled + tft->cls(); + tft->locate(80,80); + tft->printf("COLOR \n\tAZUL\r\n"); + + } + color_anterior = CMD_azul; + + } + } + } + + + + + ///////////////////////////////////////////////////////////// + /// identificar rojo + if(red <= 12 ) + { + if(green >= 10 && green <= 28 ) + { + if(blue >= 18 && blue <= 24) + { + color_identificado = CMD_rojo; + CoolTerm.putc( iniciar_telemetria); + CoolTerm.putc( CMD_rojo ); + + if (color_anterior != CMD_rojo) + { + foregroundColor = FOREGROUND_COLORS[0]; // white + backgroundColor = BACKGROUND_COLORS[6];// DarkCyan + tft->background(backgroundColor); // set background to black + tft->set_font((unsigned char*) Arial24x23,32,127,false); //variable width disabled + tft->cls(); + tft->locate(80,80); + tft->printf("COLOR \n\tROJO\r\n"); + } + color_anterior = CMD_rojo; + } + } + + if(green < 10 && green >= 6 ) + { + if(blue <= 12 ) + { + color_identificado = CMD_clear; + CoolTerm.putc( iniciar_telemetria); + CoolTerm.putc( CMD_clear ); + if (color_anterior != CMD_clear) + { + foregroundColor = FOREGROUND_COLORS[0]; // white + backgroundColor = BACKGROUND_COLORS[2];// DarkCyan + tft->background(backgroundColor); // set background to black + tft->set_font((unsigned char*) Arial24x23,32,127,false); //variable width disabled + tft->cls(); + tft->locate(80,80); + tft->printf("COLOR \n\tAMARILLO\r\n"); + } + color_anterior = CMD_clear; + + } + + } + + } + + + if(green >= 36 && green <= 44 ) + { + if(red >= 40 && red <= 50 ) + + { + color_identificado = CMD_verde; + CoolTerm.putc( iniciar_telemetria); + CoolTerm.putc( CMD_verde ); + if (color_anterior != CMD_verde) + { + foregroundColor = FOREGROUND_COLORS[0]; // white + backgroundColor = BACKGROUND_COLORS[1];// DarkCyan + tft->background(backgroundColor); // set background to black + tft->set_font((unsigned char*) Arial24x23,32,127,false); //variable width disabled + tft->cls(); + tft->locate(80,80); + tft->printf("COLOR \n\tVERDE\r\n"); + } + color_anterior = CMD_verde; + } + } + + if (color_identificado == ColorNoIdentificado) + { + + + CoolTerm.putc( iniciar_telemetria); + CoolTerm.putc( ColorNoIdentificado); + + if (color_anterior != ColorNoIdentificado) + { + foregroundColor = FOREGROUND_COLORS[0]; // white + backgroundColor = BACKGROUND_COLORS[5];// DarkCyan + tft->background(backgroundColor); // set background to black + tft->set_font((unsigned char*) Arial24x23,32,127,false); //variable width disabled + tft->cls(); + tft->locate(80,80); + tft->printf("COLOR \n\t\t NO \n\tIDENTIFICADO \r\n"); + } + color_anterior = ColorNoIdentificado; + + } + + color_identificado = ColorNoIdentificado; + + MuestrearCOLOR.attach(&leer_color, 1.5); // Se Habilita una interrupcion cada 0.6 Segundos para leer el color + } + + +
diff -r 000000000000 -r 3a420fc22672 mbed.bld --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Fri Sep 03 05:26:27 2021 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/mbed_official/code/mbed/builds/65be27845400 \ No newline at end of file
diff -r 000000000000 -r 3a420fc22672 pavement_48x34.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pavement_48x34.h Fri Sep 03 05:26:27 2021 +0000 @@ -0,0 +1,210 @@ +__align(2) +const unsigned char pavement_48x34[] = { /* 0X40,0X10,0X30,0X00,0X22,0X00,0X01,0X1B, */ +0X0F,0XB4,0XCD,0XB3,0XAD,0XAB,0X6D,0XA3,0XCB,0X82,0X6D,0X9B,0X6D,0X9B,0X4C,0X9B, +0X0B,0X8B,0X48,0X62,0X4C,0X93,0XAD,0XA3,0XAE,0XA3,0X6C,0X9B,0X4C,0X93,0X0B,0X7B, +0X8D,0X9B,0X4C,0X93,0XEB,0X82,0XEB,0X7A,0X8A,0X6A,0X6A,0X6A,0XCB,0X72,0XEB,0X7A, +0X0B,0X83,0X4C,0X8B,0XAE,0X93,0XEE,0X9B,0XAE,0XA3,0XAE,0XA3,0XAE,0X9B,0XCE,0XA3, +0XCE,0XAB,0XCA,0X6A,0X30,0X8C,0X71,0X94,0X71,0X94,0X31,0X8C,0XF0,0X83,0X10,0X8C, +0XEF,0X83,0XD3,0XA4,0X51,0X94,0X71,0X94,0X0B,0X63,0X4C,0X93,0X0B,0X8B,0X50,0XB4, +0X0E,0XBC,0XAD,0XAB,0X8D,0XA3,0XAD,0XAB,0X6C,0X9B,0X0F,0XAC,0XEE,0XAB,0X8D,0XA3, +0X4C,0X93,0XAA,0X6A,0X6D,0X8B,0XAE,0XA3,0XAD,0XAB,0XCE,0XAB,0X2C,0X8B,0XAE,0X9B, +0X6D,0X9B,0X2C,0X8B,0XCB,0X7A,0XCA,0X72,0XCB,0X72,0X49,0X5A,0XAA,0X6A,0X0C,0X73, +0XEB,0X7A,0X6C,0X93,0X4C,0X93,0X8D,0X9B,0XCE,0XA3,0X8D,0XA3,0XAD,0XA3,0XCE,0XAB, +0X2F,0XB4,0X4C,0X7B,0X51,0X8C,0X51,0X94,0X10,0X8C,0XF0,0X83,0X10,0X84,0X30,0X8C, +0X51,0X94,0X92,0X9C,0X30,0X94,0X10,0X84,0X2C,0X6B,0X2C,0X8B,0XCE,0XAB,0X2F,0XBC, +0XCE,0XB3,0XCE,0XAB,0XAD,0XAB,0XAD,0XAB,0X8D,0XA3,0XEF,0XAB,0XEE,0XAB,0XCE,0XA3, +0X8D,0X9B,0X07,0X52,0XAE,0X9B,0X2F,0XB4,0XCE,0XAB,0XAE,0XA3,0X6D,0X93,0X4C,0X93, +0X6D,0X9B,0X0B,0X83,0X2C,0X83,0X2C,0X83,0XEB,0X7A,0X6A,0X62,0XAA,0X6A,0X8E,0X8B, +0X4D,0X83,0X4C,0X93,0X0B,0X8B,0X2C,0X8B,0X4C,0X93,0X8D,0X9B,0XCE,0XA3,0XAE,0XA3, +0X70,0XC4,0XAA,0X62,0X31,0X8C,0X71,0X94,0XCF,0X83,0XAE,0X7B,0XCF,0X7B,0XCF,0X83, +0XEF,0X83,0XAF,0X7B,0XEF,0X83,0X10,0X8C,0X2C,0X6B,0X6D,0X9B,0XCE,0XAB,0XEE,0XB3, +0X8D,0XAB,0X6C,0X9B,0X4C,0X9B,0XCE,0XB3,0XAE,0XAB,0X8D,0XA3,0XEE,0XAB,0X8D,0XA3, +0XAD,0XA3,0XAA,0X6A,0XF3,0XC4,0X0F,0XAC,0XAE,0XA3,0X6D,0X93,0X0B,0X83,0X8D,0X9B, +0X6D,0X93,0XEF,0XA3,0X6D,0X93,0X2C,0X8B,0XEC,0X72,0XAB,0X62,0X0C,0X73,0X6D,0X83, +0X8D,0X8B,0X8D,0X9B,0X4C,0X8B,0X2C,0X8B,0XEB,0X82,0X2C,0X93,0X6D,0X9B,0XEE,0XAB, +0X12,0XCD,0X28,0X4A,0XF0,0X83,0X10,0X84,0XCF,0X83,0XCF,0X7B,0XF0,0X83,0XF0,0X83, +0XEF,0X83,0XF0,0X83,0XCF,0X83,0X10,0X8C,0X2B,0X6B,0XAE,0X93,0XCE,0XAB,0XAD,0XAB, +0XEF,0XAB,0XAE,0X9B,0XEE,0XAB,0XCE,0XA3,0XAE,0XA3,0XCE,0XAB,0XCE,0XA3,0XCE,0XA3, +0XB1,0XBC,0X65,0X39,0X08,0X52,0XCB,0X72,0X6D,0X93,0X4D,0X93,0X2C,0X8B,0X4C,0X8B, +0X8D,0X9B,0X6D,0X93,0X4C,0X93,0X4D,0X8B,0X6A,0X62,0X8A,0X5A,0XCB,0X72,0X0C,0X73, +0X6D,0X83,0X4C,0X83,0XAA,0X62,0X0C,0X73,0X89,0X62,0XCB,0X72,0XEB,0X7A,0X2C,0X83, +0X86,0X39,0XE3,0X20,0X6E,0X73,0X51,0X94,0XF0,0X83,0X31,0X8C,0X10,0X84,0XCF,0X83, +0XEF,0X8B,0X51,0X94,0XF0,0X83,0X51,0X94,0X2C,0X6B,0X49,0X5A,0XCE,0XA3,0XAE,0XA3, +0XAB,0X62,0XCF,0X8B,0X62,0X10,0XC3,0X18,0XE8,0X49,0XAB,0X62,0X29,0X52,0XC7,0X39, +0X08,0X4A,0X08,0X42,0XA7,0X39,0XCB,0X62,0X08,0X4A,0XC3,0X20,0X05,0X29,0X86,0X39, +0X6A,0X52,0X6A,0X5A,0XE8,0X41,0X86,0X39,0X08,0X42,0X49,0X52,0X44,0X29,0X25,0X29, +0X08,0X52,0XE7,0X51,0X8A,0X6A,0XA6,0X41,0XC7,0X51,0X08,0X5A,0X28,0X62,0XAA,0X72, +0X89,0X72,0X28,0X62,0XAA,0X72,0X65,0X39,0X46,0X29,0XEC,0X62,0X6A,0X52,0X49,0X4A, +0X8A,0X5A,0X4D,0X73,0XEC,0X6A,0X08,0X4A,0XAB,0X5A,0XA7,0X39,0XCB,0X62,0X4D,0X73, +0XCF,0X83,0X71,0X9C,0X45,0X29,0XC8,0X39,0XCF,0X83,0X0F,0X8C,0X30,0X8C,0X30,0X8C, +0XCF,0X83,0XAE,0X7B,0X8E,0X7B,0X8E,0X7B,0X6D,0X7B,0X82,0X10,0XCB,0X62,0X6D,0X73, +0X2C,0X6B,0XCB,0X62,0XAB,0X5A,0XEB,0X62,0X4D,0X73,0X2C,0X6B,0X8A,0X52,0XEB,0X7A, +0X0B,0X83,0X4C,0X8B,0X4C,0X93,0X6D,0X93,0X4C,0X93,0XAE,0XA3,0X0E,0XAC,0XAD,0XA3, +0X8C,0XA3,0X6C,0X9B,0X4C,0X93,0XA9,0X72,0X8B,0X5A,0X30,0X8C,0X10,0X8C,0XB2,0XA4, +0X91,0X9C,0X91,0X9C,0X71,0X94,0XEF,0X83,0X6D,0X7B,0X10,0X8C,0X91,0X9C,0X50,0X9C, +0XCF,0X8B,0XAE,0X83,0XE7,0X41,0X30,0X8C,0X50,0X94,0X30,0X8C,0X30,0X94,0X0F,0X8C, +0X6D,0X73,0X6D,0X73,0X6D,0X73,0XEF,0X83,0XCF,0X83,0XC3,0X18,0X6D,0X73,0X4D,0X73, +0X6D,0X73,0X0C,0X6B,0XEC,0X6A,0X0C,0X6B,0X2C,0X6B,0X4D,0X73,0X89,0X5A,0XEB,0X7A, +0X0B,0X83,0X0B,0X7B,0XEB,0X82,0X0B,0X83,0X2C,0X93,0X2F,0XB4,0XCE,0XAB,0XAD,0XA3, +0X6C,0XA3,0XEB,0X8A,0X6C,0X9B,0X47,0X5A,0X50,0X94,0X71,0X9C,0X71,0X94,0X91,0X9C, +0XD2,0XA4,0X91,0X9C,0X10,0X8C,0X10,0X8C,0X30,0X94,0X71,0X9C,0X71,0X9C,0X30,0X94, +0X0F,0X8C,0X0F,0X94,0X69,0X52,0XEF,0X8B,0X10,0X8C,0X30,0X8C,0XCE,0X83,0XCE,0X83, +0XAE,0X7B,0XEF,0X83,0XCF,0X83,0X30,0X8C,0X0F,0X8C,0X45,0X29,0X6D,0X73,0X2C,0X6B, +0X2C,0X6B,0X2D,0X73,0X2C,0X73,0X2C,0X6B,0X2C,0X73,0X2C,0X6B,0X8A,0X5A,0XCB,0X7A, +0X0B,0X7B,0XCF,0X9B,0X6D,0X93,0XAD,0X9B,0X8D,0X9B,0XAD,0XA3,0XAD,0XA3,0XCE,0XAB, +0X4C,0X9B,0X2C,0X93,0X70,0XB4,0X88,0X62,0X10,0X8C,0X51,0X94,0X71,0X94,0X91,0X9C, +0X91,0X9C,0X92,0X9C,0X51,0X94,0X0F,0X8C,0X51,0X94,0X71,0X9C,0X30,0X94,0X50,0X94, +0XEF,0X8B,0XCE,0X8B,0X28,0X4A,0XEF,0X8B,0XEF,0X8B,0XEF,0X8B,0X8E,0X7B,0XAF,0X83, +0XCF,0X83,0XEF,0X8B,0X30,0X8C,0XEF,0X8B,0XAE,0X7B,0X44,0X29,0X2C,0X6B,0X4D,0X73, +0X6D,0X73,0X2C,0X6B,0XAB,0X62,0XAA,0X5A,0X8E,0X7B,0XCF,0X83,0X69,0X52,0XCA,0X7A, +0X4C,0X8B,0XAD,0X9B,0XAD,0XA3,0X8D,0X9B,0X6C,0X9B,0X8D,0X93,0XCE,0XAB,0XCE,0XAB, +0X8D,0XA3,0XAD,0XAB,0X0F,0XB4,0XA9,0X6A,0XF0,0X8B,0X92,0X9C,0X71,0X9C,0X50,0X94, +0X51,0X94,0X91,0X9C,0X51,0X94,0X30,0X8C,0XD2,0XA4,0XB2,0XA4,0X91,0X9C,0X50,0X9C, +0X6E,0X7B,0XAE,0X8B,0X08,0X42,0X50,0X94,0X51,0X94,0XAE,0X7B,0X8E,0X7B,0X10,0X8C, +0X50,0X94,0X30,0X8C,0XEF,0X83,0XCE,0X83,0X10,0X8C,0X65,0X31,0XAB,0X5A,0X8E,0X7B, +0X4D,0X73,0X0C,0X6B,0XCB,0X62,0XCB,0X62,0XAE,0X7B,0X8E,0X7B,0XCB,0X62,0X0B,0X83, +0X4C,0X8B,0X6C,0X93,0X8D,0X9B,0X4C,0X93,0X2C,0X8B,0XEE,0XA3,0X0E,0XB4,0XCD,0XAB, +0XCD,0XA3,0XCE,0XAB,0XEE,0XB3,0XA9,0X72,0X10,0X8C,0X51,0X94,0X30,0X94,0XF0,0X8B, +0X71,0X9C,0X30,0X94,0X51,0X94,0X30,0X94,0XB2,0XA4,0X91,0X9C,0X91,0XA4,0X10,0X8C, +0XAE,0X7B,0X50,0X9C,0X69,0X52,0XD2,0XA4,0X30,0X94,0X10,0X8C,0X51,0X94,0XEF,0X8B, +0XEF,0X83,0XAE,0X7B,0XAE,0X7B,0XEF,0X83,0X10,0X8C,0X08,0X42,0X6D,0X7B,0XAE,0X83, +0X6D,0X73,0X0C,0X6B,0X0C,0X6B,0XEC,0X6A,0X2C,0X6B,0X2C,0X73,0X4D,0X73,0X2D,0X83, +0X6D,0X8B,0X6D,0X93,0X2C,0X8B,0X4C,0X8B,0XAD,0X9B,0XEE,0XAB,0XEE,0XAB,0X8C,0XA3, +0X4C,0X9B,0X8D,0XA3,0XCE,0XB3,0XAA,0X72,0X0C,0X6B,0X71,0X94,0X30,0X8C,0X30,0X8C, +0XEF,0X8B,0X10,0X8C,0X51,0X9C,0X51,0X9C,0X71,0X9C,0X51,0X9C,0X30,0X94,0XAE,0X83, +0X30,0X94,0X91,0XA4,0X4C,0X73,0X71,0X9C,0X0F,0X8C,0XCF,0X83,0XCF,0X83,0X30,0X8C, +0XCF,0X83,0X6D,0X73,0XEF,0X83,0XCF,0X83,0XAE,0X83,0X66,0X31,0X6D,0X73,0XAE,0X83, +0X2C,0X6B,0X4D,0X73,0X6D,0X7B,0X4D,0X7B,0XEB,0X62,0X8E,0X7B,0XEE,0X8B,0X66,0X39, +0X2C,0X83,0X2C,0X83,0X2C,0X83,0XCE,0X9B,0XCE,0XA3,0X0F,0XAC,0XEF,0XAB,0X0B,0X8B, +0X8D,0X9B,0X2F,0XB4,0XCD,0XB3,0XEA,0X7A,0XCF,0X83,0X30,0X8C,0XEF,0X8B,0X51,0X94, +0X30,0X94,0X92,0X9C,0X51,0X9C,0X30,0X94,0X10,0X8C,0X30,0X94,0X91,0X9C,0X10,0X8C, +0XCF,0X83,0X71,0X9C,0X69,0X52,0X30,0X8C,0XCF,0X83,0XCF,0X83,0XCF,0X83,0XEF,0X8B, +0X10,0X8C,0XEF,0X83,0X10,0X8C,0X10,0X8C,0XAE,0X7B,0X04,0X21,0XAE,0X83,0X6D,0X73, +0X0C,0X63,0X10,0X8C,0XCF,0X8B,0X6D,0X7B,0X0C,0X6B,0XAE,0X83,0XCE,0X83,0X49,0X62, +0X2C,0X8B,0X0C,0X83,0XAE,0X9B,0XCE,0X9B,0XAD,0XA3,0XAD,0XA3,0XAD,0X9B,0X8D,0XA3, +0XB1,0XBC,0XCE,0XAB,0XCE,0XB3,0X68,0X62,0XAE,0X83,0X10,0X8C,0XEF,0X8B,0X91,0X9C, +0X91,0X9C,0X51,0X94,0X30,0X94,0XCF,0X83,0X30,0X94,0X71,0X9C,0X71,0X9C,0X50,0X94, +0X10,0X8C,0X75,0XBD,0X29,0X4A,0XAE,0X7B,0X8E,0X7B,0XAE,0X7B,0XCF,0X83,0X0F,0X8C, +0XEF,0X8B,0XEF,0X8B,0X10,0X8C,0X10,0X8C,0XEF,0X8B,0X86,0X39,0X8E,0X7B,0X6D,0X73, +0X4D,0X73,0XCE,0X83,0XAE,0X83,0X4D,0X7B,0X4D,0X73,0X4D,0X73,0XD2,0XA4,0X08,0X5A, +0XEB,0X82,0X6D,0X8B,0X50,0XAC,0XEE,0XAB,0XCE,0XA3,0XEE,0XAB,0XAD,0XAB,0X6C,0XA3, +0XEE,0XAB,0XCD,0XB3,0X50,0XBC,0XCA,0X72,0XF0,0X8B,0X10,0X8C,0XEF,0X83,0X71,0X9C, +0X91,0X9C,0X30,0X94,0XEF,0X8B,0X6E,0X7B,0XCF,0X83,0X71,0X9C,0X50,0X9C,0X30,0X94, +0X92,0XA4,0X54,0XBD,0X6D,0X73,0XD3,0XA4,0X8E,0X7B,0X0F,0X8C,0XF3,0XAC,0X71,0X9C, +0X10,0X8C,0XEF,0X83,0XEF,0X83,0X51,0X94,0X91,0X9C,0X85,0X31,0XCB,0X62,0X2C,0X6B, +0X4D,0X73,0XCF,0X83,0X4D,0X73,0X2C,0X73,0X4D,0X73,0X6D,0X73,0X2F,0X8C,0XE7,0X49, +0XEB,0X7A,0XAE,0X9B,0X50,0XAC,0X0F,0XAC,0X4F,0XB4,0XAD,0XA3,0XCD,0XAB,0X8D,0XA3, +0XCE,0XAB,0XEE,0XAB,0XD1,0XD4,0XEA,0X6A,0X0C,0X6B,0X10,0X8C,0X30,0X8C,0XB2,0XA4, +0XD2,0XA4,0X10,0X8C,0X8E,0X7B,0XCF,0X83,0X30,0X94,0X71,0X9C,0X50,0X94,0XB2,0XA4, +0X49,0X52,0X24,0X29,0XE3,0X18,0X86,0X31,0X89,0X5A,0X28,0X4A,0X49,0X52,0X69,0X52, +0X28,0X4A,0X8A,0X5A,0XE7,0X41,0X08,0X42,0X45,0X31,0X41,0X08,0X61,0X10,0XE7,0X41, +0X08,0X42,0X28,0X4A,0XC7,0X41,0X65,0X31,0X85,0X31,0XE7,0X41,0XA6,0X39,0XC3,0X20, +0X28,0X52,0X08,0X52,0XCA,0X6A,0X48,0X5A,0X89,0X5A,0XE7,0X49,0X69,0X5A,0X2C,0X7B, +0XCA,0X6A,0X89,0X5A,0X28,0X52,0X66,0X31,0XC7,0X41,0XCB,0X62,0X69,0X52,0XCB,0X62, +0XEB,0X6A,0X48,0X52,0X65,0X31,0XA6,0X39,0X08,0X42,0X69,0X52,0X89,0X5A,0XCA,0X62, +0X6D,0X93,0X4C,0X83,0X4C,0X8B,0XEB,0X7A,0X0F,0X9C,0XA6,0X39,0X2C,0X7B,0XAE,0X8B, +0XEF,0X93,0X0F,0X8C,0X8E,0X83,0X6E,0X7B,0XCF,0X83,0X2D,0X73,0X6D,0X7B,0XEF,0X8B, +0X25,0X29,0XCB,0X72,0XCE,0XA3,0X2C,0X93,0X4C,0X93,0X6D,0X9B,0X8D,0XA3,0X4C,0X9B, +0X2C,0X8B,0XCB,0X7A,0X0C,0X83,0XC7,0X49,0X09,0X42,0X4D,0X73,0X0F,0X8C,0X0F,0X8C, +0XAF,0X83,0XCF,0X83,0X71,0X9C,0X92,0X9C,0X71,0X9C,0X30,0X94,0X0F,0X94,0X30,0X9C, +0X30,0X94,0XCE,0X83,0X08,0X52,0X8D,0X93,0X2C,0X8B,0X2C,0X83,0X8D,0X93,0XEE,0X9B, +0X0F,0XA4,0XAE,0X9B,0X4C,0X8B,0X8E,0X93,0XAE,0X93,0XAA,0X62,0X50,0XA4,0X8E,0X83, +0X8E,0X83,0X0F,0X8C,0XAE,0X83,0X10,0X8C,0X30,0X94,0X0F,0X94,0XCE,0X83,0X10,0X8C, +0X08,0X4A,0X2C,0X8B,0X8D,0XA3,0X2C,0X9B,0XAE,0XA3,0X50,0XB4,0XEE,0XAB,0X6D,0X9B, +0XEB,0X8A,0XEB,0X82,0X4C,0X8B,0X08,0X52,0XCF,0X83,0X10,0X94,0XEF,0X93,0XCF,0X8B, +0X10,0X94,0X91,0X9C,0X51,0X9C,0X71,0X9C,0X91,0XA4,0X30,0X94,0X51,0X9C,0X30,0X9C, +0X50,0X9C,0XEF,0X8B,0XAA,0X6A,0X8D,0X93,0X4D,0X8B,0XAD,0X9B,0XAD,0X93,0XCE,0XA3, +0X0F,0XA4,0XAE,0X9B,0XAE,0X9B,0XAE,0X9B,0XEF,0XA3,0X69,0X5A,0X30,0X9C,0XCF,0X8B, +0XB2,0XA4,0X50,0X9C,0XEF,0X8B,0X0F,0X94,0X30,0X94,0XEF,0X8B,0XAE,0X83,0X0C,0X6B, +0XC7,0X41,0X89,0X72,0X6C,0X9B,0X4C,0X9B,0X2F,0XAC,0XEE,0XAB,0XCE,0XA3,0X8D,0X93, +0X6D,0X93,0X6C,0X93,0X6D,0X8B,0XC6,0X41,0XCF,0X83,0X0F,0X94,0XEF,0X93,0XAE,0X8B, +0XEF,0X93,0X30,0X9C,0X30,0X9C,0X0F,0X94,0XCE,0X8B,0XEF,0X8B,0X91,0XA4,0X91,0XA4, +0X51,0X9C,0X8D,0X7B,0X49,0X5A,0XAE,0X93,0XEF,0X9B,0XCE,0X9B,0X6D,0X93,0X6D,0X8B, +0XCE,0X9B,0XCE,0X9B,0XAE,0X93,0XCE,0X9B,0XEE,0XA3,0X69,0X5A,0XEF,0X93,0XEF,0X93, +0X50,0X9C,0X71,0X9C,0XEF,0X8B,0X6D,0X7B,0X0F,0X8C,0XAE,0X83,0XAE,0X83,0X4D,0X73, +0XC7,0X41,0XCA,0X82,0XEB,0X8A,0X4C,0X93,0X0F,0XB4,0X71,0XBC,0X8E,0X9B,0XEB,0X7A, +0X6D,0X93,0X2B,0X83,0XAA,0X72,0X8A,0X62,0X6E,0X7B,0X30,0X94,0XEF,0X93,0XEF,0X93, +0X0F,0X94,0X0F,0X94,0XCF,0X8B,0XCF,0X8B,0X0F,0X94,0X30,0X9C,0X71,0XA4,0X71,0XA4, +0X51,0X9C,0XEF,0X83,0X8A,0X62,0XEF,0XA3,0XCE,0X9B,0XAE,0X9B,0X2C,0X83,0XCE,0X9B, +0X0F,0XA4,0XAD,0X9B,0X6D,0X93,0X6D,0X8B,0XCE,0X9B,0X48,0X5A,0X0F,0X94,0X71,0XA4, +0X30,0X9C,0X71,0X9C,0X8D,0X7B,0XEF,0X8B,0X30,0X9C,0XEF,0X8B,0X8E,0X83,0X0F,0X8C, +0X49,0X52,0X8A,0X72,0X2C,0X93,0X6D,0X9B,0XAE,0XA3,0X8D,0X9B,0X2C,0X8B,0X0C,0X83, +0X0B,0X83,0X0B,0X83,0X0C,0X7B,0XCA,0X6A,0X30,0X94,0X50,0X9C,0XEF,0X93,0XCF,0X8B, +0XCF,0X8B,0XEF,0X8B,0X30,0X9C,0XCF,0X8B,0XEF,0X93,0X0F,0X94,0X71,0XA4,0X10,0X94, +0X30,0X9C,0XAE,0X83,0XEB,0X72,0X2F,0XAC,0X2F,0XAC,0XAE,0X9B,0XCE,0X93,0XEF,0XA3, +0XEE,0X9B,0X0C,0X83,0XEB,0X7A,0XCE,0X93,0XEE,0X9B,0X28,0X52,0X30,0X9C,0XEF,0X8B, +0XEF,0X8B,0XEF,0X8B,0X30,0X94,0X30,0X94,0X30,0X9C,0X30,0X94,0XCF,0X83,0XCE,0X83, +0XA6,0X39,0XEB,0X7A,0X8E,0X9B,0X8D,0X9B,0X6D,0X9B,0X6D,0X9B,0XCB,0X7A,0X4C,0X8B, +0X2B,0X8B,0X8D,0X9B,0X8D,0X93,0X0B,0X7B,0XCF,0X83,0X0F,0X94,0XEF,0X8B,0XCF,0X8B, +0XEF,0X8B,0X10,0X94,0X10,0X94,0X30,0X94,0X30,0X94,0X30,0X9C,0XEF,0X93,0XEF,0X93, +0X30,0X94,0XAD,0X83,0X8A,0X6A,0X8D,0X93,0XAE,0X93,0XAE,0X93,0XAE,0X9B,0XEF,0XA3, +0XAD,0X93,0X4D,0X8B,0XCE,0X93,0XEE,0X9B,0XEF,0XA3,0X0B,0X73,0XAE,0X8B,0XCE,0X8B, +0XCF,0X8B,0X30,0X94,0X50,0X94,0X10,0X94,0XAE,0X83,0X8E,0X7B,0X8E,0X7B,0X30,0X94, +0XE8,0X41,0X6D,0X93,0XAD,0XA3,0X8D,0X9B,0X8D,0X9B,0XEB,0X82,0X8D,0X93,0X4C,0X8B, +0X8D,0X9B,0XCE,0XA3,0X8D,0X93,0XEA,0X72,0X0D,0X6B,0XEF,0X8B,0XEF,0X93,0XAE,0X8B, +0XEF,0X8B,0X30,0X9C,0X0F,0X94,0X30,0X94,0X91,0XA4,0X30,0X9C,0X50,0X9C,0X30,0X9C, +0X71,0XA4,0XB1,0XA4,0X69,0X62,0X4C,0X8B,0X4D,0X8B,0XAE,0X9B,0XCE,0X9B,0X0F,0XA4, +0XEF,0X9B,0XCE,0X9B,0X0F,0XA4,0X30,0XAC,0XEF,0XA3,0X69,0X5A,0X6D,0X7B,0X71,0X9C, +0X51,0X9C,0X91,0XA4,0X10,0X94,0XAE,0X83,0X2C,0X73,0X8E,0X7B,0X6E,0X7B,0XEF,0X8B, +0X08,0X4A,0X2C,0X8B,0XAD,0XA3,0XAD,0XA3,0XCE,0XA3,0X8D,0X9B,0X8D,0X93,0X8D,0X9B, +0X8D,0X9B,0X8D,0X9B,0X8D,0X9B,0X88,0X62,0X4D,0X73,0XCF,0X8B,0XEF,0X93,0XCF,0X8B, +0X71,0X9C,0X71,0X9C,0XEF,0X8B,0X0F,0X94,0X30,0X9C,0XEF,0X93,0X30,0X94,0X30,0X9C, +0X50,0X9C,0X0F,0X8C,0X69,0X62,0X6D,0X8B,0XAE,0X93,0XCE,0X9B,0X0F,0XA4,0XEF,0XA3, +0X2F,0XA4,0X0F,0XA4,0XCE,0X9B,0XCE,0X9B,0X0F,0XA4,0XE7,0X49,0X30,0X9C,0X71,0X9C, +0X92,0X9C,0X91,0XA4,0X10,0X94,0X0F,0X8C,0XAE,0X83,0X51,0X9C,0XAE,0X83,0XAE,0X7B, +0XC7,0X39,0X2C,0X8B,0X6D,0X9B,0X6D,0X9B,0X8D,0X9B,0X4C,0X8B,0X6C,0X93,0X8D,0XA3, +0X2B,0X93,0X4C,0X93,0X6D,0X93,0X0A,0X73,0X4D,0X7B,0XCF,0X83,0XCF,0X8B,0XEF,0X93, +0X0F,0X94,0X50,0X9C,0X30,0X94,0XEF,0X8B,0X10,0X8C,0X0F,0X94,0X50,0X9C,0X0F,0X94, +0X10,0X94,0X0F,0X8C,0X69,0X62,0X8E,0X93,0XAE,0X93,0XCE,0X9B,0X0F,0XA4,0XEF,0XA3, +0X0F,0XA4,0XEE,0XA3,0X0F,0XA4,0XCE,0X9B,0X91,0XB4,0XEB,0X62,0X92,0XA4,0X91,0XA4, +0XD2,0XA4,0X92,0X9C,0X30,0X94,0X0F,0X8C,0XAE,0X83,0XCE,0X83,0XCF,0X83,0X51,0X94, +0X8A,0X5A,0X4C,0X93,0XCB,0X82,0X6D,0X9B,0X4D,0X93,0X0C,0X83,0X6C,0X9B,0X4C,0X93, +0X8D,0X9B,0XEF,0XAB,0XEF,0XA3,0X0E,0X94,0X4D,0X73,0X10,0X8C,0XEF,0X8B,0XCF,0X8B, +0X30,0X94,0X50,0X9C,0X30,0X94,0XEF,0X8B,0XEF,0X8B,0X30,0X94,0X71,0X9C,0X51,0X9C, +0X71,0X9C,0X6F,0X9C,0XEB,0X72,0X8E,0X8B,0XEF,0X9B,0X50,0XAC,0X0F,0XA4,0X0F,0XA4, +0X48,0X5A,0X48,0X5A,0XCA,0X72,0XAA,0X6A,0XCA,0X6A,0X04,0X21,0X07,0X4A,0X69,0X52, +0XCA,0X62,0X4C,0X73,0X6D,0X7B,0XCB,0X62,0XCB,0X62,0X0C,0X6B,0X69,0X52,0X2C,0X6B, +0XE3,0X20,0X45,0X39,0XC7,0X49,0XC7,0X49,0X08,0X5A,0X49,0X62,0XCA,0X72,0XAA,0X72, +0X07,0X5A,0X69,0X6A,0X2B,0X7B,0X65,0X31,0XE3,0X20,0X89,0X5A,0X49,0X5A,0XEB,0X62, +0X2C,0X73,0XCA,0X62,0X0B,0X6B,0X2C,0X73,0X0C,0X6B,0X2C,0X73,0X6D,0X7B,0XCB,0X62, +0X4C,0X73,0XA5,0X31,0XC7,0X41,0X2C,0X7B,0XCB,0X6A,0X4C,0X83,0X2C,0X7B,0X89,0X6A, +0XCE,0XAB,0X0F,0XB4,0X8D,0XA3,0X4C,0X93,0XAE,0XA3,0X8D,0X9B,0XAD,0X9B,0X08,0X5A, +0X0C,0X8B,0XC7,0X49,0XA7,0X41,0X09,0X52,0X0B,0X8B,0XAD,0XA3,0X8D,0XA3,0X0B,0X8B, +0XCB,0X7A,0X69,0X72,0X89,0X72,0X08,0X52,0XE3,0X28,0X62,0X08,0X26,0X29,0X69,0X62, +0XEA,0X7A,0X49,0X62,0XE7,0X51,0XEB,0X82,0XEB,0X82,0X0B,0X83,0X2C,0X8B,0X2C,0X8B, +0XAE,0X93,0XA6,0X39,0XAB,0X5A,0X2D,0X6B,0XAE,0X7B,0XCF,0X83,0X6D,0X73,0XF0,0X83, +0X8E,0X7B,0X10,0X8C,0X50,0X94,0X30,0X94,0XC3,0X18,0XA7,0X41,0XEB,0X7A,0XAE,0X9B, +0X4F,0XBC,0X0F,0XB4,0X0E,0XB4,0XEE,0XB3,0XEE,0XB3,0X0F,0XB4,0X8D,0XA3,0X0B,0X93, +0X8D,0X9B,0X48,0X62,0X49,0X6A,0XAB,0X7A,0X2B,0X93,0X6C,0X9B,0X8D,0XA3,0X8D,0X9B, +0X2C,0X93,0X0C,0X8B,0XCB,0X7A,0XEB,0X82,0XAA,0X6A,0X86,0X39,0X69,0X5A,0XEB,0X7A, +0X0B,0X83,0X4C,0X93,0X4C,0X93,0X6D,0X9B,0X4C,0X93,0XAD,0XA3,0XAD,0XAB,0XCE,0XAB, +0X2F,0XB4,0XEB,0X6A,0X10,0X8C,0X30,0X8C,0X71,0X94,0X91,0X9C,0X10,0X8C,0X51,0X94, +0X30,0X8C,0X51,0X94,0X10,0X94,0X10,0X8C,0X08,0X42,0X8A,0X72,0XEE,0XB3,0X50,0XBC, +0X0F,0XBC,0X0E,0XB4,0XAE,0XAB,0X8D,0XA3,0X0F,0XB4,0XCE,0XAB,0X8D,0XA3,0X2C,0X93, +0X2F,0XB4,0XC7,0X49,0X6C,0X9B,0X4C,0X9B,0X2C,0X93,0X6D,0X9B,0X6D,0X9B,0X6C,0X9B, +0X2C,0X93,0XCB,0X7A,0XCB,0X7A,0X4D,0X8B,0XCB,0X7A,0XEB,0X7A,0XEB,0X72,0X6D,0X83, +0X6D,0X8B,0XAD,0X9B,0XAD,0XA3,0X4C,0X93,0XAE,0X9B,0X2F,0XB4,0XEE,0XB3,0XAD,0XAB, +0XEE,0XB3,0XCA,0X62,0X71,0X94,0XB2,0X9C,0XF3,0XA4,0X92,0X9C,0X10,0X8C,0X10,0X8C, +0X71,0X9C,0X51,0X94,0X0F,0X8C,0X30,0X94,0X89,0X5A,0XCE,0XAB,0X0E,0XB4,0X2F,0XBC, +0XCE,0XAB,0XAD,0XAB,0X6D,0X9B,0X2F,0XB4,0X0F,0XBC,0XCE,0XAB,0XEE,0XAB,0XCE,0XA3, +0XEE,0XAB,0X89,0X6A,0X8D,0XA3,0X6D,0X9B,0XEF,0XA3,0X70,0XB4,0X0F,0XB4,0X8D,0XA3, +0X2C,0X93,0XEB,0X82,0X0C,0X8B,0X8D,0X9B,0XCB,0X72,0X0B,0X7B,0X4C,0X83,0X6D,0X8B, +0X8D,0X93,0X4C,0X93,0XAD,0X9B,0X2C,0X93,0XAE,0X9B,0X2F,0XB4,0X0F,0XB4,0X2C,0X93, +0X30,0XB4,0X69,0X52,0X92,0X9C,0XB2,0X9C,0X91,0X9C,0XEF,0X83,0XEF,0X83,0X30,0X8C, +0X92,0X9C,0XEF,0X83,0XEF,0X8B,0XEF,0X8B,0X6D,0X73,0XAE,0XA3,0X2F,0XBC,0X0F,0XB4, +0XAD,0XAB,0X8D,0XA3,0X0F,0XB4,0X0F,0XB4,0XCE,0XAB,0XAD,0XA3,0XAD,0XA3,0XEE,0XAB, +0X0F,0XAC,0X48,0X62,0X8D,0XA3,0X8D,0X9B,0XEE,0XAB,0XEE,0XB3,0X50,0XB4,0X4C,0X93, +0X2C,0X93,0X2C,0X93,0X6C,0X9B,0X0C,0X8B,0XCB,0X72,0X0B,0X7B,0X2C,0X83,0X4C,0X8B, +0X4C,0X93,0X2C,0X8B,0X0B,0X8B,0X4C,0X93,0X6D,0X9B,0XEE,0XAB,0XAD,0XA3,0X8D,0XA3, +0X0F,0XB4,0XCA,0X62,0X91,0X94,0X92,0X9C,0X30,0X8C,0XEF,0X83,0X6E,0X73,0X51,0X94, +0XCF,0X83,0XAE,0X83,0XEF,0X83,0XEF,0X83,0X2C,0X6B,0X70,0XBC,0X50,0XBC,0X6D,0XA3, +0X8D,0XA3,0XCD,0XB3,0XCD,0XB3,0XCE,0XAB,0X8D,0XA3,0X0B,0X93,0X2C,0X93,0XAD,0XA3, +0X8D,0X9B,0X89,0X6A,0X8D,0X9B,0X8D,0XA3,0XCE,0XA3,0XAD,0XA3,0X6D,0X9B,0XCB,0X7A, +0X2C,0X8B,0XAD,0X9B,0X4C,0X9B,0X0C,0X8B,0X8A,0X62,0X49,0X5A,0X2C,0X83,0X4C,0X8B, +0X2C,0X8B,0X2C,0X83,0X2C,0X83,0X6D,0X93,0XEF,0XA3,0X0F,0XAC,0XEF,0XA3,0XCE,0XA3, +0X0F,0XB4,0XEB,0X6A,0X92,0X94,0X51,0X94,0X51,0X94,0X10,0X8C,0X10,0X8C,0X10,0X8C, +0XCF,0X83,0XCF,0X7B,0XF0,0X83,0X10,0X8C,0X6D,0X73,0XCE,0XAB,0X4D,0X8B,0X2C,0X93, +}; + + +
diff -r 000000000000 -r 3a420fc22672 pict.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pict.h Fri Sep 03 05:26:27 2021 +0000 @@ -0,0 +1,38 @@ +__align(2) +char burp[] = { /* 0X00,0X01,0X40,0X00,0X40,0X00, */ +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X10,0X00,0X00, +0X00,0X00,0X00,0X1F,0X10,0XF0,0X00,0X00,0X00,0X00,0X40,0X0F,0XC9,0XE0,0X00,0X00, +0X00,0X00,0X3C,0X1F,0XFF,0XC0,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFF,0XF8,0X00,0X00, +0X00,0X00,0XFF,0XFF,0XFF,0XFE,0X00,0X00,0X00,0X01,0XFF,0XFF,0XFF,0XF8,0X00,0X00, +0X00,0X00,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0XFF,0XFF,0XFF,0XF8,0X00,0X00, +0X00,0X01,0XFF,0XFF,0XFF,0XBC,0X00,0X00,0X00,0X07,0XFF,0XFF,0XFF,0X07,0X00,0X00, +0X00,0X0F,0XFF,0XFF,0XF1,0X80,0X30,0X00,0X00,0X0F,0XFF,0XFF,0XC0,0X67,0XF0,0X00, +0X00,0X0F,0XFF,0XFF,0X80,0X38,0X08,0X00,0X00,0X0F,0XFF,0XFC,0X00,0X10,0X00,0X00, +0X00,0X1F,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X1F,0XFD,0XE8,0X00,0X00,0X00,0X00, +0X00,0X3F,0XDD,0XC8,0X00,0X00,0X00,0X00,0X00,0X7F,0XEF,0X88,0X18,0X00,0X18,0X00, +0X01,0X7F,0X3F,0X08,0X18,0X00,0X18,0X00,0X07,0X7C,0X35,0X08,0X00,0X00,0X00,0X00, +0X26,0X7E,0X00,0X0C,0X00,0X18,0X00,0X00,0X84,0X5E,0X00,0X04,0X00,0X3F,0XFE,0X00, +0X84,0X1B,0XC0,0X02,0X00,0X40,0X01,0X00,0X84,0X00,0X00,0X01,0X80,0X80,0X01,0X00, +0X84,0X00,0X00,0X00,0X7E,0X00,0X01,0X00,0X8E,0X00,0X00,0X23,0XFC,0X00,0X01,0X00, +0X8E,0X00,0X00,0X98,0XE0,0X0C,0X02,0X00,0X8A,0X00,0X01,0X04,0X06,0X0F,0XFE,0X00, +0X8A,0X00,0X02,0X02,0X08,0X80,0X21,0X86,0X8B,0X00,0X02,0X81,0X30,0X40,0X60,0X7E, +0X89,0X00,0X07,0XC4,0XC0,0X21,0XB8,0X0C,0X89,0X00,0X0F,0XFE,0X20,0X1E,0X06,0X38, +0X89,0X80,0X1F,0XFF,0XFC,0X00,0X00,0XC0,0X88,0X80,0X3F,0XFF,0XF8,0X00,0X00,0X00, +0X88,0XC0,0X1F,0XFF,0XE8,0X00,0X00,0X00,0X88,0X40,0X0F,0XFF,0XE8,0X00,0X00,0X00, +0X88,0X60,0X07,0XFF,0XFC,0X00,0X00,0X00,0X88,0X20,0X07,0XFF,0XFE,0X00,0X00,0X00, +0X88,0X30,0X07,0XFF,0XFC,0X80,0X00,0X00,0X88,0X18,0X03,0XFF,0XFC,0X00,0X00,0X00, +0XC4,0X08,0X03,0XE3,0XFE,0X10,0X00,0X00,0XC4,0X0C,0X00,0XC3,0XF1,0X98,0X00,0X00, +0XC4,0X06,0X00,0X00,0XE0,0XFC,0X00,0X00,0XC4,0XE3,0X00,0X00,0X00,0X18,0X00,0X00, +0XA3,0XFD,0X00,0X00,0X0F,0XF0,0X00,0X00,0XA0,0X07,0X80,0X00,0X3A,0XC1,0X00,0X00, +0XA0,0X03,0XC0,0X00,0XF2,0X00,0X80,0X00,0XA0,0X01,0XC0,0X00,0XF2,0X00,0X80,0X00, +0XA0,0X00,0X60,0X00,0XFE,0X00,0X00,0X00,0XE0,0X00,0X20,0X00,0X4E,0X00,0X40,0X00, +0XE0,0X00,0X30,0X00,0XC4,0X00,0X00,0X00,0XC0,0X00,0X10,0X00,0XC2,0X00,0X20,0X00, +0XC0,0X00,0X18,0X77,0X82,0X00,0X80,0X00,0X80,0X00,0X0D,0XF7,0X81,0X01,0X00,0X00, +0X80,0X00,0X05,0XB7,0X81,0X06,0X00,0X00,0X80,0X00,0X07,0XFF,0X01,0XFA,0X00,0X00, +0X80,0X00,0X02,0XFD,0X00,0XC2,0X00,0X00,0X80,0X00,0X02,0X7F,0X00,0X82,0X00,0X00, +0X80,0X00,0X03,0X7E,0X00,0XC2,0X00,0X00,0X80,0X00,0X01,0XFE,0X00,0X42,0X00,0X00, +0X80,0X00,0X01,0XB4,0X00,0X42,0X00,0X00,0X80,0X00,0X00,0XBC,0X00,0X42,0X00,0X00, +}; + + +
diff -r 000000000000 -r 3a420fc22672 scolor_TCS3200.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/scolor_TCS3200.cpp Fri Sep 03 05:26:27 2021 +0000 @@ -0,0 +1,37 @@ +#include "mbed.h" +#include "scolor_TCS3200.h" + + +scolor_TCS3200::scolor_TCS3200(PinName s0, PinName s1, PinName s2, PinName s3, PinName s_in) : +_s0(s0), _s1(s1), _s2(s2), _s3(s3), _s_in(s_in) +{ + SetMode(SCALE_100); + +}; + + +long scolor_TCS3200::ReadRed() { _s2=0; _s3=0; return pulsewidth();} +long scolor_TCS3200::ReadBlue() { _s2=0; _s3=1; return pulsewidth();} +long scolor_TCS3200::ReadClear() { _s2=1; _s3=0; return pulsewidth();} +long scolor_TCS3200::ReadGreen() { _s2=1; _s3=1; return pulsewidth();} + +void scolor_TCS3200::SetMode(uint8_t mode) { + switch (mode){ + case SCALE_100: _s0= 1; _s1=1; break; + case SCALE_20: _s0=1 ; _s1=0; break; + case SCALE_2: _s0=0 ; _s1=1; break; + case POWER_DOWN: _s0=0 ; _s1=0; break; + } +}; + +long scolor_TCS3200::pulsewidth() { + while(!_s_in); + timer.start(); + while(_s_in); + timer.stop(); + float pulsewidth_v = timer.read_us(); + timer.reset(); + return pulsewidth_v; +}; + +
diff -r 000000000000 -r 3a420fc22672 scolor_TCS3200.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/scolor_TCS3200.h Fri Sep 03 05:26:27 2021 +0000 @@ -0,0 +1,63 @@ +#ifndef SCOLOR_TCS3200_H +#define SCOLOR_TCS3200_H +#include "mbed.h" + /* ************************************************************************** + +@fabeltranm 2019 +fbeltranm@ecci.edu.co + + + datasheet https://www.mouser.com/catalog/specsheets/TCS3200-E11.pdf + + + S0 Frequency scaling + S1 Frequency scaling + S2 Photo diode selection + S3 Photo diode selection + OutFreq Frequency + + ----------------------------------- + | ____________ ____________ | +----> | | | | | | ___ ___ +Light | | Photodiode | | Current |--|---OUTPUT_FREQ | |___| |___ +----> | | Array |---| to | | + | | | | Frequency | | + | |____________| |____________| | + | ^ ^ ^ ^ | + -------|--|-------------|--|------- + | | | | + S2 S3 S0 S1 + +SO | S1 | OUTPUT FREQUENCY SCALING | | S2 | S3 | PHOTODIODE TYPE | + 0 | 0 | power down | | 0 | 0 | Red | + 0 | 1 | 2% | | 0 | 1 | Blue | + 1 | 0 | 20% | | 1 | 0 | Clear (no filter) | + 1 | 1 | 100% | | 1 | 1 | Green | + +******************************************************************************/ + + +#define SCALE_100 1 +#define SCALE_20 2 +#define SCALE_2 3 +#define POWER_DOWN 4 + +class scolor_TCS3200 { + public: + scolor_TCS3200(PinName s0, PinName s1, PinName s2, PinName s3, PinName s_in); + long ReadRed(); // retorno el tiempo en alto de OutFreq para Rojo en ns + long ReadGreen(); // retorno el tiempo en alto de OutFreq para verde en ns + long ReadBlue(); // retorno el tiempo en alto de OutFreq color azul en ns + long ReadClear(); // retorno el tiempo en alto de OutFreq sin filtro en ns + void SetMode(uint8_t mode); + private: + DigitalOut _s0; + DigitalOut _s1; + DigitalOut _s2; + DigitalOut _s3; + DigitalIn _s_in; + Timer timer; + long pulsewidth(); + +}; +#endif \ No newline at end of file