为什么arduino mega 2560无法从PMS3003获取数据

时间:2018-11-02 20:08:51

标签: arduino

此草图适用于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。

1 个答案:

答案 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)。