Есть задача, опрашивать несколько ардуино по I2C с целью вывести полученное на дисплей. Рабочий код прикладываю, подсоединял по мануалу пробовал подтягивать SCL и SDA резисторами на 1,5кОм. Вопрос в следующем. Почему то поле некоторого времени слейв перестает определятся. Скан видит любую перефирию I2C кроме ардуинки Код (C++): Код мастера 01 #include <LiquidCrystal_I2C.h> 02 LiquidCrystal_I2C lcd(0x26,16,2); 03 #include <Wire.h> 04 char co = 0 ; 05 06 void setup() 07 { 08 09 Wire.begin(); // join i2c bus (address optional for master) 10 lcd.init(); 11 lcd.backlight(); 12 Serial.begin(9600); 13 } 14 15 void loop() 16 { 17 18 Wire.requestFrom(0x10, 4,true); 19 lcd.setCursor(0,0); 20 while (Wire.available()) 21 { 22 co = Wire.read(); 23 Serial.print(co); 24 lcd.print(co); 25 } 26 delay(200); 27 28 29 Serial.print(" "); 30 31 Wire.requestFrom(0x10, 7,true); // request 6 bytes from slave device #8 32 lcd.setCursor(4,0); 33 while (Wire.available()) 34 { 35 co = Wire.read(); 36 Serial.print(co); 37 lcd.print(co); 38 } 39 40 Serial.print("\n"); 41 delay(200); 42 lcd.clear(); 43 } Код (C++): Код слейва 01 #include <Wire.h> 02 03 byte stat = true; 04 05 char c[4] = {'N','O',' ',' '}; 06 float x = 322.345; 07 void setup() { 08 Wire.begin(0x10); 09 pinMode(13, OUTPUT); 10 Serial.begin(9600); 11 Wire.onRequest(requestEvent); 12 } 13 14 void loop() { 15 digitalWrite(13, LOW); 16 delay(100); 17 18 } 19 20 void requestEvent() { 21 if (stat == true) 22 { 23 24 Wire.write(c,sizeof c); 25 stat = false; 26 }else 27 { 28 char outstr[7]; 29 dtostrf(x,7, 3, outstr); 30 Wire.write(outstr,sizeof outstr); 31 stat = true; 32 } 33 digitalWrite(13, HIGH); 34 35 36 37 38 }
Попробуйте уменьшить номинал подтягивающих резисторов. Возможно еще плохое соединение линий I2C, я так понимаю по фото, вы припаяли штырьки поверх контактов?
Качество соединения такими проводами оставляет желать лучшего, да и макетки со временем ушатываются. Попробуйте поставить Proto Shiled и впаять в него все что вы хотите опрашивать. Для эксперимента хотя бы, сравнить результат, потом можно выпаять.