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
Diff: main.cpp
- Revision:
- 0:278eba15d90b
- Child:
- 1:5fcc88ae8ad4
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Wed Jul 07 11:39:10 2021 +0000
@@ -0,0 +1,197 @@
+/*******************************************************************************
+ Université de Montpellier
+ NemoSpace IUT de Nîmes
+ IniSat Modèle 1 Version 2
+*******************************************************************************/
+// La lecture du GPS utilise une liaison série software
+
+// TP n°5 : Correction
+
+// Exo 1 : Enregistrement des coordonnées GPS sur carte SD
+// Exo 2 : Gestion de messages descendants (Supervision) et montants (Commande)
+// Exo 3 : Tracer sur My Maps votre déplacement autour du batiment (Mission)
+
+#include "mbed.h"
+//#include "platform/mbed_thread.h"
+#include "SDFileSystem.h"
+
+#include "system.h"
+#include "user.h"
+#include "soft_uart.h"
+#include "gps.h"
+
+SDFileSystem sd(PB_5, PB_4, PB_3, PA_11, "sd"); // MOSI, MISO, SCK, CS -> SPI pins on the Inisat
+
+uint8_t etat, etat_mem;
+uint16_t compteur;
+float mes_accu;
+
+uint8_t xb_ptr;
+char xb_buf[10], cmd[3], param[10];
+
+void Rx_interrupt(void);
+
+int main()
+{
+ Init_System();
+ etat = 0;
+ Init_Soft_UART();
+// thread_sleep_for(1000);
+ xb_ptr = 0;
+// Setup a serial interrupt function to receive data
+ xbee.attach(&Rx_interrupt, Serial::RxIrq);
+ __enable_irq();
+
+ wait_ms(1000);
+
+ while (1) {
+// thread_sleep_for(1); // Boucle toutes les 1 milliseconde environ
+ wait_ms(1);
+ compteur++;
+
+// Gestion des modes avec une machine d'états
+ switch (etat) {
+/******************************************************************************/
+// Mode Init : Mise sous tension
+// Initialisation du µC
+ case 0: {
+ Init_User_Fonctions();
+// thread_sleep_for(1000);
+ wait_ms(1000);
+ Stop_Led();
+ GPS_Init();
+ Start_Led();
+ Set_Led(Ve);
+
+// Création d'un fichier "gps_data.txt" sur la carte SD
+ FILE *fp = fopen("/sd/gps_data.txt", "w");
+ if(fp == NULL) {
+ error("Erreur : fichier non accessible en ecriture\n");
+ }
+ pc.printf("Fichier cree!\r\n");
+ xbee.printf("Liaison Sol\r\n");
+
+// Write text in file
+ // fprintf(fp, "Hello World, greats from Inisat!");
+ // pc.printf("Write some words in sdtest.txt on sd/mydir directory\r\n");
+
+// Close file
+ fclose(fp);
+// thread_sleep_for(1000);
+ wait_ms(1000);
+ etat = 1;
+ break; }
+/******************************************************************************/
+// Mode Gestion : Gestion des actions
+// Contrôle du système
+ case 1:
+ mes_accu = Mes_Bat();
+ if(mes_accu < BAT_SEUIL_BAS_1) {
+ etat = 4;
+ Set_Led(Ro);
+ } else {
+ etat = 2;
+ Set_Led(Ve);
+ }
+// thread_sleep_for(1000);
+ wait_ms(1000);
+ break;
+/******************************************************************************/
+// Mode Mission : Acquisition de données
+// Mesure Batterie
+// Mesure Courant faces solaires
+// Stockage
+ case 2:
+ Lect_GPS();
+ GPS_Decodage();
+ Mes_SP();
+ Mes_Temp();
+ mes_accu = Mes_Bat();
+ if(mes_accu > BAT_SEUIL_HAUT_1)
+ {
+ etat = 3;
+ Set_Led(Ro_Ve);
+ }
+ else
+ {
+ etat = 1;
+ }
+// thread_sleep_for(1000);
+// wait_ms(1000);
+ break;
+/******************************************************************************/
+// Mode Radio : Transmission de données
+// Mise en forme pour affichage
+ case 3:
+ Envoi_GPS();
+ Envoi_Mes_Bat();
+// Envoi_Mes_SP();
+// Envoi_Mes_Temp();
+
+// thread_sleep_for(1000);
+// wait_ms(1000);
+ etat = 1;
+ break;
+/******************************************************************************/
+// Mode Survie : Attente recharge de l'accu
+
+ case 4:
+ mes_accu = Mes_Bat();
+ if(mes_accu < BAT_SEUIL_BAS_2) {
+ etat = 5;
+ Stop_User_Fonctions();
+ }
+
+ if(mes_accu > BAT_SEUIL_HAUT_1) {
+ etat = 1;
+ Set_Led(Ve);
+ }
+ break;
+/******************************************************************************/
+// Mode Zombie : Coupure des consommateurs
+// Passage en mode faible consommation
+// Diminution de la fréquence du CPU
+// Passage en mode Sleep
+ case 5:
+ sleep();
+ mes_accu = Mes_Bat();
+ if(mes_accu > BAT_SEUIL_HAUT_1)
+ etat = 0;
+ break;
+/******************************************************************************/
+ default:
+ etat = 0;
+ break;
+/******************************************************************************/
+ } // end switch
+/* if(etat != etat_mem) // Debug des états
+ {
+ pc.printf("Etat_%d\r\n",etat);
+ etat_mem = etat;
+ }*/
+/******************************************************************************/
+ } // end while
+} // end main
+/******************************************************************************/
+void Rx_interrupt(void) {
+ if(xbee.readable())
+ {
+ xb_buf[xb_ptr] = xbee.getc();
+
+ if((xb_buf[xb_ptr] == 0x0A) || (xb_buf[xb_ptr] == 0x0D)) // Test touche entrée en mode ASCII
+ {
+ xb_buf[xb_ptr] = 0; // Transforme le tableau en chaine de caractères
+ xb_ptr = 0;
+ if (xb_buf[0] == '$') // Entete de message valide
+ {
+ cmd[0] = xb_buf[1];
+ xbee.printf("#%c\r\n",cmd[0]+0x20); // Acquittement
+ }
+// xb_ok = 1; // Trame disponible pour décodage
+// pc.printf("%s\n\r",buffer); // Echo
+ }
+ else {
+ xb_ptr++;
+ }
+ }
+}
\ No newline at end of file