Bonjour,
Je développe un poste de controle qualité qui repose sur le relevé de débit du flux d'air : voici la datasheet du capteur
https://www.first-sensor.com/cms/upl...BI_E_11354.pdf
Et le code (qui a fonctionnait par le passé) :
Jusqu'à maintenant mes codes fonctionnaient sur Arduino (j'utilise la Uno mais je vais passer sur Mega j'ai besoin de plus de sorties) j'ai utilisé des résistances de pull-up de 4.7 k ohms (je sais sur la datasheet 10kohms mais ça a fonctionné en 4.7kohms et pas en 10kohms). Dernièrement dans mes manips un capteur a grillé et je ne me l'explique pas.Code://---Variables de donnEes atraiter--- long flow; long valBrute; //---Adresse de I2C de l'esclave (cpt WBI)--- #include <Wire.h> //importation de la librairie I2C #define WBI_adress 0x04 //Adresse d'aprEs I2C SCANNER //---Utilisation du I2C--- //---Adresses relatives au capteur cf.datasheet #define WBI_readINSTANTflow 0x83 #define WBI_read 0x85 #define WBI_write 0x05 #define WBI_autoRAZ 0x1C // register cofiguration; WARNING sensor set by FLUIDGENT? #define WBI_writeCOMMANDS 0x00 //---Variable de stockage des donnEes du capteur--- byte data1 = 0; byte data2 = 0; byte data3 = 0; byte data4 = 0; //----------------------------------------------------------------------------------------------------------------------------------------------------------------- //---SETUP---SETUP---SETUP---SETUP---SETUP---SETUP---SETUP---SETUP---SETUP---SETUP---SETUP---SETUP---SETUP---SETUP---SETUP---SETUP---SETUP---SETUP---SETUP---SETUP //----------------------------------------------------------------------------------------------------------------------------------------------------------------- void setup() { Serial.begin(115200);//Initialisation du port USB Serial.print("\n****SETUP****\n"); // indication debut SetUp Wire.begin();//µC en mode maitre Wire.setClock(100000); for (int i = 0; i < 10; i++) { flow = 0; valBrute = 0; //---demander les donnEes a l'esclave--- Wire.beginTransmission(WBI_adress);// secure the line between master and slave Wire.write(WBI_readINSTANTflow); //send request for the 4 bytes decribing instant flow if (Wire.endTransmission () == 0){ Serial.print("Ok"); Serial.print("\t"); } else{ Serial.print("Nok"); Serial.print("\t"); } Wire.requestFrom(WBI_adress, 4, true); flow = 0; //---memoriser les donnEes--- if ( 4 <= Wire.available()) { Serial.println("Avlb"); data1 = Wire.read();//strongest byte data2 = Wire.read(); data3 = Wire.read(); data4 = Wire.read();//weakest byte } Serial.println(data1,HEX); Serial.print("\t"); Serial.print(data2,HEX); Serial.print("\t"); Serial.print(data3,HEX); Serial.print("\t"); Serial.print(data4,HEX); Serial.print("\t"); flow = (data1 * 16777216) + (data2 * 65536) + (data3 * 256) + (data4); valBrute = flow + valBrute; Serial.println(flow); Serial.println(); } valBrute = valBrute /10 ; }//setup
H1 : il faut un montage intermédiaire.
H2: La longueur de câblage est supérieur à 1m disfonctionne le mode de communication I2c (je n'y crois pas trop vu qu'on est en binaire).
H3 : SDA et SCL sont raccordés à d'autres sortie.
Merci d'avance pour les éclairages à venir!
-----