FabLab Nîmes / Mbed 2 deprecated FabLab_Girouette

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
Giamarchi
Date:
Thu Feb 17 18:16:35 2022 +0000
Parent:
1:95172f59262a
Commit message:
Girouette

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
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fonctions.h	Thu Feb 17 18:16:35 2022 +0000
@@ -0,0 +1,54 @@
+//==============================================================================
+//  Fichier : fonctions.h
+//  
+//  Description de fonctions utilisées pour la station météo
+//==============================================================================
+//              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
+
+DigitalOut  CMD_LED_IR(PB_6);           // Commande des 5 Leds infrarouges
+
+void Init_Fonctions(void)
+{
+//    B0.mode(PullUp);
+//    B1.mode(PullUp);
+//    B2.mode(PullUp);
+//    B3.mode(PullUp);
+//    B4.mode(PullUp);
+}
+//==============================================================================
+//              Fonction : Girouette
+//  Entrée : Pas de paramètres en entrée
+//  Sortie : Angle, multiple de 12° et -1 en cas d'erreur.
+
+int16_t Girouette (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
--- a/main.cpp	Tue Jan 15 15:55:11 2019 +0000
+++ b/main.cpp	Thu Feb 17 18:16:35 2022 +0000
@@ -1,145 +1,52 @@
-/*************************************/
-//  YNCREA ISEN Nîmes
-//  CSI3 Electronique Numérique
-//
-//  Cours : Systèmes à microcontrôleur
-//  Prof : Frédéric Giamarchi
-//
-//  Date : 15 janv 2019
-//  Test TP 01 : Controle de 8 Dels par 2 Boutons poussoir
-/*************************************/
+//==============================================================================
+//  FabLab Nîmes
+//  Initiation à la Programmation
+//  Auteur : Frédéric Giamarchi
+
+//  Date : 3 fev. 2022
+//  TP : Girouette
+//  Encodeur optique pour girouette
+//  Utilisation de fonctions décrites dans un fichier séparé
+//==============================================================================
+//              Déclarations des ressources
 #include "mbed.h"
+#include "fonctions.h"                  // Appel des fonctions du fichier : fonctions.h
 
-DigitalOut L0(PB_1);
-DigitalOut L1(PB_2);
-DigitalOut L2(PB_10);
-DigitalOut L3(PB_11);
-DigitalOut L4(PB_12);
-DigitalOut L5(PB_13);
-DigitalOut L6(PB_14);
-DigitalOut L7(PB_15);
+//==============================================================================
+//              Déclaration des broches
+DigitalOut  DEL(PA_11);              // Ligne PA_11 sur la carte Nucléo
+Serial      pc(USBTX, USBRX);           // Dialogue Série port USB à 9600 Baud
+
+//==============================================================================
+//              Déclaration des variables
 
-DigitalIn BTN3(PC_6);
-DigitalIn BTN4(PC_5);
+char c;                                 // variable de type caractère
+float temp;                           // variable de type réel
+int16_t angle;
 
-//DigitalOut BZ(PC_7);
-
-//uint8_t L[8] = {L0, L1, L2, L3, L4, L5, L6, L7};
-
-void set_8Dels(uint8_t position)
+//==============================================================================
+//              Début du Programme
+int main()                              // Fonction principale
 {
-    L0 = position & 0x01;
-    L1 = position & 0x02;
-    L2 = position & 0x04;
-    L3 = position & 0x08;
-    L4 = position & 0x10;
-    L5 = position & 0x20;
-    L6 = position & 0x40;
-    L7 = position & 0x80;
-}
-
-uint8_t ptr_3 = 0;
-uint8_t ptr_4 = 0;
-uint8_t pointeur = 1;
-uint8_t compteur = 0;
-uint8_t etat_del = 0;
-/***********************************************/
-// Fonction Appui_BTN3
-// Renvoie l'état actif ou relaché du bouton poussoir BTN3
-uint8_t Appui_BTN3(void)
-{
-uint8_t etat_BTN3 = 0;      // variable état BTN3 à 0 par défaut
+    Init_Fonctions();                   // Exécute cette fonction
     
-    if(!BTN3)               // Test appui sur BTN3
-    {
-        wait(0.2);          // tempo d'anti rebond
-        etat_BTN3 = 1;       // variable à 1
-    }
-    return etat_BTN3;       // La fonction renvoie la valeur 0 ou 1
-}
-/***********************************************/
-// Fonction Appui_BTN4
-// Renvoie l'état actif ou relaché du bouton poussoir BTN4
-uint8_t Appui_BTN4(void)
-{
-uint8_t etat_BTN4 = 0;
+    pc.printf("\r\nFabLab TP Girouette\r\n\n");
     
-    if(!BTN4)
-    {
-        wait(0.2);
-        etat_BTN4 = 1;
-    }
-    return etat_BTN4;    
-}
-/***********************************************/
-int main()
-{ 
+//==============================================================================
+//              Boucle Infinie
     while(1)
     {
-/********       Question 1      ****************/
-/*
-        L0 = Appui_BTN3();          // Contrôle L0 par BTN3
-*/
-/********       Question 2      ****************/   
-/*
-        if(Appui_BTN3())
-        {
-            pointeur <<=1;          // Décalage vers la gauche
-            if(pointeur == 0)       // Test Limite gauche
-                pointeur = 0x80;    // Blocage
-            set_8Dels(pointeur);    // Affichage
-        }
-*/
-/********       Question 3      ****************/
-/*
-        if(Appui_BTN4())
-        {
-            pointeur >>=1;          // Décalage vers la droite
-            if(pointeur == 0)       // Test Limite droite
-                pointeur = 1;       // Blocage
-            set_8Dels(pointeur);
-        }
-*/
-/********       Question 4      ****************/
-
-        wait_ms(10);                // Execution toutes les 10 ms
-        compteur++;                 // Incrémente un compteur temps
+        wait(1.0);                      // Toutes les secondes
         
-        if(Appui_BTN3())
-        {
-            ptr_3++;                // incrémente un pointeur
-            compteur = 0;           // RAZ compteur temps
-        }
-/********       Question 5      ****************/ 
-    
-        if(Appui_BTN4())
-        {
-            ptr_4++;
-            compteur = 0;
-        }    
-/********       Question 4 et 5     ****************/
-
-        if(compteur == 100)         // Est-ce que cela fait 1 sec
-        {
-            if(ptr_3 != 0)          // Test pointeur 3 -> Question 4
-            {
-                // Masque OU logique avec etat_Del
-                // Le masque est un décalage vers la gauche d'un 1 logique
-                // Le nombre de décalage est défini par le pointeur
-                etat_del = etat_del | 1<<(ptr_3 - 1); 
-                ptr_3 = 0;              // Pointeur à 0
-            }  
-            if(ptr_4 != 0)          // Test pointeur 4 -> Question 5
-                // Masque ET logique avec etat_Del
-                // Le masque est un décalage vers la gauche d'un 1 logique
-                // Le nombre de décalage est défini par le pointeur
-                // Ensuite le résultat du masque est inversé
-                etat_del = etat_del & ~(1<<ptr_4 - 1);
-            ptr_4 = 0;
-                 
-            set_8Dels(etat_del);
-        }   
-/***********************************************/
+        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
+        
     }           // Fin du while(1)
-}               // Fin du main()
-/***********************************************/
\ No newline at end of file
+//==============================================================================
+}               // Fin du Programme
+//==============================================================================
\ No newline at end of file
--- a/mbed.bld	Tue Jan 15 15:55:11 2019 +0000
+++ b/mbed.bld	Thu Feb 17 18:16:35 2022 +0000
@@ -1,1 +1,1 @@
-https://os.mbed.com/users/mbed_official/code/mbed/builds/e95d10626187
\ No newline at end of file
+https://os.mbed.com/users/mbed_official/code/mbed/builds/65be27845400
\ No newline at end of file