<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.jackslab.org/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-cn">
		<id>http://wiki.jackslab.org/index.php?action=history&amp;feed=atom&amp;title=%E6%92%B0%E5%86%99%E8%87%AA%E5%B7%B1%E7%9A%84_Arduino_%E5%BA%93</id>
		<title>撰写自己的 Arduino 库 - 版本历史</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.jackslab.org/index.php?action=history&amp;feed=atom&amp;title=%E6%92%B0%E5%86%99%E8%87%AA%E5%B7%B1%E7%9A%84_Arduino_%E5%BA%93"/>
		<link rel="alternate" type="text/html" href="http://wiki.jackslab.org/index.php?title=%E6%92%B0%E5%86%99%E8%87%AA%E5%B7%B1%E7%9A%84_Arduino_%E5%BA%93&amp;action=history"/>
		<updated>2026-08-12T10:09:38Z</updated>
		<subtitle>本wiki的该页面的版本历史</subtitle>
		<generator>MediaWiki 1.19.2</generator>

	<entry>
		<id>http://wiki.jackslab.org/index.php?title=%E6%92%B0%E5%86%99%E8%87%AA%E5%B7%B1%E7%9A%84_Arduino_%E5%BA%93&amp;diff=2704&amp;oldid=prev</id>
		<title>Comcat：以“以 DHT21/AM2301 数字温湿度传感器 为例，示例如下  Arduino 封装的库都在 /PATH/TO/Arduino-1.0.1/libraries 下，因此我们自己写的库也...”为内容创建页面</title>
		<link rel="alternate" type="text/html" href="http://wiki.jackslab.org/index.php?title=%E6%92%B0%E5%86%99%E8%87%AA%E5%B7%B1%E7%9A%84_Arduino_%E5%BA%93&amp;diff=2704&amp;oldid=prev"/>
				<updated>2014-06-25T09:05:01Z</updated>
		
		<summary type="html">&lt;p&gt;以“以 &lt;a href=&quot;/DHT21/AM2301_%E6%95%B0%E5%AD%97%E6%B8%A9%E6%B9%BF%E5%BA%A6%E4%BC%A0%E6%84%9F%E5%99%A8&quot; title=&quot;DHT21/AM2301 数字温湿度传感器&quot;&gt;DHT21/AM2301 数字温湿度传感器&lt;/a&gt; 为例，示例如下  Arduino 封装的库都在 /PATH/TO/Arduino-1.0.1/libraries 下，因此我们自己写的库也...”为内容创建页面&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;以 [[DHT21/AM2301 数字温湿度传感器]] 为例，示例如下&lt;br /&gt;
&lt;br /&gt;
Arduino 封装的库都在 /PATH/TO/Arduino-1.0.1/libraries 下，因此我们自己写的库也要放在这个目录下&lt;br /&gt;
&lt;br /&gt;
在 /PATH/TO/Arduino-1.0.1/libraries 下建立 DH21 这个目录，把 dh21.h  dh21.cpp 这两个文件置于其中即可使用（由此可见 Arduino 的库创建和使用都很方便），重启 Arduino 开发环境后，可在 Sketch –&amp;gt; Import Library 下看到 DH21&lt;br /&gt;
&lt;br /&gt;
使用示例如下：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;dh21.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
/* the data line of DH21 is pluged in digital pin #12 */&lt;br /&gt;
DH21 dh21(12);&lt;br /&gt;
 &lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
void loop()&lt;br /&gt;
{&lt;br /&gt;
  if(dh21.get_data() == -1)&lt;br /&gt;
    Serial.println(&amp;quot;Read DH21 error&amp;quot;);&lt;br /&gt;
   else&lt;br /&gt;
   {&lt;br /&gt;
     Serial.print(&amp;quot;Temperature: &amp;quot;);&lt;br /&gt;
     Serial.print(dh21.temperature());&lt;br /&gt;
     Serial.print(&amp;quot;C   &amp;quot;);&lt;br /&gt;
     Serial.print(&amp;quot;Humidity: &amp;quot;);&lt;br /&gt;
     Serial.print(dh21.humidity());&lt;br /&gt;
     Serial.println(&amp;quot;%&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   /* read after 5 seconds */&lt;br /&gt;
   delay(5000);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
运行界面：&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[文件:create-arduino-dh21-lib.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''dh21.h'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * dh21.h - Library for DH21/AM2301 digital temperature sensor&lt;br /&gt;
 * Created by Jack Tan &amp;lt;jiankemeng@gmail.com&amp;gt;&lt;br /&gt;
 * Released into the public domain.&lt;br /&gt;
 */&lt;br /&gt;
#ifndef _DH21_H_&lt;br /&gt;
#define _DH21_H_&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;Arduino.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
class DH21&lt;br /&gt;
{&lt;br /&gt;
	public:&lt;br /&gt;
		DH21(int pin);&lt;br /&gt;
		float temperature();&lt;br /&gt;
		float humidity();&lt;br /&gt;
		char get_data();&lt;br /&gt;
		char data_check();&lt;br /&gt;
&lt;br /&gt;
	private:&lt;br /&gt;
		char read_8bits();&lt;br /&gt;
		int pin;&lt;br /&gt;
		char RH_H;&lt;br /&gt;
		char RH_L;&lt;br /&gt;
		char T_H;&lt;br /&gt;
		char T_L;&lt;br /&gt;
		char crc;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''dh21.cpp'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * dh21.cpp - Library for DH21/AM2301 digital temperature sensor&lt;br /&gt;
 * Created by Jack Tan &amp;lt;jiankemeng@gmail.com&amp;gt;&lt;br /&gt;
 * Released into the public domain.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;dh21.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
DH21::DH21(int p)&lt;br /&gt;
{&lt;br /&gt;
	pin = p;&lt;br /&gt;
	pinMode(pin, OUTPUT);&lt;br /&gt;
	digitalWrite(pin, HIGH);&lt;br /&gt;
}&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
char DH21::get_data()&lt;br /&gt;
{&lt;br /&gt;
	char flag;&lt;br /&gt;
	pinMode(pin, OUTPUT);&lt;br /&gt;
&lt;br /&gt;
	/* Bus Low, delay 1 - 5ms */&lt;br /&gt;
	digitalWrite(pin, LOW);&lt;br /&gt;
	delay(4);&lt;br /&gt;
&lt;br /&gt;
	/* Bus High, delay 40us */&lt;br /&gt;
	digitalWrite(pin, HIGH);&lt;br /&gt;
	delayMicroseconds(40);&lt;br /&gt;
&lt;br /&gt;
	pinMode(pin, INPUT);&lt;br /&gt;
	if(digitalRead(pin) == 0)&lt;br /&gt;
	{&lt;br /&gt;
		flag = 2;&lt;br /&gt;
		/* waitting the ACK signal (Low, 80us) */&lt;br /&gt;
		while((digitalRead(pin) == 0) &amp;amp;&amp;amp; flag++);&lt;br /&gt;
		flag = 2;&lt;br /&gt;
		/* waitting the DATA Start signal (High, 80us) */&lt;br /&gt;
		while((digitalRead(pin) == 1) &amp;amp;&amp;amp; flag++);&lt;br /&gt;
		RH_H = read_8bits();&lt;br /&gt;
		RH_L = read_8bits();&lt;br /&gt;
		T_H = read_8bits();&lt;br /&gt;
		T_L = read_8bits();&lt;br /&gt;
		crc = read_8bits();&lt;br /&gt;
&lt;br /&gt;
		pinMode(pin, OUTPUT);&lt;br /&gt;
		digitalWrite(pin, HIGH);&lt;br /&gt;
		return 0;&lt;br /&gt;
	}&lt;br /&gt;
	else&lt;br /&gt;
		return -1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
char DH21::read_8bits()&lt;br /&gt;
{&lt;br /&gt;
	char i, flag, data = 0;&lt;br /&gt;
	char temp;&lt;br /&gt;
	for(i=0; i&amp;lt;8; i++)&lt;br /&gt;
	{&lt;br /&gt;
		flag = 2;&lt;br /&gt;
		while((digitalRead(pin) == 0) &amp;amp;&amp;amp; flag++);&lt;br /&gt;
		delayMicroseconds(30);&lt;br /&gt;
		temp = 0;&lt;br /&gt;
		if(digitalRead(pin) == 1) temp = 1;&lt;br /&gt;
		flag = 2;&lt;br /&gt;
		while((digitalRead(pin) == 1) &amp;amp;&amp;amp; flag++);&lt;br /&gt;
		if(flag == 1) break;&lt;br /&gt;
		data &amp;lt;&amp;lt;= 1;&lt;br /&gt;
		data |= temp;&lt;br /&gt;
	}&lt;br /&gt;
	return data;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
char DH21::data_check()&lt;br /&gt;
{&lt;br /&gt;
	char tmp = (T_H + T_L + RH_H + RH_L);&lt;br /&gt;
	if(tmp != crc)&lt;br /&gt;
	{&lt;br /&gt;
		RH_H = 0;&lt;br /&gt;
		RH_L = 0;&lt;br /&gt;
		T_H = 0;&lt;br /&gt;
		T_L = 0;&lt;br /&gt;
		return -1;&lt;br /&gt;
	}&lt;br /&gt;
	else&lt;br /&gt;
		return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
float DH21::temperature()&lt;br /&gt;
{&lt;br /&gt;
	uint16_t T = (T_H &amp;lt;&amp;lt; 8) | T_L;&lt;br /&gt;
	float tt;&lt;br /&gt;
	&lt;br /&gt;
	if(T &amp;gt;= 0)&lt;br /&gt;
		tt = T/10 + (T%10) * 0.1;&lt;br /&gt;
	else&lt;br /&gt;
	{&lt;br /&gt;
		T = T &amp;amp; 0x7fff;&lt;br /&gt;
		tt = -(T/10 + (T%10) * 0.1);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return tt;	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
float DH21::humidity()&lt;br /&gt;
{&lt;br /&gt;
	uint16_t RH = (uint16_t)(RH_H &amp;lt;&amp;lt; 8) | RH_L;&lt;br /&gt;
	float hum;&lt;br /&gt;
	hum = RH/10 + (RH%10) * 0.1;&lt;br /&gt;
&lt;br /&gt;
	return hum;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Comcat</name></author>	</entry>

	</feed>