【Gokit3S SOC/MCU 试用体验】+温湿度传感器输出数据
-
-
wuxiaokang
- LV3工程师
-
| 2018-04-03 09:14:45
- 浏览量 1595
- 回复:0
由于是小白啊,自己搞了半天才把传感器的数据成功输出,我觉得重要的是编码和这个硬件吧,只有自己编的代码才能有所获吧,虽然第一次发帖有点慢,但是我发的贴希望对大家有帮助,前面课程有点多,代码总是有问题,今天刚刚弄出来,把代码分析一下,我终于把数据通过串口输出来了,后面的我相信不会难的额。
int data_1;
int DHpin = 8; //dht_11接8的引脚
/*************DHpin = 8*************/
/*************数据读取*************/
byte dat;
byte read_data()
{ byte data=0;
for (int i = 0; i < 8; i++)
{ if (digitalRead(DHpin) == LOW)
{ while (digitalRead(DHpin) == LOW); //等待50us;
delayMicroseconds(30); //判定数据是‘0’还是‘1’;
if (digitalRead(DHpin) == HIGH)
data |= (1 << (7 - i)); //高位在前,低位在后;
while (digitalRead(DHpin) == HIGH); //数据‘1’,等待下一位;
}
}
return data;
}
void start_test()
{ digitalWrite(DHpin, LOW); //拉低总线,发送开始信号
delay(30); //延时>18ms
digitalWrite(DHpin, HIGH); //发送高电平
delayMicroseconds(40); //延时40us,等待响应;
pinMode(DHpin, INPUT); //数字I/O口改变为输入
while (digitalRead(DHpin) == HIGH); //等待读得输入高电平
delayMicroseconds(80); //拉低总线80us;
if (digitalRead(DHpin) == LOW); //如果数字I/O口输入低电平
delayMicroseconds(80); //延时80us,开始接收数据
for (int i = 0; i < 4; i++) //接收5字节温湿度数据
dat = read_data();
pinMode(DHpin, OUTPUT); //数字I/O口改变为输出
digitalWrite(DHpin, HIGH);
}
/**********DHpin 8**************/
/**********数据读取结束**************/
//++++++++++++++++++++++++++++++++++++++++++++++++++++/
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(DHpin, OUTPUT);
pinMode(DHpin_, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
//Serial.print("湿度");
start_test();
data_1=(int)dat;
data_2=(int)dat;
Serial.println("湿度——1_1");
Serial.print(data_1);
delay(50);
Serial.print("温度——1_2");
Serial.print(data_2);
delay(50);
delay(200);
}
这个是串口输出数据额,后期把传感器先玩的比较熟悉,我比较笨,只有一步一步来额。
由于是小白啊,自己搞了半天才把传感器的数据成功输出,我觉得重要的是编码和这个硬件吧,只有自己编的代码才能有所获吧,虽然第一次发帖有点慢,但是我发的贴希望对大家有帮助,前面课程有点多,代码总是有问题,今天刚刚弄出来,把代码分析一下,我终于把数据通过串口输出来了,后面的我相信不会难的额。
int data_1;
int DHpin = 8; //dht_11接8的引脚
/*************DHpin = 8*************/
/*************数据读取*************/
byte dat;
byte read_data()
{ byte data=0;
for (int i = 0; i < 8; i++)
{ if (digitalRead(DHpin) == LOW)
{ while (digitalRead(DHpin) == LOW); //等待50us;
delayMicroseconds(30); //判定数据是‘0’还是‘1’;
if (digitalRead(DHpin) == HIGH)
data |= (1 << (7 - i)); //高位在前,低位在后;
while (digitalRead(DHpin) == HIGH); //数据‘1’,等待下一位;
}
}
return data;
}
void start_test()
{ digitalWrite(DHpin, LOW); //拉低总线,发送开始信号
delay(30); //延时>18ms
digitalWrite(DHpin, HIGH); //发送高电平
delayMicroseconds(40); //延时40us,等待响应;
pinMode(DHpin, INPUT); //数字I/O口改变为输入
while (digitalRead(DHpin) == HIGH); //等待读得输入高电平
delayMicroseconds(80); //拉低总线80us;
if (digitalRead(DHpin) == LOW); //如果数字I/O口输入低电平
delayMicroseconds(80); //延时80us,开始接收数据
for (int i = 0; i < 4; i++) //接收5字节温湿度数据
dat = read_data();
pinMode(DHpin, OUTPUT); //数字I/O口改变为输出
digitalWrite(DHpin, HIGH);
}
/**********DHpin 8**************/
/**********数据读取结束**************/
//++++++++++++++++++++++++++++++++++++++++++++++++++++/
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(DHpin, OUTPUT);
pinMode(DHpin_, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
//Serial.print("湿度");
start_test();
data_1=(int)dat;
data_2=(int)dat;
Serial.println("湿度——1_1");
Serial.print(data_1);
delay(50);
Serial.print("温度——1_2");
Serial.print(data_2);
delay(50);
delay(200);
}
这个是串口输出数据额,后期把传感器先玩的比较熟悉,我比较笨,只有一步一步来额。