Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
Revision 3:c75f8eddeaf4, committed 2022-03-02
- Comitter:
- Giamarchi
- Date:
- Wed Mar 02 22:28:23 2022 +0000
- Parent:
- 2:c1a4641eeacf
- Commit message:
- Station Meteo; Anemometre
Changed in this revision
| fonctions.h | Show annotated file Show diff for this revision Revisions of this file |
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/fonctions.h Thu Feb 17 18:16:35 2022 +0000
+++ b/fonctions.h Wed Mar 02 22:28:23 2022 +0000
@@ -3,52 +3,63 @@
//
// Description de fonctions utilisées pour la station météo
//==============================================================================
+#include "mbed.h"
// Déclaration des variables et des constantes
-
-// Tableau de correspondance des angles avec l'encodeur optique
-const int16_t table[32] = { -1, 0, 72, 12,144,132, 84,120,
- 216,348,204, 24,156,168,192,180,
- 288,300, 60, 48,276,312, 96,108,
- 228,336,240, 36,264,324,252, -1};
-DigitalIn B0(PB_4); // Encodeur bit de poids faible
-DigitalIn B1(PB_5);
-DigitalIn B2(PA_11);
-DigitalIn B3(PA_8);
-DigitalIn B4(PB_1); // Encodeur bit de poids fort
+InterruptIn Anem(PB_4); // La ligne est déclarée en interruption
+Timer Fenetre_Temps; // Déclaration d'un compteur
+
+uint16_t nombre;
-DigitalOut CMD_LED_IR(PB_6); // Commande des 5 Leds infrarouges
+void ISR_Compteur(void) // Fonction d'interruption (Interrupt Sub Routine)
+{
+ nombre++; // Compte le nombre de rotation de l'axe
+}
void Init_Fonctions(void)
{
-// B0.mode(PullUp);
-// B1.mode(PullUp);
-// B2.mode(PullUp);
-// B3.mode(PullUp);
-// B4.mode(PullUp);
+ Anem.mode(PullUp); // Activation résistance de Pullup
+ Fenetre_Temps.start(); // Déclenche le timer
+ Anem.rise(&ISR_Compteur); // Interruption sur front montant
}
//==============================================================================
// Fonction : Girouette
// Entrée : Pas de paramètres en entrée
-// Sortie : Angle, multiple de 12° et -1 en cas d'erreur.
+// Sortie : vitesse du vent en 16bits
-int16_t Girouette (void)
+int16_t Anemometre (void)
{
-uint16_t direction = 0; // variable initialisée à 0
-// Activation des 5 Leds infrarouges
- CMD_LED_IR = 1;
-// Délai pour laisser le temps aux aux Leds IR de s'activer
- wait_us(50);
-// Lecture de l'encodeur optique issu de la girouette
- direction = B0; // Bit de poids faible à droite
- direction |= (B1<<1);
- direction |= (B2<<2);
- direction |= (B3<<3);
- direction |= (B4<<4); // Bit de poids fort en position 5
- direction = direction & 0b00011111;
-// Résultat -> direction = 0b000 B4 B3 B2 B1 B0
-// Coupure des 5 Leds infrarouges
- CMD_LED_IR = 0;
-// Conversion en angle par lecture dans la table
- return table[direction];
-}
\ No newline at end of file
+int16_t vit; // variable locale
+
+ if(Fenetre_Temps.read_ms() > 1000) // Mesure d'une fréquence
+ {
+ vit = nombre/4; // Formule de conversion
+ nombre = 0;
+ Fenetre_Temps.reset();
+ }
+ else
+ {
+ vit = -1; // Lecture non disponible
+ }
+ return vit;
+}
+
+// Nucleo - L432KC
+
+// PA_9 Vin
+// PA_10 Gnd
+// NRST NRST
+// Gnd 5V
+// PA_12 PA_2
+// PB_0 PA_7
+// PB_7 PA_6
+// PB_6 PA_5
+// PB_1 PA_4
+// NC PA_3
+// NC PA_1
+// PA_8 PA_0
+// PA_11 Aref
+// PB_5 3V3
+// PB_4 PB_3
+
+
--- a/main.cpp Thu Feb 17 18:16:35 2022 +0000
+++ b/main.cpp Wed Mar 02 22:28:23 2022 +0000
@@ -3,9 +3,9 @@
// Initiation à la Programmation
// Auteur : Frédéric Giamarchi
-// Date : 3 fev. 2022
-// TP : Girouette
-// Encodeur optique pour girouette
+// Date : 3 mars 2022
+// TP : Anémomètre
+// Lecture optique par interruption
// Utilisation de fonctions décrites dans un fichier séparé
//==============================================================================
// Déclarations des ressources
@@ -21,31 +21,26 @@
// Déclaration des variables
char c; // variable de type caractère
-float temp; // variable de type réel
-int16_t angle;
+float temp; // variable de type réel
+int16_t vitesse; // variable de type 16 bits signée
//==============================================================================
// Début du Programme
int main() // Fonction principale
{
Init_Fonctions(); // Exécute cette fonction
-
- pc.printf("\r\nFabLab TP Girouette\r\n\n");
-
+ pc.printf("\r\nFabLab TP Anemometre\r\n\n");
+
//==============================================================================
// Boucle Infinie
while(1)
{
- wait(1.0); // Toutes les secondes
+ vitesse = Anemometre();
- angle = Girouette(); // Lecture de la girouette
- if(angle == 0)
- DEL = 1; // La girouette pointe vers le Nord
- else
- DEL = 0;
-
- pc.printf("Dir Vent : %d\n",angle); // Affiche l'angle sur Putty
-
+ if(vitesse != -1) // Lecture disponible
+ {
+ pc.printf("Vit Vent : %d\n",vitesse); // Affichage sur Putty
+ }
} // Fin du while(1)
//==============================================================================
} // Fin du Programme