Advertisement
granteeric

lectureEcritureNombreParStructure

Apr 5th, 2020
371
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. typedef struct {
  2.   uint8_t dizaine:4;  
  3.   uint8_t unite:4;
  4.   uint8_t dizieme:4;
  5.   uint8_t centieme:4;
  6.   uint8_t millieme:4;
  7. } nombreDecompose;
  8.  
  9. const uint16_t MAXTENSION = 36000;
  10. const uint16_t MAXINTENSITE = 3000;
  11. unsigned long tempsDepart=0;
  12. unsigned long tempsArriver=0;
  13. unsigned long cpt1=0;
  14. byte nbrTest = 1;
  15. byte cptTest = 0;
  16.  
  17. byte channelSelect = 0;   //voie A par default
  18. byte cursorPosition = 0;      //0 vDizaine| iUnité  //  1 - Vunité | iDizieme // 2 vDizieme | iCentieme // 3 vCentieme | iMilieme
  19.  
  20. nombreDecompose  voie[3][4] = {
  21.   { {1,2,5,6,0}, {0,1,0,0,0}, {1,5,0,0,0}, {0,1,5,0,0} },     //0 voie A   0 tension, 1 intensite, 2 ovp, 3 ocp
  22.   { {2,5,0,0,0}, {0,2,5,0,5}, {2,7,0,0,0}, {0,3,0,0,0} },     //1 voie B
  23.   {  {0,3,3,6,0}, {0,0,0,1,0}, {0,5,0,0,0}, {0,0,0,0,0}},     //2 Voie C
  24. };
  25.  
  26.  
  27.  
  28. void LectureDigit(){
  29.   uint8_t nombre = 0;
  30.   nombre = voie[channelSelect][cursorPosition].dizaine;
  31. }
  32.  
  33. void EcritureDigit(byte nombreModif){
  34.   uint16_t nb=0;
  35.   voie[channelSelect][cursorPosition].dizaine=nombreModif;
  36.   nb = calculNbrEntier();
  37. }
  38.  
  39. uint16_t calculNbrEntier(){
  40.   uint16_t nombre = 0;
  41.   for(byte i = 0 ; i <4 ; i++){
  42.     switch (i){
  43.     case 0 :    //dizaine
  44.         if (nombre >=10000){  nombre +=  voie[channelSelect][0].dizaine * (10000 / pow(10,i));  }
  45.     break;
  46.     case 1 :    //unité
  47.         if (nombre >=1000){ nombre += voie[channelSelect][0].unite * (10000 / pow(10,i)); }
  48.     break;
  49.     case 2 :    //dizieme
  50.         if (nombre >=100){ nombre += voie[channelSelect][0].dizieme * (10000 / pow(10,i)); }    
  51.     break;
  52.     case 3 :    //centieme
  53.         if (nombre >=100){ nombre += voie[channelSelect][0].centieme * (10000 / pow(10,i));  }
  54.     break;
  55.     case 4 :    //milimme
  56.         if (nombre >=100){ nombre += voie[channelSelect][0].millieme  * (10000 / pow(10,i));   }
  57.     break;
  58.     }
  59.   }
  60.   return nombre;
  61. }
  62.  
  63. void testLecture(){
  64.   LectureDigit();
  65.   calculNbrEntier();
  66. }
  67.  
  68. void testEcriture(){
  69.   EcritureDigit(3);
  70. }
  71.  
  72.  
  73. void setup() {
  74.   // put your setup code here, to run once:
  75.   Serial.begin(9600);
  76.  
  77. }
  78.  
  79.  
  80.  
  81. void loop() {
  82.   // put your main code here, to run repeatedly:
  83.   unsigned long iteTest1 = 10000000L;
  84.   unsigned long iteTest2 = 1000;
  85.   Serial.println("");
  86.   cpt1 = 0 ;
  87.   tempsDepart = micros();
  88.   for(unsigned long i= 0 ; i < iteTest1 ; i++){
  89.     testLecture();
  90.   }
  91.   tempsArriver = micros();
  92.   Serial.print(" test 1  Lecture : ");
  93.   Serial.print(tempsArriver - tempsDepart);
  94.   Serial.print(" micro/s pour ");
  95.   Serial.println(iteTest1);
  96.  
  97.  
  98.   tempsDepart = micros();
  99.   cpt1 = 0 ;
  100.   for(unsigned long i= 0 ; i < iteTest2 ; i++){
  101.       testEcriture();
  102.   }
  103.   tempsArriver = micros();
  104.   Serial.print("test 1  Ecriture : ");
  105.   Serial.print(tempsArriver - tempsDepart);
  106.   Serial.print(" micro/s pour ");
  107.   Serial.println(iteTest2);
  108.  
  109.   Serial.println(" debut delay 3000");
  110.   delay(3000);
  111.   Serial.println(" fin delay 3000");
  112.  
  113. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement