活得精彩 发表于 2015-7-9 13:26:35

求助!关于软串口的编程问题

我买了一个攀藤G1的PM2.5传感器,想接在UNO上进行读取串口数据,由于0、1口需要和电脑通讯,我就像用软串口的方式进行传感器和UNO的通讯,并将数据用Serial.print的方式输出在串口调试器上,我学着编写了一串代码,上传到UNO里发现什么显示也没有,不知道该如何解决。小弟刚接触arduino不足10天,需要请教大神们了。
以下是我的代码,请指出错误的地方,谢谢!

#include <SoftwareSerial.h>

SoftwareSerial pt(10,11);\\定义10和11脚为软串口,软串口名称为pt
int pm;\\定义传感器的变量名称为pm,实际传感器输出的是16进制的数据,不知道该如何定义
void setup(){
Serial.begin(9600);
pt.begin(9600); \\软串口初始化
pt.listen(); \\监听软串口
   
}

void loop(){
if(Serial.available()>0)
    pt.read();\\读取软串口数据
pt.println(pm);\\打印软串口数据
delay(1000)   ;
}

zoologist 发表于 2015-7-9 13:50:54

参考之前我做的http://www.lab-z.com/g1pm25/

通幽境 发表于 2015-7-9 13:52:16

输出的串口不对,程序里使用的是虚拟串口,改为硬串口就好了

mc.six 发表于 2015-7-9 21:32:41

本帖最后由 mc.six 于 2015-7-9 21:34 编辑

if(Serial.available()>0)
    pt.read();\\读取软串口数据
pt.println(pm);\\打印软串口数据

写反了,应该是:
if(pt.available()>0)
    pt.read();\\读取软串口数据
Serial.println(pm);\\打印软串口数据

另外pm没赋值,pt.read()也只读出来了一个字节,怎么可能对呢。

活得精彩 发表于 2015-7-9 21:33:14

zoologist 发表于 2015-7-9 13:50 static/image/common/back.gif
参考之前我做的http://www.lab-z.com/g1pm25/

您好,我看了您的帖子,后来直接用串口板接G1,并用您的软件测试了。同时,我也读取了串口的数据,根据攀藤的datasheet计算的话,好像和您的数据相差很大。不知是什么问题。
以下是我根据网上的资料重新整理的arduino的程序,您可以和您的程序对比一下,看看有什么差异,因为我也不是很懂。
static unsigned char ucRxBuffer;
static unsigned char ucRxCnt = 0;

longpmat10=0;
longpmat25=0;
longpmat100=0;

void setup()
{
Serial.begin(9600);
// Serial2.begin(9600);
}

void loop()
{

delay(5000);
while (Serial.available())
{
    CopeSerialData(Serial.read());
}


}

char CopeSerialData(unsigned char ucData)
{
ucRxBuffer=ucData;

if (ucRxBuffer!=0x42&&ucRxBuffer!=0x4D)
{
    ucRxCnt=0;
    return ucRxCnt;
}
if (ucRxCnt<32) {
    return ucRxCnt;
}
else
{
    pmat10=(float)ucRxBuffer*256+(float)ucRxBuffer;
    Serial.print("PM1.0:");
    Serial.print(pmat10);
    Serial.println("ug/m3");
    pmat25=(float)ucRxBuffer*256+(float)ucRxBuffer;
    Serial.print("PM2.5:");
    Serial.print(pmat25);
    Serial.println("ug/m3");
    pmat100=(float)ucRxBuffer*256+(float)ucRxBuffer;
    Serial.print("PM10:");
    Serial.print(pmat100);
    Serial.println("ug/m3");
    Serial.println("----------------------------");
    ucRxCnt=0;
    return ucRxCnt;
   
}
}

mc.six 发表于 2015-7-9 21:42:31

http://www.geek-workshop.com/thread-14547-1-1.html看这个试试,自己慢慢研究,我也是慢慢试出来的。

活得精彩 发表于 2015-7-9 22:27:13

mc.six 发表于 2015-7-9 21:42 static/image/common/back.gif
http://www.geek-workshop.com/thread-14547-1-1.html看这个试试,自己慢慢研究,我也是慢慢试出来的。

我就是参考的您的帖子修改的程序,把多余的部分都删除了,用的是那个没有库的文件修改的。

活得精彩 发表于 2015-7-9 22:41:29

这是我用串口读取的原始数据,根据攀藤的datasheet转换成10进制,再相加得出的PM值的数据,不知道对不对。

mc.six 发表于 2015-7-10 12:53:06

活得精彩 发表于 2015-7-9 22:41 static/image/common/back.gif
这是我用串口读取的原始数据,根据攀藤的datasheet转换成10进制,再相加得出的PM值的数据,不知道对不对。

看着挺对,应该没问题
页: [1]
查看完整版本: 求助!关于软串口的编程问题