Version paralela con display grande y funciones adicionales

Dependencies:   BufferedSerial mbed

Fork of ConduSe-Speedometer2 by Felícito Manzano

Committer:
fmanzano_dtk
Date:
Wed Aug 31 18:42:25 2016 +0000
Revision:
1:6f4d8d53996f
Parent:
0:2f13a25aa470
Child:
2:1219ed8d7039
Pinout actualizado para prueba de concepto.

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 0:2f13a25aa470 7 * - Tarjeta: Nucleo F303K8
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 0:2f13a25aa470 23 extern BufferedSerial cp(PA_9, PA_10, BUFF_SIZE, TX_MULTIP);
fmanzano_dtk 1:6f4d8d53996f 24 //>>>>>>>> extern Serial usb(USBTX, USBRX);
fmanzano_dtk 1:6f4d8d53996f 25
fmanzano_dtk 0:2f13a25aa470 26 extern DigitalOut display_unidades[7] = {
fmanzano_dtk 1:6f4d8d53996f 27 PB_6, PB_1, PF_0, PF_1, PA_8, PA_11, PB_5
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 1:6f4d8d53996f 31 PA_7, PA_6, PA_5, PA_4, PA_3, PA_1, PA_0
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 1:6f4d8d53996f 35 PA_2, PB_4
fmanzano_dtk 1:6f4d8d53996f 36 }; // b, c
fmanzano_dtk 1:6f4d8d53996f 37
fmanzano_dtk 1:6f4d8d53996f 38 extern RGBLed status_led(PA_12, PB_0, PB_7); // LED RGB
fmanzano_dtk 1:6f4d8d53996f 39 extern DigitalOut myled(LED1); // Buzzer
fmanzano_dtk 1:6f4d8d53996f 40
fmanzano_dtk 0:2f13a25aa470 41
fmanzano_dtk 0:2f13a25aa470 42 //
fmanzano_dtk 0:2f13a25aa470 43 //***********************************
fmanzano_dtk 0:2f13a25aa470 44
fmanzano_dtk 0:2f13a25aa470 45 int main()
fmanzano_dtk 0:2f13a25aa470 46 {
fmanzano_dtk 0:2f13a25aa470 47 // CONFIGURAR PUERTOS
fmanzano_dtk 0:2f13a25aa470 48 cp.baud(9600);
fmanzano_dtk 1:6f4d8d53996f 49 //>>>>>>>> usb.baud(115200);
fmanzano_dtk 1:6f4d8d53996f 50 //>>>>>>>> usb.printf("INICIO!\r\n\r\n");
fmanzano_dtk 0:2f13a25aa470 51
fmanzano_dtk 0:2f13a25aa470 52 // DECLARACIÓN DE VARIABLES
fmanzano_dtk 0:2f13a25aa470 53 float velocidad_gps_actual = 0.0;
fmanzano_dtk 0:2f13a25aa470 54 int centenas = 0;
fmanzano_dtk 0:2f13a25aa470 55 int decenas = 0;
fmanzano_dtk 0:2f13a25aa470 56 int unidades = 0;
fmanzano_dtk 0:2f13a25aa470 57 int bytes_entrantes[35] = {0};
fmanzano_dtk 0:2f13a25aa470 58 int contador_errores = 0;
fmanzano_dtk 0:2f13a25aa470 59 int trama_recibida = 0; // Lógica de código
fmanzano_dtk 0:2f13a25aa470 60 int trama_valida = 0; // Lógica de código
fmanzano_dtk 0:2f13a25aa470 61 iniciar_data_cp(bytes_entrantes);
fmanzano_dtk 1:6f4d8d53996f 62 status_led.write(1.0, 1.0, 1.0);
fmanzano_dtk 0:2f13a25aa470 63
fmanzano_dtk 0:2f13a25aa470 64 // Iniciar display con --
fmanzano_dtk 0:2f13a25aa470 65 iniciar_display7s(display_centenas, display_decenas, display_unidades);
fmanzano_dtk 0:2f13a25aa470 66
fmanzano_dtk 0:2f13a25aa470 67 while(1) {
fmanzano_dtk 0:2f13a25aa470 68 // Enviar consulta al CP ConduSe
fmanzano_dtk 0:2f13a25aa470 69 consultar_conduse(&cp);
fmanzano_dtk 0:2f13a25aa470 70
fmanzano_dtk 0:2f13a25aa470 71 // Recibir datos de la trama del CP
fmanzano_dtk 0:2f13a25aa470 72 trama_recibida = recibir_respuesta_conduse(&cp, bytes_entrantes);
fmanzano_dtk 1:6f4d8d53996f 73
fmanzano_dtk 1:6f4d8d53996f 74
fmanzano_dtk 0:2f13a25aa470 75 // Procesar trama recibida
fmanzano_dtk 0:2f13a25aa470 76 if (trama_recibida) {
fmanzano_dtk 1:6f4d8d53996f 77 //>>>>>>>> usb.printf("Trama recibida - OK\r\n"); wait_ms(50);
fmanzano_dtk 0:2f13a25aa470 78 trama_valida = validar_trama_conduse(bytes_entrantes);
fmanzano_dtk 0:2f13a25aa470 79
fmanzano_dtk 0:2f13a25aa470 80 if (trama_valida) {
fmanzano_dtk 1:6f4d8d53996f 81 //>>>>>>>> usb.printf("Trama valida - OK\r\n"); wait_ms(50);
fmanzano_dtk 0:2f13a25aa470 82 extraer_velocidad_conduse(bytes_entrantes,
fmanzano_dtk 0:2f13a25aa470 83 &velocidad_gps_actual);
fmanzano_dtk 0:2f13a25aa470 84
fmanzano_dtk 0:2f13a25aa470 85 if ((velocidad_gps_actual >= CONDUSE_MIN_VEL) &&
fmanzano_dtk 0:2f13a25aa470 86 (velocidad_gps_actual <= CONDUSE_MAX_VEL)) {
fmanzano_dtk 0:2f13a25aa470 87
fmanzano_dtk 1:6f4d8d53996f 88 analizar_velocidad_conduse(&velocidad_gps_actual,
fmanzano_dtk 1:6f4d8d53996f 89 &centenas, &decenas, &unidades);
fmanzano_dtk 1:6f4d8d53996f 90 //>>>>>>>> usb.printf("Velocidad: %d %d %d\r\n", centenas, decenas, unidades); wait_ms(50);
fmanzano_dtk 1:6f4d8d53996f 91
fmanzano_dtk 1:6f4d8d53996f 92 // Enviar datos a Display
fmanzano_dtk 1:6f4d8d53996f 93 /* ************************************************** */
fmanzano_dtk 1:6f4d8d53996f 94 // Segmento para prototipo:
fmanzano_dtk 1:6f4d8d53996f 95 presentar_velocidad(&centenas, &decenas, &unidades, display_centenas, display_decenas, display_unidades);
fmanzano_dtk 0:2f13a25aa470 96
fmanzano_dtk 1:6f4d8d53996f 97 actualizar_led(&velocidad_gps_actual, &myled, &status_led);
fmanzano_dtk 1:6f4d8d53996f 98 /* ************************************************** */
fmanzano_dtk 1:6f4d8d53996f 99 contador_errores = 0;
fmanzano_dtk 1:6f4d8d53996f 100
fmanzano_dtk 0:2f13a25aa470 101 } else {
fmanzano_dtk 1:6f4d8d53996f 102 //>>>>>>>> usb.printf("Velocidad fuera de rango - ERROR\r\n"); wait_ms(50);
fmanzano_dtk 0:2f13a25aa470 103 contador_errores++;
fmanzano_dtk 0:2f13a25aa470 104 }
fmanzano_dtk 0:2f13a25aa470 105 } else {
fmanzano_dtk 1:6f4d8d53996f 106 //>>>>>>>> usb.printf("Trama valida - ERROR\r\n"); wait_ms(50);
fmanzano_dtk 0:2f13a25aa470 107 contador_errores++;
fmanzano_dtk 0:2f13a25aa470 108 }
fmanzano_dtk 0:2f13a25aa470 109 } else {
fmanzano_dtk 1:6f4d8d53996f 110 //>>>>>>>> usb.printf("Trama recibida - ERROR\r\n"); wait_ms(50);
fmanzano_dtk 0:2f13a25aa470 111 contador_errores++;
fmanzano_dtk 0:2f13a25aa470 112 }
fmanzano_dtk 0:2f13a25aa470 113
fmanzano_dtk 0:2f13a25aa470 114 if (contador_errores>=5) {
fmanzano_dtk 0:2f13a25aa470 115 // Presentar mensaje de error
fmanzano_dtk 1:6f4d8d53996f 116 //>>>>>>>> usb.printf("Display7s -> EEE\r\n"); wait_ms(50);
fmanzano_dtk 0:2f13a25aa470 117 mostrar_error7s(display_centenas, display_decenas, display_unidades);
fmanzano_dtk 1:6f4d8d53996f 118 status_led.write(1.0, 1.0, 1.0);
fmanzano_dtk 0:2f13a25aa470 119 }
fmanzano_dtk 0:2f13a25aa470 120
fmanzano_dtk 0:2f13a25aa470 121 // Limpiar variables
fmanzano_dtk 0:2f13a25aa470 122 iniciar_data_cp(bytes_entrantes);
fmanzano_dtk 1:6f4d8d53996f 123 myled = !myled;
fmanzano_dtk 0:2f13a25aa470 124 wait(1); //
fmanzano_dtk 0:2f13a25aa470 125 }
fmanzano_dtk 0:2f13a25aa470 126 }