Как мне прочитать байт с ведомого устройства I2 C при обработке запроса от мастера? - PullRequest
0 голосов
/ 19 февраля 2020

У меня Raspberry Pi Zero W, играющий роль Мастера, и Arduino Pro Mini, выступающего в роли Раба. Я хотел бы, чтобы Мастер послал команды Рабу. Тем не менее, когда я пытаюсь использовать такие команды, как bus.write_byte_data или bus.write_byte от Master, Slave только когда-либо получает значение 255. Вот код:

Master (в Python):

import time
import smbus

i2c_ch = 1
bus = smbus.SMBus(i2c_ch)

i2c_address = 20
bus.write_byte_data(i2c_address, 113,111)
val = bus.read_i2c_block_data(i2c_address,12)
bus.write_byte(i2c_address, 123)
print(val)

А вот запрос requestEvent () подчиненного устройства (в Arduino C):

void requestEvent()
{
  byte command = Wire.read();
  Serial.println(command);
  command = Wire.read();
  Serial.println(command);
  command = Wire.read();
  Serial.println(command);
...
}

Каков подход, посредством которого ведомый мог бы получать байты по команде Мастера?

1 Ответ

1 голос
/ 20 февраля 2020

Возможно, вы пытаетесь использовать обработчик, созданный Wire.onRequest, вместо обработчика, созданного Wire.onReceive. Обработчик onReceive будет делать то, что вы хотите:

Wire.onReceive(receieveEvent);
Wire.onRequest(requestEvent);
...
void receieveEvent()
{
  Serial.println("received some data");
  while(0 < Wire.available()) // loop through all but the last
  {
    byte command = Wire.read();
    Serial.println(command);
  }
} 

PS: LOL, у вас то же имя, что и у меня!

...