Bonjour à tous,
Alors voilà, au cours de mon projet on a opté pour une capteur de pression de chez omron :http://docs-europe.electrocomponents...6b81308df0.pdf .
On a prit un code sur internet qu'il semble marcher ( quand je le vérifie tout est ok ). Je branche alors ma carte arduino uno et je téléverse et vient un problème :Or, quand je lance mon capteur de température tout fonctionne et il m'indique la bonne température. Je ne comprends dès lors pas d'où vient le problème.avrdude: ser_open(): can't open device "\\.\COM5": Accès refusé.
J'ai donc posté mon montage sur le forum électronique et je poste ici mon code en espérant que vous puissiez m'aider...
Voici le code :
Bien à vous, N2ico.Code:#include "Wire.h" #define addrs 0x6C // I2C bus address int P; int I; float T; int initialize(int i2c_addr) { //INITIALIZATION AFTER POWER UP Wire.beginTransmission(i2c_addr); Wire.write(0x0B); Wire.write(0x00); int x = Wire.endTransmission(); return x; } int pressure(int i2c_addr) { //MCU MODE Wire.beginTransmission(i2c_addr); Wire.write(0x00); Wire.write(0xD0); // reg 0 - address register high byte // Wire.write(0x51); // reg 1 - address register low byte Wire.write(0x40); // reg 1 - address register low byte Wire.write(0x18); // reg 2 - serial control register - indicate # bytes among others (page 7 bottom) Wire.write(0x06); // reg 3 - value to be written to SENS control register int x = Wire.endTransmission(); delay(33); //WRITE Wire.beginTransmission(i2c_addr); Wire.write(0x00); Wire.write(0xD0); Wire.write(0x51); Wire.write(0x2C); x = Wire.endTransmission(); //READ Wire.beginTransmission(i2c_addr); Wire.write(0x07); x = Wire.endTransmission(); Wire.requestFrom(i2c_addr, 2); byte hibyte = Wire.read(); byte lobyte = Wire.read(); long raw = word( hibyte, lobyte); //Serial.print("raw pressure:\t "); //Serial.println(raw); // D6F-PH5050AD3 ==> rangeMode=500 ==> int rd_pressure = ((raw - 1024) * rangeMode * 2 / 60000L) - rangeMode // D6F-PH0505AD3 ==> rangeMode=50 ==> int rd_pressure = ((raw - 1024) * rangeMode * 2 / 60000L) - rangeMode // D6F-PH0025AD1 ==> rangeMode=250 ==> int rd_pressure=(raw - 1024) * rangeMode / 60000L int rangeMode = 50; int rd_pressure = ((raw - 1024) * rangeMode * 2 / 60000L) - rangeMode; return rd_pressure; } float temperature(int i2c_addr) { //MCU MODE Wire.beginTransmission(i2c_addr); Wire.write(0x00); Wire.write(0xD0); // reg 0 - address register high byte // Wire.write(0x51); // reg 1 - address register low byte Wire.write(0x40); // reg 1 - address register low byte Wire.write(0x18); // reg 2 - serial control register - indicate # bytes among others (page 7 bottom) Wire.write(0x06); // reg 3 - value to be written to SENS control register int x = Wire.endTransmission(); delay(33); //WRITE Wire.beginTransmission(i2c_addr); Wire.write(0x00); Wire.write(0xD0); Wire.write(0x61); Wire.write(0x2C); x = Wire.endTransmission(); //READ Wire.beginTransmission(i2c_addr); Wire.write(0x07); x = Wire.endTransmission(); Wire.requestFrom(i2c_addr, 2); byte hibyte = Wire.read(); byte lobyte = Wire.read(); long raw = word( hibyte, lobyte); //Serial.print("raw temperature:\t "); //Serial.println(raw); int temp = round((float)(raw - 10214) / 3.739); // this is the temperature multiplied by 10... return (temp/10.0); // ...and the function returs the float temperature with 0.1°C resolution } void setup() { // Open serial communications Wire.begin(); Serial.begin(9600); I=initialize (addrs); // start wire connection } void loop() { P=pressure(addrs); Serial.print("pressure:\t "); Serial.println(P); T=temperature(addrs); Serial.print("temperature:\t "); Serial.println(T); delay(30000); //delay for 30 seconds } "
-----