arduino采集温湿度
来源:互联网 发布:冰川网络远征ol手游 编辑:程序博客网 时间:2024/04/29 00:47
int temp;//温度
int humi;//湿度
int tol;//校对码
int j;
unsigned int loopCnt;
int chr[40] = {0};//创建数字数组,用来存放40个bit
unsigned long time;
#define pin 2
void setup()
{
Serial.begin(9600);
}
void loop()
{
bgn:
delay(2000);
//设置2号接口模式为:输出
//输出低电平20ms(>18ms)
//输出高电平40μs
pinMode(pin,OUTPUT);
digitalWrite(pin,LOW);
delay(20);
digitalWrite(pin,HIGH);
delayMicroseconds(40);
digitalWrite(pin,LOW);
//设置2号接口模式:输入
pinMode(pin,INPUT);
//高电平响应信号
loopCnt=10000;
while(digitalRead(pin) != HIGH)
{
if(loopCnt-- == 0)
{
//如果长时间不返回高电平,输出个提示,重头开始。
Serial.println("HIGH");
goto bgn;
}
}
//低电平响应信号
loopCnt=30000;
while(digitalRead(pin) != LOW)
{
if(loopCnt-- == 0)
{
//如果长时间不返回低电平,输出个提示,重头开始。
Serial.println("LOW");
goto bgn;
}
}
//开始读取bit1-40的数值
for(int i=0;i<40;i++)
{
while(digitalRead(pin) == LOW)
{}
//当出现高电平时,记下时间“time”
time = micros();
while(digitalRead(pin) == HIGH)
{}
//当出现低电平,记下时间,再减去刚才储存的time
//得出的值若大于50μs,则为‘1’,否则为‘0’
//并储存到数组里去
if (micros() - time >50)
{
chr[i]=1;
}else{
chr[i]=0;
}
}
//湿度,8位的bit,转换为数值
humi=chr[0]*128+chr[1]*64+chr[2]*32+chr[3]*16+chr[4]*8+chr[5]*4+chr[6]*2+chr[7];
//温度,8位的bit,转换为数值
temp=chr[16]*128+chr[17]*64+chr[18]*32+chr[19]*16+chr[20]*8+chr[21]*4+chr[22]*2+chr[23];
//校对码,8位的bit,转换为数值
tol=chr[32]*128+chr[33]*64+chr[34]*32+chr[35]*16+chr[36]*8+chr[37]*4+chr[38]*2+chr[39];
//输出:温度、湿度、校对码
Serial.print("temp:");
Serial.println(temp);
Serial.print("humi:");
Serial.println(humi);
Serial.print("tol:");
Serial.println(tol);
//校对码,我这里没用上
//理论上,湿度+温度=校对码
//如果数值不相等,说明读取的数据有错。
}
int humi;//湿度
int tol;//校对码
int j;
unsigned int loopCnt;
int chr[40] = {0};//创建数字数组,用来存放40个bit
unsigned long time;
#define pin 2
void setup()
{
Serial.begin(9600);
}
void loop()
{
bgn:
delay(2000);
//设置2号接口模式为:输出
//输出低电平20ms(>18ms)
//输出高电平40μs
pinMode(pin,OUTPUT);
digitalWrite(pin,LOW);
delay(20);
digitalWrite(pin,HIGH);
delayMicroseconds(40);
digitalWrite(pin,LOW);
//设置2号接口模式:输入
pinMode(pin,INPUT);
//高电平响应信号
loopCnt=10000;
while(digitalRead(pin) != HIGH)
{
if(loopCnt-- == 0)
{
//如果长时间不返回高电平,输出个提示,重头开始。
Serial.println("HIGH");
goto bgn;
}
}
//低电平响应信号
loopCnt=30000;
while(digitalRead(pin) != LOW)
{
if(loopCnt-- == 0)
{
//如果长时间不返回低电平,输出个提示,重头开始。
Serial.println("LOW");
goto bgn;
}
}
//开始读取bit1-40的数值
for(int i=0;i<40;i++)
{
while(digitalRead(pin) == LOW)
{}
//当出现高电平时,记下时间“time”
time = micros();
while(digitalRead(pin) == HIGH)
{}
//当出现低电平,记下时间,再减去刚才储存的time
//得出的值若大于50μs,则为‘1’,否则为‘0’
//并储存到数组里去
if (micros() - time >50)
{
chr[i]=1;
}else{
chr[i]=0;
}
}
//湿度,8位的bit,转换为数值
humi=chr[0]*128+chr[1]*64+chr[2]*32+chr[3]*16+chr[4]*8+chr[5]*4+chr[6]*2+chr[7];
//温度,8位的bit,转换为数值
temp=chr[16]*128+chr[17]*64+chr[18]*32+chr[19]*16+chr[20]*8+chr[21]*4+chr[22]*2+chr[23];
//校对码,8位的bit,转换为数值
tol=chr[32]*128+chr[33]*64+chr[34]*32+chr[35]*16+chr[36]*8+chr[37]*4+chr[38]*2+chr[39];
//输出:温度、湿度、校对码
Serial.print("temp:");
Serial.println(temp);
Serial.print("humi:");
Serial.println(humi);
Serial.print("tol:");
Serial.println(tol);
//校对码,我这里没用上
//理论上,湿度+温度=校对码
//如果数值不相等,说明读取的数据有错。
}
0 0
- arduino采集温湿度
- 利用arduino采集温湿度,客户端程序显示实时曲线图
- Arduino制作温湿度计
- Arduino - DHT11温湿度传感器
- arduino DHT11 温湿度传感器
- ESP8266采集SHT10温湿度
- DHT11 温湿度传感器 Arduino 库
- Arduino使用温湿度传感器DHT11
- Arduino使用DHT11温湿度传感器获取环境温湿度
- 使用Arduino与DHT11监测温湿度
- 使用Arduino与DHT11监测温湿度
- Arduino -- DHT11温湿度传感器自动发微博
- 使用Arduino与DHT11监测温湿度
- Arduino 温湿度传感器DHT11模块实验
- 20141116 【 Arduino - DHT11 】 温湿度传感器DHT11使用
- 使用Arduino与DHT11监测温湿度
- DHT11 温湿度传感器使用 - arduino - avr
- Arduino Uno 和 DHT11/DHT22 温湿度传感器
- 数据分析≠Hadoop+NoSQL,不妨先看完善现有技术的10条捷径
- linux 下gdb 调试 core文件
- Exception in thread "main" org.apache.axis2.AxisFault: Namespace URI may not be null
- base64 编码解码
- UMR祝你元宵节快乐!
- arduino采集温湿度
- 十八掌大数据分析
- 我的2017
- 数据库mysql的备份
- 数据库错题集及相关知识点
- Rxjava和Retrofit结合使用的案例
- 日常_疑难杂症_1
- 面向对象的六大原则的修炼杂记
- Unity发布的ios包在iphone上声音是从听筒里出来的问题