#define TRIG_PIN 26
#define ECHO_PIN 25
#define NODEID 2
float levelDanger = 300; //muc nuoc nguy hiem
float rateChangeDanger = 25; // toc do thay doi muc nuoc nguy hiem
float bottomToSensor = 400;
float levelSum=0;
float levelM,rateChange;
float levelMBefore=-1; //muc nuoc trung binh giay truoc do
unsigned long timeC=-1;
unsigned long previousMillis = 0;
const unsigned long hour = 3600000;
String value;
void setup() {
Serial.begin(115200);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
}
void readData(){
if (Serial.available() > 0) {
String data = Serial.readString();
if (data.substring(0, 2) == "CD") { //yeu cau thay gia tri nguy hiem
float num1, num2;
sscanf(data.c_str(), "CD%d%d", &num1, &num2);
if(num1>0&&num1<400&&num2>0&&num2<100){ // kiem tra gia tri duoc thay doi
levelDanger=num1;
rateChangeDanger=num2;
Serial.println("Change value danger:");
Serial.print("Water level danger cm: ");
Serial.println(levelDanger);
Serial.print("Rate of water level change cm/s: ");
Serial.println(rateChangeDanger);
Serial.println();
}
}
if (data == "CV") { //kiem tra muc nuoc va toc do thay doi muc nuoc hien tai
sendData(1,value);
}
}
}
void sendData(int toNode,String data){
Serial.print(NODEID);
Serial.print(" sending to node ");
Serial.print(toNode);
Serial.print(": ");
Serial.println(data);
Serial.println();
}
void loop() {
readData();
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(5);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
long duration = pulseIn(ECHO_PIN, HIGH);
long distance = duration * 0.034 / 2;
float level=bottomToSensor - distance;
timeC++;
if(timeC>0)
levelSum+=level;
if(timeC==5){
levelM=levelSum/5;
if(levelMBefore>-1){
rateChange=levelM-levelMBefore;
value=String(levelM,2)+" "+String(rateChange,2);
Serial.print("Chieu cao muc nuoc hien tai: ");
Serial.println(levelM);
Serial.print("Toc do thay doi muc nuoc: ");
Serial.println(rateChange);
Serial.println();
}
levelMBefore=levelM;
levelSum=0;
timeC=0;
if(levelM>=levelDanger||rateChange>rateChangeDanger){
Serial.println("Flash flood warning:");
sendData(1,value);
}
}
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= hour) {
previousMillis = currentMillis;
Serial.print("Gui tinh trang tram hien tai moi gio: ");
sendData(1,value);
}
delay(200);
}