Я подключил мой распи (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 и, если измеренные значения сильно меняются.