Рабочий код прикладываю, подсоединял по мануалу пробовал подтягивать SCL и SDA резисторами на 1,5кОм.
Вопрос в следующем.
Почему то поле некоторого времени слейв перестает определятся.
Скан видит любую перефирию I2C кроме ардуинки
- Код: Выделить всё • Развернуть
Код (C++):
Код мастера
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x26,16,2);
#include <Wire.h>
char co = 0 ;
void setup()
{
Wire.begin(); // join i2c bus (address optional for master)
lcd.init();
lcd.backlight();
Serial.begin(9600);
}
void loop()
{
Wire.requestFrom(0x10, 4,true);
lcd.setCursor(0,0);
while (Wire.available())
{
co = Wire.read();
Serial.print(co);
lcd.print(co);
}
delay(200);
Serial.print(" ");
Wire.requestFrom(0x10, 7,true); // request 6 bytes from slave device #8
lcd.setCursor(4,0);
while (Wire.available())
{
co = Wire.read();
Serial.print(co);
lcd.print(co);
}
Serial.print("\n");
delay(200);
lcd.clear();
}
Код (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 }