TKK_E32210490/Kode Arduino IDE/Transmitter_Code.ino

120 lines
3.2 KiB
C++

#include <LiquidCrystal_I2C.h>
#include <SoftwareSerial.h>
#include <HardwareSerial.h>
// Define SoftwareSerial for sensor communication
SoftwareSerial mySerial(25, 26); // RX, TX
// Initialize data array and distance variable
unsigned char data[4] = {};
float distance;
// Initialize I2C LCD display with address 0x27, 16 columns, and 2 rows
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Define buzzer pin
const int buzzerPin = 12;
// Initialize HardwareSerial for LoRa E32 on UART2
HardwareSerial LoRaSerial(2); // Use UART2
void setup() {
// Initialize serial communication for debugging
Serial.begin(57600);
mySerial.begin(9600);
// Initialize LCD
lcd.init();
lcd.backlight();
// Set buzzer pin as output
pinMode(buzzerPin, OUTPUT);
// Initialize LoRa E32 communication on UART2
LoRaSerial.begin(9600, SERIAL_8N1, 16, 17); // Baud rate 9600, 8 data bits, no parity, 1 stop bit
// Print initial message to Serial Monitor
Serial.println("Sender is ready. Sending data...");
}
void loop() {
// Read data from sensor
do {
for (int i = 0; i < 4; i++) {
data[i] = mySerial.read();
}
} while (mySerial.read() == 0xff);
mySerial.flush();
if (data[0] == 0xff) {
int sum = (data[0] + data[1] + data[2]) & 0x00FF;
if (sum == data[3]) {
distance = (data[1] << 8) + data[2];
unsigned long sendTime = millis(); // Capture the timestamp
int snr = random(10, 20); // Simulate SNR
int rssi = random(-100, -30); // Simulate RSSI
if (distance > 280) {
// Print distance to Serial Monitor
Serial.print("Jarak: ");
Serial.print(distance / 10);
Serial.println(" cm");
// Display distance on LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Jarak: ");
lcd.print(distance / 10);
lcd.print(" cm");
// Send distance via LoRa
LoRaSerial.print("Jarak: ");
LoRaSerial.print(distance / 10);
LoRaSerial.print(" cm,SNR:");
LoRaSerial.print(snr);
LoRaSerial.print(",RSSI:");
LoRaSerial.print(rssi);
LoRaSerial.print(",TIME:");
LoRaSerial.println(sendTime);
// Turn off the buzzer
digitalWrite(buzzerPin, LOW);
} else {
// Print warning to Serial Monitor
Serial.println("WARNING: Bahaya! Air terlalu tinggi!");
// Display warning on LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("WARNING: Bahaya!");
lcd.setCursor(0, 1);
lcd.print("Air Tinggi");
// Send warning via LoRa
LoRaSerial.print("WARNING: Bahaya! Air terlalu tinggi!,SNR:");
LoRaSerial.print(snr);
LoRaSerial.print(",RSSI:");
LoRaSerial.print(rssi);
LoRaSerial.print(",TIME:");
LoRaSerial.println(sendTime);
// Turn on the buzzer
digitalWrite(buzzerPin, HIGH);
}
} else {
// Print error to Serial Monitor
Serial.println("ERROR");
// Display error on LCD
lcd.clear();
lcd.print("ERROR");
// Send error via LoRa
LoRaSerial.println("ERROR");
}
}
// Brief delay between measurements
delay(150);
}