I2C在Arduino发出7次请求后停止传输
我使用运行TinyWire库的ATTiny85从I2C连接与运行Wire库的Arduino Uno通信。我可以一次传输一个字节,对于任意多的请求都可以,但是当我尝试一次发送两个字节时,就会出现问题。下面是我正在使用的代码(注意-我正在使用TinyWire库的一个流行的修改版本,它实现了OnRequest方法)。这是我的奴隶代码:I2C在Arduino发出7次请求后停止传输,arduino,avr,arduino-uno,i2c,attiny,Arduino,Avr,Arduino Uno,I2c,Attiny,我使用运行TinyWire库的ATTiny85从I2C连接与运行Wire库的Arduino Uno通信。我可以一次传输一个字节,对于任意多的请求都可以,但是当我尝试一次发送两个字节时,就会出现问题。下面是我正在使用的代码(注意-我正在使用TinyWire库的一个流行的修改版本,它实现了OnRequest方法)。这是我的奴隶代码: #include "TinyWireS.h" // wrapper class for I2C slave routines
#include "TinyWireS.h" // wrapper class for I2C slave routines
#define I2C_SLAVE_ADDR 0x27 // i2c slave address
void setup()
{
TinyWireS.begin(I2C_SLAVE_ADDR); // init I2C Slave mode
TinyWireS.onRequest(requestEvent);
}
void loop()
{
}
void requestEvent()
{
int16_t bigNum = analogRead(3);
byte myArray[2];
myArray[0] = (bigNum >> 8) & 0xFF;
myArray[1] = bigNum & 0xFF;
TinyWireS.send(myArray[0]);
TinyWireS.send(myArray[1]);
}
至于船长:
#include <Wire.h>
#define DEVICE_2 0x27
void setup()
{
Wire.begin();
Serial.begin(9600);
}
void loop()
{
delay(2000);
int16_t bigNum;
byte a,b;
// read 2 bytes, from address 0x27
Serial.println("Request Start");
Wire.requestFrom(DEVICE_2, 2);
a = Wire.read();
b = Wire.read();
bigNum = a;
bigNum = bigNum << 8 | b;
Serial.print(bigNum);
Serial.print("\n");
}
谢谢您的帮助。根据这一点,您只能从
onRequest
回调函数发送一个字节。它是从ISR调用的,所以它真的不应该做太多。他建议记住已发送的字节,然后在另一个请求
事件发生时发送下一个字节。参见此。根据此,您只能从onRequest
回调函数发送一个字节。它是从ISR调用的,所以它真的不应该做太多。他建议记住已发送的字节,然后在另一个请求
事件发生时发送下一个字节。看看这个。谢谢,回答得很好。谢谢,回答得很好。
if(Wire.available() > 0) {
a = Wire.read();
b = Wire.read();
}