Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: main.cpp
- Revision:
- 12:09b5ebdca214
- Parent:
- 11:fa0f1787ea13
- Child:
- 13:b19e2f833926
--- a/main.cpp Sat Mar 28 15:50:27 2020 +0000 +++ b/main.cpp Sat Oct 09 12:22:14 2021 +0000 @@ -1,112 +1,68 @@ #include "mbed.h" // - -//-------- programme de test carte MES432 ---------------- -// chaque seconde, numérise 4 valeurs sur ch1 ch2 -// ***************et envoie en duj2 de la trame de test exemple dit "toto" -// -// configuration liaison série à 19200 bps ( driver stlink) -// A0 et A1 sont placées en entrée analogique ( mesure sortie AOP) -// A3 et A4 sont placées en sortie analogique ( offset vers AOP) -// sorties led sur carte nommée LL , IO sur D3 , pol sur D2 -// broches D0 D1 sont précablées en I2C ( sans plus) -// connecteur (vue de face)*** I2C I2C IO Ov Ov 3.3V ch2 ch1 *** -//------------------------------------ - +// programme formation carte MicroC SAE S2 1.2 //****************** déclaration des broches **************** Serial pc(SERIAL_TX, SERIAL_RX); // PORT SERIE SUR usb !! -AnalogIn Ch1(A1) ;AnalogIn Ch2(A0); // entrées ana nommées Ch1 Ch2 -AnalogOut out1(A3);AnalogOut out2(A4); // sorties ana nommées out1 out2 -I2C i2c(D0,D1); // (sda,scl) canal I2C nommé i2c -DigitalOut pol(D2); // polarisation à 3.3V I2C ( si à 1) -DigitalOut IO(D3); // sortie TTL nommée S0 -DigitalOut LL(LED1); // led nommée LL ( sur module L432 -// nota IO peut etre déclarée en entrée en ecrivant DigitalIn IO(D3); -//********************************************************************** -uint16_t chi[5]; // déclaratiion d'un tableau d'entiers 16bits sans signe -float chf[5]; // déclaration d'un tableau de float -int recpt = 0; // on y pose l'arrivé d'un octet de la liaison série +AnalogIn Ch1(A0) ; // pour mesure de Vs de SAE S2 1.1 0.1V/°C +AnalogOut Vk(A4) ; // sortie compensation temperature vers SAE S2 1.1 +AnalogIn P1(A1) ;AnalogIn P0(A3) ; // clef de carte 11 pour temperature +AnalogIn simulVs(A2) ; // potentiometre de simulation de Vs +DigitalOut plus(D1); // alim pull up interupteur +DigitalIn inter(D2); // entrée mesure inter 0 ou 1 +DigitalOut LED(D9); // sortie LED carte MicroC + +//****variables *********************************************************** +uint16_t chi[10]; // declare un tableau d'int >0 +int recpt = 0; // varriable pour arrivée d'un octet de la liaison série -int XX = 0; -int YY = 64000; -int P1 ; int P2 ; int P3 ; int P4; // int vers hexa msb > lsb en ascii +float inVs = 0.5 ; // variable pour Vs float de 0 à 1 pour 0 à 3.3V +float simVs = 0.5; // variable pour V potentiomètre +float outVk = 0.3681; // varible qui fait Vk = 1.244 ( compense ambiant) +int out = 0 ; // variable de sortie à serialiser +int CAL = 0 ; // si demande de calibration = 1 //******** sous programmes ( situés en bas de cette page ) -int hexa( int in) - { // sous programme de traduction de 4 bits d'un int en ascii - int out = '0'; - if ( in == 0) out='0'; if( in ==1 ) out ='1'; if ( in == 2 ) out = '2'; - if ( in == 3) out='3'; if( in ==4 ) out ='4'; if ( in == 5 ) out = '5'; - if ( in == 6) out='6'; if( in ==7 ) out ='7'; if ( in == 8 ) out = '8'; - if ( in == 9) out='9'; if( in ==10) out ='A'; if ( in == 11) out = 'B'; - if ( in == 12)out='C'; if( in ==13) out ='D'; if ( in == 14) out = 'E'; - if ( in == 15)out='F'; - return (out); - } - -void trad( int in ) - { // sous programme de traduction d'un int en hexa - int din = in / 4096; - P1 = hexa(din); - int ddin = din * 4096 ; - din = in - ddin; - int dddin = din/256 ; - P2 = hexa(dddin); - int ddddin = dddin * 256 ; - din = din - ddddin; - int dddddin = din/16; - P3 = hexa(dddddin); - int ddddddin = dddddin*16 ; - din = din - ddddddin; - P4 = hexa (din) ; - } void interrupt(); // lié à la liaison série -void init(void) // initialisation +void init(void) // initialisations hard { - pc.baud(19200); // vitesse liaison série + pc.baud(115200); // vitesse liaison série pc.attach(&interrupt, Serial::RxIrq); // autorise IT de liaison serie - pol = 1; // polarisation résistancesde l' I2C - LL = 0 ; // led du L432 on - out1.write(0.25); // sortie si ana A3 = 0.5 * 3.3V soit 1.6 V - out2.write(0.25); // sortie ana si A4 = 0.25* 3.3V soit 0.8 V - IO = 0 ; // sortie I/O mise à 0 + plus = 1; // polarisation résistances inter + LED = 0 ; // led du MicroC off + Vk.write(outVk); // sortie de vK } int main() { init(); - - while(1) // boucle sans fin + while(1) { - LL = !LL ; //inverse led carte mbed - wait(0.1); // delai 0.1s - XX = Ch1.read_u16()/16 ;// read_u16 donne 12bits ijustifiés a gauche - YY = Ch2.read_u16()/16; // on divise par 16 pour faire de 0 à 4095 12bits - // attention -//exemple 1 ) Tranfert de deux int : XX et XX en ascii ( base hexa)en DUJ2 - pc.putc('i'); // pointeur 1 = 0 - trad(XX); // traduit un int XX en 4 ascii en hexa - pc.putc('e'); pc.putc(P1); pc.putc(P2); pc.putc(P3); pc.putc(P4); - trad(YY); - pc.putc('e'); pc.putc(P1); pc.putc(P2); pc.putc(P3); pc.putc(P4); - pc.putc('q'); // top de fin traduction des data recues et utilisation - // on verra le résultat sur Tera Term en 19200 bauds - // comme ceci " ie0001e6400q" à la 1ere seconde - // cette exemple vous servira à valider votre processing - -//exemple 2) mesurer et transferer sur usb serie ch1 en hex et ch2 en float ( non duj2) -// chi[1] = Ch1.read_u16(); // mesure ch1 mise en int en memoire 16bits -// chf[1] = Ch2.read(); // mesure ch2 mise en float en mémoire -// printf(" chi =0x%04x " , chi[1] ); //affiche chi en hexadecima ( 4 char) -// printf(" chf =%.6f \n", 3.3*( chf[1])); // affiche chf en float (6char ) -// on lira ceci " chi =0x80b8 chf =0.710769 " NON DUJ2 - - } + if ( CAL == 1) + { CAL = 0 ;} //Votre futur travail pour calibrer**************** + + if( inter == 1) // test K1 sur carte MicroC + {// si inter ouvert mode normal + LED = 1 ; + // votre travail pour mesurer la temperature sur Vs ************ + } + if ( inter == 0) + { // si inter en CC : mode testavec mesure sur pot + LED = 0 ; // eteindre LED carte MicroC + wait(0.5); // delai 0.5s + simVs = simulVs.read(); // lire le potentiomètre + out = 300*simVs ; // mettre dans une echelle 0 à 300 simVs + pc.putc('D'); // ouvrir transfert + pc.printf("%d", out); // duj10 de la temperature + pc.putc('T'); // fermer et mettre dans température + } + } } void interrupt()//"recepteur" à chaque carractère reçut ce programme est activé { // à vous de jouer !! recpt = pc.getc(); - if ( recpt == 'i') IO = !IO; // si 'i' inverse led carte MES + if ( recpt == 'l') LED = 1 ; //allumer LED + if ( recpt == 'a') CAL = 1 ; //demande de calibration ( la votre ) + // à faire detecter p et m pour faire Vk + ou - ********************* return; }