Version paralela con display grande y funciones adicionales

Dependencies:   BufferedSerial mbed

Fork of ConduSe-Speedometer2 by Felícito Manzano

Committer:
fmanzano_dtk
Date:
Thu Sep 01 05:02:48 2016 +0000
Revision:
2:1219ed8d7039
Parent:
1:6f4d8d53996f
Versi?n paralela con display grande

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fmanzano_dtk 0:2f13a25aa470 1 /*
fmanzano_dtk 0:2f13a25aa470 2 * - Proyecto: SABMiller ILC
fmanzano_dtk 0:2f13a25aa470 3 Velocímetro digital
fmanzano_dtk 0:2f13a25aa470 4 CONDUSE
fmanzano_dtk 0:2f13a25aa470 5
fmanzano_dtk 0:2f13a25aa470 6 * - Lenguaje: ANSI C/C++ (mbed)
fmanzano_dtk 2:1219ed8d7039 7 * - Tarjeta: Nucleo F091RC
fmanzano_dtk 0:2f13a25aa470 8 * - Referencias:
fmanzano_dtk 0:2f13a25aa470 9 * - Fecha: 2016/Agosto
fmanzano_dtk 0:2f13a25aa470 10 * - Autor(es): Felícito Manzano /
fmanzano_dtk 0:2f13a25aa470 11 Mario Vargas
fmanzano_dtk 0:2f13a25aa470 12 * - Compañia: V.S.R. de Centroamérica
fmanzano_dtk 0:2f13a25aa470 13 * - País: SV / CR
fmanzano_dtk 0:2f13a25aa470 14 */
fmanzano_dtk 0:2f13a25aa470 15
fmanzano_dtk 0:2f13a25aa470 16 #include "mbed.h"
fmanzano_dtk 0:2f13a25aa470 17 #include "BufferedSerial.h"
fmanzano_dtk 0:2f13a25aa470 18 #include "constantes.hpp"
fmanzano_dtk 0:2f13a25aa470 19 #include "ConduSe.h"
fmanzano_dtk 0:2f13a25aa470 20
fmanzano_dtk 0:2f13a25aa470 21 // HARDWARE SETUP
fmanzano_dtk 0:2f13a25aa470 22 //***********************************
fmanzano_dtk 2:1219ed8d7039 23 extern BufferedSerial cp(PC_4, PC_5, BUFF_SIZE, TX_MULTIP); // USART3
fmanzano_dtk 2:1219ed8d7039 24 extern Serial usb(USBTX, USBRX); // USART2
fmanzano_dtk 1:6f4d8d53996f 25
fmanzano_dtk 0:2f13a25aa470 26 extern DigitalOut display_unidades[7] = {
fmanzano_dtk 2:1219ed8d7039 27 PA_3, PA_2, PA_10, PB_3, PB_5, PB_4, PB_10
fmanzano_dtk 1:6f4d8d53996f 28 }; // a, b, c, d, e, f, g
fmanzano_dtk 1:6f4d8d53996f 29
fmanzano_dtk 0:2f13a25aa470 30 extern DigitalOut display_decenas[7] = {
fmanzano_dtk 2:1219ed8d7039 31 PA_8, PA_9, PC_7, PB_6, PA_7, PA_6, PA_5
fmanzano_dtk 1:6f4d8d53996f 32 }; // a, b, c, d, e, f, g
fmanzano_dtk 1:6f4d8d53996f 33
fmanzano_dtk 0:2f13a25aa470 34 extern DigitalOut display_centenas[2] = {
fmanzano_dtk 2:1219ed8d7039 35 PB_9, PB_8
fmanzano_dtk 1:6f4d8d53996f 36 }; // b, c
fmanzano_dtk 1:6f4d8d53996f 37
fmanzano_dtk 2:1219ed8d7039 38 extern RGBLed status_led(PB_13, PB_14, PB_15); // LED RGB
fmanzano_dtk 2:1219ed8d7039 39 extern PwmOut buzzer(PA_11);
fmanzano_dtk 2:1219ed8d7039 40 extern PwmOut blink_rgb(PC_6);
fmanzano_dtk 2:1219ed8d7039 41 extern PwmOut blink_d7s(PC_8);
fmanzano_dtk 2:1219ed8d7039 42 extern DigitalOut myled(LED1);
fmanzano_dtk 1:6f4d8d53996f 43
fmanzano_dtk 0:2f13a25aa470 44
fmanzano_dtk 0:2f13a25aa470 45 //
fmanzano_dtk 0:2f13a25aa470 46 //***********************************
fmanzano_dtk 0:2f13a25aa470 47
fmanzano_dtk 0:2f13a25aa470 48 int main()
fmanzano_dtk 0:2f13a25aa470 49 {
fmanzano_dtk 0:2f13a25aa470 50 // CONFIGURAR PUERTOS
fmanzano_dtk 0:2f13a25aa470 51 cp.baud(9600);
fmanzano_dtk 2:1219ed8d7039 52 usb.baud(115200);
fmanzano_dtk 2:1219ed8d7039 53 usb.printf("INICIO!\r\n\r\n");
fmanzano_dtk 0:2f13a25aa470 54
fmanzano_dtk 0:2f13a25aa470 55 // DECLARACIÓN DE VARIABLES
fmanzano_dtk 0:2f13a25aa470 56 float velocidad_gps_actual = 0.0;
fmanzano_dtk 0:2f13a25aa470 57 int centenas = 0;
fmanzano_dtk 0:2f13a25aa470 58 int decenas = 0;
fmanzano_dtk 0:2f13a25aa470 59 int unidades = 0;
fmanzano_dtk 0:2f13a25aa470 60 int bytes_entrantes[35] = {0};
fmanzano_dtk 0:2f13a25aa470 61 int contador_errores = 0;
fmanzano_dtk 0:2f13a25aa470 62 int trama_recibida = 0; // Lógica de código
fmanzano_dtk 0:2f13a25aa470 63 int trama_valida = 0; // Lógica de código
fmanzano_dtk 0:2f13a25aa470 64 iniciar_data_cp(bytes_entrantes);
fmanzano_dtk 1:6f4d8d53996f 65 status_led.write(1.0, 1.0, 1.0);
fmanzano_dtk 0:2f13a25aa470 66
fmanzano_dtk 0:2f13a25aa470 67 // Iniciar display con --
fmanzano_dtk 0:2f13a25aa470 68 iniciar_display7s(display_centenas, display_decenas, display_unidades);
fmanzano_dtk 0:2f13a25aa470 69
fmanzano_dtk 0:2f13a25aa470 70 while(1) {
fmanzano_dtk 0:2f13a25aa470 71 // Enviar consulta al CP ConduSe
fmanzano_dtk 0:2f13a25aa470 72 consultar_conduse(&cp);
fmanzano_dtk 0:2f13a25aa470 73
fmanzano_dtk 0:2f13a25aa470 74 // Recibir datos de la trama del CP
fmanzano_dtk 0:2f13a25aa470 75 trama_recibida = recibir_respuesta_conduse(&cp, bytes_entrantes);
fmanzano_dtk 1:6f4d8d53996f 76
fmanzano_dtk 1:6f4d8d53996f 77
fmanzano_dtk 0:2f13a25aa470 78 // Procesar trama recibida
fmanzano_dtk 0:2f13a25aa470 79 if (trama_recibida) {
fmanzano_dtk 2:1219ed8d7039 80 usb.printf("Trama recibida - OK\r\n");
fmanzano_dtk 0:2f13a25aa470 81 trama_valida = validar_trama_conduse(bytes_entrantes);
fmanzano_dtk 0:2f13a25aa470 82
fmanzano_dtk 0:2f13a25aa470 83 if (trama_valida) {
fmanzano_dtk 2:1219ed8d7039 84 usb.printf("Trama valida - OK\r\n");
fmanzano_dtk 0:2f13a25aa470 85 extraer_velocidad_conduse(bytes_entrantes,
fmanzano_dtk 0:2f13a25aa470 86 &velocidad_gps_actual);
fmanzano_dtk 0:2f13a25aa470 87
fmanzano_dtk 0:2f13a25aa470 88 if ((velocidad_gps_actual >= CONDUSE_MIN_VEL) &&
fmanzano_dtk 0:2f13a25aa470 89 (velocidad_gps_actual <= CONDUSE_MAX_VEL)) {
fmanzano_dtk 0:2f13a25aa470 90
fmanzano_dtk 1:6f4d8d53996f 91 analizar_velocidad_conduse(&velocidad_gps_actual,
fmanzano_dtk 1:6f4d8d53996f 92 &centenas, &decenas, &unidades);
fmanzano_dtk 2:1219ed8d7039 93 usb.printf("Velocidad: %d%d%d\r\n", centenas, decenas, unidades);
fmanzano_dtk 1:6f4d8d53996f 94
fmanzano_dtk 1:6f4d8d53996f 95 // Enviar datos a Display
fmanzano_dtk 1:6f4d8d53996f 96 /* ************************************************** */
fmanzano_dtk 1:6f4d8d53996f 97 // Segmento para prototipo:
fmanzano_dtk 1:6f4d8d53996f 98 presentar_velocidad(&centenas, &decenas, &unidades, display_centenas, display_decenas, display_unidades);
fmanzano_dtk 0:2f13a25aa470 99
fmanzano_dtk 1:6f4d8d53996f 100 actualizar_led(&velocidad_gps_actual, &myled, &status_led);
fmanzano_dtk 1:6f4d8d53996f 101 /* ************************************************** */
fmanzano_dtk 1:6f4d8d53996f 102 contador_errores = 0;
fmanzano_dtk 1:6f4d8d53996f 103
fmanzano_dtk 0:2f13a25aa470 104 } else {
fmanzano_dtk 2:1219ed8d7039 105 usb.printf("Velocidad fuera de rango - ERROR\r\n");
fmanzano_dtk 0:2f13a25aa470 106 contador_errores++;
fmanzano_dtk 0:2f13a25aa470 107 }
fmanzano_dtk 0:2f13a25aa470 108 } else {
fmanzano_dtk 2:1219ed8d7039 109 usb.printf("Trama valida - ERROR\r\n");
fmanzano_dtk 0:2f13a25aa470 110 contador_errores++;
fmanzano_dtk 0:2f13a25aa470 111 }
fmanzano_dtk 0:2f13a25aa470 112 } else {
fmanzano_dtk 2:1219ed8d7039 113 usb.printf("Trama recibida - ERROR\r\n");
fmanzano_dtk 0:2f13a25aa470 114 contador_errores++;
fmanzano_dtk 0:2f13a25aa470 115 }
fmanzano_dtk 0:2f13a25aa470 116
fmanzano_dtk 0:2f13a25aa470 117 if (contador_errores>=5) {
fmanzano_dtk 0:2f13a25aa470 118 // Presentar mensaje de error
fmanzano_dtk 2:1219ed8d7039 119 usb.printf("Display7s -> EEE\r\n");
fmanzano_dtk 0:2f13a25aa470 120 mostrar_error7s(display_centenas, display_decenas, display_unidades);
fmanzano_dtk 1:6f4d8d53996f 121 status_led.write(1.0, 1.0, 1.0);
fmanzano_dtk 0:2f13a25aa470 122 }
fmanzano_dtk 0:2f13a25aa470 123
fmanzano_dtk 0:2f13a25aa470 124 // Limpiar variables
fmanzano_dtk 2:1219ed8d7039 125 usb.printf("...\r\n");
fmanzano_dtk 0:2f13a25aa470 126 iniciar_data_cp(bytes_entrantes);
fmanzano_dtk 1:6f4d8d53996f 127 myled = !myled;
fmanzano_dtk 0:2f13a25aa470 128 wait(1); //
fmanzano_dtk 0:2f13a25aa470 129 }
fmanzano_dtk 0:2f13a25aa470 130 }