sp3

Dependencies:   FT800_2 C12832 ADS1231 WifiEsp8266 LTC2309 affichage

Committer:
arkadia
Date:
Thu Jun 10 15:29:17 2021 +0000
Revision:
1:2d11586bb22a
Parent:
0:057ff8b9b8c4
sp2

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nk_ralph 0:057ff8b9b8c4 1 #include "mbed.h"
nk_ralph 0:057ff8b9b8c4 2 #include "affichage.h"
nk_ralph 0:057ff8b9b8c4 3 #include "ltc2309.h"
arkadia 1:2d11586bb22a 4 #include "wifiesp8266.h"
arkadia 1:2d11586bb22a 5 #include "constante.h"
arkadia 1:2d11586bb22a 6 #include "ADS1231.h"
nk_ralph 0:057ff8b9b8c4 7
arkadia 1:2d11586bb22a 8 float FZ;
arkadia 1:2d11586bb22a 9 float FX;
arkadia 1:2d11586bb22a 10 float AngleIncMes;
arkadia 1:2d11586bb22a 11 float AngleIncCons;
arkadia 1:2d11586bb22a 12 float CH0; // PRESSION
nk_ralph 0:057ff8b9b8c4 13 float CH1;
nk_ralph 0:057ff8b9b8c4 14 float CH2;
nk_ralph 0:057ff8b9b8c4 15 float CH3;
nk_ralph 0:057ff8b9b8c4 16 float CH4;
nk_ralph 0:057ff8b9b8c4 17 float CH5;
nk_ralph 0:057ff8b9b8c4 18 float CH6;
nk_ralph 0:057ff8b9b8c4 19 float CH7;
arkadia 1:2d11586bb22a 20 AnalogIn potmesureangle(PC_2); // potentiometre dans l'aile
arkadia 1:2d11586bb22a 21 DigitalOut MoteurIN1(PC_8); // rotation anti horaire (-20°) fil vert PB0
arkadia 1:2d11586bb22a 22 DigitalOut MoteurIN2(PC_9); // rotation horaire (+20°) fil blanc PC1
arkadia 1:2d11586bb22a 23 signed int comptage;
arkadia 1:2d11586bb22a 24 DigitalIn VoieB(PA_1);
arkadia 1:2d11586bb22a 25 InterruptIn VoieA(PB_0);
arkadia 1:2d11586bb22a 26 char BoutonChange;
arkadia 1:2d11586bb22a 27 DigitalOut AdsA0(_A0);
arkadia 1:2d11586bb22a 28 DigitalOut AdsPwd(_Pwd);
arkadia 1:2d11586bb22a 29 DigitalOut AdsTemp(_Temp);
arkadia 1:2d11586bb22a 30 ADS1231 Ads1232 ( _Sclk, _Dout );
nk_ralph 0:057ff8b9b8c4 31
arkadia 1:2d11586bb22a 32 ADS1231::ADS1231_status_t aux;
arkadia 1:2d11586bb22a 33 ADS1231::Vector_count_t myData;
arkadia 1:2d11586bb22a 34 ADS1231::Vector_mass_t myCalculatedMass;
arkadia 1:2d11586bb22a 35 ADS1231::Vector_voltage_t myCalculatedVoltage;
nk_ralph 0:057ff8b9b8c4 36
nk_ralph 0:057ff8b9b8c4 37 /***********************************************************************************************************************/
nk_ralph 0:057ff8b9b8c4 38 /* Main function */
nk_ralph 0:057ff8b9b8c4 39 bool NewAffichage = true;
nk_ralph 0:057ff8b9b8c4 40 bool Acquisition = false;
arkadia 1:2d11586bb22a 41 RawSerial PC(USBTX, USBRX);
arkadia 1:2d11586bb22a 42 WifiEsp8266 Wifi(PA_11,PA_12); // WifiEsp8266(PinName Txd, PinName Rxd);
arkadia 1:2d11586bb22a 43 //float MesureAngle; // mesure du potentiometre dans l'aile
arkadia 1:2d11586bb22a 44 //float ConsigneAngle; //= 0.47; // valeur entre 0,44 et 0,56 // consigne en pourcentage ou degré
nk_ralph 0:057ff8b9b8c4 45
nk_ralph 0:057ff8b9b8c4 46 Ticker EventAcq;
nk_ralph 0:057ff8b9b8c4 47
nk_ralph 0:057ff8b9b8c4 48 void FEventAcq()
nk_ralph 0:057ff8b9b8c4 49 {
nk_ralph 0:057ff8b9b8c4 50 Acquisition = true;
nk_ralph 0:057ff8b9b8c4 51 }
arkadia 1:2d11586bb22a 52 void FrontMontantA(void)
arkadia 1:2d11586bb22a 53 {
arkadia 1:2d11586bb22a 54 if (VoieB.read()==1) AngleIncCons = AngleIncCons + 1;
arkadia 1:2d11586bb22a 55 else AngleIncCons = AngleIncCons - 1;
arkadia 1:2d11586bb22a 56 BoutonChange++;
arkadia 1:2d11586bb22a 57 }
arkadia 1:2d11586bb22a 58 void FrontDescendantA(void)
arkadia 1:2d11586bb22a 59 {
arkadia 1:2d11586bb22a 60 if(VoieB.read()==0) AngleIncCons = AngleIncCons + 1;
arkadia 1:2d11586bb22a 61 else AngleIncCons = AngleIncCons - 1;
arkadia 1:2d11586bb22a 62 BoutonChange++;
nk_ralph 0:057ff8b9b8c4 63
arkadia 1:2d11586bb22a 64 }
nk_ralph 0:057ff8b9b8c4 65 int main()
nk_ralph 0:057ff8b9b8c4 66 {
nk_ralph 0:057ff8b9b8c4 67 luminosite(128);
nk_ralph 0:057ff8b9b8c4 68 LTC2309Init();
nk_ralph 0:057ff8b9b8c4 69 LTC2309Autozero();
arkadia 1:2d11586bb22a 70 char WifiPhrase[maxdata];
arkadia 1:2d11586bb22a 71 MoteurIN1.write(0);
arkadia 1:2d11586bb22a 72 MoteurIN2.write(0);
arkadia 1:2d11586bb22a 73 PC.baud(921600);
arkadia 1:2d11586bb22a 74 PC.printf("Hello je suis SP2-10\r\n");
nk_ralph 0:057ff8b9b8c4 75 EventAcq.attach(&FEventAcq, 0.5); //
arkadia 1:2d11586bb22a 76 AngleIncCons = 0;
arkadia 1:2d11586bb22a 77 comptage = 0;
arkadia 1:2d11586bb22a 78 BoutonChange = false;
arkadia 1:2d11586bb22a 79 VoieA.rise(&FrontMontantA);
arkadia 1:2d11586bb22a 80 // mesure de poids
arkadia 1:2d11586bb22a 81 AdsA0.write(1); // chanel 1 selectionne
arkadia 1:2d11586bb22a 82 AdsTemp.write(0); // entree temp selectionne
arkadia 1:2d11586bb22a 83 AdsPwd.write(1); // ADC On
arkadia 1:2d11586bb22a 84 aux = Ads1232.ADS1231_PowerDown ();
arkadia 1:2d11586bb22a 85 aux = Ads1232.ADS1231_Reset ();
arkadia 1:2d11586bb22a 86 EcranMessage("Soufflerie arretee avec aile en place");
arkadia 1:2d11586bb22a 87 PC.printf("ne rien placer\r\n");
arkadia 1:2d11586bb22a 88 wait(5);
arkadia 1:2d11586bb22a 89 aux = Ads1232.ADS1231_ReadData_WithoutMass ( &myData, 10 );
arkadia 1:2d11586bb22a 90 EcranMessage("Ajoutez 2 kg pour tarage");
arkadia 1:2d11586bb22a 91 PC.printf("placer qqch\r\n");
arkadia 1:2d11586bb22a 92 wait(5);
arkadia 1:2d11586bb22a 93 EcranMessage("Patientez");
arkadia 1:2d11586bb22a 94 aux = Ads1232.ADS1231_ReadData_WithCalibratedMass ( &myData, 10 );
arkadia 1:2d11586bb22a 95 wait(3);
nk_ralph 0:057ff8b9b8c4 96     while(1) {
arkadia 1:2d11586bb22a 97 // acquisition des capteurs et envoi wifi.
nk_ralph 0:057ff8b9b8c4 98 if (Acquisition==true) { // Si une valeur change
nk_ralph 0:057ff8b9b8c4 99 CH0 = LTC2309read(CH0c); // Acquisition de la valeur de champ de pression en Pascal pour la voie 0
nk_ralph 0:057ff8b9b8c4 100 CH1 = LTC2309read(CH1c); // Acquisition de la valeur de champ de pression en Pascal pour la voie 1
nk_ralph 0:057ff8b9b8c4 101 CH2 = LTC2309read(CH2c); // Acquisition de la valeur de champ de pression en Pascal pour la voie 2
nk_ralph 0:057ff8b9b8c4 102 CH3 = LTC2309read(CH3c); // Acquisition de la valeur de champ de pression en Pascal pour la voie 3
nk_ralph 0:057ff8b9b8c4 103 CH4 = LTC2309read(CH4c); // Acquisition de la valeur de champ de pression en Pascal pour la voie 4
nk_ralph 0:057ff8b9b8c4 104 CH5 = LTC2309read(CH5c); // Acquisition de la valeur de champ de pression en Pascal pour la voie 5
nk_ralph 0:057ff8b9b8c4 105 CH6 = LTC2309read(CH6c); // Acquisition de la valeur de champ de pression en Pascal pour la voie 6
nk_ralph 0:057ff8b9b8c4 106 CH7 = LTC2309read(CH7c); // Acquisition de la valeur de champ de pression en Pascal pour la voie 7
nk_ralph 0:057ff8b9b8c4 107 NewAffichage = true;
nk_ralph 0:057ff8b9b8c4 108 Acquisition = false;
arkadia 1:2d11586bb22a 109 Wifi.printf("$z,%0.0f,%0.0f,%0.0f,%0.0f,%0.0f,%0.0f,%0.0f,%0.0f,%0.0f,%0.0f,%0.0f\r\n",CH0,CH1,CH2,CH3,CH4,CH5,CH6,CH7,FX,FZ,AngleIncMes);
arkadia 1:2d11586bb22a 110 PC.printf("$z,%0.0f,%0.0f,%0.0f,%0.0f,%0.0f,%0.0f,%0.0f,%0.0f,%0.0f,%0.0f,%0.0f\r\n",CH0,CH1,CH2,CH3,CH4,CH5,CH6,CH7,FX,FZ,AngleIncMes);
arkadia 1:2d11586bb22a 111 AdsA0.write(1); // chanel 1 selectionne
arkadia 1:2d11586bb22a 112 AdsTemp.write(0); // entree temp selectionne
arkadia 1:2d11586bb22a 113 AdsPwd.write(1); // ADC On
arkadia 1:2d11586bb22a 114
arkadia 1:2d11586bb22a 115 aux = Ads1232.ADS1231_ReadRawData ( &myData, 4);
arkadia 1:2d11586bb22a 116 myCalculatedMass = Ads1232.ADS1231_CalculateMass ( &myData, 2.0, ADS1231::ADS1231_SCALE_kg );
arkadia 1:2d11586bb22a 117 myCalculatedVoltage = Ads1232.ADS1231_CalculateVoltage ( &myData, 5.0 );
arkadia 1:2d11586bb22a 118 FZ = myCalculatedMass.myMass;
arkadia 1:2d11586bb22a 119 PC.printf("Raw Data: %ld Mass %0.5f kg Voltage: %0.5f mV\r\n", (uint32_t)myData.myRawValue, myCalculatedMass.myMass, 1000*myCalculatedVoltage.myVoltage);
nk_ralph 0:057ff8b9b8c4 120 }
nk_ralph 0:057ff8b9b8c4 121
arkadia 1:2d11586bb22a 122 if (NewAffichage==true) { // Si NewAffichage est égale à True, on raffraichit l'écran
nk_ralph 0:057ff8b9b8c4 123 NewAffichage = false;
nk_ralph 0:057ff8b9b8c4 124 EcranPrincipale();
nk_ralph 0:057ff8b9b8c4 125 }
arkadia 1:2d11586bb22a 126 // gestion moteur dangle
arkadia 1:2d11586bb22a 127 float AngleIncMesnew = 166.0-(potmesureangle.read()*333.0); // mesure d'angle en degré
arkadia 1:2d11586bb22a 128 if (AngleIncMesnew != AngleIncMes) {
arkadia 1:2d11586bb22a 129 AngleIncMes = AngleIncMesnew;
arkadia 1:2d11586bb22a 130 NewAffichage = true;
arkadia 1:2d11586bb22a 131 }
arkadia 1:2d11586bb22a 132 if (BoutonChange) {
arkadia 1:2d11586bb22a 133 PC.printf("Valeur angle %i\r\n",AngleIncCons);
arkadia 1:2d11586bb22a 134 BoutonChange = 0;
arkadia 1:2d11586bb22a 135 }
arkadia 1:2d11586bb22a 136 //sleep();
arkadia 1:2d11586bb22a 137 // bouger moteur
arkadia 1:2d11586bb22a 138 if ((AngleIncCons-AngleIncMes)>1) {
arkadia 1:2d11586bb22a 139 MoteurIN1.write(0);
arkadia 1:2d11586bb22a 140 MoteurIN2.write(1);
arkadia 1:2d11586bb22a 141 } else if ((AngleIncCons-AngleIncMes)<-1) {
arkadia 1:2d11586bb22a 142 MoteurIN1.write(1);
arkadia 1:2d11586bb22a 143 MoteurIN2.write(0);
arkadia 1:2d11586bb22a 144 } else {
arkadia 1:2d11586bb22a 145 MoteurIN1.write(0);
arkadia 1:2d11586bb22a 146 MoteurIN2.write(0);
arkadia 1:2d11586bb22a 147 }
arkadia 1:2d11586bb22a 148
arkadia 1:2d11586bb22a 149 //acquisition des donnees wifi
arkadia 1:2d11586bb22a 150 if (Wifi.dataready()) {
arkadia 1:2d11586bb22a 151 strcpy(WifiPhrase,Wifi.read());
arkadia 1:2d11586bb22a 152 Wifi.printf("$l%s\r\n",WifiPhrase);
arkadia 1:2d11586bb22a 153 switch (WifiPhrase[1]) {
arkadia 1:2d11586bb22a 154 case 'm':
arkadia 1:2d11586bb22a 155 if (AngleIncCons<20) AngleIncCons=AngleIncCons+1;
arkadia 1:2d11586bb22a 156 Wifi.printf("$l%.0f\r\n",AngleIncCons);
arkadia 1:2d11586bb22a 157 break;
arkadia 1:2d11586bb22a 158 case 'n' :
arkadia 1:2d11586bb22a 159 if (AngleIncCons>-20) AngleIncCons=AngleIncCons-1;
arkadia 1:2d11586bb22a 160 Wifi.printf("$l%.0f\r\n",AngleIncCons);
arkadia 1:2d11586bb22a 161 break;
arkadia 1:2d11586bb22a 162 }
arkadia 1:2d11586bb22a 163 }
nk_ralph 0:057ff8b9b8c4 164 }
nk_ralph 0:057ff8b9b8c4 165 }