test protocole soufflerie Pid
Dependencies: mbed LCD_DISCO_F746NG BSP_DISCO_F746NG Ecran MySerial
main.cpp@0:33f813a53d44, 23 months ago (annotated)
- Committer:
- schnf30
- Date:
- Sat Jun 11 11:28:02 2022 +0000
- Revision:
- 0:33f813a53d44
test protocole soufflerie Pid
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
schnf30 | 0:33f813a53d44 | 1 | #include "mbed.h" |
schnf30 | 0:33f813a53d44 | 2 | #include "MySerial.h" |
schnf30 | 0:33f813a53d44 | 3 | #include "ecran.h" |
schnf30 | 0:33f813a53d44 | 4 | |
schnf30 | 0:33f813a53d44 | 5 | // variable soufflerie |
schnf30 | 0:33f813a53d44 | 6 | float ConsVitFluxAir; // consigne flux air |
schnf30 | 0:33f813a53d44 | 7 | float VitFluxAir; // vitesse de flux air |
schnf30 | 0:33f813a53d44 | 8 | float Frequencehelice; |
schnf30 | 0:33f813a53d44 | 9 | // coef correcteur PID |
schnf30 | 0:33f813a53d44 | 10 | float coefp,coefi,coefd; |
schnf30 | 0:33f813a53d44 | 11 | // interface PC attention baud 921600 |
schnf30 | 0:33f813a53d44 | 12 | MySerial PC(USBTX,USBRX); // liaison PC |
schnf30 | 0:33f813a53d44 | 13 | char PCPhrase[maxdata]; // pour stocker phrase PC |
schnf30 | 0:33f813a53d44 | 14 | float presangle; |
schnf30 | 0:33f813a53d44 | 15 | volatile char EnvoiePC = 0; // INDIQUE DONNEE A ENVOYER EN PC ET CODE TRAME |
schnf30 | 0:33f813a53d44 | 16 | Ticker ticker; |
schnf30 | 0:33f813a53d44 | 17 | unsigned int Nb = 1; |
schnf30 | 0:33f813a53d44 | 18 | void Tenvoi(void) |
schnf30 | 0:33f813a53d44 | 19 | { |
schnf30 | 0:33f813a53d44 | 20 | EnvoiePC = 'V'; |
schnf30 | 0:33f813a53d44 | 21 | } |
schnf30 | 0:33f813a53d44 | 22 | |
schnf30 | 0:33f813a53d44 | 23 | DigitalOut led_green(LED1); |
schnf30 | 0:33f813a53d44 | 24 | |
schnf30 | 0:33f813a53d44 | 25 | |
schnf30 | 0:33f813a53d44 | 26 | Ticker tickermes; |
schnf30 | 0:33f813a53d44 | 27 | bool datachange = false; |
schnf30 | 0:33f813a53d44 | 28 | void mes(void) |
schnf30 | 0:33f813a53d44 | 29 | { |
schnf30 | 0:33f813a53d44 | 30 | datachange = true; |
schnf30 | 0:33f813a53d44 | 31 | VitFluxAir++; // vitesse de flux air |
schnf30 | 0:33f813a53d44 | 32 | if (VitFluxAir>70) VitFluxAir = 0; |
schnf30 | 0:33f813a53d44 | 33 | Frequencehelice++; |
schnf30 | 0:33f813a53d44 | 34 | if (Frequencehelice>180) Frequencehelice = 0; |
schnf30 | 0:33f813a53d44 | 35 | } |
schnf30 | 0:33f813a53d44 | 36 | |
schnf30 | 0:33f813a53d44 | 37 | |
schnf30 | 0:33f813a53d44 | 38 | int main() |
schnf30 | 0:33f813a53d44 | 39 | { |
schnf30 | 0:33f813a53d44 | 40 | coefp=0; |
schnf30 | 0:33f813a53d44 | 41 | coefi=0; |
schnf30 | 0:33f813a53d44 | 42 | coefd=100000; |
schnf30 | 0:33f813a53d44 | 43 | Frequencehelice = 100; |
schnf30 | 0:33f813a53d44 | 44 | ConsVitFluxAir = 57; // consigne flux air |
schnf30 | 0:33f813a53d44 | 45 | VitFluxAir =30; |
schnf30 | 0:33f813a53d44 | 46 | Ecran(); |
schnf30 | 0:33f813a53d44 | 47 | ticker.attach(&Tenvoi,0.1); // demare ticker pour envoi trame toute les 100ms |
schnf30 | 0:33f813a53d44 | 48 | tickermes.attach(&mes,10); // demare ticker pour envoi trame toute les 100ms |
schnf30 | 0:33f813a53d44 | 49 | FirstEcran(); |
schnf30 | 0:33f813a53d44 | 50 | while(1) { |
schnf30 | 0:33f813a53d44 | 51 | |
schnf30 | 0:33f813a53d44 | 52 | // recevoir des donnees |
schnf30 | 0:33f813a53d44 | 53 | if (PC.dataready()) { |
schnf30 | 0:33f813a53d44 | 54 | strcpy(PCPhrase,PC.read()); |
schnf30 | 0:33f813a53d44 | 55 | switch (PCPhrase[1]) { |
schnf30 | 0:33f813a53d44 | 56 | case 'B': // consigne de flux air |
schnf30 | 0:33f813a53d44 | 57 | ConsVitFluxAir = atof(PCPhrase+2); |
schnf30 | 0:33f813a53d44 | 58 | datachange=true; |
schnf30 | 0:33f813a53d44 | 59 | break; |
schnf30 | 0:33f813a53d44 | 60 | case 'L' : // param pid |
schnf30 | 0:33f813a53d44 | 61 | if (sscanf(PCPhrase,"$L,%f,%f,%f",&coefp,&coefi,&coefd)>=1) datachange=true; |
schnf30 | 0:33f813a53d44 | 62 | break; |
schnf30 | 0:33f813a53d44 | 63 | default : |
schnf30 | 0:33f813a53d44 | 64 | ; |
schnf30 | 0:33f813a53d44 | 65 | } |
schnf30 | 0:33f813a53d44 | 66 | } |
schnf30 | 0:33f813a53d44 | 67 | // envoie des data vers PC |
schnf30 | 0:33f813a53d44 | 68 | if (EnvoiePC!=0) { |
schnf30 | 0:33f813a53d44 | 69 | switch (EnvoiePC) { |
schnf30 | 0:33f813a53d44 | 70 | case 'V' : // angle mesure |
schnf30 | 0:33f813a53d44 | 71 | PC.printf("$V,%0.1f,%0.1f\r\n",VitFluxAir,Frequencehelice); |
schnf30 | 0:33f813a53d44 | 72 | EnvoiePC=0; |
schnf30 | 0:33f813a53d44 | 73 | break; |
schnf30 | 0:33f813a53d44 | 74 | default : |
schnf30 | 0:33f813a53d44 | 75 | EnvoiePC=0; |
schnf30 | 0:33f813a53d44 | 76 | } |
schnf30 | 0:33f813a53d44 | 77 | } |
schnf30 | 0:33f813a53d44 | 78 | if (datachange) { |
schnf30 | 0:33f813a53d44 | 79 | led_green = !led_green; |
schnf30 | 0:33f813a53d44 | 80 | Ecran(); |
schnf30 | 0:33f813a53d44 | 81 | datachange = false; |
schnf30 | 0:33f813a53d44 | 82 | } |
schnf30 | 0:33f813a53d44 | 83 | } |
schnf30 | 0:33f813a53d44 | 84 | } |
schnf30 | 0:33f813a53d44 | 85 |