Lecture.ino 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. #include <Wire.h>
  2. #define MCP3428_ADDRESS 0x68 // Adresse I2C du MCP3428
  3. #define VREF 3.3 // Tension de référence en volts
  4. void setup() {
  5. Wire.begin();
  6. Serial.begin(9600);
  7. // Configuration du MCP3428
  8. Wire.beginTransmission(MCP3428_ADDRESS);
  9. Wire.write(0x10); // Configurer en mode continu, 16 bits de résolution
  10. byte result = Wire.endTransmission();
  11. if (result != 0) {
  12. Serial.println("Erreur lors de la configuration du MCP3428");
  13. while (1); // Arrêt du programme en cas d'erreur
  14. }
  15. }
  16. void loop() {
  17. // Lecture des données des 4 canaux
  18. for (int i = 0; i < 4; i++) {
  19. Wire.beginTransmission(MCP3428_ADDRESS);
  20. Wire.write(0x80 | (i << 5)); // Sélectionner le canal et lancer une conversion
  21. byte result = Wire.endTransmission();
  22. if (result != 0) {
  23. Serial.print("Erreur lors de la lecture du canal ");
  24. Serial.println(i + 1);
  25. continue; // Passer au canal suivant en cas d'erreur
  26. }
  27. delay(100); // Attendre la fin de la conversion (ajustez cette valeur en fonction de la vitesse de conversion configurée)
  28. Wire.requestFrom(MCP3428_ADDRESS, 3); // Lecture des 3 octets de données
  29. byte config = Wire.read();
  30. byte byte2 = Wire.read();
  31. byte byte1 = Wire.read();
  32. int value = ((byte2 & 0x0F) << 8) | byte1; // Calcul de la valeur analogique
  33. // Conversion en tension
  34. float voltage = (value * VREF) / 32767.0;
  35. Serial.print("Canal ");
  36. Serial.print(i + 1);
  37. Serial.print(": ");
  38. Serial.print(value);
  39. Serial.print(" (");
  40. Serial.print(voltage, 4);
  41. Serial.println(" V)");
  42. }
  43. delay(1000); // Attendre 1 seconde avant de lire à nouveau les données
  44. }