Я использую Arduino IDE для загрузки и составления кода для этих микроконтроллеров. Это должен быть тестовый сценарий. Связь подобна следующему: < /p>
ПК -> Пользовательский ввод через последовательный -> Master -> Пользовательский ввод через Wire /i2c -> Slave -> Пользовательский ввод через Wire /i2c -> Master -> Пользовательский ввод через серийный Другое письмо получает до введенного письма.
Slave: < /p>
Я подумал, что это будет ошибкой времени, поэтому я положил задержку (500); после Wire.endTransmission (); , чтобы у подчинения было некоторое время для обновления своего буфера. Это ничего не изменило, поэтому я добавил wire.flush (); , потому что я думал, что мастер будет читать старые данные из своего внутреннего проволочного буфера, и это тоже ничего не сделало. Поэтому я спросил CHATGPT, но его результаты не работали. Здесь я столкнулся с той же проблемой, рабыня печатает все правильно, и мастер печатает байты на один шаг назад.>
void wire_receive(int len) { wire_buffer_length = len; for (uint8_t i = 0; i < len; i++) wire_buffer[i] = Wire.read(); check_wire(); } void wire_request() { Wire.write(wire_buffer, 32); Serial.println("request_data: "); for (uint8_t i = 0; i < wire_buffer_length; i++) Serial.print(String(wire_buffer[i]) + ", "); Serial.println(wire_buffer_length); } void check_wire() { Serial.println("received_data: "); if (wire_buffer_length) { for (uint8_t i = 0; i < wire_buffer_length; i++) Serial.print(String(wire_buffer[i]) + ", "); Serial.println(wire_buffer_length); } }
< /code> Master: < /p> #include
void setup() { Serial.begin(9600); Serial.println("I2C Test Start"); Wire.begin(); }
void loop() { if (Serial.available()) { Wire.beginTransmission(10); while (Serial.available()) Wire.write(Serial.read()); Wire.endTransmission(); delay(500);
byte buffer[32]; int i = 0;
Wire.flush(); Serial.println("Received: " + String(Wire.requestFrom(10, 32)) + " bytes from Slave"); while (Wire.available() && i < 32) { buffer[i++] = Wire.read(); }
for (int j = 0; j < i; j++) { Serial.print(buffer[j]); Serial.print(", "); } Serial.println(); } } [/code] Я подумал, что это будет ошибкой времени, поэтому я положил задержку (500); после Wire.endTransmission (); , чтобы у подчинения было некоторое время для обновления своего буфера. Это ничего не изменило, поэтому я добавил wire.flush (); , потому что я думал, что мастер будет читать старые данные из своего внутреннего проволочного буфера, и это тоже ничего не сделало. Поэтому я спросил CHATGPT, но его результаты не работали. Здесь я столкнулся с той же проблемой, рабыня печатает все правильно, и мастер печатает байты на один шаг назад.>