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 ...@@ -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) const int ledPin = PE1; // LED pin to indicate data sent (Blink Yellow)
HardwareSerial mySerial(D0, D1); // RX = D0, TX = D1 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() { void setup() {
pinMode(ledPin, OUTPUT); // Set LED pin as output pinMode(ledPin, OUTPUT); // Set LED pin as output
Serial.begin(9600); // Communication with PC Serial.begin(9600); // Communication with PC
mySerial.begin(9600); // Communication with Board 2 via USART mySerial.begin(9600); // Communication with Board 2 via USART
} }
void loop() { void loop() {
...@@ -23,24 +25,51 @@ void loop() { ...@@ -23,24 +25,51 @@ void loop() {
digitalWrite(ledPin, HIGH); digitalWrite(ledPin, HIGH);
delay(1000); // LED on for 1000ms delay(1000); // LED on for 1000ms
digitalWrite(ledPin, LOW); 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 bool waitForResponse(String lastMessage) {
Serial.println("Received from Board 2: " + receivedData); int retransmissionCount = 0;
unsigned long startTime = millis();
if (receivedData.startsWith("Error")) {
// Handle retransmission if necessary while (retransmissionCount < maxRetransmissions) {
String lastMessage = receivedData.substring(receivedData.indexOf(':') + 1); if (mySerial.available() > 0) {
lastMessage.trim(); // Remove leading and trailing whitespace 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); sendMessageToBoard2(lastMessage);
delay(1000); // Delay before retransmitting
startTime = millis(); // Reset timeout counter
} }
} }
// Retransmission limit reached
return false;
} }
void sendMessageToBoard2(String message) { void sendMessageToBoard2(String message) {
mySerial.println(message); // Send message to Board 2 mySerial.println(message); // Send message to Board 2
} }
String encodeData(String data) { 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