Advertisement
granteeric

lectureEcritureNombreEnPassantParUnunint16_t

Apr 5th, 2020
374
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. uint16_t nombreTension = 12560;
  2. uint16_t NombreIntensite= 250;
  3. const uint16_t MAXTENSION = 36000;
  4. const uint16_t MAXINTENSITE = 3000;
  5. unsigned long tempsDepart=0;
  6. unsigned long tempsArriver=0;
  7. unsigned long cpt1=0;
  8. byte nbrTest = 1;
  9. byte cptTest = 0;
  10.  
  11. void setup() {
  12.   // put your setup code here, to run once:
  13.   Serial.begin(9600);
  14.  
  15. }
  16.  
  17. void loop() {
  18.   // put your main code here, to run repeatedly:
  19.  
  20.   unsigned long iteTest1 = 10000000L;
  21.   unsigned long iteTest2 = 1000;
  22.  
  23.   cpt1 = 0 ;
  24.   tempsDepart = micros();
  25.   for(unsigned long i= 0 ; i < iteTest1 ; i++){
  26.     testLectureNombre();
  27.   }
  28.  
  29.   tempsArriver = micros();
  30.   Serial.print(" test 1  Lecture : ");
  31.   Serial.print(tempsArriver - tempsDepart);
  32.   Serial.print(" micro/s pour ");
  33.   Serial.println(iteTest1);
  34.  
  35.  
  36.  
  37.   tempsDepart = millis();
  38.   cpt1 = 0 ;
  39.   for(unsigned long i= 0 ; i < iteTest2 ; i++){
  40.     testEcritureNombre();
  41.   }
  42.   tempsArriver = millis();
  43.   Serial.print("test 1  Ecriture : ");
  44.   Serial.print(tempsArriver - tempsDepart);
  45.   Serial.print(" mili /s pour ");
  46.   Serial.println(iteTest2);
  47.  
  48.   Serial.println("debut delay 3000");
  49.   delay(3000);
  50.   Serial.println("fin delay 3000");
  51.  
  52. }
  53.  
  54. void testLectureNombre(){
  55. byte nbrLecture=0;
  56.     nbrLecture = entierToDigit(nombreTension , 1) ;
  57. }
  58.  
  59. void testEcritureNombre(){
  60.   digitToEntier(&nombreTension,1,5);  
  61. }
  62.  
  63. byte entierToDigit(uint16_t nombre, byte pos){
  64.   //position : 0 : Dizaine, 1 : unite ; 2 : dizieme ; 3: centieme ; 4 milieme
  65.   byte digit = 0;
  66.   switch (pos){
  67.     case 0 :    //dizaine
  68.         if (nombre >=10000){ digit = (nombre / 10000)%10;  }
  69.     break;
  70.     case 1 :    //unité
  71.         if (nombre >=1000){ digit = (nombre / 1000) % 10; }
  72.     break;
  73.     case 2 :    //dizieme
  74.         if (nombre >=100){ digit = (nombre / 100) % 10;   }    
  75.     break;
  76.     case 3 :    //centieme
  77.         if (nombre >=100){ digit = (nombre / 10) % 10;    }
  78.     break;
  79.     case 4 :    //milimme
  80.         if (nombre >=100){ digit = nombre %10;           }
  81.     break;
  82.   }
  83.   return digit;
  84. }
  85.  
  86. void digitToEntier (uint16_t *nombre, byte pos, byte digit){
  87.   uint16_t entier=0;
  88.   for(byte i = 0 ; i < 5 ; i++){
  89.  
  90.       if (i == pos){
  91.         entier += digit * (10000 / (pow (10,i) ) );
  92.       }
  93.       else{
  94.                 entier += entierToDigit(*nombre,i) * (10000 / (pow (10,i) ) );
  95.       }
  96.  
  97.   }
  98.   *nombre = entier;
  99. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement