We make a small display with Differntial pressure transmitter on arduino mega 2560.
This source works on SoftwareSerial. But, It does not work on H/W Serial communication.
Plz read and give me a help.
#include <MsTimer2.h>
char buf[40];
int cmd[3];
String txt_data;
String file_name;
int val[3];
int set_val[3][2] = {{1,0},{1,0},{1,0}};
bool flag,flag1,flag2 = false;
int air_flow = 1000;
int dPressure = 300;
float temp = 23.4;
float humid = 50.0;
float baro = 1010.0;
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(115200);
while (!Serial) {
}
Serial.println("USB is connected!");
Serial2.begin(115200);
while (!Serial2) {
}
Serial.println("Display is connected!");
randomSeed(analogRead(A0));
MsTimer2::set(200,txData);
MsTimer2::start();
}
void loop() {
rxData();
}
void rxData() {
if(Serial2.available() > 0) {
if(flag) {
if(flag1) {
for(int i = 0; i < 3; i++) {
val[i] = Serial2.read(); // val[] receives that component ID from Nextion Display at touching penel.
} // Nextion display sends bytes with 0x65, next, 3 numbers.
for(int i = 0; i < 3; i++) {
cmd[i] = Serial2.read();
}
if(cmd[2] == 0xff) {
flag = false; // Display sends 0xff * 3 at last.
}
if(val[0] == 2) { // It means "if sended components ID's page is 2"
set_switch(val[1]); // val[1] is object ID on Display.
} else if(val[0] == 4) { // component ID from Page no.4
Serial.println("Recording is Ended.");
} else {
flag = false;
}
} else if(flag2) {
Serial2.readBytes(buf,40);
String txt_temp = String(buf);
txt_data = txt_temp.substring(0,txt_temp.length()-3);
file_name = txt_data + ".txt";
Serial.print("file_name : ");
Serial.println(file_name);
flag = false;
} else {
long b = Serial2.read(); // Nextion display can send long type binary data.
Serial.print("Num : ");
Serial.println(b);
flag = false;
}
} else {
int a = Serial2.read();
switch(a) {
case 0x65:
flag = true; flag1 = true; flag2 = false; break;
case 0x70:
flag = true; flag1 = false; flag2 = true; break;
case 0x71:
flag = true; flag1 = false; flag2 = false; break;
}
}
} else {
flag = false;
}
}
void set_switch(int val) {
switch(val) {
case 3:
if(set_val[0][0]==0) {
set_val[0][0] = 1;
set_val[0][1] = 0;
}
Serial.println("Actual Airflow");
break;
case 4:
if(set_val[0][1]==0) {
set_val[0][0] = 0;
set_val[0][1] = 1;
}
Serial.println("Nominal Airflow");
break;
case 5:
if(set_val[1][0]==0) {
set_val[1][0] = 1;
set_val[1][1] = 0;
}
Serial.println("Flowrate unit is CMH.");
break;
case 6:
if(set_val[1][1]==0) {
set_val[1][0] = 0;
set_val[1][1] = 1;
}
Serial.println("Flowrate unit is CFM.");
break;
case 7:
if(set_val[2][0]==0) {
set_val[2][0] = 1;
Serial.println("5 inch nozzle is Opened.");
} else {
set_val[2][0] = 0;
Serial.println("5 inch nozzle is Closed.");
}
break;
case 8:
if(set_val[2][1]==0) {
set_val[2][1] = 1;
Serial.println("7 inch nozzle is Opened.");
} else {
set_val[2][1] = 0;
Serial.println("7 inch nozzle is Closed.");
}
break;
}
}
void txData() {
int temp_data;
temp_data = air_flow + random(500);
Serial2.print("main.dpFlow.txt=\"");
Serial2.print(temp_data);
Serial2.print("\"");
Serial2.write(0xff); Serial2.write(0xff); Serial2.write(0xff);
Serial2.print("record.dpFlow.txt=\"");
Serial2.print(temp_data);
Serial2.print("\"");
Serial2.write(0xff); Serial2.write(0xff); Serial2.write(0xff);
temp_data = dPressure + random(50);
Serial2.print("main.dpDP.txt=\"");
Serial2.print(temp_data);
Serial2.print("\"");
Serial2.write(0xff); Serial2.write(0xff); Serial2.write(0xff);
Serial2.print("record.dpDP.txt=\"");
Serial2.print(temp_data);
Serial2.print("\"");
Serial2.write(0xff); Serial2.write(0xff); Serial2.write(0xff);
float temp_data2;
temp_data2 = temp + random(200) / 100;
Serial2.print("main.temp.txt=\"");
Serial2.print(temp_data2,1);
Serial2.print("\"");
Serial2.write(0xff); Serial2.write(0xff); Serial2.write(0xff);
Serial2.print("record.temp.txt=\"");
Serial2.print(temp_data2,1);
Serial2.print("\"");
Serial2.write(0xff); Serial2.write(0xff); Serial2.write(0xff);
temp_data2 = humid + random(300) / 100;
Serial2.print("main.humid.txt=\"");
Serial2.print(temp_data2,1);
Serial2.print("\"");
Serial2.write(0xff); Serial2.write(0xff); Serial2.write(0xff);
Serial2.print("record.humid.txt=\"");
Serial2.print(temp_data2,1);
Serial2.print("\"");
Serial2.write(0xff); Serial2.write(0xff); Serial2.write(0xff);
temp_data2 = baro + random(1000) / 100;
Serial2.print("main.baro.txt=\"");
Serial2.print(temp_data2,1);
Serial2.print("\"");
Serial2.write(0xff); Serial2.write(0xff); Serial2.write(0xff);
Serial2.print("record.baro.txt=\"");
Serial2.print(temp_data2,1);
Serial2.print("\"");
Serial2.write(0xff); Serial2.write(0xff); Serial2.write(0xff);
}