Заставить две trinket общаться друг с другом через последовательные контакты

Я пытаюсь быстро проверить концепцию двух trinket M0, которые общаются друг с другом через свои контакты RX и TX, и я не могу заставить его работать.

Я загрузил скетчи отправителя и получателя на две trinket:

//sender.ino
char state[10] = "hello";

void setup()
{
    Serial.begin(9600);
}

void loop()
{
    Serial.write(state, 5);
    delay(1000);
}

//receiver.ino
char state[10];

void setup()
{
    Serial.begin(9600);
}

void loop()
{
    Serial.println("reading bytes");
    Serial.readBytes(state, 10);
    Serial.println(state);
    delay(1000);
}

После загрузки я соединил две Trinket вместе, соединив RX первого с TX другого и TX первого с RX другого. Я также соединил их земли, чтобы иметь общую почву.

wiring

Я подключил отправителя к аккумулятору, а получатель к компьютеру. Проблема, с которой я сталкиваюсь, заключается в том, что когда я смотрю на серийный монитор для приемника, вместо ожидаемого «привет» я получаю неработающие строки «TestingOpen»:

последовательный вывод

Я дважды проверил схему выводов и руководство для Trinket M0, чтобы убедиться, Я использовал правильные контакты RX / TX (контакт 3 для RX, 4 для TX), и все вроде бы хорошо, но очевидно, что что-то все еще идет не так.

Кто-нибудь знает, что я упустил или неправильно понял?

, 👍0


1 ответ


Лучший ответ:

0

1) вы должны использовать if (Serial.available()) перед началом чтения с помощью readBytes. теперь вы печатаете случайную память

2) readBytes блокируется. он ожидает следующего символа до истечения времени ожидания. тайм-аут по умолчанию составляет 1 секунду. после того, как "привет" было получено, он ждет секунду. вы можете использовать readBytesUntil и некоторый символ «разделитель», например «\n» (новая строка)

3) readBytes возвращает количество прочитанных байтов. вы должны использовать его для завершения буфера

void loop()
{
  if (Serial.available()) {
    Serial.println("reading bytes");
    size_t l = Serial.readBytesUntil('\n', state, 10);
    state[l] = 0;
    Serial.println(state);
  }
}
,