Code APP6

Dependencies:   mbed mbed-rtos

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 /////////////////////////////////////////////////////////////
00002 // APP 6: Propriétés des matériaux et capteurs             //
00003 //                                                         //
00004 // Université de Sherbrooke                                //
00005 // Génie informatique                                      //
00006 // Session 5, Hiver 2017                                   //
00007 //                                                         //
00008 // Date:    5 avril 2017                                   //
00009 //                                                         //
00010 // Auteurs: Maxime Dupuis,       dupm2216                  //
00011 //          Bruno Allaire-Lemay, allb2701                  //
00012 /////////////////////////////////////////////////////////////
00013 
00014 #include "mbed.h"
00015 #include "rtos.h"
00016 #include <cmath>
00017     
00018 const float coefficients[6] = {4.7378, -9.0288, 14.136, -10.126, 3.2801, -0.3927};
00019 AnalogIn input(p15);
00020 
00021 //Lit la tension sur la pin 15 et effectue la conversion analogue à digitale sur 16 bits. Retourne la tension lue en volts.
00022 float read_voltage()
00023 {
00024     const float ratio = 19859.4;
00025     float voltage = (float) input.read_u16();
00026     return voltage / ratio;
00027 }
00028 
00029 //Calcul le niveau du liquide à partir des coefficients de la courbe de régression et de la tension lue.
00030 float get_liquid_level_cm(const float* coefficients, const int number_of_coefficients, const float hall_sensor_voltage)
00031 {
00032     float liquid_level_cm = 54;
00033     for(int i=0; i<number_of_coefficients; i++)
00034     {
00035         liquid_level_cm -= pow(hall_sensor_voltage, (float)i) * coefficients[i];
00036     }
00037     return liquid_level_cm;
00038 }
00039 
00040 //Appel les fonctions de lecture et de calcul du niveau. Affiche le niveau.
00041 void read_and_display_level_cm(void const *args)
00042 {
00043     float voltage;
00044     float liquid_level_cm;
00045     voltage = read_voltage();
00046     liquid_level_cm = get_liquid_level_cm(coefficients, 6, voltage);
00047     printf("Niveau du liquide (cm) : %f\r\n", liquid_level_cm);
00048 }
00049 
00050 //Lit, calcul et affiche le niveau du liquide à toutes les 50 millisecondes.
00051 int main()
00052 {
00053     RtosTimer timer(read_and_display_level_cm, osTimerPeriodic);
00054     timer.start(50);
00055     
00056     while(1)
00057     {
00058     }
00059 }