Bonsoir, c'est la première fois que je poste sur ce forum, j'espère que je ne ferais pas trop d'erreurs et que ce sera compréhensible.
Alors je vous explique, je suis actuellement en terminale et pour mon bac j'ai un projet à réaliser, je pense que vous avez dû en voir pas mal ici .
Enfaite mon projet consiste à surveiller la pression d'un laboratoire de recherche, afin d'éviter des entrées d'air dans la pièce.
Enfin bon je m'en sort pas trop mal, mais mon problème c'est que j'ai 2 capteurs MPL3115A2 et que dans mon système ils ne sont pas différencier.
Lorsque j’exécute mon programme, et que j'affiche mes pressions captés sur un écran LCD les deux capteurs ne sont pas pris en compte, il n'y en a qu'un seul qui est utilisé, et j'ai l'impression que lorsque j'en enlève un l'autre prend sa place dans le programme.
Ils sont tous les deux branchés en I2C avec un shield, j’utilise une carte Arduino Uno.
J'ai lu tout ce que je pouvais sur internet et différents post à ce sujet mais je n'ai pas trouvé de personne avec ce capteur et ce que je trouvais ne s'adaptait pas à mon capteur.
J'ai entre autres trouvé pas mal de fois ce genre de chose :
// write the address (0x61) to the PARAM_WR I2C register (0x17)
Wire.beginTransmission( 0x60 );
Wire.write( 0x17 );
Wire.write( NEW_ADDR );
Wire.endTransmission();
// write a PARAM_SET command into the COMMAND register (0x18)
Wire.beginTransmission( 0x60 );
Wire.write( 0x18 );
Wire.write( 0xA0 ); // PARAM_SET command (0xA0) OR'd with the I2C_ADDR PRAM address (0x00)
Wire.endTransmission();
/* tell the chip you want to read the command response register.
the first half is a "tell the chip what address I want by starting
a write but not sending any data" transaction.. regrettably common
in I2C
*/
Wire.beginTransmission( 0x60 );
Wire.write( 0x2E );
Wire.endTransmission();
Wire.requestFrom( 0x60,0x01 ); // read one byte from the address just set
uint8_t reply = Wire.read();
Serial.print( "return value from PARAM_SET command: 0x" );
Serial.print( reply, HEX );
/* now, having done all that, execute a BUSADDR command to use the address
we've stored in the PRAM
*/
Wire.beginTransmission( 0x60 );
Wire.write( 0x18 );
Wire.write( 0x02 ); // BUSADDR command
Wire.endTransmission();
// this time we find the result in the RESPONSE register (0x20)
Wire.beginTransmission( 0x60 );
Wire.write( 0x20 );
Wire.endTransmission();
Wire.requestFrom( 0x60, 0x01 );
reply = Wire.read();
Serial.print( "return value from BUSADDR command: 0x" );
Serial.print( reply, HEX );
Ou encore j'ai vu qu'il fallait regarder dans la datasheet mais je n'ai pas vraiment compris.
J’ai également vu, sur un forum dans un post parlant de ce capteur MPL3115A2, qu’apparemment il n’était pas possible de changer l’adresse du capteur.
Voici mon code, désoler si c’est un peu le bazar j’ai pris des petits bout qui m’intéressais dans des librairies et sur internet et je les ai modifiés :
#include <Wire.h>
#include "SparkFunMPL3115A2.h" Librairie capteur
#include "rgb_lcd.h" //Librairie écran LCD
rgb_lcd lcd;
const int colorR = 111;
const int colorG = 216;
const int colorB = 251;
void setup() {
Wire.begin(); // Join i2c bus
Serial.begin(9600); // Start serial for output lcd.begin(16, 2); //On indique le nombre de colonnes et de lignes de l'écran
lcd.setRGB(colorR, colorG, colorB);
lcd.clear(); //On efface tout ce qui se trouve sur l'écran
//Create an instance of the object
MPL3115A2 myPressure;
MPL3115A2 myPressure2;
myPressure.begin(); // Get sensor online
// Configure the sensor
myPressure.setModeBarometer(); // Measure pressure in Pascals from 20 to 110 kPa
myPressure.setOversampleRate(8); // Set Oversample to the recommended 128
myPressure.enableEventFlags(); // Enable all three pressure and temp event flags
myPressure2.begin(); // Get sensor online
// Configure the sensor
myPressure2.setModeBarometer(); // Measure pressure in Pascals from 20 to 110 kPa
myPressure2.setOversampleRate(8); // Set Oversample to the recommended 128
myPressure2.enableEventFlags(); // Enable all three pressure and temp event flags
}
void loop() {
// 1er capteur
float pressure = myPressure.readPressure();
Serial.print("Pression intérieur:");
Serial.print(pressure);
Serial.println();
// 2ème capteur
float pressure2 = myPressure2.readPressure();
Wire.begin();
Serial.print("Pression extérieur:");
Serial.print(pressure2);
Serial.println();
//mise en forme et affichage 1er capteur sur l'écran LCD
lcd.setCursor(0, 0);//Positionnement du curseur
lcd.print("Pint: ");
lcd.setCursor(5, 0);
lcd.print(pressure); //Affichage de la pression
lcd.setCursor(14, 0);
lcd.print("Pa");//Affiche Pa (Pascal)
delay(500); //On actualise les informations toutes les x millisecondes.
//mise en forme et affichage 1er capteur sur l'écran LCD
lcd.setCursor(0, 1);//Positionnement du curseur
lcd.print("Pext: ");
lcd.setCursor(5, 1);
lcd.print(pressure2); //Affichage de la pression
lcd.setCursor(14, 1);
lcd.print("Pa");//Affiche Pa (Pascal)
delay(500); //On actualise les informations toutes les x millisecondes.
}
Voilà je ne suis qu’une débutante alors désolée si il y a des erreurs bête, j’espère que tout est clair n’hésiter pas à me demander si il manque des choses, je vous remercie d’avance pour vos réponses.