Skip to content
Snippets Groups Projects
Commit 95d80956 authored by Kateryna Makarova's avatar Kateryna Makarova
Browse files

Update Sender_Encoder.ino

parent c99ca3ad
Branches main
No related tags found
No related merge requests found
......@@ -5,11 +5,13 @@ The primary board (Board 1) sends data to a secondary board (Board 2) via serial
const int ledPin = PE1; // LED pin to indicate data sent (Blink Yellow)
HardwareSerial mySerial(D0, D1); // RX = D0, TX = D1
const int maxRetransmissions = 3; // Maximum number of retransmissions
const unsigned long responseTimeout = 2000; // Timeout in milliseconds
void setup() {
pinMode(ledPin, OUTPUT); // Set LED pin as output
Serial.begin(9600); // Communication with PC
mySerial.begin(9600); // Communication with Board 2 via USART
pinMode(ledPin, OUTPUT); // Set LED pin as output
Serial.begin(9600); // Communication with PC
mySerial.begin(9600); // Communication with Board 2 via USART
}
void loop() {
......@@ -23,24 +25,51 @@ void loop() {
digitalWrite(ledPin, HIGH);
delay(1000); // LED on for 1000ms
digitalWrite(ledPin, LOW);
delay(2000); // Wait 2 second before sending the next message
// Wait for the acknowledgment or error message
if (!waitForResponse(encodedMessage)) {
Serial.println("Error: No response from Board 2, reached retransmission limit.");
}
}
if (mySerial.available() > 0) {
String receivedData = mySerial.readStringUntil('\n'); // Read response from Board 2
Serial.println("Received from Board 2: " + receivedData);
if (receivedData.startsWith("Error")) {
// Handle retransmission if necessary
String lastMessage = receivedData.substring(receivedData.indexOf(':') + 1);
lastMessage.trim(); // Remove leading and trailing whitespace
}
bool waitForResponse(String lastMessage) {
int retransmissionCount = 0;
unsigned long startTime = millis();
while (retransmissionCount < maxRetransmissions) {
if (mySerial.available() > 0) {
String receivedData = mySerial.readStringUntil('\n'); // Read response from Board 2
Serial.println("Received from Board 2: " + receivedData);
if (receivedData.startsWith("Error")) {
// Handle retransmission if necessary
retransmissionCount++;
Serial.println("Error detected. Retransmitting...");
sendMessageToBoard2(lastMessage);
delay(1000); // Delay before retransmitting
} else {
// Valid response received, no need to retransmit
return true;
}
}
// Timeout check
if (millis() - startTime > responseTimeout) {
Serial.println("Response timeout. Retrying...");
retransmissionCount++;
sendMessageToBoard2(lastMessage);
delay(1000); // Delay before retransmitting
startTime = millis(); // Reset timeout counter
}
}
// Retransmission limit reached
return false;
}
void sendMessageToBoard2(String message) {
mySerial.println(message); // Send message to Board 2
mySerial.println(message); // Send message to Board 2
}
String encodeData(String data) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment