Code APP6

Dependencies:   mbed mbed-rtos

main.cpp

Committer:
GaiSensei
Date:
2017-04-04
Revision:
1:b868d04610be
Parent:
0:4101acb9ab42

File content as of revision 1:b868d04610be:

/////////////////////////////////////////////////////////////
// APP 6: Propriétés des matériaux et capteurs             //
//                                                         //
// Université de Sherbrooke                                //
// Génie informatique                                      //
// Session 5, Hiver 2017                                   //
//                                                         //
// Date:    5 avril 2017                                   //
//                                                         //
// Auteurs: Maxime Dupuis,       dupm2216                  //
//          Bruno Allaire-Lemay, allb2701                  //
/////////////////////////////////////////////////////////////

#include "mbed.h"
#include "rtos.h"
#include <cmath>
    
const float coefficients[6] = {4.7378, -9.0288, 14.136, -10.126, 3.2801, -0.3927};
AnalogIn input(p15);

//Lit la tension sur la pin 15 et effectue la conversion analogue à digitale sur 16 bits. Retourne la tension lue en volts.
float read_voltage()
{
    const float ratio = 19859.4;
    float voltage = (float) input.read_u16();
    return voltage / ratio;
}

//Calcul le niveau du liquide à partir des coefficients de la courbe de régression et de la tension lue.
float get_liquid_level_cm(const float* coefficients, const int number_of_coefficients, const float hall_sensor_voltage)
{
    float liquid_level_cm = 54;
    for(int i=0; i<number_of_coefficients; i++)
    {
        liquid_level_cm -= pow(hall_sensor_voltage, (float)i) * coefficients[i];
    }
    return liquid_level_cm;
}

//Appel les fonctions de lecture et de calcul du niveau. Affiche le niveau.
void read_and_display_level_cm(void const *args)
{
    float voltage;
    float liquid_level_cm;
    voltage = read_voltage();
    liquid_level_cm = get_liquid_level_cm(coefficients, 6, voltage);
    printf("Niveau du liquide (cm) : %f\r\n", liquid_level_cm);
}

//Lit, calcul et affiche le niveau du liquide à toutes les 50 millisecondes.
int main()
{
    RtosTimer timer(read_and_display_level_cm, osTimerPeriodic);
    timer.start(50);
    
    while(1)
    {
    }
}