|
本帖最後由 qzec0910266 於 2017-12-27 09:42 編輯
請問各位 溫溼度搭配藍芽 手機app就可以順利接受到數值 空氣品質(pms3003)卻沒辦法,請各位幫我看一夏問題出在哪謝謝
以下是程式碼:
#include <SoftwareSerial.h>
#include <Wire.h>
#include "SparkFunHTU21D.h"
SoftwareSerial I2CBT(10,11); // TX:10, RX:11
byte serialA;
HTU21D myHumidity;
void setup(){
Serial.begin(9600);
I2CBT.begin(9600);
myHumidity.begin();
}
void loop (){
//溫溼度
int temp = myHumidity.readTemperature();
int humd = myHumidity.readHumidity();
Serial.print("Time:");
Serial.print(millis());
Serial.print("Temperature:");
Serial.print(temp, 1);
Serial.print("C");
Serial.print(" Humidity:");
Serial.print(humd, 1);
Serial.println("%");
delay(1000);
//溫溼度數值透過藍芽傳送到app
byte Data[3];
byte Data1[3];
byte cmmd[20];
int insize;
serialA=I2CBT.read();
Data[0]='a';
Data[1]=temp/256;
Data[2]=temp%256;
Data1[0]='b';
Data1[1]=humd/256;
Data1[2]=humd%256;
Serial.print(temp);
Serial.print(" , ");
Serial.println(humd);
if (serialA == 1){
for(int j=0;j<3;j++)
I2CBT.write(Data[j]);
serialA=0;
}
if (serialA == 2){
for(int j=0;j<3;j++)
I2CBT.write(Data1[j]);
serialA=0;
}
//空氣
while(Serial.available()){
CopeSerialData(Serial.read());
}
}
char CopeSerialData(unsigned char ucData){
static unsigned char ucRxBuffer[250];
static unsigned char ucRxCnt = 0;
long pmat25=0,pmat100=0;
long pmcount03=0,pmcount05=0,pmcount10=0;
long pmcount25=0,pmcount50=0,pmcount100=0;
ucRxBuffer[ucRxCnt++]=ucData;
if(ucRxBuffer[0]!=0x42&&ucRxBuffer[1]!=0x4D){
ucRxCnt=0;
return ucRxCnt;
}
if (ucRxCnt<24){
return ucRxCnt;
}
else{
pmat25=(int)ucRxBuffer[12]*256+(int)ucRxBuffer[13];
Serial.print("PM2.5_AT:"); Serial.print(pmat25); Serial.print(" ");
pmat100=(int)ucRxBuffer[14]*256+(int)ucRxBuffer[15];
Serial.print("PM10_AT:"); Serial.print(pmat100); Serial.println(" ");
ucRxCnt=0;
return ucRxCnt;
}
//空氣數值透過藍芽傳送到app
byte Data2[3];
byte Data3[3];
byte cmmd[20];
int insize;
serialA=I2CBT.read();
Data2[0]='c';
Data2[1]=pmat25/256;
Data2[2]=pmat25%256;
Data3[0]='d';
Data3[1]=pmat100/256;
Data3[2]=pmat100%256;
Serial.print(pmat25);
Serial.print(" , ");
Serial.println(pmat100);
if (serialA == 3){
for(int j=0;j<3;j++)
I2CBT.write(Data2[j]);
serialA=0;
}
if (serialA == 4){
for(int j=0;j<3;j++)
I2CBT.write(Data3[j]);
serialA=0;
}
delay(1000);
} |
|