FabLab Nîmes / Mbed 2 deprecated FabLab_Station_Meteo

Dependencies:   mbed

Committer:
Giamarchi
Date:
Thu Jun 16 17:05:58 2022 +0000
Revision:
6:5a2c3d7d4623
maj

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Giamarchi 6:5a2c3d7d4623 1 //==============================================================================
Giamarchi 6:5a2c3d7d4623 2 // Fichier : anemo.h
Giamarchi 6:5a2c3d7d4623 3 //
Giamarchi 6:5a2c3d7d4623 4 // Description de fonctions utilisées pour la station météo
Giamarchi 6:5a2c3d7d4623 5 //==============================================================================
Giamarchi 6:5a2c3d7d4623 6 // Déclaration des variables et des constantes
Giamarchi 6:5a2c3d7d4623 7
Giamarchi 6:5a2c3d7d4623 8 InterruptIn Anem(PB_4); // La ligne est déclarée en interruption
Giamarchi 6:5a2c3d7d4623 9 Timer Fenetre_Temps; // Déclaration d'un compteur
Giamarchi 6:5a2c3d7d4623 10 Ticker Tick_Anemo;
Giamarchi 6:5a2c3d7d4623 11
Giamarchi 6:5a2c3d7d4623 12 uint16_t nombre;
Giamarchi 6:5a2c3d7d4623 13 int16_t vitesse_anemo; // vitesse anemometre
Giamarchi 6:5a2c3d7d4623 14 uint8_t etat_anemo;
Giamarchi 6:5a2c3d7d4623 15 uint8_t anemo_ok;
Giamarchi 6:5a2c3d7d4623 16
Giamarchi 6:5a2c3d7d4623 17 void ISR_Compteur(void) // Fonction d'interruption (Interrupt Sub Routine)
Giamarchi 6:5a2c3d7d4623 18 {
Giamarchi 6:5a2c3d7d4623 19 nombre++; // Compte le nombre de rotation de l'axe
Giamarchi 6:5a2c3d7d4623 20 }
Giamarchi 6:5a2c3d7d4623 21
Giamarchi 6:5a2c3d7d4623 22 void Init_Anemo(void)
Giamarchi 6:5a2c3d7d4623 23 {
Giamarchi 6:5a2c3d7d4623 24 Anem.mode(PullUp); // Activation résistance de Pullup
Giamarchi 6:5a2c3d7d4623 25 etat_anemo = 0; // Initialisation de la machine à états
Giamarchi 6:5a2c3d7d4623 26 anemo_ok = 0; // Lecture non disponible
Giamarchi 6:5a2c3d7d4623 27 }
Giamarchi 6:5a2c3d7d4623 28 //==============================================================================
Giamarchi 6:5a2c3d7d4623 29 // Fonction : Gestion Anemometre
Giamarchi 6:5a2c3d7d4623 30 // Entrée : On Off de la tache
Giamarchi 6:5a2c3d7d4623 31 // Sortie : Pas de paramètre en sortie
Giamarchi 6:5a2c3d7d4623 32 // Interne: variable d'état et de mesure
Giamarchi 6:5a2c3d7d4623 33
Giamarchi 6:5a2c3d7d4623 34 void Gestion_Anemometre (unsigned int val_anemo)
Giamarchi 6:5a2c3d7d4623 35 {
Giamarchi 6:5a2c3d7d4623 36 switch (etat_anemo)
Giamarchi 6:5a2c3d7d4623 37 {
Giamarchi 6:5a2c3d7d4623 38 case 0: // Tache au repos
Giamarchi 6:5a2c3d7d4623 39 if((val_anemo & 0x02) == 0x02)
Giamarchi 6:5a2c3d7d4623 40 etat_anemo = 1;
Giamarchi 6:5a2c3d7d4623 41 else
Giamarchi 6:5a2c3d7d4623 42 {
Giamarchi 6:5a2c3d7d4623 43 anemo_ok = 0;
Giamarchi 6:5a2c3d7d4623 44 Fenetre_Temps.stop(); // Mettre à 0
Giamarchi 6:5a2c3d7d4623 45 Anem.disable_irq();
Giamarchi 6:5a2c3d7d4623 46 }
Giamarchi 6:5a2c3d7d4623 47 break;
Giamarchi 6:5a2c3d7d4623 48 case 1:
Giamarchi 6:5a2c3d7d4623 49 Fenetre_Temps.start(); // Déclenche le timer
Giamarchi 6:5a2c3d7d4623 50 Fenetre_Temps.reset(); // Mettre à 0
Giamarchi 6:5a2c3d7d4623 51 Anem.rise(&ISR_Compteur); // Interruption sur front montant
Giamarchi 6:5a2c3d7d4623 52 Anem.fall(&ISR_Compteur); // et sur front descendant
Giamarchi 6:5a2c3d7d4623 53 Anem.enable_irq();
Giamarchi 6:5a2c3d7d4623 54
Giamarchi 6:5a2c3d7d4623 55 etat_anemo = 2;
Giamarchi 6:5a2c3d7d4623 56 break;
Giamarchi 6:5a2c3d7d4623 57 case 2:
Giamarchi 6:5a2c3d7d4623 58 if(Fenetre_Temps.read_ms() >= 1000) // Mesure d'une fréquence
Giamarchi 6:5a2c3d7d4623 59 {
Giamarchi 6:5a2c3d7d4623 60 vitesse_anemo = nombre/2; // Formule de conversion
Giamarchi 6:5a2c3d7d4623 61 nombre = 0;
Giamarchi 6:5a2c3d7d4623 62 Fenetre_Temps.stop(); // Mettre à 0
Giamarchi 6:5a2c3d7d4623 63 etat_anemo = 3;
Giamarchi 6:5a2c3d7d4623 64 }
Giamarchi 6:5a2c3d7d4623 65 break;
Giamarchi 6:5a2c3d7d4623 66 case 3: // Lecture disponible
Giamarchi 6:5a2c3d7d4623 67 anemo_ok = 1;
Giamarchi 6:5a2c3d7d4623 68 etat_anemo = 0;
Giamarchi 6:5a2c3d7d4623 69 break;
Giamarchi 6:5a2c3d7d4623 70 default:
Giamarchi 6:5a2c3d7d4623 71 etat_anemo = 0;
Giamarchi 6:5a2c3d7d4623 72 break;
Giamarchi 6:5a2c3d7d4623 73 }
Giamarchi 6:5a2c3d7d4623 74 }
Giamarchi 6:5a2c3d7d4623 75 //==============================================================================
Giamarchi 6:5a2c3d7d4623 76 // Fonction : Lecture Anemometre
Giamarchi 6:5a2c3d7d4623 77 // Entrée : Pas de paramètres en entrée
Giamarchi 6:5a2c3d7d4623 78 // Sortie : vitesse anemometre
Giamarchi 6:5a2c3d7d4623 79 // Interne: variable d'état
Giamarchi 6:5a2c3d7d4623 80
Giamarchi 6:5a2c3d7d4623 81 int Lecture_Anemometre(void)
Giamarchi 6:5a2c3d7d4623 82 {
Giamarchi 6:5a2c3d7d4623 83 int resultat;
Giamarchi 6:5a2c3d7d4623 84
Giamarchi 6:5a2c3d7d4623 85 if (anemo_ok == 1)
Giamarchi 6:5a2c3d7d4623 86 {
Giamarchi 6:5a2c3d7d4623 87 resultat = vitesse_anemo;
Giamarchi 6:5a2c3d7d4623 88 anemo_ok = 0;
Giamarchi 6:5a2c3d7d4623 89 }
Giamarchi 6:5a2c3d7d4623 90 else
Giamarchi 6:5a2c3d7d4623 91 {
Giamarchi 6:5a2c3d7d4623 92 resultat = 0;
Giamarchi 6:5a2c3d7d4623 93 }
Giamarchi 6:5a2c3d7d4623 94 return resultat;
Giamarchi 6:5a2c3d7d4623 95 }
Giamarchi 6:5a2c3d7d4623 96 //==============================================================================
Giamarchi 6:5a2c3d7d4623 97 // Nucleo - L031K6
Giamarchi 6:5a2c3d7d4623 98
Giamarchi 6:5a2c3d7d4623 99 // PA_9 Vin
Giamarchi 6:5a2c3d7d4623 100 // PA_10 Gnd
Giamarchi 6:5a2c3d7d4623 101 // NRST NRST
Giamarchi 6:5a2c3d7d4623 102 // Gnd 5V
Giamarchi 6:5a2c3d7d4623 103 // PA_12 PA_2
Giamarchi 6:5a2c3d7d4623 104 // PB_0 PA_7
Giamarchi 6:5a2c3d7d4623 105 // PB_7 PA_6
Giamarchi 6:5a2c3d7d4623 106 // PB_6 PA_5
Giamarchi 6:5a2c3d7d4623 107 // PB_1 PA_4
Giamarchi 6:5a2c3d7d4623 108 // NC PA_3
Giamarchi 6:5a2c3d7d4623 109 // NC PA_1
Giamarchi 6:5a2c3d7d4623 110 // PA_8 PA_0
Giamarchi 6:5a2c3d7d4623 111 // PA_11 Aref
Giamarchi 6:5a2c3d7d4623 112 // PB_5 3V3
Giamarchi 6:5a2c3d7d4623 113 // PB_4 PB_3
Giamarchi 6:5a2c3d7d4623 114
Giamarchi 6:5a2c3d7d4623 115