本帖最后由 维博哥哥 于 2014-11-13 09:31 编辑
实验使用温度传感器DHT11蓝牙模块HC-05,手机使用安卓spp蓝牙串口,arduino用的是arduino due[pre lang="arduino" line="1" file="dht11"]#define DHT_PIN 50
#define VCC 48
#define GND 52
int led = 13;
byte ERROR;
byte dht_dat[5];
void setup() {
// put your setup code here, to run once:
pinMode(DHT_PIN,OUTPUT);
pinMode(VCC,OUTPUT);
pinMode(GND,OUTPUT);
pinMode(led, OUTPUT);
digitalWrite(DHT_PIN,HIGH);
digitalWrite(VCC,HIGH);
digitalWrite(GND,LOW);
Serial.begin(9600);
Serial3.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
while(Serial3.available()){
char c=Serial3.read();
if(c=='A'){
ReadDHT();
switch (ERROR){
case 0:
Serial.print("Current humidity=");
Serial.print(dht_dat[0],DEC);
Serial.print(".");
Serial.print(dht_dat[1],DEC);
Serial.print("% ");
Serial.print("temperature=");
Serial.print(dht_dat[2],DEC);
Serial.print(".");
Serial.print(dht_dat[3],DEC);
Serial.print("C ");
Serial.print("\n");
Serial3.print("Current humidity=");
Serial3.print(dht_dat[0],DEC);
Serial3.print(".");
Serial3.print(dht_dat[1],DEC);
Serial3.print("% ");
Serial3.print("\n");
Serial3.print("temperature=");
Serial3.print(dht_dat[2],DEC);
Serial3.print(".");
Serial3.print(dht_dat[3],DEC);
Serial3.print("C ");
Serial3.print("\n");
break;
case 1:
Serial.println("Error 1HT start condition 1 not met.");
break;
case 2:
Serial.println("Error 2HT start condition 2 not met.");
break;
case 3:
Serial.println("Error 3HT checksum error.");
break;
default:
Serial.println("Error :Unrecognized code encountered.");
break;
}
delay(800);
}
}
}
void ReadDHT(){
ERROR=0;
/*for(int i=0;i<10;i++){
digitalWrite(led,0);
delay(1000);
digitalWrite(led,1);
delay(1000);
}*/
byte dht_in;
byte i;
digitalWrite(DHT_PIN,LOW);
delay(20);
digitalWrite(DHT_PIN,HIGH);
delayMicroseconds(40);
pinMode(DHT_PIN,INPUT);
dht_in=digitalRead(DHT_PIN);
if(dht_in){
ERROR=1;
return;
}
delayMicroseconds(80);
dht_in=digitalRead(DHT_PIN);
if(!dht_in){
ERROR=2;
return;
}
delayMicroseconds(80);
for(i=0;i<5;i++)
dht_dat=read_dht_dat();
pinMode(DHT_PIN,OUTPUT);
digitalWrite(DHT_PIN,HIGH);
byte dht_check_sum=
dht_dat[0]+dht_dat[1]+dht_dat[2]+dht_dat[3];
if(dht_dat[4]!=dht_check_sum)
{
ERROR=3;
}
}
byte read_dht_dat(){
byte i=0;
byte result=0;
for(i=0;i<8;i++){
while(digitalRead(DHT_PIN)==LOW);
delayMicroseconds(30);
if(digitalRead(DHT_PIN)==HIGH)
result |=(1<<(7-i));
while(digitalRead(DHT_PIN)==HIGH);
}
return result;
}
[/code]
打开串口工具,然后手机发送A,手机和串口窗口都能同时收到温湿度信息 |