#include <SoftwareSerial.h>
SoftwareSerial mySerial(8,9);//RX,TX
unsigned char CH4[10]; //定义10位数组来存储传感器数据
unsigned int CH4_Check = 0;//定义校验变量
unsigned int CH4_Sum = 0; //定义前9位数据求和变量
float ch4_float = 0; //浮点型数据输出变量
void setup() {
Serial.begin(115200);
mySerial.begin(9600);
}
void loop() {
Get_CH4_Data();
delay(1000);
CH4_Data_Convert();
}
//获取10位传感器输出数据
void Get_CH4_Data(){
CH4_Sum = 0;
if(mySerial.available()){
CH4[0] = mySerial.read();
CH4[1] = mySerial.read();
// CH4[2] = mySerial.read();
if((CH4[0] == 0xFF) && (CH4[1] == 0x01)){
for(int i=2; i<10; i++){
CH4[i] = mySerial.read();
}
}
for(int b=0; b<9; b++){
CH4_Sum += CH4[b];
}
Serial.print("CH4_Sum:");
Serial.println(CH4_Sum,HEX);
Serial.print("CH4[9]:");
Serial.println(CH4[9],HEX);
}
}
//对获取到的传感器数据进行校验
boolean Data_Check(){
if(CH4_Sum > 256){
CH4_Check = CH4_Sum-256;
Serial.print("CH4_Sum-256:");
Serial.println(CH4_Check,HEX);
}
else{
CH4_Check = CH4_Sum;
Serial.print("CH4_Check:");
Serial.println(CH4_Sum,HEX);
}
if(CH4_Check == CH4[9]){
for(int a=0; a<9; a++){
Serial.print(CH4[a],HEX);
}
Serial.println(CH4[9],HEX);
return true;
}
else
return false;
}
//将校验通过的传感器数值进行转换
void CH4_Data_Convert(){
if(Data_Check() == true){
ch4_float = (CH4[4]*256 + CH4[5])*0.1;
Serial.print("CH4:");
Serial.println(ch4_float);
}
else
Serial.println("Convert failed!");
}