Сброс соединения UART на Due
У меня есть система, в которой Arduino Due подключен к Raspi 4 через UART, в которой Due отправляет сигнал сердцебиения через UART, чтобы pi получил и отправил обратно в качестве подтверждения. Одно из событий, которое мне нужно обработать, — это восстановление соединения UART между двумя устройствами, если программа, получающая UART на пи (или сам пи), по какой-либо причине не работает и перезагружается. На данный момент у меня работает начальное сердцебиение (пока программа pi запускается первой), но когда я останавливаю программу pi, чтобы имитировать фатальную ошибку, и перезапускаю ее, кажется, что Due не получает подтверждения сердцебиения, пока он не будет сброшен как хорошо.
Есть ли простой способ сбросить только одно последовательное соединение из скрипта Arduino? Я думал об использовании Serial.end()
и Serial.begin()
, но это действительно уродливо, и я предпочел бы его избежать. Ни один из других методов библиотеки Serial, по-видимому, не дает возможности сбросить соединение.
Я использую Serial2 на скорости 115 200 бод.
Изменить: включая соответствующий код сердцебиения:
#include <DueTimer.h>
bool heartbeat = true;
void rx_heartbeat() {
int received_data;
if (Serial2.available() > 0) {
received_data = Serial2.read();
heartbeat = true;
Serial.println("beat");
}
}
void setup() {
Serial2.begin(115200);
Timer1.attachInterrupt(heartbeat_ISR).setFrequency(1).start();
}
void loop() {
rx_heartbeat();
}
void heartbeat_ISR() {
if (heartbeat) {
heartbeat = false;
} else {
// не возвращается сердцебиение - прекращаем нормальную работу
}
Serial.println("heart");
Serial2.write(255);
}
1 ответ
Лучший ответ:
Глупый я забыл загрузить код, который решил мою проблему. Код, показанный в вопросе, правильный и работает так, как задумано.
- Много пропущенных байтов с последовательной связью
- В чем разница между библиотеками Software Serial? Какая из них совместима с Arduino Nano?
- Построение графика на Python с использованием Tkinter Canvas
- Как использовать Serial.setTimeout()
- Отправить структуру через Serial
- MQTT через serial
- Может ли Arduino Leonardo одновременно использовать USB-порт и последовательные контакты RX TX?
- Последовательная связь между несколькими устройствами (или ардуино)
Вы хотите сбросить соединение, то есть отключить его и снова включить. Почему вы думаете, что закончить, а затем начать, не является хорошим решением для этого? Что в этом уродливого?, @Delta_G
почему вам нужно использовать 115200 бод для сердцебиения?, @jsotola
@Delta_G Я мог подходить к этому очень неправильно, но то, как я думал об их реализации, означало бы, что и Serial.end(), и Serial.begin() будут выполняться с каждой итерацией цикла. Это только кажется грязным., @Andrew Euredjian
@jsotola определенно не обязательно иметь такую высокую скорость для сердцебиения. Это просто моя скорость по умолчанию, которую я установил для последовательных соединений в целом., @Andrew Euredjian
Зачем делать это в каждом цикле? Необходимо ли сбрасывать связь в каждом цикле? Просто сбросьте его, когда это необходимо, например, когда вы перестанете слышать свое сердцебиение., @Delta_G