Sistema de medicion y lectura, utilizando dos sensores, un ultrasonico y un sensor infrarrojo, aprovechando arquitectura ARM para Microprocesadores
Dependencies: mbed HCSR04 TextLCD
main.cpp
00001 #include "mbed.h" 00002 #include "HCSR04.h" 00003 #include "mbed.h" 00004 #include "TextLCD.h" 00005 #define DEFAULT 0//no 00006 #define ADAFRUIT 0//no 00007 #define DFROBOT 0 00008 #define LCM1602 0 00009 #define YWROBOT 0 00010 #define GYLCD 0//no 00011 #define MJKDZ 0//no 00012 #define SYDZ 1 00013 #define WIDEHK 0//no 00014 #define LCDPLUG 0//no 00015 00016 Serial pc(PA_2,PA_3); // tx, rx 00017 //I2C i2c_lcd(PB_9, PB_8); // SDA, SCL 00018 TextLCD lcd(PA_8, PC_11, PC_6, PC_7, PC_8, PC_9, TextLCD::LCD16x2); //Inicilizar la pantalla LCD (se considera una panalla de 16 caracteres X 2 Filas 00019 //TextLCD_I2C lcd(&i2c_lcd, 0x4E, TextLCD::LCD20x4); 00020 //Serial pc(PA_2,PA_3);// Puertos de comunicación serial a PC 00021 DigitalOut Verde(PD_12); // Verde==> Distancia RECOMENDADA (<40) 00022 DigitalOut Azul(PD_15);// Azul ==> Distancia MENOR A RECOMENDADA (entre 20 y 40) 00023 DigitalOut Naranja(PD_13);//Naranja> Distancia PELIGROSA (entre 4 y 20) 00024 HCSR04 ultra(PB_4,PB_5);// Sensor Ultrasónico (Trigger y Echo) 00025 DigitalOut Rojo(PD_14);// Respuesta Sensor infrarojo==> CHOQUE INMINENTE (menor a 4) 00026 DigitalIn Infra(PB_3);// Señal Sensor infrarojo 00027 char *array[] = { // Defino Matriz de caracteres a mostrar 00028 "Entre 4 y 20", 00029 "Entre 20 y 40", 00030 "Mayor a 40", 00031 "Menor igual a 4" 00032 }; 00033 int d; // Variable que almacenará la distancia 00034 00035 void setup() 00036 { 00037 /* lcd.setBacklight(TextLCD::LightOn); // Retroiluminación de pantalla 00038 lcd.setCursor(TextLCD::CurOff_BlkOn);//Seteo cursor 00039 lcd.setUDC(0, (char *) udc_0); 00040 lcd.putc(0); 00041 lcd.setUDC(1, (char *) udc_1); 00042 lcd.putc(1); 00043 */ 00044 lcd.cls();//limpia pantalla 00045 int col = 0;//definición columna 00046 int row = 0;//definición fila 00047 lcd.locate(col,row);//Ubiación del cursor 00048 lcd.printf("Inicializando...");// mensaje de Inicialización de pantalla 00049 wait(2);//Espere 2 segundos 00050 //Secuencia de Incilización 00051 row++; 00052 lcd.locate(col,row); 00053 lcd.printf("Inicializando..."); 00054 wait(2); 00055 row++; 00056 lcd.locate(col,row); 00057 lcd.printf("Inicializando..."); 00058 wait(2); 00059 row++; 00060 lcd.locate(col,row); 00061 lcd.printf("Inicializando..."); 00062 } 00063 //Secuencia para mostrar distancia según su rango 00064 void mostrar(char *str, int distancia) 00065 { 00066 //lcd.setBacklight(TextLCD::LightOn); 00067 lcd.cls(); 00068 lcd.locate(0, 0); 00069 lcd.printf(str); 00070 lcd.locate(0, 1); 00071 lcd.printf("Distancia: %d",distancia); 00072 } 00073 //Determinación de selector 00074 char determinarSelector() 00075 { 00076 char selector; 00077 if(Infra == 0) { //sensor infarojo detecta obstaculo 00078 d = 4; 00079 selector = 'd'; 00080 } else if(Infra == 1) { //no detecta obstaculo 00081 d =ultra.distance(1); 00082 if(d>4 && d<=20) { //distamcia entre 4 y 20 00083 selector = 'a'; 00084 } else if(d>20 && d<= 40) { //entre 20 y 40 00085 selector = 'b'; 00086 } else if(d > 40) { //distacia mayor a 40 00087 selector = 'c'; 00088 } 00089 } 00090 //pc.printf("selector: %c\r\n",selector); 00091 // pc.printf("Distancia: %d\r\n",d); 00092 00093 return selector; 00094 } 00095 //rutina principal 00096 int main() 00097 { 00098 setup(); 00099 pc.baud(115200); // Velocidad de Transmisión 00100 pc.printf("Inicio\n");//Mensaje de Incio de lectura de diastanciaen en pantalla PC 00101 while(1) { // Para que se ejecute siempre 00102 char selector = determinarSelector(); 00103 switch(selector) { 00104 case 'a' : //distancia entre 4 y 20 00105 Naranja = 1; 00106 Azul = 0; 00107 Verde = 0; 00108 Rojo = 0; 00109 mostrar(array[0], d); 00110 break; 00111 case 'b' ://dist. entre 20 y 40 00112 Azul = 1; 00113 Naranja = 0; 00114 Verde = 0; 00115 Rojo = 0; 00116 mostrar(array[1], d); 00117 break; 00118 case 'c' :// dist. > 40 00119 Verde = 1; 00120 Azul = 0; 00121 Naranja = 0; 00122 Rojo = 0; 00123 mostrar(array[2], d); 00124 break; 00125 case 'd' :// entre 0 y 4 00126 Verde = 0; 00127 Azul = 0; 00128 Naranja = 0; 00129 Rojo = 1; 00130 mostrar(array[3], d); 00131 break; 00132 default :// Si no cae en ningún rango anterior; señal de alrma mal funcionamiento sensores (endendido de 4 leds al mismo tiempo). 00133 Verde = 1; 00134 Azul = 1; 00135 Naranja = 1; 00136 Rojo = 1; 00137 break; 00138 } 00139 wait(1); //Espere 5 seg 00140 } 00141 00142 }
Generated on Thu Jul 21 2022 15:46:26 by
1.7.2