SP1 vesr 3

Dependencies:   Sht31 WifiEsp8266 PWM EADOG

Revision:
0:45857c3d5769
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Tue Jun 08 10:39:36 2021 +0000
@@ -0,0 +1,165 @@
+#include "mbed.h"
+#include "EADOG.h"
+#include "Small_7.h"
+#include "pwm.h"
+#include "Fonts/ArialR12x14.h"
+#include "wifiesp8266.h"
+#include "Sht31.h"
+
+EADOG lcd(PC_12, PC_10, PA_1, PA_0, PA_4, DOGM128); // MOSI, SCL, Reset, A0, CS
+Sht31 capt(PB_9,PB_8);
+InterruptIn helice(PD_2);
+InterruptIn VoieA(PB_13); //interuption de la voie A port P
+DigitalIn VoieB(PA_10);  //InterruptIn VoieB(PA_10);
+WifiEsp8266 Wifi(PA_11,PA_12); // WifiEsp8266(PinName Txd, PinName Rxd);
+DigitalOut Led(LED1);
+
+float VitesseAir = 0; //initialisation de la VitesseAir
+float Frequencehelice = 0;
+int Temperature = 0;
+int Humidite = 0;
+unsigned char ConsVitFluxAir =0;
+float FrequenceCalc = 0;
+bool NewFrequence = false;
+
+// mesure frequence helice
+Timer timer;
+void MesPeriode(void)
+{
+    Led= 1;
+    FrequenceCalc = timer.read();
+    timer.reset();
+    FrequenceCalc = 1.0/FrequenceCalc/2.0;
+    NewFrequence = true;
+    Led=0;
+}
+
+// codeur
+bool BoutonChange;
+unsigned char inc100(unsigned char _i)
+{
+    if (_i<100) {
+        _i++;
+        BoutonChange = true;
+    }
+    return _i;
+}
+unsigned char dec0(unsigned char _i)
+{
+    if (_i>0) {
+        _i--;
+        BoutonChange = true;
+    }
+    return _i;
+}
+void FrontMontantA(void)
+{
+    if (VoieB.read()==0) ConsVitFluxAir=inc100(ConsVitFluxAir);
+    else ConsVitFluxAir=dec0(ConsVitFluxAir);
+}
+void FrontDescA(void)     //fond descene
+{
+    if(VoieB.read()==1) ConsVitFluxAir=inc100(ConsVitFluxAir);   //jai rmplacé 0''
+    else ConsVitFluxAir=dec0(ConsVitFluxAir);
+}
+
+// pour acquisition entree.
+bool acquerir = false;
+Ticker TickerAcq;
+void TraitAcq(void)
+{
+    acquerir = true;
+}
+//drapeau pour indiquer nouvel affichage
+bool affichage = false;
+int main()
+{
+    Serial PC(USBTX,USBRX);
+    PC.baud(Baud);
+    PC.printf("SP1 start\r\n");
+    AnalogIn EntVitesseAir(PC_5); //pour faire varier VitesseAir
+    char WifiPhrase[maxdata];
+    Led =1;
+    // mesure frequence helice
+    timer.reset();
+    timer.start();
+    // moteur pwm
+    InitPwmMot(); // initilise PWM : voir lib T = 20ms, Largeur Imp 1ms
+
+    // codeur
+    ConsVitFluxAir = 0;
+    BoutonChange = true;
+    VoieA.fall(&FrontDescA); //frond descendant
+    VoieA.rise(&FrontMontantA); //frond montant
+
+// ticker acquisition toutes les secondes
+    lcd.locate(0,1);
+    lcd.printf("Cons Vit Air");//on affiche la consigne
+    lcd.locate(0,14);
+    lcd.printf("Vitesse");//on affiche la vitesse
+    lcd.locate(0,27);
+    lcd.printf("Temperature");//on affiche la température
+    lcd.locate(0,40);
+    lcd.printf("Humidite");//on affiche l'humidité
+    lcd.locate(0,53);
+    lcd.printf("Freq. Helice");//on afiche la fréquence d'helice
+    helice.rise(&MesPeriode);
+    TickerAcq.attach(&TraitAcq,0.1); // ticker toutes les secondes pour lire vitesse flux air
+    while (true) {
+        // wifi
+        if (Wifi.dataready()) {
+            strcpy(WifiPhrase,Wifi.read());
+            PC.printf("%s\r\n",WifiPhrase); // pour phase de test
+            switch (WifiPhrase[1]) {
+                case 'F':
+                    ConsVitFluxAir=inc100(ConsVitFluxAir);
+                    Wifi.printf("$B%u\r\n",ConsVitFluxAir);
+                    lcd.locate(60,1);
+                    lcd.printf("%03u%%\r\n",ConsVitFluxAir);//on affiche la consigne
+                    break;
+                case 'G' :
+                    ConsVitFluxAir=dec0(ConsVitFluxAir);
+                    Wifi.printf("$B%u\r\n",ConsVitFluxAir);
+                    lcd.locate(60,1);
+                    lcd.printf("%03u%%\r\n",ConsVitFluxAir);//on affiche la consigne
+                    break;
+                default :
+                    ;
+            }
+        }
+        if (NewFrequence==true) {
+            Frequencehelice = FrequenceCalc;
+            NewFrequence = false;
+        }
+        // acquisition des données toutes les secondes
+        if (acquerir == true) {
+            VitesseAir = EntVitesseAir.read();
+            VitesseAir = VitesseAir*(72.0*2.0*3.46/5.0);//Avec N, on peut trouver VitesseAir
+            // hum et temperature
+            Temperature = capt.readTemperature();
+            Humidite = capt.readHumidity();
+            Wifi.printf("$Z,%0.0f,%0i,%0i\r\n",VitesseAir,Temperature,Humidite);
+            affichage = true;
+        }
+        if (BoutonChange==true) {
+            SetPwmMot(ConsVitFluxAir); // on peut commande moteur 50% max -> 15ms
+            BoutonChange = false;
+            lcd.locate(60,1);
+            lcd.printf("%03u%%\r\n",ConsVitFluxAir);//on affiche la consigne
+            Wifi.printf("$B%u\r\n",ConsVitFluxAir);
+            // wait(0.001);
+        }
+
+        if (affichage == true) {
+            lcd.locate(50,14);
+            lcd.printf("%03.0fkm/h",VitesseAir);//on affiche la vitesse
+            lcd.locate(60,27);
+            lcd.printf("%03iC\r\n",Temperature);//on affiche la température
+            lcd.locate(60,40);
+            lcd.printf("%03i%%\r\n",Humidite);//on affiche l'humidité
+            lcd.locate(60,53);
+            lcd.printf("%03.0fHz\r\n",Frequencehelice);//on afiche la fréquence d'helice
+            affichage = false;
+        }
+    }
+}