Version paralela con display grande y funciones adicionales

Dependencies:   BufferedSerial mbed

Fork of ConduSe-Speedometer2 by Felícito Manzano

main.cpp

Committer:
fmanzano_dtk
Date:
2016-08-30
Revision:
0:2f13a25aa470
Child:
1:6f4d8d53996f

File content as of revision 0:2f13a25aa470:

/*
 * - Proyecto:      SABMiller ILC
                    Velocímetro digital
                    CONDUSE

 * - Lenguaje:      ANSI C/C++ (mbed)
 * - Tarjeta:       Nucleo F303K8
 * - Referencias:
 * - Fecha:         2016/Agosto
 * - Autor(es):     Felícito Manzano /
                    Mario Vargas
 * - Compañia:      V.S.R. de Centroamérica
 * - País:          SV / CR
*/

#include "mbed.h"
#include "BufferedSerial.h"
#include "constantes.hpp"
#include "ConduSe.h"

// HARDWARE SETUP
//***********************************
extern BufferedSerial cp(PA_9, PA_10, BUFF_SIZE, TX_MULTIP);
extern DigitalOut display_unidades[7] = {
    PA_12, PB_0, PB_7, PB_6, PB_1, PF_0, PF_1
}; // a, b, c, d, e, f, g
extern DigitalOut display_decenas[7] = {
    PA_8, PA_11, PB_5, PB_4, PA_0, PA_1, PA_3
}; // a, b, c, d, e, f, g
extern DigitalOut display_centenas[2] = {
    PA_4, PA_5
}; // b, c
extern PwmOut myled(LED1);                  // Buzzer
extern RGBLed status_led(PA_2, PA_7, PA_6); // LED RGB

//
//***********************************

int main()
{
    // CONFIGURAR PUERTOS
    cp.baud(9600);

    // DECLARACIÓN DE VARIABLES
    float velocidad_gps_actual = 0.0;
    float velocidad_gps_previa = -1.0;
    int centenas = 0;
    int decenas = 0;
    int unidades = 0;
    int bytes_entrantes[35] = {0};
    int contador_errores = 0;
    int trama_recibida = 0;     // Lógica de código
    int trama_valida = 0;       // Lógica de código
    iniciar_data_cp(bytes_entrantes);
    status_led.write(0.0, 0.0, 0.0);
    
    // Iniciar display con --
    iniciar_display7s(display_centenas, display_decenas, display_unidades);

    while(1) {
        // Enviar consulta al CP ConduSe
        consultar_conduse(&cp);

        // Recibir datos de la trama del CP
        trama_recibida = recibir_respuesta_conduse(&cp, bytes_entrantes);

        // Procesar trama recibida
        if (trama_recibida) {
            trama_valida = validar_trama_conduse(bytes_entrantes);

            if (trama_valida) {
                extraer_velocidad_conduse(bytes_entrantes,
                                          &velocidad_gps_actual);

                if ((velocidad_gps_actual >= CONDUSE_MIN_VEL) &&
                    (velocidad_gps_actual <= CONDUSE_MAX_VEL)) {
                    if (velocidad_gps_actual != velocidad_gps_previa) {
                        
                        analizar_velocidad_conduse(&velocidad_gps_actual,
                        &centenas, &decenas, &unidades);
                        
                        // Enviar datos a Display
                        /* ************************************************** */
                        // Segmento para prototipo:
                        presentar_velocidad(&centenas, &decenas, &unidades,
                        display_centenas, display_decenas, display_unidades);
                        
                        actualizar_led(&velocidad_gps_actual, &myled, &status_led);
                        /* ************************************************** */
                        contador_errores = 0;
                    }
                } else {
                    contador_errores++;
                }
            } else {
                contador_errores++;
            }
        } else {
            contador_errores++;
        }

        if (contador_errores>=5) {
            // Presentar mensaje de error
            mostrar_error7s(display_centenas, display_decenas, display_unidades);
        }

        // Limpiar variables
        iniciar_data_cp(bytes_entrantes);
        velocidad_gps_previa = velocidad_gps_actual;
        wait(1); //
    }
}