此草图适用于Arduino Uno,但不适用于Arduino Mega2560。相同的连接。逻辑相同。可以肯定的是,我已经尝试了板0、1、14-21上的所有TX和RX引脚,但没有找到任何解决方案。 因此,我认为该草图存在我无法解决的问题。 草图上传成功。没有错误。
#include <stdio.h>
#include <PMS.h>
#define N 23
char linia1[16], linia2[16];
String sumPM25, sumPM10;
unsigned char bufor [N];
int PM25 = 10, PM10 = 10;
int wartoscPM25(unsigned char *thebuf);
int wartoscPM10(unsigned char *thebuf);
char sprawdzLancuch(unsigned char *thebuf, char leng);
int a=0;
void setup(){
Serial.begin(9600);
}
void loop(){
if(Serial.find(0x42))
Serial.readBytes(bufor,N);
if(bufor[0] == 0x4d){
if(sprawdzLancuch(bufor,N)){
PM25=wartoscPM25(bufor);
PM10=wartoscPM10(bufor);
}
}
sprintf(linia1,"%d",PM25);
Serial.print(linia1);
sprintf(linia2,"%d",PM10);
Serial.println(linia2);
delay(1000);
}
int wartoscPM25(unsigned char *buf)
{
int PM25v;
PM25v=((buf[11]<<8) + buf[12]);
return PM25v;
}
int wartoscPM10(unsigned char *buf)
{
int PM10v;
PM10v=((buf[13]<<8) + buf[14]);
return PM10v;
}
bool sprawdzLancuch(unsigned char *buf, int dlugosc)
{
bool flaga=0;
int suma=0;
for(int i=0; i<(dlugosc-2); i++){
suma+=buf[i];
}
suma=suma + 0x42;
if(suma == ((buf[dlugosc-2]<<8)+buf[dlugosc-1]))
{
suma = 0;
flaga = 1;
}
return flaga;
}
我在Uno和Mega上都使用逻辑转换器来连接PMS3003。
答案 0 :(得分:0)
序列号在以下引脚上。
串行:0(RX)和1(TX);
序列1:19(RX)和18(TX);
串行2:17(RX)和16(TX);
串行3:15(RX)和14(TX)。
由于Serial也已连接到USB,您可能应该将设备连接到其他端口之一,然后使用相应的SerialX与之通信。
还要确认您已正确连接Arduino和设备(以及逻辑转换器)之间的RX和TX引脚。
有时数据表中会显示到设备的Rx,这意味着从主机接收Rx(从Rx到设备),有时还会到主机的Rx(即来自设备的TX)。