Team APP
/
APP6
Code APP6
main.cpp@1:b868d04610be, 2017-04-04 (annotated)
- Committer:
- GaiSensei
- Date:
- Tue Apr 04 19:55:17 2017 +0000
- Revision:
- 1:b868d04610be
- Parent:
- 0:4101acb9ab42
GG
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
GaiSensei | 1:b868d04610be | 1 | ///////////////////////////////////////////////////////////// |
GaiSensei | 1:b868d04610be | 2 | // APP 6: Propriétés des matériaux et capteurs // |
GaiSensei | 1:b868d04610be | 3 | // // |
GaiSensei | 1:b868d04610be | 4 | // Université de Sherbrooke // |
GaiSensei | 1:b868d04610be | 5 | // Génie informatique // |
GaiSensei | 1:b868d04610be | 6 | // Session 5, Hiver 2017 // |
GaiSensei | 1:b868d04610be | 7 | // // |
GaiSensei | 1:b868d04610be | 8 | // Date: 5 avril 2017 // |
GaiSensei | 1:b868d04610be | 9 | // // |
GaiSensei | 1:b868d04610be | 10 | // Auteurs: Maxime Dupuis, dupm2216 // |
GaiSensei | 1:b868d04610be | 11 | // Bruno Allaire-Lemay, allb2701 // |
GaiSensei | 1:b868d04610be | 12 | ///////////////////////////////////////////////////////////// |
GaiSensei | 1:b868d04610be | 13 | |
GaiSensei | 0:4101acb9ab42 | 14 | #include "mbed.h" |
GaiSensei | 1:b868d04610be | 15 | #include "rtos.h" |
GaiSensei | 0:4101acb9ab42 | 16 | #include <cmath> |
GaiSensei | 1:b868d04610be | 17 | |
GaiSensei | 0:4101acb9ab42 | 18 | const float coefficients[6] = {4.7378, -9.0288, 14.136, -10.126, 3.2801, -0.3927}; |
GaiSensei | 0:4101acb9ab42 | 19 | AnalogIn input(p15); |
GaiSensei | 0:4101acb9ab42 | 20 | |
GaiSensei | 1:b868d04610be | 21 | //Lit la tension sur la pin 15 et effectue la conversion analogue à digitale sur 16 bits. Retourne la tension lue en volts. |
GaiSensei | 0:4101acb9ab42 | 22 | float read_voltage() |
GaiSensei | 0:4101acb9ab42 | 23 | { |
GaiSensei | 0:4101acb9ab42 | 24 | const float ratio = 19859.4; |
GaiSensei | 0:4101acb9ab42 | 25 | float voltage = (float) input.read_u16(); |
GaiSensei | 0:4101acb9ab42 | 26 | return voltage / ratio; |
GaiSensei | 0:4101acb9ab42 | 27 | } |
GaiSensei | 0:4101acb9ab42 | 28 | |
GaiSensei | 1:b868d04610be | 29 | //Calcul le niveau du liquide à partir des coefficients de la courbe de régression et de la tension lue. |
GaiSensei | 0:4101acb9ab42 | 30 | float get_liquid_level_cm(const float* coefficients, const int number_of_coefficients, const float hall_sensor_voltage) |
GaiSensei | 0:4101acb9ab42 | 31 | { |
GaiSensei | 0:4101acb9ab42 | 32 | float liquid_level_cm = 54; |
GaiSensei | 0:4101acb9ab42 | 33 | for(int i=0; i<number_of_coefficients; i++) |
GaiSensei | 0:4101acb9ab42 | 34 | { |
GaiSensei | 0:4101acb9ab42 | 35 | liquid_level_cm -= pow(hall_sensor_voltage, (float)i) * coefficients[i]; |
GaiSensei | 0:4101acb9ab42 | 36 | } |
GaiSensei | 0:4101acb9ab42 | 37 | return liquid_level_cm; |
GaiSensei | 0:4101acb9ab42 | 38 | } |
GaiSensei | 0:4101acb9ab42 | 39 | |
GaiSensei | 1:b868d04610be | 40 | //Appel les fonctions de lecture et de calcul du niveau. Affiche le niveau. |
GaiSensei | 1:b868d04610be | 41 | void read_and_display_level_cm(void const *args) |
GaiSensei | 0:4101acb9ab42 | 42 | { |
GaiSensei | 0:4101acb9ab42 | 43 | float voltage; |
GaiSensei | 0:4101acb9ab42 | 44 | float liquid_level_cm; |
GaiSensei | 1:b868d04610be | 45 | voltage = read_voltage(); |
GaiSensei | 1:b868d04610be | 46 | liquid_level_cm = get_liquid_level_cm(coefficients, 6, voltage); |
GaiSensei | 1:b868d04610be | 47 | printf("Niveau du liquide (cm) : %f\r\n", liquid_level_cm); |
GaiSensei | 1:b868d04610be | 48 | } |
GaiSensei | 1:b868d04610be | 49 | |
GaiSensei | 1:b868d04610be | 50 | //Lit, calcul et affiche le niveau du liquide à toutes les 50 millisecondes. |
GaiSensei | 1:b868d04610be | 51 | int main() |
GaiSensei | 1:b868d04610be | 52 | { |
GaiSensei | 1:b868d04610be | 53 | RtosTimer timer(read_and_display_level_cm, osTimerPeriodic); |
GaiSensei | 1:b868d04610be | 54 | timer.start(50); |
GaiSensei | 0:4101acb9ab42 | 55 | |
GaiSensei | 0:4101acb9ab42 | 56 | while(1) |
GaiSensei | 0:4101acb9ab42 | 57 | { |
GaiSensei | 0:4101acb9ab42 | 58 | } |
GaiSensei | 1:b868d04610be | 59 | } |