Redefinir uma conexão UART em um prazo

Aug 26 2020

Eu tenho um sistema que envolve um Arduino Due conectado a um Raspi 4 através do UART no qual o Due envia um sinal de pulsação via UART para o pi receber e enviar de volta como confirmação. Um dos eventos que preciso controlar é restabelecer a conexão UART entre os dois dispositivos se o programa que recebe UART no pi (ou no próprio pi) falhar por qualquer motivo e for reinicializado. No momento, eu tenho o batimento cardíaco inicial funcionando (contanto que o programa pi comece primeiro), mas quando eu paro o programa pi para simular um erro fatal e o reinicio, o Devido não parece receber a confirmação do batimento cardíaco até que seja redefinido como bem.

Existe uma maneira limpa de redefinir apenas uma conexão serial do script do Arduino? Pensei em usar Serial.end()e Serial.begin()mas isso é muito feio e prefiro evitar. Nenhum dos outros métodos da biblioteca serial parece fornecer a capacidade de redefinir a conexão.

Estou usando o Serial2 a 115200 baud.

Editar: Incluindo código de pulsação relevante:

#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 {
    // no heartbeat returned - stop normal operation
  }
  Serial.println("heart");
  Serial2.write(255);
}

Respostas

1 AndrewEuredjian Aug 26 2020 at 09:45

Eu esqueci de realmente fazer upload do código que corrigiu meu problema. O código mostrado na pergunta está correto e funciona conforme o esperado.