Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed HCSR04 TextLCD
main.cpp@0:8bf0dad41181, 2020-02-15 (annotated)
- Committer:
- fpachays
- Date:
- Sat Feb 15 17:02:26 2020 +0000
- Revision:
- 0:8bf0dad41181
Ultima version del proyecto
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
fpachays | 0:8bf0dad41181 | 1 | #include "mbed.h" |
fpachays | 0:8bf0dad41181 | 2 | #include "HCSR04.h" |
fpachays | 0:8bf0dad41181 | 3 | #include "mbed.h" |
fpachays | 0:8bf0dad41181 | 4 | #include "TextLCD.h" |
fpachays | 0:8bf0dad41181 | 5 | #define DEFAULT 0//no |
fpachays | 0:8bf0dad41181 | 6 | #define ADAFRUIT 0//no |
fpachays | 0:8bf0dad41181 | 7 | #define DFROBOT 0 |
fpachays | 0:8bf0dad41181 | 8 | #define LCM1602 0 |
fpachays | 0:8bf0dad41181 | 9 | #define YWROBOT 0 |
fpachays | 0:8bf0dad41181 | 10 | #define GYLCD 0//no |
fpachays | 0:8bf0dad41181 | 11 | #define MJKDZ 0//no |
fpachays | 0:8bf0dad41181 | 12 | #define SYDZ 1 |
fpachays | 0:8bf0dad41181 | 13 | #define WIDEHK 0//no |
fpachays | 0:8bf0dad41181 | 14 | #define LCDPLUG 0//no |
fpachays | 0:8bf0dad41181 | 15 | |
fpachays | 0:8bf0dad41181 | 16 | Serial pc(PA_2,PA_3); // tx, rx |
fpachays | 0:8bf0dad41181 | 17 | //I2C i2c_lcd(PB_9, PB_8); // SDA, SCL |
fpachays | 0:8bf0dad41181 | 18 | 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 |
fpachays | 0:8bf0dad41181 | 19 | //TextLCD_I2C lcd(&i2c_lcd, 0x4E, TextLCD::LCD20x4); |
fpachays | 0:8bf0dad41181 | 20 | //Serial pc(PA_2,PA_3);// Puertos de comunicación serial a PC |
fpachays | 0:8bf0dad41181 | 21 | DigitalOut Verde(PD_12); // Verde==> Distancia RECOMENDADA (<40) |
fpachays | 0:8bf0dad41181 | 22 | DigitalOut Azul(PD_15);// Azul ==> Distancia MENOR A RECOMENDADA (entre 20 y 40) |
fpachays | 0:8bf0dad41181 | 23 | DigitalOut Naranja(PD_13);//Naranja> Distancia PELIGROSA (entre 4 y 20) |
fpachays | 0:8bf0dad41181 | 24 | HCSR04 ultra(PB_4,PB_5);// Sensor Ultrasónico (Trigger y Echo) |
fpachays | 0:8bf0dad41181 | 25 | DigitalOut Rojo(PD_14);// Respuesta Sensor infrarojo==> CHOQUE INMINENTE (menor a 4) |
fpachays | 0:8bf0dad41181 | 26 | DigitalIn Infra(PB_3);// Señal Sensor infrarojo |
fpachays | 0:8bf0dad41181 | 27 | char *array[] = { // Defino Matriz de caracteres a mostrar |
fpachays | 0:8bf0dad41181 | 28 | "Entre 4 y 20", |
fpachays | 0:8bf0dad41181 | 29 | "Entre 20 y 40", |
fpachays | 0:8bf0dad41181 | 30 | "Mayor a 40", |
fpachays | 0:8bf0dad41181 | 31 | "Menor igual a 4" |
fpachays | 0:8bf0dad41181 | 32 | }; |
fpachays | 0:8bf0dad41181 | 33 | int d; // Variable que almacenará la distancia |
fpachays | 0:8bf0dad41181 | 34 | |
fpachays | 0:8bf0dad41181 | 35 | void setup() |
fpachays | 0:8bf0dad41181 | 36 | { |
fpachays | 0:8bf0dad41181 | 37 | /* lcd.setBacklight(TextLCD::LightOn); // Retroiluminación de pantalla |
fpachays | 0:8bf0dad41181 | 38 | lcd.setCursor(TextLCD::CurOff_BlkOn);//Seteo cursor |
fpachays | 0:8bf0dad41181 | 39 | lcd.setUDC(0, (char *) udc_0); |
fpachays | 0:8bf0dad41181 | 40 | lcd.putc(0); |
fpachays | 0:8bf0dad41181 | 41 | lcd.setUDC(1, (char *) udc_1); |
fpachays | 0:8bf0dad41181 | 42 | lcd.putc(1); |
fpachays | 0:8bf0dad41181 | 43 | */ |
fpachays | 0:8bf0dad41181 | 44 | lcd.cls();//limpia pantalla |
fpachays | 0:8bf0dad41181 | 45 | int col = 0;//definición columna |
fpachays | 0:8bf0dad41181 | 46 | int row = 0;//definición fila |
fpachays | 0:8bf0dad41181 | 47 | lcd.locate(col,row);//Ubiación del cursor |
fpachays | 0:8bf0dad41181 | 48 | lcd.printf("Inicializando...");// mensaje de Inicialización de pantalla |
fpachays | 0:8bf0dad41181 | 49 | wait(2);//Espere 2 segundos |
fpachays | 0:8bf0dad41181 | 50 | //Secuencia de Incilización |
fpachays | 0:8bf0dad41181 | 51 | row++; |
fpachays | 0:8bf0dad41181 | 52 | lcd.locate(col,row); |
fpachays | 0:8bf0dad41181 | 53 | lcd.printf("Inicializando..."); |
fpachays | 0:8bf0dad41181 | 54 | wait(2); |
fpachays | 0:8bf0dad41181 | 55 | row++; |
fpachays | 0:8bf0dad41181 | 56 | lcd.locate(col,row); |
fpachays | 0:8bf0dad41181 | 57 | lcd.printf("Inicializando..."); |
fpachays | 0:8bf0dad41181 | 58 | wait(2); |
fpachays | 0:8bf0dad41181 | 59 | row++; |
fpachays | 0:8bf0dad41181 | 60 | lcd.locate(col,row); |
fpachays | 0:8bf0dad41181 | 61 | lcd.printf("Inicializando..."); |
fpachays | 0:8bf0dad41181 | 62 | } |
fpachays | 0:8bf0dad41181 | 63 | //Secuencia para mostrar distancia según su rango |
fpachays | 0:8bf0dad41181 | 64 | void mostrar(char *str, int distancia) |
fpachays | 0:8bf0dad41181 | 65 | { |
fpachays | 0:8bf0dad41181 | 66 | //lcd.setBacklight(TextLCD::LightOn); |
fpachays | 0:8bf0dad41181 | 67 | lcd.cls(); |
fpachays | 0:8bf0dad41181 | 68 | lcd.locate(0, 0); |
fpachays | 0:8bf0dad41181 | 69 | lcd.printf(str); |
fpachays | 0:8bf0dad41181 | 70 | lcd.locate(0, 1); |
fpachays | 0:8bf0dad41181 | 71 | lcd.printf("Distancia: %d",distancia); |
fpachays | 0:8bf0dad41181 | 72 | } |
fpachays | 0:8bf0dad41181 | 73 | //Determinación de selector |
fpachays | 0:8bf0dad41181 | 74 | char determinarSelector() |
fpachays | 0:8bf0dad41181 | 75 | { |
fpachays | 0:8bf0dad41181 | 76 | char selector; |
fpachays | 0:8bf0dad41181 | 77 | if(Infra == 0) { //sensor infarojo detecta obstaculo |
fpachays | 0:8bf0dad41181 | 78 | d = 4; |
fpachays | 0:8bf0dad41181 | 79 | selector = 'd'; |
fpachays | 0:8bf0dad41181 | 80 | } else if(Infra == 1) { //no detecta obstaculo |
fpachays | 0:8bf0dad41181 | 81 | d =ultra.distance(1); |
fpachays | 0:8bf0dad41181 | 82 | if(d>4 && d<=20) { //distamcia entre 4 y 20 |
fpachays | 0:8bf0dad41181 | 83 | selector = 'a'; |
fpachays | 0:8bf0dad41181 | 84 | } else if(d>20 && d<= 40) { //entre 20 y 40 |
fpachays | 0:8bf0dad41181 | 85 | selector = 'b'; |
fpachays | 0:8bf0dad41181 | 86 | } else if(d > 40) { //distacia mayor a 40 |
fpachays | 0:8bf0dad41181 | 87 | selector = 'c'; |
fpachays | 0:8bf0dad41181 | 88 | } |
fpachays | 0:8bf0dad41181 | 89 | } |
fpachays | 0:8bf0dad41181 | 90 | //pc.printf("selector: %c\r\n",selector); |
fpachays | 0:8bf0dad41181 | 91 | // pc.printf("Distancia: %d\r\n",d); |
fpachays | 0:8bf0dad41181 | 92 | |
fpachays | 0:8bf0dad41181 | 93 | return selector; |
fpachays | 0:8bf0dad41181 | 94 | } |
fpachays | 0:8bf0dad41181 | 95 | //rutina principal |
fpachays | 0:8bf0dad41181 | 96 | int main() |
fpachays | 0:8bf0dad41181 | 97 | { |
fpachays | 0:8bf0dad41181 | 98 | setup(); |
fpachays | 0:8bf0dad41181 | 99 | pc.baud(115200); // Velocidad de Transmisión |
fpachays | 0:8bf0dad41181 | 100 | pc.printf("Inicio\n");//Mensaje de Incio de lectura de diastanciaen en pantalla PC |
fpachays | 0:8bf0dad41181 | 101 | while(1) { // Para que se ejecute siempre |
fpachays | 0:8bf0dad41181 | 102 | char selector = determinarSelector(); |
fpachays | 0:8bf0dad41181 | 103 | switch(selector) { |
fpachays | 0:8bf0dad41181 | 104 | case 'a' : //distancia entre 4 y 20 |
fpachays | 0:8bf0dad41181 | 105 | Naranja = 1; |
fpachays | 0:8bf0dad41181 | 106 | Azul = 0; |
fpachays | 0:8bf0dad41181 | 107 | Verde = 0; |
fpachays | 0:8bf0dad41181 | 108 | Rojo = 0; |
fpachays | 0:8bf0dad41181 | 109 | mostrar(array[0], d); |
fpachays | 0:8bf0dad41181 | 110 | break; |
fpachays | 0:8bf0dad41181 | 111 | case 'b' ://dist. entre 20 y 40 |
fpachays | 0:8bf0dad41181 | 112 | Azul = 1; |
fpachays | 0:8bf0dad41181 | 113 | Naranja = 0; |
fpachays | 0:8bf0dad41181 | 114 | Verde = 0; |
fpachays | 0:8bf0dad41181 | 115 | Rojo = 0; |
fpachays | 0:8bf0dad41181 | 116 | mostrar(array[1], d); |
fpachays | 0:8bf0dad41181 | 117 | break; |
fpachays | 0:8bf0dad41181 | 118 | case 'c' :// dist. > 40 |
fpachays | 0:8bf0dad41181 | 119 | Verde = 1; |
fpachays | 0:8bf0dad41181 | 120 | Azul = 0; |
fpachays | 0:8bf0dad41181 | 121 | Naranja = 0; |
fpachays | 0:8bf0dad41181 | 122 | Rojo = 0; |
fpachays | 0:8bf0dad41181 | 123 | mostrar(array[2], d); |
fpachays | 0:8bf0dad41181 | 124 | break; |
fpachays | 0:8bf0dad41181 | 125 | case 'd' :// entre 0 y 4 |
fpachays | 0:8bf0dad41181 | 126 | Verde = 0; |
fpachays | 0:8bf0dad41181 | 127 | Azul = 0; |
fpachays | 0:8bf0dad41181 | 128 | Naranja = 0; |
fpachays | 0:8bf0dad41181 | 129 | Rojo = 1; |
fpachays | 0:8bf0dad41181 | 130 | mostrar(array[3], d); |
fpachays | 0:8bf0dad41181 | 131 | break; |
fpachays | 0:8bf0dad41181 | 132 | default :// Si no cae en ningún rango anterior; señal de alrma mal funcionamiento sensores (endendido de 4 leds al mismo tiempo). |
fpachays | 0:8bf0dad41181 | 133 | Verde = 1; |
fpachays | 0:8bf0dad41181 | 134 | Azul = 1; |
fpachays | 0:8bf0dad41181 | 135 | Naranja = 1; |
fpachays | 0:8bf0dad41181 | 136 | Rojo = 1; |
fpachays | 0:8bf0dad41181 | 137 | break; |
fpachays | 0:8bf0dad41181 | 138 | } |
fpachays | 0:8bf0dad41181 | 139 | wait(1); //Espere 5 seg |
fpachays | 0:8bf0dad41181 | 140 | } |
fpachays | 0:8bf0dad41181 | 141 | |
fpachays | 0:8bf0dad41181 | 142 | } |