Arduino Mega (Master) читает данные о старой проволоке от Slave (ESP32 Dev Module)C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Arduino Mega (Master) читает данные о старой проволоке от Slave (ESP32 Dev Module)

Сообщение Anonymous »

Я использую Arduino IDE для загрузки и составления кода для этих микроконтроллеров. Это должен быть тестовый сценарий. Связь подобна следующему: < /p>
ПК -> Пользовательский ввод через последовательный -> Master -> Пользовательский ввод через Wire /i2c -> Slave -> Пользовательский ввод через Wire /i2c -> Master -> Пользовательский ввод через серийный Другое письмо получает до введенного письма.
Slave: < /p>

Код: Выделить всё

received_data:
72, 1
request_data:
72, 1
received_data:
65, 1
request_data:
65, 1
received_data:
76, 1
request_data:
76, 1
received_data:
79, 1
request_data:
79, 1
< /code>
Master: < /p>
Received: 32 bytes from Slave
191, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
Received: 32 bytes from Slave
72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Received: 32 bytes from Slave
65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Received: 32 bytes from Slave
76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
< /code>
 code < /strong>

slave: < /p>
#include 

uint8_t wire_buffer[32];
uint8_t wire_buffer_length = 0;

void setup() {
memset(wire_buffer, 0, 32);
Wire.setPins(26, 25);
Wire.begin(10);
Serial.begin(115200);
Wire.onRequest(wire_request);
Wire.onReceive(wire_receive);
}

void loop() {
}

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();
}
}
Я подумал, что это будет ошибкой времени, поэтому я положил задержку (500); после Wire.endTransmission (); , чтобы у подчинения было некоторое время для обновления своего буфера. Это ничего не изменило, поэтому я добавил wire.flush (); , потому что я думал, что мастер будет читать старые данные из своего внутреннего проволочного буфера, и это тоже ничего не сделало. Поэтому я спросил CHATGPT, но его результаты не работали. Здесь я столкнулся с той же проблемой, рабыня печатает все правильно, и мастер печатает байты на один шаг назад.>

Подробнее здесь: https://stackoverflow.com/questions/797 ... p32-dev-mo
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»