Ошибка удаленного ввода-вывода на шине I2C Raspi Master Arduino Mega Slave - PullRequest
0 голосов
/ 07 февраля 2019

Я подключил мой распи (Master) к Arduino Mega (Slave) и хочу непрерывно передавать аналоговые показания с аналоговых выводов A0-A3 на распи.Программа работает в течение некоторого времени и выдает сообщение об ошибке: [Errno 121] Ошибка удаленного ввода-вывода

Я подозреваю, что 2 вещи могут быть проблемой: 1) Цикл while => более длительное время ожидания приводит к более длительномувремя работы до сбоя программы 2) Я где-то читал, что библиотека проводов выполняет команду onReceive перед тем, как выполнить onRequest?

Вот мой код Arduino и raspi:

Arduino Mega Code #include

int SLAVE_ADDRESS = 0x08;
int analogPin1 = A0;
int analogPin2 = A1;
int analogPin3 = A2;
int analogPin4 = A3;


void setup(){
Wire.begin(SLAVE_ADDRESS);
Wire.onRequest(sendAnalogReading);
}

void loop(){
}

void sendAnalogReading(){

uint16_t reading1 = analogRead(analogPin1);
uint16_t reading2 = analogRead(analogPin2);
uint16_t reading3 = analogRead(analogPin3);
uint16_t reading4 = analogRead(analogPin4);


Wire.write((char *) &reading1, 2);
Wire.write((char *) &reading2, 2);
Wire.write((char *) &reading3, 2);
Wire.write((char *) &reading4, 2);

}

Это сценарий на моем Raspi: время импорта import smbus

bus = smbus.SMBus(1)

SLAVE_ADDRESS = 0x08

def requestreading():
block = bus.read_i2c_block_data((SLAVE_ADDRESS), 0, 8)

print(block)


while True:
#var = input("Press any key for reading: ")
requestreading()
    time.sleep(0.1)

Может работать непрерывно, однако я чувствую, что фактическое время выполнения, пока не произойдет сбой, зависит от 2 факторов.Продолжительность time.sleep () в цикле while и, если измеренные значения сильно меняются.

...