sp3

Dependencies:   FT800_2 C12832 ADS1231 WifiEsp8266 LTC2309 affichage

main.cpp

Committer:
arkadia
Date:
2021-06-10
Revision:
1:2d11586bb22a
Parent:
0:057ff8b9b8c4

File content as of revision 1:2d11586bb22a:

#include "mbed.h"
#include "affichage.h"
#include "ltc2309.h"
#include "wifiesp8266.h"
#include "constante.h"
#include "ADS1231.h"

float FZ;
float FX;
float AngleIncMes;
float AngleIncCons;
float CH0; // PRESSION
float CH1;
float CH2;
float CH3;
float CH4;
float CH5;
float CH6;
float CH7;
AnalogIn potmesureangle(PC_2); // potentiometre dans l'aile
DigitalOut MoteurIN1(PC_8); // rotation anti horaire (-20°) fil vert PB0
DigitalOut MoteurIN2(PC_9); // rotation horaire (+20°) fil blanc PC1
signed int comptage;
DigitalIn VoieB(PA_1);
InterruptIn  VoieA(PB_0);
char BoutonChange;
DigitalOut AdsA0(_A0);
DigitalOut AdsPwd(_Pwd);
DigitalOut AdsTemp(_Temp);
ADS1231  Ads1232  ( _Sclk, _Dout );

ADS1231::ADS1231_status_t      aux;
ADS1231::Vector_count_t        myData;
ADS1231::Vector_mass_t         myCalculatedMass;
ADS1231::Vector_voltage_t      myCalculatedVoltage;

/***********************************************************************************************************************/
/* Main function */
bool NewAffichage = true;
bool Acquisition = false;
RawSerial PC(USBTX, USBRX);
WifiEsp8266 Wifi(PA_11,PA_12); // WifiEsp8266(PinName Txd, PinName Rxd);
//float MesureAngle;   // mesure du potentiometre dans l'aile
//float ConsigneAngle;  //= 0.47; // valeur entre 0,44 et 0,56  // consigne en pourcentage ou degré

Ticker EventAcq;

void FEventAcq()
{
    Acquisition = true;
}
void FrontMontantA(void)
{
    if (VoieB.read()==1) AngleIncCons = AngleIncCons + 1;
    else AngleIncCons = AngleIncCons - 1;
    BoutonChange++;
}
void FrontDescendantA(void)
{
    if(VoieB.read()==0) AngleIncCons = AngleIncCons + 1;
    else AngleIncCons = AngleIncCons - 1;
    BoutonChange++;

}
int main()
{
    luminosite(128);
    LTC2309Init();
    LTC2309Autozero();
    char WifiPhrase[maxdata];
    MoteurIN1.write(0);
    MoteurIN2.write(0);
    PC.baud(921600);
    PC.printf("Hello je suis SP2-10\r\n");
    EventAcq.attach(&FEventAcq, 0.5); //
    AngleIncCons = 0;
    comptage = 0;
    BoutonChange = false;
    VoieA.rise(&FrontMontantA);
// mesure de poids
    AdsA0.write(1);    // chanel 1 selectionne
    AdsTemp.write(0);  // entree temp selectionne
    AdsPwd.write(1);   // ADC On
    aux = Ads1232.ADS1231_PowerDown    ();
    aux = Ads1232.ADS1231_Reset        ();
    EcranMessage("Soufflerie arretee avec aile en place");
    PC.printf("ne rien placer\r\n");
    wait(5);
    aux = Ads1232.ADS1231_ReadData_WithoutMass ( &myData, 10 );
    EcranMessage("Ajoutez 2 kg pour tarage");    
    PC.printf("placer qqch\r\n");
    wait(5);
    EcranMessage("Patientez");    
    aux = Ads1232.ADS1231_ReadData_WithCalibratedMass ( &myData, 10 );
    wait(3);
        while(1) {
// acquisition des capteurs et envoi wifi.
        if (Acquisition==true) {     // Si une valeur change
            CH0 = LTC2309read(CH0c);        //  Acquisition de la  valeur de champ de pression en Pascal pour la voie 0
            CH1 = LTC2309read(CH1c);        //  Acquisition de la  valeur de champ de pression en Pascal pour la voie 1
            CH2 = LTC2309read(CH2c);        //  Acquisition de la  valeur de champ de pression en Pascal pour la voie 2
            CH3 = LTC2309read(CH3c);        //  Acquisition de la  valeur de champ de pression en Pascal pour la voie 3
            CH4 = LTC2309read(CH4c);        //  Acquisition de la  valeur de champ de pression en Pascal pour la voie 4
            CH5 = LTC2309read(CH5c);        //  Acquisition de la  valeur de champ de pression en Pascal pour la voie 5
            CH6 = LTC2309read(CH6c);        //  Acquisition de la  valeur de champ de pression en Pascal pour la voie 6
            CH7 = LTC2309read(CH7c);        //  Acquisition de la  valeur de champ de pression en Pascal pour la voie 7
            NewAffichage = true;
            Acquisition = false;
            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);
            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);
            AdsA0.write(1);    // chanel 1 selectionne
            AdsTemp.write(0);  // entree temp selectionne
            AdsPwd.write(1);   // ADC On

            aux                 =    Ads1232.ADS1231_ReadRawData       ( &myData, 4);
            myCalculatedMass  =    Ads1232.ADS1231_CalculateMass     ( &myData, 2.0, ADS1231::ADS1231_SCALE_kg );
            myCalculatedVoltage =    Ads1232.ADS1231_CalculateVoltage  ( &myData, 5.0 );
            FZ = myCalculatedMass.myMass;
            PC.printf("Raw Data: %ld  Mass %0.5f  kg Voltage: %0.5f  mV\r\n", (uint32_t)myData.myRawValue,  myCalculatedMass.myMass,  1000*myCalculatedVoltage.myVoltage);
        }

        if (NewAffichage==true) {       //  Si NewAffichage est égale à True, on raffraichit l'écran
            NewAffichage = false;
            EcranPrincipale();
        }
// gestion moteur dangle
        float AngleIncMesnew = 166.0-(potmesureangle.read()*333.0);  // mesure d'angle en degré
        if (AngleIncMesnew != AngleIncMes) {
            AngleIncMes = AngleIncMesnew;
            NewAffichage = true;
        }
        if (BoutonChange) {
            PC.printf("Valeur angle %i\r\n",AngleIncCons);
            BoutonChange = 0;
        }
        //sleep();
// bouger moteur
        if ((AngleIncCons-AngleIncMes)>1) {
            MoteurIN1.write(0);
            MoteurIN2.write(1);
        } else if ((AngleIncCons-AngleIncMes)<-1) {
            MoteurIN1.write(1);
            MoteurIN2.write(0);
        } else {
            MoteurIN1.write(0);
            MoteurIN2.write(0);
        }

//acquisition des donnees wifi
        if (Wifi.dataready()) {
            strcpy(WifiPhrase,Wifi.read());
            Wifi.printf("$l%s\r\n",WifiPhrase);
            switch (WifiPhrase[1]) {
                case 'm':
                    if (AngleIncCons<20) AngleIncCons=AngleIncCons+1;
                    Wifi.printf("$l%.0f\r\n",AngleIncCons);
                    break;
                case 'n' :
                    if (AngleIncCons>-20) AngleIncCons=AngleIncCons-1;
                    Wifi.printf("$l%.0f\r\n",AngleIncCons);
                    break;
            }
        }
    }
}