Подскажите в чём может быть причина зависания обоих МК при обмене данными по I2C? Резисторы подтяжки шины i2c на питание имеются. Питание обоих плат идет от usb портов компьютера. По истечение примерно минуты оба МК начинаю оправлять сообщения без задержки.
Тестовые скетчи:
Тестовые скетчи:
master:
#include <Wire.h>
#include <Arduino.h>
byte address = 8; // адрес ведомого
byte masterReceive = 100;
byte masterSend;
uint16_t timer = 0;
bool flag = false;
void setup()
{
Wire.begin();
Serial.begin(9600);
pinMode(LED_BUILTIN, OUTPUT);
}
void loop()
{
if (millis() - timer > 1000)
{
Wire.requestFrom(address, 1);
masterReceive = Wire.read();
Wire.beginTransmission(address);
Wire.write(masterSend);
Wire.endTransmission();
timer = millis();
}
if (flag && masterReceive == 105)
{
digitalWrite(LED_BUILTIN, HIGH);
Serial.println("Принято от slave - ");
Serial.println(masterReceive);
masterSend = 50;
flag = !flag;
}
if (!flag && masterReceive == 100)
{
digitalWrite(LED_BUILTIN, LOW);
Serial.println("Принято от slave - ");
Serial.println(masterReceive);
masterSend = 55;
flag = !flag;
}
}
slave:
#include <Wire.h>
#include <Arduino.h>
byte address = 8; // адрес ведомого
byte slaveReceived;
byte SlaveSend = 105;
uint16_t timer = 0;
bool flag = false;
void receiveEvent(int howMany) // эта функция вызывается когда ведомый принимает значение от ведущего
{
slaveReceived = Wire.read();
}
void requestEvent() // эта функция вызывается когда ведущий запрашивает значение от ведомого
{
Wire.write(SlaveSend);
}
void setup()
{
Serial.begin(9600);
Wire.begin(address);
Wire.onReceive(receiveEvent);
Wire.onRequest(requestEvent);
pinMode(LED_BUILTIN, OUTPUT);
}
void loop()
{
if (!flag && slaveReceived == 55)
{
digitalWrite(LED_BUILTIN, HIGH);
Serial.println("Принято от master - ");
Serial.println(slaveReceived);
SlaveSend = 105;
flag = !flag;
}
if (flag && slaveReceived == 50)
{
digitalWrite(LED_BUILTIN, LOW);
Serial.println("Принято от master - ");
Serial.println(slaveReceived);
SlaveSend = 100;
flag = !flag;
}
}