projet BTS1

Dependencies:   mbed HX711 TextLCD

Files at this revision

API Documentation at this revision

Comitter:
abdoudasilveira
Date:
Tue May 31 12:18:30 2022 +0000
Parent:
1:f6e3e0f785cd
Commit message:
projet BTS

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Tue May 31 07:11:11 2022 +0000
+++ b/main.cpp	Tue May 31 12:18:30 2022 +0000
@@ -2,13 +2,15 @@
 #include "HX711.h"
 #include "TextLCD.h"
 
+#define BLINKING_RATE  0.5
+#define temps_on 0.5
+
 // LCD and Joystick Setting
 TextLCD lcd(p8, p10, p11, p5, p6, p7); // rs, e, d4-d7
-//rs   e    d4  d5   d6    d7          
+         //rs   e    d4  d5   d6    d7          
+
 DigitalOut RW(p9);
 
-DigitalOut gpo(D0);
-
 //LED MBED
 DigitalOut led1(LED1);
 DigitalOut led2(LED2);
@@ -16,8 +18,10 @@
 DigitalOut led4(LED4);
 
 //LED BICOLORE
-DigitalOut ledB1(p29); // SI 1 LED ROUGE
-DigitalOut ledB2(p30); // SI 1 LED VERT
+//DigitalOut ledB1(p29); // SI 1 LED ROUGE
+//DigitalOut ledB2(p30); // SI 1 LED VERT
+DigitalOut myledR(p30); // LED Rouge
+DigitalOut myledV(p29); // LED Vert
 
 //HX711
 HX711 scale1(p22, p21); //22 , 21
@@ -30,367 +34,262 @@
 DigitalIn Right(p15);
 DigitalIn Center(p16);
 
-AnalogIn scaleRaw(A3);
-Serial pc(USBTX, USBRX); // USB Serial Terminal
+int MOI  = 0; // en kg*cm2
+int f0  = 256 ; // en g
+int f1 = 657 ;  // en g
+int m = 0 ; // en g
+int l1 = 45 ; // en cm
+int lg = 0 ; // en cm
+int menu = 0;
+int tempo_saisie = 130 ;
+
+
 float calibration_factor1 = 2325; //2325 // -7050 worked for my 440lb max scale setup
 float calibration_factor2 = 2178; //2178
 int averageSamples = 5; //NOMBRE DE MESURE
-
-int moyenneClick = 0;
-int boucleExecute = 0;
-
-int i = 0; //count
-int ii = 0; //count
-
-float m = 0; //MASSE
-float lg = 0; //LG
-float MOI = 0; // MOI
-float massMoy = 0; //Moyenne de la masse a chaque points
-
 float weight1 = 0; // F1
 float weight2 = 0; // F0
 
-//SWINGWEIGHT
-float convertionInches = 2.54; // 1 inches = 2,54 centimètre
-float calculInches = 0; // Variable pour effectuer des calculs
-float SW = 0; // Variable résultat SWINGWEIGHT
 
 int main(void) {
-  //Mettre la LED bicolore en ROUGE pendant la tare
-  ledB1 = 1;
-  ledB2 = 0;
-  RW = 0;
+    
+      
+        RW = 0;
+       menu = 0 ;
 
-  pc.printf("Starting Scale\n");
-  pc.printf("HX711 calibration sketch\n");
-  pc.printf("Retirer tout les poids des capteurs\n");
-  pc.printf("Une fois que la LED bicolore passe de rouge a verte placer le club\n");
-  pc.printf("[capteur1] Press 1 or a pour augmenter le facteur etalonnage de 25\n");
-  pc.printf("[capteur1] Press 3 or z pour diminuer le facteur etalonnage de 25\n");
-  pc.printf("[capteur2] Press 4 or a pour augmenter le facteur etalonnage de 25\n");
-  pc.printf("[capteur2] Press 6 or z pour diminuer le facteur etalonnage de 25\n");
-
-  scale1.setScale(0);
-  scale1.tare(); //Reset the scale to 0
+      scale1.setScale(0);
+      scale1.tare(); //Reset the scale to 0
 
-  scale2.setScale(0);
-  scale2.tare(); //Reset the scale to 0
-
-  long zero_factor1 = scale1.averageValue(averageSamples); //Get a baseline reading / Obtenez une lecture de base CAPTEUR 1
-  long zero_factor2 = scale2.averageValue(averageSamples); //Get a baseline reading / Obtenez une lecture de base CAPTEUR 2
-  pc.printf("Zero factor Capteur1: %.4f\n", zero_factor1); //This can be used to remove the need to tare the scale. Useful in permanent scale projects. / Cela peut être utilisé pour supprimer le besoin de tarer la balance. Utile dans les projets à échelle permanente. CAPTEUR 1 
-  pc.printf("Zero factor Capteur2: %.4f\n", zero_factor2); //This can be used to remove the need to tare the scale. Useful in permanent scale projects. / Cela peut être utilisé pour supprimer le besoin de tarer la balance. Utile dans les projets à échelle permanente. CAPTEUR 2
-
-  // Mettre la LED en VERT pour indiquer la fin de la tare
-  ledB1 = 0;
-  ledB2 = 1;
-
-  while (true) {
-    scale1.setScale(calibration_factor1); //Adjust to this calibration factor / Ajuster à ce facteur d'étalonnage
-    scale2.setScale(calibration_factor2); //Adjust to this calibration factor / Ajuster à ce facteur d'étalonnage
-
-    if (moyenneClick == 0) {
+      scale2.setScale(0);
+      scale2.tare(); //Reset the scale to 0
+  
+      scale1.setScale(calibration_factor1); //Adjust to this calibration factor / Ajuster à ce facteur d'étalonnage
+      scale2.setScale(calibration_factor2); //Adjust to this calibration factor / Ajuster à ce facteur d'étalonnage
+      
+      
+       lcd.locate(0,0); 
+       lcd.printf("   mesure MOI     ");
+       lcd.locate(0,1); 
+       lcd.printf("  club de golf    ");
+       wait_ms(2000);
+       lcd.cls(); 
+       
+      
+      while(1)
+      {
       weight1 = scale1.getGram();
       weight2 = scale2.getGram();
-    }
-
-    //float raw = scaleRaw.read();
-    pc.printf("Reading Capteur1 g : %.2f\n", weight1);
-    //pc.printf("Raw Value: %.7f\n", raw);
-    pc.printf("Reading Capteur2 g : %.2f\n", weight2);
-
-    m = weight1 - weight2; // Calcul masse du club
-    lg = 45 * (weight1 / m); //Longueur jusqu'aux points d'équilibre
-
-    MOI = m * (lg * lg); // Calcul masse du MOI (masse inertielle)
-
-    calculInches = lg / convertionInches; //Convertion en inches
-    SW = (calculInches - 14) * m; //Calcul SWINGWEIGHT
-
-    switch (i) {
-    case 0: {
-      //LED_BOUTON_B
-      ledB1 = 0;
-      ledB2 = 1;
-
-      lcd.cls(); //CLEAR LCD
-      lcd.locate(0, 0); //Ecrire sur la 1er ligne
-      lcd.printf("F1: %.2fg\n", weight1); // Afficher le poids en grammes du capteur 1
-
-      lcd.locate(0, 1); //Ecrire sur la 2ème ligne
-      lcd.printf("F0: %.2fg\n", weight2); // Afficher le poids en grammes du capteur 2
-
-      if (!Center) {
-        //CODE: LED_BOUTON_A
-        ledB1 = 1;
-        ledB2 = 0;
-
-        weight1 = 0;
-        weight2 = 0;
-
-        wait(1.5); // Attendre 1.5 sec
-
-        while (moyenneClick == 0) {
-
-          boucleExecute++;
-
-          weight1 = weight1 + scale1.getGram();
-          weight2 = weight2 + scale2.getGram();
-
-          m = weight1 - weight2; // Calcul masse du club
-
-          massMoy = massMoy + m;
-
-          wait(0.1); // Attendre 0.1 sec
-
-          massMoy = massMoy / boucleExecute;
-
-          lcd.cls(); //CLEAR LCD
-          lcd.locate(0, 0); //Ecrire sur la 1er ligne
-          lcd.printf("Nombre de points\n"); // Afficher le nombre de points
-
-          lcd.locate(0, 1); //Ecrire sur la 1er ligne
-          lcd.printf("%d   m: %.2fg\n", boucleExecute, massMoy); // Afficher le nombre de points
-
-          //LED VERT
-          ledB1 = 0;
-          ledB2 = 1;
-
-          //LED ROUGE
-          ledB1 = 1;
-          ledB2 = 0;
-
-          massMoy = 0;
-
-          if (!Center) {
-            //LED ROUGE
-            ledB1 = 0;
-            ledB2 = 1;
-            moyenneClick = 1; //Mettre moyenneClick a 1
-            wait(1); // Attendre 1 sec
-          }
-
-        }
-
-        weight1 = weight1 / boucleExecute;
-        weight2 = weight2 / boucleExecute;
-
-        wait(0.5); // Attendre 0.5 sec
-      } else if (!Down) {
-        i = 1;
-        //CODE: LED_BOUTON_A
-        ledB1 = 1;
-        ledB2 = 0;
-
-        wait(0.5); // Attendre 0.5 sec
-      } else if (!Up) {
-        i = 3;
-        //CODE: LED_BOUTON_A
-        ledB1 = 1;
-        ledB2 = 0;
-
-        wait(0.5); // Attendre 0.5 sec
-      }
-    }
-    break;
-
-    case 1: {
-      //LED_BOUTON_B
-      ledB1 = 0;
-      ledB2 = 1;
-
-      lcd.cls(); //CLEAR LCD
-      lcd.locate(0, 0); //Ecrire sur la 1er ligne
-      lcd.printf("m = %.2fg\n", m);
-
-      lg = 45 * (weight1 / m);
-      lcd.locate(0, 1); //Ecrire sur la 2ème ligne
-      lcd.printf("lg = %.2fcm\n", lg);
-
-      if (!Down) {
-        i = 2;
-        //CODE: LED_BOUTON_A
-        ledB1 = 1;
-        ledB2 = 0;
-        wait(0.5); // Attendre 0.5 sec
-      } else if (!Up) {
-        i = 0;
-        //CODE: LED_BOUTON_A
-        ledB1 = 1;
-        ledB2 = 0;
-
-        wait(0.5); // Attendre 0.5 sec
-      }
-
-    }
-    break;
-
-    case 2: {
-      //LED_BOUTON_B
-      ledB1 = 0;
-      ledB2 = 1;
-
-      lcd.cls(); //CLEAR LCD
-      lcd.locate(0, 0); //Ecrire sur la 1er ligne
-      lcd.printf("MOI:\n");
-      lcd.locate(0, 1); //Ecrire sur la 2ème ligne
-      lcd.printf("%.2f kg.cm2\n", MOI / 1000);
-
-      if (!Down) {
-        i = 3;
-        //CODE: LED_BOUTON_A
-        ledB1 = 1;
-        ledB2 = 0;
+      
+       f0 = (int) weight1 ;
+      f1 = (int) weight2 ; 
+      
+      
+          m = f1 - f0 ;
+        lg = (l1*f1)/(f1-f0);
+        MOI = m*lg*lg/1000 ;
+ 
+ switch(menu)
+{
+      
+    case(0):
+           
+           lcd.locate(1,0); 
+           lcd.printf("*Mesures Forces");
+           lcd.locate(1,1); 
+           lcd.printf(" Calcul MOI    ");
+           wait_ms(tempo_saisie);
+           
+      if (!Center ){
+           lcd.cls(); 
+           menu = 3 ;
+           }  
+     
+      if (!Down){
+           lcd.cls();
+           menu = 1 ;}
+           
+      if (!Right ){
+           lcd.cls(); 
+           menu = 7 ;
+           } 
+           
+        myledV = 0;
+        myledR = 0;   
+           
+           
+           break; //fin case 0
+                 
+    
+    case(1):
+           
+     
+          
+           lcd.locate(1,0); 
+           lcd.printf(" Mesures Forces");
+           lcd.locate(1,1); 
+           lcd.printf("*Calcul MOI    ");
+           wait_ms(tempo_saisie);
+         
+      if (!Center ){
+           lcd.cls(); 
+           menu = 4 ;
+           }  
+     
+      if (!Down){
+           lcd.cls();
+           menu = 2 ;}
+           
+      if (!Up){
+           lcd.cls();
+           menu = 0 ;}
+           
+      if (!Right ){
+           lcd.cls(); 
+           menu = 7 ;
+           } 
+        myledV = 0;
+        myledR = 0;    
+           
+           
+           break; //fin case 1 
+                 
+         
+    case (2):
+           
+           lcd.locate(1,0);
+           lcd.printf(" Calcul MOI    ");
+           lcd.locate(1,1); 
+           lcd.printf("*Masse/longueur");
+           wait_ms(tempo_saisie);
+        
+       if (!Center ){
+           lcd.cls(); 
+           menu = 5 ;
+           }  
+             
+       if (!Up){
+           lcd.cls();
+           menu = 1 ;}
+           
+       if (!Right ){
+           lcd.cls(); 
+           menu = 7 ;
+           } 
+           
+                         
+        myledV = 0;
+        myledR = 0;
+           
+           break; //fin case 2 
+           
+    case (3):
+           
+           lcd.locate(1,0);
+           lcd.printf("F0 =  %d g", f0);
+           lcd.locate(1,1);
+           lcd.printf("F1 =  %d g", f1);
+           wait_ms(tempo_saisie);
+           
+       if (!Left ){
+           lcd.cls(); 
+           menu = 0 ;
+           }
+           
+        myledV = 1;
+        wait(0.2);
+        myledV = 0;
+        wait(0.2);
+        myledR = 0;
+        
 
-        wait(0.5); // Attendre 0.5 sec
-      } else if (!Up) {
-        i = 1;
-        //CODE: LED_BOUTON_A
-        ledB1 = 1;
-        ledB2 = 0;
-
-        wait(0.5); // Attendre 0.5 sec
-      }
-    }
-    break;
-
-    case 3: {
-      //LED_BOUTON_B
-      ledB1 = 0;
-      ledB2 = 1;
-
-      lcd.cls(); //CLEAR LCD
-      lcd.locate(0, 0); //Ecrire sur la 1er ligne
-
-      lcd.printf("SW = %.2f\n", SW);
-
-      lcd.locate(0, 1); //Ecrire sur la 2ème ligne
-
-      // Résultat de SW (SWINGWEIGHT / inertie) place le club dans une catégorie
-      if (SW < 5250) {
-        lcd.printf("SWINGWEIGHT NULL\n", SW);
-      } else if (SW > 5250 && SW < 5300) {
-        lcd.printf("SWINGWEIGHT = B4\n");
-      } else if (SW > 5300 && SW < 5350) {
-        lcd.printf("SWINGWEIGHT = B5\n");
-      } else if (SW > 5350 && SW < 5400) {
-        lcd.printf("SWINGWEIGHT = B6\n");
-      } else if (SW > 5400 && SW < 5450) {
-        lcd.printf("SWINGWEIGHT = B7\n");
-      } else if (SW > 5450 && SW < 5500) {
-        lcd.printf("SWINGWEIGHT = B8\n");
-      } else if (SW > 5500 && SW < 5550) {
-        lcd.printf("SWINGWEIGHT = B9\n");
-      } else if (SW > 5550 && SW < 5600) {
-        lcd.printf("SWINGWEIGHT = C0\n");
-      } else if (SW > 5600 && SW < 5650) {
-        lcd.printf("SWINGWEIGHT = C1\n");
-      } else if (SW > 5650 && SW < 5700) {
-        lcd.printf("SWINGWEIGHT = C2\n");
-      } else if (SW > 5700 && SW < 5750) {
-        lcd.printf("SWINGWEIGHT = C3\n");
-      } else if (SW > 5750 && SW < 5800) {
-        lcd.printf("SWINGWEIGHT = C4\n");
-      } else if (SW > 5800 && SW < 5850) {
-        lcd.printf("SWINGWEIGHT = C5\n");
-      } else if (SW > 5850 && SW < 5900) {
-        lcd.printf("SWINGWEIGHT = C6\n");
-      } else if (SW > 5900 && SW < 5950) {
-        lcd.printf("SWINGWEIGHT = C7\n");
-      } else if (SW > 5950 && SW < 6000) {
-        lcd.printf("SWINGWEIGHT = C8\n");
-      } else if (SW > 6000 && SW < 6050) {
-        lcd.printf("SWINGWEIGHT = C9\n");
-      } else if (SW > 6050 && SW < 6100) {
-        lcd.printf("SWINGWEIGHT = D0\n");
-      } else if (SW > 6100 && SW < 6150) {
-        lcd.printf("SWINGWEIGHT = D1\n");
-      } else if (SW > 6150 && SW < 6200) {
-        lcd.printf("SWINGWEIGHT = D2\n");
-      } else if (SW > 6200 && SW < 6250) {
-        lcd.printf("SWINGWEIGHT = D3\n");
-      } else if (SW > 6250 && SW < 6300) {
-        lcd.printf("SWINGWEIGHT = D4\n");
-      } else if (SW > 6300 && SW < 6350) {
-        lcd.printf("SWINGWEIGHT = D5\n");
-      } else if (SW > 6350 && SW < 6400) {
-        lcd.printf("SWINGWEIGHT = D6\n");
-      } else if (SW > 6400 && SW < 6450) {
-        lcd.printf("SWINGWEIGHT = D7\n");
-      } else if (SW > 6450 && SW < 6500) {
-        lcd.printf("SWINGWEIGHT = D8\n");
-      } else if (SW > 6500) {
-        lcd.printf("SWINGWEIGHT = D9\n");
-      }
-
-      if (!Down) {
-        i = 4;
-        //CODE: LED_BOUTON_A
-        ledB1 = 1;
-        ledB2 = 0;
-
-        wait(0.5); // Attendre 0.5 sec
-      } else if (!Up) {
-        i = 2;
-        //CODE: LED_BOUTON_A
-        ledB1 = 1;
-        ledB2 = 0;
-
-        wait(0.5); // Attendre 0.5 sec
-      }
-    }
-    break;
-
-    case 4: {
-      //LED_BOUTON_B
-      ledB1 = 0;
-      ledB2 = 1;
-
-      lcd.cls(); //CLEAR LCD
-      lcd.locate(0, 0); //Ecrire sur la 1er ligne
-
-      lcd.printf("N points moyenne");
-
-      lcd.locate(0, 1); //Ecrire sur la 2eme ligne
-      lcd.printf("%d\n", boucleExecute);
-
-      if (!Down) {
-        i = 0;
-        //CODE: LED_BOUTON_A
-        ledB1 = 1;
-        ledB2 = 0;
-
-        wait(0.5); // Attendre 0.5 sec
-      } else if (!Up) {
-        i = 3;
-        //CODE: LED_BOUTON_A
-        ledB1 = 1;
-        ledB2 = 0;
-
-        wait(0.5); // Attendre 0.5 sec
-      }
-    }
-    break;
-    }
-    /*
-    CODE INFORMATION:
-    LED_BOUTON_A: Mettre la LED bicolore en ROUGE pour que l'utilisateur sache que son action a était pris en compte
-    LED_BOUTON_B: Mettre la LED bicolore en VERT à la fin de l'action utilisateur
+           break; //fin case 3  
+           
+    case (4):
+ 
+           lcd.locate(0,0);
+           lcd.printf("MOI= %d kg*cm2", MOI);
+           wait_ms(tempo_saisie);
+           
+       if (!Left ){
+           lcd.cls(); 
+           menu = 1 ;
+           }             
+           
+        myledR = 1;
+        wait(0.2);
+        myledR = 0;
+        wait(0.2);
+        myledV = 0;
+        
+           
+           break; //fin case 4 
+               
+    case (5):
+         
+           lcd.locate(1,0);
+           lcd.printf(" Masse = %d g" , m);
+           wait_ms(tempo_saisie);
+           
+       if (!Left ){
+           lcd.cls(); 
+           menu = 2 ;
+           }  
+           
+       if (!Right ){
+           lcd.cls(); 
+           menu = 6 ;
+           } 
+           
+                 
+        myledV = 1;
+        myledR = 0;
+           
+           
+           break; //fin case 5 
+           
     
-    */
-
-    if (pc.readable()) {
-      char temp = pc.getc();
-      if (temp == '1' || temp == 'a')
-        calibration_factor1 -= 25;
-      else if (temp == '3' || temp == 'z')
-        calibration_factor1 += 25;
-      else if (temp == '4' || temp == 'q')
-        calibration_factor2 -= 25;
-      else if (temp == '6' || temp == 's')
-        calibration_factor2 += 25;
-    }
-    gpo = !gpo; // toggle pin
-    wait(0.2); // Attendre 0.2 sec
-  }
-}
\ No newline at end of file
+    case (6):
+          
+           lcd.locate(1,0);
+           lcd.printf(" l1 = %d cm" , l1);
+           lcd.locate(1,1);
+           lcd.printf(" lg = %d cm" , lg);
+           wait_ms(tempo_saisie);
+           
+       if (!Left ){
+           lcd.cls(); 
+           menu = 2 ;
+           }  
+        
+        myledR = 1;
+        myledV = 0;
+        
+           
+           break; //fin case 6 
+       
+       
+    case (7):
+        
+         
+           lcd.locate(1,0);
+           lcd.printf(" HTML      ");
+           wait_ms(tempo_saisie);
+           
+       if (!Left ){
+           lcd.cls(); 
+           menu = 0 ;
+           }  
+           
+        myledR = 1;
+        wait(0.2);
+        myledV = 0;
+        wait(0.2);
+        
+        myledR = 0;
+        wait(0.2);
+        myledV = 1;
+        wait(0.2);
+        
+           break; //fin case 7   
+                             
+    } } }
\ No newline at end of file