sp3

Dependencies:   FT800_2 C12832 ADS1231 WifiEsp8266 LTC2309 affichage

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "affichage.h"
00003 #include "ltc2309.h"
00004 #include "wifiesp8266.h"
00005 #include "constante.h"
00006 #include "ADS1231.h"
00007 
00008 float FZ;
00009 float FX;
00010 float AngleIncMes;
00011 float AngleIncCons;
00012 float CH0; // PRESSION
00013 float CH1;
00014 float CH2;
00015 float CH3;
00016 float CH4;
00017 float CH5;
00018 float CH6;
00019 float CH7;
00020 AnalogIn potmesureangle(PC_2); // potentiometre dans l'aile
00021 DigitalOut MoteurIN1(PC_8); // rotation anti horaire (-20°) fil vert PB0
00022 DigitalOut MoteurIN2(PC_9); // rotation horaire (+20°) fil blanc PC1
00023 signed int comptage;
00024 DigitalIn VoieB(PA_1);
00025 InterruptIn  VoieA(PB_0);
00026 char BoutonChange;
00027 DigitalOut AdsA0(_A0);
00028 DigitalOut AdsPwd(_Pwd);
00029 DigitalOut AdsTemp(_Temp);
00030 ADS1231  Ads1232  ( _Sclk, _Dout );
00031 
00032 ADS1231::ADS1231_status_t      aux;
00033 ADS1231::Vector_count_t        myData;
00034 ADS1231::Vector_mass_t         myCalculatedMass;
00035 ADS1231::Vector_voltage_t      myCalculatedVoltage;
00036 
00037 /***********************************************************************************************************************/
00038 /* Main function */
00039 bool NewAffichage = true;
00040 bool Acquisition = false;
00041 RawSerial PC(USBTX, USBRX);
00042 WifiEsp8266 Wifi(PA_11,PA_12); // WifiEsp8266(PinName Txd, PinName Rxd);
00043 //float MesureAngle;   // mesure du potentiometre dans l'aile
00044 //float ConsigneAngle;  //= 0.47; // valeur entre 0,44 et 0,56  // consigne en pourcentage ou degré
00045 
00046 Ticker EventAcq;
00047 
00048 void FEventAcq()
00049 {
00050     Acquisition = true;
00051 }
00052 void FrontMontantA(void)
00053 {
00054     if (VoieB.read()==1) AngleIncCons = AngleIncCons + 1;
00055     else AngleIncCons = AngleIncCons - 1;
00056     BoutonChange++;
00057 }
00058 void FrontDescendantA(void)
00059 {
00060     if(VoieB.read()==0) AngleIncCons = AngleIncCons + 1;
00061     else AngleIncCons = AngleIncCons - 1;
00062     BoutonChange++;
00063 
00064 }
00065 int main()
00066 {
00067     luminosite(128);
00068     LTC2309Init();
00069     LTC2309Autozero();
00070     char WifiPhrase[maxdata];
00071     MoteurIN1.write(0);
00072     MoteurIN2.write(0);
00073     PC.baud(921600);
00074     PC.printf("Hello je suis SP2-10\r\n");
00075     EventAcq.attach(&FEventAcq, 0.5); //
00076     AngleIncCons = 0;
00077     comptage = 0;
00078     BoutonChange = false;
00079     VoieA.rise(&FrontMontantA);
00080 // mesure de poids
00081     AdsA0.write(1);    // chanel 1 selectionne
00082     AdsTemp.write(0);  // entree temp selectionne
00083     AdsPwd.write(1);   // ADC On
00084     aux = Ads1232.ADS1231_PowerDown    ();
00085     aux = Ads1232.ADS1231_Reset        ();
00086     EcranMessage("Soufflerie arretee avec aile en place");
00087     PC.printf("ne rien placer\r\n");
00088     wait(5);
00089     aux = Ads1232.ADS1231_ReadData_WithoutMass ( &myData, 10 );
00090     EcranMessage("Ajoutez 2 kg pour tarage");    
00091     PC.printf("placer qqch\r\n");
00092     wait(5);
00093     EcranMessage("Patientez");    
00094     aux = Ads1232.ADS1231_ReadData_WithCalibratedMass ( &myData, 10 );
00095     wait(3);
00096         while(1) {
00097 // acquisition des capteurs et envoi wifi.
00098         if (Acquisition==true) {     // Si une valeur change
00099             CH0 = LTC2309read(CH0c);        //  Acquisition de la  valeur de champ de pression en Pascal pour la voie 0
00100             CH1 = LTC2309read(CH1c);        //  Acquisition de la  valeur de champ de pression en Pascal pour la voie 1
00101             CH2 = LTC2309read(CH2c);        //  Acquisition de la  valeur de champ de pression en Pascal pour la voie 2
00102             CH3 = LTC2309read(CH3c);        //  Acquisition de la  valeur de champ de pression en Pascal pour la voie 3
00103             CH4 = LTC2309read(CH4c);        //  Acquisition de la  valeur de champ de pression en Pascal pour la voie 4
00104             CH5 = LTC2309read(CH5c);        //  Acquisition de la  valeur de champ de pression en Pascal pour la voie 5
00105             CH6 = LTC2309read(CH6c);        //  Acquisition de la  valeur de champ de pression en Pascal pour la voie 6
00106             CH7 = LTC2309read(CH7c);        //  Acquisition de la  valeur de champ de pression en Pascal pour la voie 7
00107             NewAffichage = true;
00108             Acquisition = false;
00109             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);
00110             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);
00111             AdsA0.write(1);    // chanel 1 selectionne
00112             AdsTemp.write(0);  // entree temp selectionne
00113             AdsPwd.write(1);   // ADC On
00114 
00115             aux                 =    Ads1232.ADS1231_ReadRawData       ( &myData, 4);
00116             myCalculatedMass  =    Ads1232.ADS1231_CalculateMass     ( &myData, 2.0, ADS1231::ADS1231_SCALE_kg );
00117             myCalculatedVoltage =    Ads1232.ADS1231_CalculateVoltage  ( &myData, 5.0 );
00118             FZ = myCalculatedMass.myMass;
00119             PC.printf("Raw Data: %ld  Mass %0.5f  kg Voltage: %0.5f  mV\r\n", (uint32_t)myData.myRawValue,  myCalculatedMass.myMass,  1000*myCalculatedVoltage.myVoltage);
00120         }
00121 
00122         if (NewAffichage==true) {       //  Si NewAffichage est égale à True, on raffraichit l'écran
00123             NewAffichage = false;
00124             EcranPrincipale();
00125         }
00126 // gestion moteur dangle
00127         float AngleIncMesnew = 166.0-(potmesureangle.read()*333.0);  // mesure d'angle en degré
00128         if (AngleIncMesnew != AngleIncMes) {
00129             AngleIncMes = AngleIncMesnew;
00130             NewAffichage = true;
00131         }
00132         if (BoutonChange) {
00133             PC.printf("Valeur angle %i\r\n",AngleIncCons);
00134             BoutonChange = 0;
00135         }
00136         //sleep();
00137 // bouger moteur
00138         if ((AngleIncCons-AngleIncMes)>1) {
00139             MoteurIN1.write(0);
00140             MoteurIN2.write(1);
00141         } else if ((AngleIncCons-AngleIncMes)<-1) {
00142             MoteurIN1.write(1);
00143             MoteurIN2.write(0);
00144         } else {
00145             MoteurIN1.write(0);
00146             MoteurIN2.write(0);
00147         }
00148 
00149 //acquisition des donnees wifi
00150         if (Wifi.dataready()) {
00151             strcpy(WifiPhrase,Wifi.read());
00152             Wifi.printf("$l%s\r\n",WifiPhrase);
00153             switch (WifiPhrase[1]) {
00154                 case 'm':
00155                     if (AngleIncCons<20) AngleIncCons=AngleIncCons+1;
00156                     Wifi.printf("$l%.0f\r\n",AngleIncCons);
00157                     break;
00158                 case 'n' :
00159                     if (AngleIncCons>-20) AngleIncCons=AngleIncCons-1;
00160                     Wifi.printf("$l%.0f\r\n",AngleIncCons);
00161                     break;
00162             }
00163         }
00164     }
00165 }