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 6:5a2c3d7d4623, committed 2022-06-16
- Comitter:
- Giamarchi
- Date:
- Thu Jun 16 17:05:58 2022 +0000
- Parent:
- 5:46a732673cc5
- Commit message:
- maj
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/anemo.h Thu Jun 16 17:05:58 2022 +0000
@@ -0,0 +1,115 @@
+//==============================================================================
+// Fichier : anemo.h
+//
+// Description de fonctions utilisées pour la station météo
+//==============================================================================
+// Déclaration des variables et des constantes
+
+InterruptIn Anem(PB_4); // La ligne est déclarée en interruption
+Timer Fenetre_Temps; // Déclaration d'un compteur
+Ticker Tick_Anemo;
+
+uint16_t nombre;
+int16_t vitesse_anemo; // vitesse anemometre
+uint8_t etat_anemo;
+uint8_t anemo_ok;
+
+void ISR_Compteur(void) // Fonction d'interruption (Interrupt Sub Routine)
+{
+ nombre++; // Compte le nombre de rotation de l'axe
+}
+
+void Init_Anemo(void)
+{
+ Anem.mode(PullUp); // Activation résistance de Pullup
+ etat_anemo = 0; // Initialisation de la machine à états
+ anemo_ok = 0; // Lecture non disponible
+}
+//==============================================================================
+// Fonction : Gestion Anemometre
+// Entrée : On Off de la tache
+// Sortie : Pas de paramètre en sortie
+// Interne: variable d'état et de mesure
+
+void Gestion_Anemometre (unsigned int val_anemo)
+{
+ switch (etat_anemo)
+ {
+ case 0: // Tache au repos
+ if((val_anemo & 0x02) == 0x02)
+ etat_anemo = 1;
+ else
+ {
+ anemo_ok = 0;
+ Fenetre_Temps.stop(); // Mettre à 0
+ Anem.disable_irq();
+ }
+ break;
+ case 1:
+ Fenetre_Temps.start(); // Déclenche le timer
+ Fenetre_Temps.reset(); // Mettre à 0
+ Anem.rise(&ISR_Compteur); // Interruption sur front montant
+ Anem.fall(&ISR_Compteur); // et sur front descendant
+ Anem.enable_irq();
+
+ etat_anemo = 2;
+ break;
+ case 2:
+ if(Fenetre_Temps.read_ms() >= 1000) // Mesure d'une fréquence
+ {
+ vitesse_anemo = nombre/2; // Formule de conversion
+ nombre = 0;
+ Fenetre_Temps.stop(); // Mettre à 0
+ etat_anemo = 3;
+ }
+ break;
+ case 3: // Lecture disponible
+ anemo_ok = 1;
+ etat_anemo = 0;
+ break;
+ default:
+ etat_anemo = 0;
+ break;
+ }
+}
+//==============================================================================
+// Fonction : Lecture Anemometre
+// Entrée : Pas de paramètres en entrée
+// Sortie : vitesse anemometre
+// Interne: variable d'état
+
+int Lecture_Anemometre(void)
+{
+int resultat;
+
+ if (anemo_ok == 1)
+ {
+ resultat = vitesse_anemo;
+ anemo_ok = 0;
+ }
+ else
+ {
+ resultat = 0;
+ }
+ return resultat;
+}
+//==============================================================================
+// Nucleo - L031K6
+
+// 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/fonctions.h Sat Mar 26 09:26:26 2022 +0000
+++ b/fonctions.h Thu Jun 16 17:05:58 2022 +0000
@@ -3,49 +3,28 @@
//
// Description de fonctions utilisées pour la station météo
//==============================================================================
-#include "mbed.h"
-// Déclaration des variables et des constantes
-
-InterruptIn Anem(PB_4); // La ligne est déclarée en interruption
-Timer Fenetre_Temps; // Déclaration d'un compteur
+//#include "mbed.h"
+// #include <string.h>
-uint16_t nombre;
+//==============================================================================
+// 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
-void ISR_Compteur(void) // Fonction d'interruption (Interrupt Sub Routine)
-{
- nombre++; // Compte le nombre de rotation de l'axe
-}
+//==============================================================================
+// Déclaration des variables et des constante
+const char * const titre[] = {"Station Meteo","1.0",};
+//==============================================================================
+// Déclaration des fonctions
void Init_Fonctions(void)
{
- Anem.mode(PullUp); // Activation résistance de Pullup
- Fenetre_Temps.start(); // Déclenche le timer
- Anem.rise(&ISR_Compteur); // Interruption sur front montant
- Anem.fall(&ISR_Compteur);
+ pc.printf("\r\n%s",titre[0]);
+ pc.printf("\tV%s\r\n",titre[1]);
+ pc.printf("FabLab Nimes\r\n");
}
-//==============================================================================
-// Fonction : Girouette
-// Entrée : Pas de paramètres en entrée
-// Sortie : vitesse du vent en 16bits
-
-int16_t Anemometre (void)
-{
-int16_t vit; // variable locale
-
- if(Fenetre_Temps.read_ms() >= 1000) // Mesure d'une fréquence
- {
- vit = nombre/8; // Formule de conversion
- nombre = 0;
- Fenetre_Temps.reset();
- }
- else
- {
- vit = -1; // Lecture non disponible
- }
- return vit;
-}
-
-// Nucleo - L432KC
+
+// Nucleo - L031K6
// PA_9 Vin
// PA_10 Gnd
@@ -62,5 +41,3 @@
// PA_11 Aref
// PB_5 3V3
// PB_4 PB_3
-
-
--- a/main.cpp Sat Mar 26 09:26:26 2022 +0000
+++ b/main.cpp Thu Jun 16 17:05:58 2022 +0000
@@ -3,81 +3,74 @@
// Initiation à la Programmation
// Auteur : Frédéric Giamarchi
-// Date : 24 mars 2022
-// TP : Liaison Bluetooth
+// Date : 04 juin 2022
+// TP : Station Meteo
//
// 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
-#include "soft_uart.h"
-
-//==============================================================================
-// 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
+#include "serial.h"
+#include "anemo.h"
//==============================================================================
// Déclaration des variables
-
-char c; // variable de type caractère
+unsigned char c; // variable de type caractère
float temp; // variable de type réel
-int16_t vitesse; // variable de type 16 bits signée
-char tab[10]; // tableau de variable de type caractère
-char buf[10];
-uint8_t ptr, k;
+unsigned int vitesse; // variable de type 16 bits signée
+unsigned int etat;
+unsigned int cmd_menu;
//==============================================================================
// Début du Programme
int main() // Fonction principale
{
- Init_Fonctions(); // Exécute cette fonction
- pc.printf("\r\nFabLab Bluetooth\r\n\n");
-
- init_uart(); // Initialise la liaison série soft
- printStr("FabLab Bluetooth\r\n");
- ptr = 0;
- k = 0;
+ Init_Fonctions(); // Exécute cette fonction
+
+ Init_Serial();
+
+ etat = 0;
//==============================================================================
// Boucle Infinie
- while(1)
+ while(true)
{
- if (kbhit()) // Un caractère est reçu sur le BT
- {
- buf[k] = _getchar(); // Mémorise le carcatère dans un tableau
-
- if((buf[k] == 0x0A) || (buf[k] == 0x0D)) // Test touche entrée en mode ASCII
- {
- buf[k] = 0; // Transforme le tableau en chaine de caractères
- k = 0; // Met le pointeur à 0
- pc.printf("%s\n\r",buf); // Envoi le texte vers le PC
- }
- else
- {
- k++; // incrémente pour lire le prochain caractère
- }
-
- }
- if(pc.readable()) // Si appui caractère au clavier
+ Commande_Up(); // Lecture d'une commande montante
+
+ switch (etat)
{
- tab[ptr] = pc.getc(); // Mémorise le caractère et vide le registre de réception
-
- if((tab[ptr] == 0x0A) || (tab[ptr] == 0x0D)) // Test touche entrée en mode ASCII
- {
- tab[ptr] = 0; // Transforme le tableau en chaine de caractères
- ptr = 0;
- printStr(tab); // Envoi le texte vers le BT
- printStr("\r\n");
- }
- else
- {
- ptr++;
- }
+ case 0: // Initialisation du système
+ Init_Anemo();
+
+ cmd_menu = 0;
+ etat = 1;
+ break;
+ case 1: // Menu
+ Menu();
+ cmd_menu = Get_Config();
+ etat = 2;
+ break;
+ case 2: // Gestion des Instrumesnts
+ // Gestion_Temperature(cmd_menu);
+ Gestion_Anemometre(cmd_menu);
+ // Gestion_Girouette(cmd_menu);
+ // Gestion_Pluviometre(cmd_menu);
+ etat = 3;
+ break;
+ case 3: // Gestion des données
+ vitesse = Lecture_Anemometre();
+ if(vitesse > 0)
+ {
+ pc.printf("#A%d\r\n",vitesse);
+ }
+ etat = 1;
+ break;
+ default:
+ etat = 0;
+ break;
}
-
- } // Fin du while(1)
+ }// Fin du while(true)
//==============================================================================
-} // Fin du Programme
-//==============================================================================
\ No newline at end of file
+}// Fin du Programme
+//==============================================================================
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/serial.h Thu Jun 16 17:05:58 2022 +0000
@@ -0,0 +1,104 @@
+//==============================================================================
+// Fichier : serial.h
+//
+// Description de fonctions utilisées pour la communication série
+//==============================================================================
+// Déclarations des ressources
+//#include "soft_uart.h"
+#include "mbed.h"
+//==============================================================================
+
+
+//==============================================================================
+// Déclaration des variables
+char cmd[10]; // tableau de variable de type caractère
+char buf[10];
+int ptr, k;
+int config_menu;
+
+//==============================================================================
+void Init_Serial(void)
+{
+ ptr = 0;
+ config_menu = 1;
+// k = 0;
+
+ // init_uart(); // Initialise la liaison série soft
+ // printStr("FabLab Bluetooth\r\n");
+}
+
+void Commande_Up(void)
+{
+/* if (kbhit()) // Un caractère est reçu sur le BT
+ {
+ buf[k] = _getchar(); // Mémorise le carcatère dans un tableau
+
+ if((buf[k] == 0x0A) || (buf[k] == 0x0D)) // Test touche entrée en mode ASCII
+ {
+ buf[k] = 0; // Transforme le tableau en chaine de caractères
+ k = 0; // Met le pointeur à 0
+ pc.printf("%s\n\r",buf); // Envoi le texte vers le PC
+ }
+ else
+ {
+ k++; // incrémente pour lire le prochain caractère
+ }
+
+ }
+*/
+ if(pc.readable()) // Si appui caractère au clavier
+ {
+ cmd[ptr] = pc.getc(); // Mémorise le caractère et vide le registre de réception
+
+ if((cmd[ptr] == 0x0A) || (cmd[ptr] == 0x0D)) // Test touche entrée en mode ASCII
+ {
+ cmd[ptr] = 0; // Transforme le tableau en chaine de caractères
+ ptr = 0;
+
+ if(config_menu & 0x01) // Controle Echo On/Off
+ {
+ pc.printf("%s\n\r",cmd); // Envoi le texte vers le PC
+ }
+ }
+ else
+ {
+ ptr++;
+ }
+ }
+}
+
+void Menu(void)
+{
+
+ if(cmd[0] == '$')
+ {
+ switch (cmd[1])
+ {
+ case 'A': // Anémomètre On
+ config_menu = config_menu | 0b00000010;
+ break;
+ case 'a': // Anémomètre Off
+ config_menu = config_menu & 0b11111101;
+ break;
+ case 'E': // Echo du message On
+ config_menu = config_menu | 0b00000001;
+ break;
+ case 'e': // Echo du message Off
+ config_menu = config_menu & 0b11111110;
+ break;
+ case 'T': // Thermomètre On
+ config_menu = config_menu | 0b00000100;
+ break;
+ case 't': // Thermomètre Off
+ config_menu = config_menu & 0b11111011;
+ break;
+ default:
+ break;
+ }
+ }
+}
+
+int Get_Config(void)
+{
+ return config_menu;
+}