programme de test pour envoyer du DUJ4 vers processing

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
dujardin
Date:
Thu Jan 14 10:01:51 2021 +0000
Commit message:
programme de test

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
serie.h Show annotated file Show diff for this revision Revisions of this file
--- /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