Android DHT11驱动

本文介绍了如何在Android平台上开发DHT11温湿度传感器的驱动程序,包括连接硬件、读取数据和处理信号的步骤,为Android设备添加环境监测功能。
摘要由CSDN通过智能技术生成

Android DHT11驱动


struct dht11_sensor_dev{
	struct cdev cdev;
	unsigned long pin;
	unsigned char value[5];
	unsigned char lock;
	unsigned int irq;
	struct timeval lasttv;
	int bitcount;
	int bytecount;
	int started;
	struct timer_list timer;
	void (*write_bit)(unsigned long pin, char bit);
	void (*delay)(short t);
};

static struct dht11_sensor_dev *dht11_dev;
struct class *dht11_class;
static int major = DEVICE_MAJOR;

static inline void usdelay(short t)
{
	return ndelay(t * 1000);
}

static inline void gpio_write_bit(unsigned long pin, char bit)
{
	gpio_set_value(pin, bit);
}
#if 0
static char gpio_read_bit(unsigned long pin)
{
	return gpio_get_value(pin) ? 1 : 0;
	//return gpio_get_value(pin);
}
static void gpio_write_bit_dir(unsigned long pin, char bit)
{
	if (bit)
		gpio_direction_input(pin);
	else
		gpio_direction_output(pin, 0);
}

static void gpio_write_bit_val(unsigned long pin, char bit)
{
	gpio_set_value(pin, bit);
}

static int dht11_get_temperature(struct dht11_sensor_dev *dev)
{
	return dev->value[0] * 1000 + dev->value[1];
}

static int dht11_get_humidity(struct dht11_sensor_dev *dev)
{
	return dev->value[2] * 1000 + dev->value[3];
}
#endif

static irqreturn_t dht11_interrupt(int irq, void *dev_id)
{
	struct dht11_sensor_dev *dev = (struct dht11_sensor_dev *)dev_id;
	struct timeval tv;
	long deltv = 0;
	int signal = 0, data = 0;

	signal = gpio_get_value(dev->pin);

	do_gettimeofday(&tv);	

	deltv = tv.tv_sec - dev->lasttv.tv_sec;
	data = (int)(deltv * 1000000 + (tv.tv_usec - dev->lasttv.tv_usec)); 
	dev->lasttv = tv;

	if(dev->bytecount == 5) return IRQ_HANDLED;
	if((signal == 1) & (data > 40)){
		d
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值