查看撰写自己的 Arduino 库的源代码
←
撰写自己的 Arduino 库
跳转到:
导航
,
搜索
因为以下原因,你没有权限编辑本页:
您刚才请求的操作只有这个用户组中的用户才能使用:
用户
您可以查看并复制此页面的源代码:
以 [[DHT21/AM2301 数字温湿度传感器]] 为例,示例如下 Arduino 封装的库都在 /PATH/TO/Arduino-1.0.1/libraries 下,因此我们自己写的库也要放在这个目录下 在 /PATH/TO/Arduino-1.0.1/libraries 下建立 DH21 这个目录,把 dh21.h dh21.cpp 这两个文件置于其中即可使用(由此可见 Arduino 的库创建和使用都很方便),重启 Arduino 开发环境后,可在 Sketch –> Import Library 下看到 DH21 使用示例如下: <source lang="c"> #include <dh21.h> /* the data line of DH21 is pluged in digital pin #12 */ DH21 dh21(12); void setup() { Serial.begin(9600); } void loop() { if(dh21.get_data() == -1) Serial.println("Read DH21 error"); else { Serial.print("Temperature: "); Serial.print(dh21.temperature()); Serial.print("C "); Serial.print("Humidity: "); Serial.print(dh21.humidity()); Serial.println("%"); } /* read after 5 seconds */ delay(5000); } </source> 运行界面: [[文件:create-arduino-dh21-lib.png]] '''dh21.h''' <source lang="c"> /* * dh21.h - Library for DH21/AM2301 digital temperature sensor * Created by Jack Tan <jiankemeng@gmail.com> * Released into the public domain. */ #ifndef _DH21_H_ #define _DH21_H_ #include <Arduino.h> class DH21 { public: DH21(int pin); float temperature(); float humidity(); char get_data(); char data_check(); private: char read_8bits(); int pin; char RH_H; char RH_L; char T_H; char T_L; char crc; }; #endif </source> '''dh21.cpp''' <source lang="c"> /* * dh21.cpp - Library for DH21/AM2301 digital temperature sensor * Created by Jack Tan <jiankemeng@gmail.com> * Released into the public domain. */ #include "dh21.h" DH21::DH21(int p) { pin = p; pinMode(pin, OUTPUT); digitalWrite(pin, HIGH); } char DH21::get_data() { char flag; pinMode(pin, OUTPUT); /* Bus Low, delay 1 - 5ms */ digitalWrite(pin, LOW); delay(4); /* Bus High, delay 40us */ digitalWrite(pin, HIGH); delayMicroseconds(40); pinMode(pin, INPUT); if(digitalRead(pin) == 0) { flag = 2; /* waitting the ACK signal (Low, 80us) */ while((digitalRead(pin) == 0) && flag++); flag = 2; /* waitting the DATA Start signal (High, 80us) */ while((digitalRead(pin) == 1) && flag++); RH_H = read_8bits(); RH_L = read_8bits(); T_H = read_8bits(); T_L = read_8bits(); crc = read_8bits(); pinMode(pin, OUTPUT); digitalWrite(pin, HIGH); return 0; } else return -1; } char DH21::read_8bits() { char i, flag, data = 0; char temp; for(i=0; i<8; i++) { flag = 2; while((digitalRead(pin) == 0) && flag++); delayMicroseconds(30); temp = 0; if(digitalRead(pin) == 1) temp = 1; flag = 2; while((digitalRead(pin) == 1) && flag++); if(flag == 1) break; data <<= 1; data |= temp; } return data; } char DH21::data_check() { char tmp = (T_H + T_L + RH_H + RH_L); if(tmp != crc) { RH_H = 0; RH_L = 0; T_H = 0; T_L = 0; return -1; } else return 0; } float DH21::temperature() { uint16_t T = (T_H << 8) | T_L; float tt; if(T >= 0) tt = T/10 + (T%10) * 0.1; else { T = T & 0x7fff; tt = -(T/10 + (T%10) * 0.1); } return tt; } float DH21::humidity() { uint16_t RH = (uint16_t)(RH_H << 8) | RH_L; float hum; hum = RH/10 + (RH%10) * 0.1; return hum; } </source> <br><br><br><br> <br><br><br><br> <br><br><br><br>
返回到
撰写自己的 Arduino 库
。
个人工具
登录
名字空间
页面
讨论
变换
查看
阅读
查看源代码
查看历史
操作
搜索
导航
首页
社区专页
新闻动态
最近更改
随机页面
帮助
工具箱
链入页面
相关更改
特殊页面