Arduino Mega Loopback Test с несколькими портами TX/RX
Я пытаюсь выполнить петлевой тест с помощью Arduino Mega. Что я хочу сделать, так это отправить байт по TX и получить указанный байт обратно на RX и убедиться, что байт не изменился. Более или менее у меня просто есть перемычка, соединяющая порты TX и RX (на самом деле у меня есть цепь, подключенная к портам TX RX, которая фактически действует как провод, я просто пытаюсь убедиться, что дорожки цепи исправны) .
Я также делаю то же самое с TX2/RX2 и TX3/RX3.
Проблема, с которой я столкнулся, заключается в том, что я не могу получить данные для отправки через порты TX. В своей попытке я использовал объекты Serial, где я сделал бы следующее:
void setup() {
Serial.begin(9600); //0 и 1
Serial2.begin(9600); //16 и 17
Serial3.begin(9600); //14 и 15
}
void loop() {
//RX TX
int bytesSent = Serial.write(1);
delay(500);
if(Serial.read()!=bytesSent){
//Сделай что-нибудь
}
delay(500);
//RX2 TX2
bytesSent = Serial2.write(2);
delay(500);
if(Serial2.read()!=bytesSent){
//Сделай что-нибудь
}
delay(500);
//RX3 TX3
bytesSent = Serial3.write(3);
delay(500);
if(Serial3.read()!=bytesSent){
//Сделай что-нибудь
}
delay(500);
}
Мне известно, что использование "delay(500)" не оптимальна и не является хорошей практикой кодирования, но пока оставлена здесь, пока я все еще пытаюсь понять, что не так с моей передачей и приемом.
Я считаю, что мое непонимание связано с объектами Serial; Я не использую их правильно в этом случае? Я ссылался на справочное руководство Arduino Serial, поэтому кажется, что это сработает, но это не так.
Дополнительная информация: в настоящее время я питаю свой Arduino через USB (я знаю, что это может быть проблемой, но в настоящее время у меня нет источника питания от батареи). Переключение на другой источник питания решит мою проблему? Просто повторюсь, что я не пытаюсь установить связь с ПК, я просто пытаюсь убедиться, что эта внешняя цепь (которая действует как провод) может передавать сигнал.
@mnlipps, 👍1
Обсуждение1 ответ
Кажется, здесь небольшое недоразумение:
bytesSent = Serial2.write(2);
// [...]
if (Serial2.read() != bytesSent) // [...]
На последовательных портах:
метод
write()
возвращает количество записанных байтов, не значение записанного байтаметод
read()
возвращает прочитанный байт (или −1, если ничего был доступен), а не количество прочитанных байтов.
Я предлагаю вам изменить тест следующим образом:
uint8_t byte_sent = random(256);
Serial2.write(byte_sent);
delay(100);
if (Serial2.read() != byte_sent) // произошла ошибка
- Может ли Arduino Leonardo одновременно использовать USB-порт и последовательные контакты RX TX?
- Какой чип USB-UART обеспечивает самую высокую скорость передачи данных с платами Arduino?
- Использование последовательных контактов TX/ RX для связи по USB
- Можно ли изменить официальную библиотеку шилдов arduino GSM для работы с аппаратным serial на mega?
- Нужен пример того, как отправлять КОМАНДЫ AT на модуль SIm7000E GPS+LTE из ESP32 и читать эти ответы в последовательном мониторе
- Я хочу, чтобы мой arduino mega одновременно читал со всех 4 последовательных портов, последовательно проходя через каждый из них.
- Невозможно загрузить скетч в Lolin S3 Pro (ESP32-S3)
- Серийный номер аппаратного/программного обеспечения для HC-05
у вас логическая ошибка... ваш код предполагает, что
bytesSent
содержит отправленные данные, @jsotolaКак именно вы знаете, что это не работает? В приведенном выше коде вы ничего не делаете. У вас там только комментарии., @chrisl