dujardin stephane
/
DUJ4-F401
programme de test pour envoyer du DUJ4 vers processing
Revision 0:84f30b3eb83b, committed 2021-01-14
- Comitter:
- dujardin
- Date:
- Thu Jan 14 10:01:51 2021 +0000
- Commit message:
- programme de test
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Thu Jan 14 10:01:51 2021 +0000 @@ -0,0 +1,54 @@ +// démonstrateur DUJ4 +// réception serie +// 'f' pour allumer ou éteindre LED1 du F401 +// 'g' pour repondre un chiffre 16 bits XXXXL +// emission serie .. chaque seconde +// 'a' pour dire je suis la +// un int 16 bits XXXXK +// un tableau de 100 12 bits XXXXXH...XXXXH finit par R + +#include "mbed.h" + +//****************** déclaration des broches utiles sur la varte *********** +Serial pc(SERIAL_TX, SERIAL_RX); // laison serie en USB driver STlink +DigitalOut led(LED1); + + + +//********* variables GLOBALES +int flag = 0; +//******** sous programmes + #include "serie.h" // gestion liaison serie au protocole DUJ4 + +void init(void) // initialisations indispensables de la carte + { + //uBit.init(); + pc.baud(57600); // vitesse liaison + pc.attach(&interrupt, Serial::RxIrq); // gestion recept dans serie.h + led = 0; // init led du L432 + carte + } + +int main() + { + init(); + while(1) + { + if ( flag == 1) + { + sendDL(); // // transmet DL une fois + flag = 0; + } + + if (led == 1) // boucle sans fin + { + THextabDR( 100 ); // transmission tableau DR + wait_ms(20); + sendDK(); // // transmet DK + } + + pc.putc('a'); // je suis la + wait (1); // rebouclage automatique + } + } + + \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Thu Jan 14 10:01:51 2021 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/87f2f5183dfb \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serie.h Thu Jan 14 10:01:51 2021 +0000 @@ -0,0 +1,150 @@ +// DUJ4 en version limitée +// en emission D comme Départ +// 2 variables 16bits DK et DL +// 3 tableaux de 100 12bits tabDR , tabDS , tabDT +// ordres en emission .. a vous de jouer avec un pc.putc('f'); ordre 'f' +// en Reception A comme Arrivée +// 3 variables 16 bits AK et AL +// 3 tableaux de 100 12 bits tabAR , tabAS , tabAT +// ordres en reception .. a vous de jouer au debut de void interrup ... + +// VARIABLES +// variables pde reception et de décodage propres à DUJ4 pas au main +int hex3 ='1' ; int hex2 = 0 ; int hex1 = 0 ; int hex0 = 0; +int val3 =0 ; int val2=0 ;int val1 = 0; int val0 = 0; int res=0; +int val = 0; // lieu de passage des char arrivés en port com +int point = 0; // pointeur dans le tableau des char arrivés +int rec[10]; // tableau des char en arrivée pure +int ou ; int quoi ; // ou et quoi dans les tableaux tabAX[] +int tempo = 0; +//nom des tableaux servant de tampons de décodage en arrivée +int tabAH[101] ;int tabAI[101] ; int tabAJ[101] ; + +// nom des variables 16 bits en Depart utilisables dans le main +int DK = 1000 ; int DL = 5000; // depart +int AK = 0 ; int AL = 0; // arrivée +// nom des tableaux de variables UTILISABLES dans le main +int tabDR[101] ; int tabDS[101] ; int tabDT[101] ;// en Depart +int tabAR[101] ; int tabAS[101] ; int tabAT[101] ;// en Arrivée + +//SOUS PROGRAMMES +int HEXit ( int valc ) + {// traduction d'une valeur 0 à 15 en Ascii O à F + int asc; + if ( valc > 16 ) valc = 16 ; if (valc < 1 ) valc = 0 ; + if ( valc == 0 ) asc = '0'; if ( valc == 1 ) asc = '1'; + if ( valc == 2 ) asc = '2'; if ( valc == 3 ) asc = '3'; + if ( valc == 4 ) asc = '4'; if ( valc == 5 ) asc = '5'; + if ( valc == 6 ) asc = '6'; if ( valc == 7 ) asc = '7'; + if ( valc == 8 ) asc = '8'; if ( valc == 9 ) asc = '9'; + if ( valc == 10) asc = 'A'; if ( valc == 11) asc = 'B'; + if ( valc == 12) asc = 'C'; if ( valc == 13) asc = 'D'; + if ( valc == 14) asc = 'E'; if ( valc == 15) asc = 'F'; + return asc; + } + +void INTtoHEX( int valI) // calcul les 4 valeurs en hexa d'un INT + { + val3 =valI/4096 ;hex3 = HEXit( val3) ; + valI =valI - 4096*val3 ; val2 = valI/256 ;hex2 = HEXit( val2) ; + valI =valI - val2*256 ; val1 = valI/16 ;hex1 = HEXit( val1) ; + valI =valI - val1*16 ; val0 = valI ;hex0 = HEXit( val0) ; + } + +void THextabDR( int nb ) // transfert tableau de 12bits DR + { + for (int pt = 0 ; pt < nb ; pt++) + { + int can = tabDR[pt] * 4; //passe a 4096 + INTtoHEX(can); + pc.putc(hex2); pc.putc(hex1); pc.putc(hex0); + pc.putc('H'); + } + wait_ms(10); + pc.putc('R'); // + wait_ms(10); + } + +void THextabDS( int nb )// transfert en 12 bits DS + { + for (int pt = 0 ; pt < nb ; pt++) + { + int can = tabDS[pt] * 4 ; // passe à 4096 + INTtoHEX(can); + pc.putc(hex2); pc.putc(hex1); pc.putc(hex0); + pc.putc('I'); + } + wait_ms(10); + pc.putc('S'); // + wait_ms(10); + } + +void THextabDT( int nb )// transfert en 12 bits DT + { + for (int pt = 0 ; pt < nb ; pt++) + { + int can = tabDT[pt] ; + INTtoHEX(can); + pc.putc(hex2); pc.putc(hex1); pc.putc(hex0); + pc.putc('J'); + } + wait_ms(10); + pc.putc('T'); // + wait_ms(10); + } + +void sendDK ( )// envoie DK en 16 bits hexa + { + INTtoHEX(DK); + pc.putc(hex3); pc.putc(hex2); pc.putc(hex1); pc.putc(hex0); + pc.putc('K'); + } +void sendDL( )// envoie DL en 16 bits + { + INTtoHEX(DL); + pc.putc(hex3); pc.putc(hex2); pc.putc(hex1); pc.putc(hex0); + pc.putc('L'); + } + +int readval12() // traduc en 12 bits des 3 hexa arrivés + {int cal; + cal = 256*rec[0]+ 16 *rec[1]+ rec[2]; + return cal; } +int readval16() // traduc en 16 bits des 4 hexa arrivés + {int cal; + cal = 4096*rec[0]+ 256*rec[1]+ 16 *rec[2]+ rec[3]; + return cal; } + +// COEUR du PROCESSUS DE RECEPTION +void interrupt() // chaque carractère reçut ce programme est appelé +{ val = pc.getc(); // sauvegarder le dernier carractère arrivé + // on a 100 µS pour faire la suite + // detection ordres et actions prevues ( sans delai) + if ( val == 'f' ) {led= !led; } + if ( val == 'g' ) {flag = 1; } //*******test duj4 + + //if ( val == 'z') { ; } + // reception de l'héxa et placement dans le tableau intermediaire rec[] + if ( val == '0'){rec[point]=0 ; point++;} if(val=='1'){rec[point]=1;point++;} + if ( val == '2'){rec[point]=2 ; point++;} if(val=='3'){rec[point]=3;point++;} + if ( val == '4'){rec[point]=4 ; point++;} if(val=='5'){rec[point]=5;point++;} + if ( val == '6'){rec[point]=6 ; point++;} if(val=='7'){rec[point]=7;point++;} + if ( val == '8'){rec[point]=8 ; point++;} if(val=='9'){rec[point]=9;point++;} + if ( val == 'A'){rec[point]=10; point++;} if(val=='B'){rec[point]=11;point++;} + if ( val == 'C'){rec[point]=12; point++;} if(val=='D'){rec[point]=13;point++;} + if ( val == 'E'){rec[point]=14; point++;} if(val=='F'){rec[point]=15;point++;} + if ( point > 8 ) point = 8; + // detection des transferts de datas .. + if ( val == 'H') { tabAH[ou]= readval12(); point = 0 ; ou++;} //empilage tampon + if ( val == 'I') { tabAI[ou]= readval12(); point = 0 ; ou++;} //empilage + if ( val == 'J') { tabAJ[ou]= readval12(); point = 0 ; ou++;} //empilage + if ( val == 'K') { AK= readval16(); point = 0 ; } // // AK + if ( val == 'L') { AL= readval16(); point = 0 ; } // + // ASCII libres // + if ( val == 'R') { for(int i=0; i<100; i++)tabAR[i]=tabAH[i];ou=0;} // util + if ( val == 'S') { for(int i=0; i<100; i++)tabAS[i]=tabAI[i];ou=0;} // + if ( val == 'T') { for(int i=0; i<100; i++)tabAT[i]=tabAJ[i];ou=0;} // >AT + // ASCII libres + + } + \ No newline at end of file