Salinité.ino 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. /*programe arduino qui :
  2. affiche "mettre la sonde dans la solution 1"
  3. qui attend un entrée de l'utilisateur,
  4. récupere une valeur en I2C adress 0x45 stocker dans une variable Y1
  5. affiche "mettre la sonde dans la solution 2"
  6. qui attend un entrée de l'utilisateur,
  7. récupere une valeur en I2C adress 0x45 stocker dans une variable Y2
  8. affiche "mettre la sonde dans la solution 3"
  9. qui attend un entrée de l'utilisateur,
  10. récupere une valeur en I2C adress 0x45 stocker dans une variable Y3
  11. calcul la droite d'equation de la courbe avec X1 = 1025 X2 =1020 X3=1030 et les variable Y1 et Y2 et Y3*/
  12. #include <Wire.h>
  13. const int I2C_ADDR = 0x45; // Adresse I2C du périphérique
  14. float X1 = 1025;
  15. float X2 = 1020;
  16. float X3 = 1030;
  17. float Y1, Y2, Y3;
  18. float m, b; // Coefficients de la droite d'équation Y = mX + b
  19. void setup() {
  20. Serial.begin(9600); // Initialisation de la communication série
  21. Wire.begin(); // Initialisation de la bibliothèque Wire (I2C)
  22. }
  23. void loop() {
  24. // Afficher le message et attendre une entrée de l'utilisateur
  25. Serial.println("Mettre la sonde dans la solution 1");
  26. while (!Serial.available()) {
  27. // Attendre tant qu'aucune entrée n'est reçue
  28. }
  29. Serial.read(); // Lire et ignorer l'entrée
  30. // Récupérer la valeur en I2C
  31. Wire.requestFrom(I2C_ADDR, sizeof(float));
  32. while (Wire.available() < sizeof(float)) {
  33. // Attendre tant que les données ne sont pas disponibles
  34. }
  35. Wire.readBytes((char*)&Y1, sizeof(float));
  36. // Afficher le message et attendre une entrée de l'utilisateur
  37. Serial.println("Mettre la sonde dans la solution 2");
  38. while (!Serial.available()) {
  39. // Attendre tant qu'aucune entrée n'est reçue
  40. }
  41. Serial.read(); // Lire et ignorer l'entrée
  42. // Récupérer la valeur en I2C
  43. Wire.requestFrom(I2C_ADDR, sizeof(float));
  44. while (Wire.available() < sizeof(float)) {
  45. // Attendre tant que les données ne sont pas disponibles
  46. }
  47. Wire.readBytes((char*)&Y2, sizeof(float));
  48. // Afficher le message et attendre une entrée de l'utilisateur
  49. Serial.println("Mettre la sonde dans la solution 3");
  50. while (!Serial.available()) {
  51. // Attendre tant qu'aucune entrée n'est reçue
  52. }
  53. Serial.read(); // Lire et ignorer l'entrée
  54. // Récupérer la valeur en I2C
  55. Wire.requestFrom(I2C_ADDR, sizeof(float));
  56. while (Wire.available() < sizeof(float)) {
  57. // Attendre tant que les données ne sont pas disponibles
  58. }
  59. Wire.readBytes((char*)&Y3, sizeof(float));
  60. // Calculer la droite d'équation Y = mX + b
  61. float denom = (X1 - X2) * (X1 - X3) * (X2 - X3);
  62. m = (Y1 * (X2 - X3) - Y2 * (X1 - X3) + Y3 * (X1 - X2)) / denom;
  63. b = (Y1 * (X2 * X2 - X3 * X3) - Y2 * (X1 * X1 - X3 * X3) + Y3 * (X1 * X1 - X2 * X2)) / denom;
  64. // Afficher les résultats
  65. Serial.print("Droite d'équation : Y = ");
  66. Serial.print(m);
  67. Serial.print("X + ");
  68. Serial.println(b);
  69. // Attendre un certain délai avant la prochaine itération
  70. delay(1000);
  71. }