|
虽然没有看到说明书,这已经很明显了啦,第一位FF是固定的开头,第二位86或第五位50应该是气体类型的一个代码,最后一位是校检码,算法是前8位累加再取反。和我用的传感器差不多的,只是你的数据在2,3位。你只要把我们面的程式的数组4,5改成2,3就可以了。你如果要想WIN桌面软件来实现我帮不了你,如果用ARDUINO我可以帮你改一下。
[mw_shl_code=c,true]#include <SoftwareSerial.h>
SoftwareSerial mySerial(12, 13); // RX, TX
String comdata="";
unsigned char DEC1,DEC2;
char CheckSum;
float o3Val;
//byte Command[]={0xFF,0x01,0x78,0x40,0x00,0x00,0x00,0x00,0x47};//主动上传
//byte Command1[]={0xFF,0x01,0x78,0x41,0x00,0x00,0x00,0x00,0x46};//问答上传
byte Command2[]={0xFF,0x01,0x86,0x00,0x00,0x00,0x00,0x00,0x79};//问答读取
void setup() {
Serial.begin(9600);
mySerial.begin(9600);
//delay(1000);
//mySerial.write(Command,9);
}
void loop() {
mySerial.write(Command2,9);
while(mySerial.available()>0){
comdata+=char(mySerial.read());
delay(2);
}
if(comdata.length()>0){
CheckSum=0x00;
for(int x=0;x<comdata.length();x++){
if(x<8)CheckSum+=comdata[x]; //计算校验和
// myPtHex(comdata[x]); //16进制串口输出。接收的是什么代码。
}
CheckSum=~(CheckSum&&0xFF); //取反
if(comdata[8]==CheckSum){
DEC1=comdata[2];
DEC2=comdata[3];
int o3val=DEC1*256+DEC2;
o3Val=o3val/1000.0;
}
Serial.println(o3Val,3);
comdata="";
}
delay(1000);
}
void myPtHex(int g){ // 把 g 最右邊 byte 印成 Hex 倆位
int a = g& 0xf0; // 左邊 4 bits
a = a >> 4; // 右移 4 bits
int b = g& 0x0f; // 右邊 4 bits
char c = a < 10 ? a + '0' : a + 'A' - 10;
Serial.write(c);
c = b < 10 ? b + '0' : b + 'A' - 10;
Serial.write(c);
}[/mw_shl_code] |
|