适用平台:Arduino uno
模块介绍:
今天我们需要用到的模块是遥感模块,也称QT011H模块。
这个模块大家一定不陌生,在遥控类的玩具里的遥控器基本上都是采用的这个遥感,学会使用这个遥感模块,我们也能做一些遥控小玩具了。这个模块的用户数据手册如下
链接: User’sGuide-遥感模块QT011H-用户指导手册.
数据手册里详细介绍了它的一些功能特点,例如它的低功耗模式、检测设置等。这个模块最大的特点是采用了SQD协议通讯,这个通讯协议为单线双向协议,一条数据线即可完成数据的发送和接收。具体关于SQD协议的介绍可参考SQD数据手册
链接: SQD协议用户数据手册.
这里为了方便使用,已经提供了SQD协议库。直接调用SQD协议库即可实现通讯,非常方便。这个SQD协议库的下载链接会放到文章末尾。
所需元件
1 x QT011H模块
1 x Arduino uno 开发板
3 x 1.27转2.54排线
硬件连接及说明
QT011H模块与Arduino uno 开发板的连接如下
QT011H Arduino uno
VDD------->5V
GND------>GND
SQD------>3
我们将通讯引脚设置为3脚。这里将用到3脚的外部中断
程序讲解
首先教大家把SQD协议库加入到我们的Arduino IDE当中,其实方法非常简单。
1、 先通过文章末尾的下载链接把文件下载下来。
2、下载后有三个文件,把SQD_Library文件复制到Arduino IDE文件夹的libraries子文件夹中。
什么?你说你找不到这个文件夹,那我们换一种方法找。
首先找到arduino.exe这个快捷方式
单击右键—>选择打开文件所在位置,于是就找到了这个文件夹
将SQD_Library文件放到libraries文件夹下。
完成以上操作后,我们重启Arduino IDE,可以看到多了一个库,这就我们的SQD协议库
这是打开Arduino_QT011H项目接下来我们还要对SQD协议做一些配置。配置如下
unsigned char getLLSQD(void){
if(digitalRead(3))
{
return 1;
}else
{
return 0;
}
}
void setLLSQD(unsigned char Export){
if(Export)
{
digitalWrite(3, HIGH);
}else
{
digitalWrite(3, LOW);
}
}
void qiSQD_PinOutputHigh(void){
detachInterrupt(1);
pinMode(3, OUTPUT);
digitalWrite(3, HIGH);
}
void qiSQD_PinInputWithFallingInt(void){
//pinMode(3,INPUT);
pinMode(3,INPUT_PULLUP); //将2号管脚设置为输入并且内部上拉模式
attachInterrupt(1,Gpio3_INT, FALLING);
}
//========================主要驱动====================================
cli();//关闭全局中断
//设置定时器2为80us
TCCR2A = 0;// set entire TCCR2A register to 0
TCCR2B = 0;// same for TCCR2B
TCNT2 = 0;//initialize counter value to 0
// set compare match register for 8khz increments
OCR2A = 160;// = (16*10^6) / (8000*8) - 1 (must be <256)
// turn on CTC mode
TCCR2A |= (1 << WGM21);//打开CTC模式
// Set CS21 bit for 8 prescaler
TCCR2B |= (1 << CS21);
// enable timer compare interrupt
TIMSK2 |= (1 << OCIE2A);
sei();//打开全局中断
ISR(TIMER2_COMPA_vect)
{
qiSQD_80usCalledForTxProcess();
}
void Gpio3_INT(void)
{
qiSQD_FallingEdgeIntCalledRX();
}
这里有Arduino 的3脚的配置和操作,以及配置一个定时器2
最后是一些初始化
qiSQD_init();
Serial.begin(9600); //设置波特率为9600 bps
下面就是QT011H的数据接收,接收到后通过串口打印出来
u8 i=0;
if( (Timer==37) &&(SQD_re_payload[0]>0) )
{
for(i=0;i<SQD_re_payload[0]+1;i++)
{
Serial.print(SQD_re_payload[i]);
Serial.print("\t");
}
Serial.print("\r\n");
SQD_re_payload[0]=0;
}
大家不清楚SQD的配置过程的可以参考这篇文章,里面讲的非常详细。
链接: SQD协议Library文件使用教程——全网最权威版.
总结
本章重点讲解QT011H模块的SQD通讯协议,以及它的一些配置方法,方便大家去了解并使用。本篇文章内容就到这里了,希望对大家有所帮助,最后,晒上程序效果图、程序和SQD协议库下载链接
链接: Arduino -uno 核心板 之中级系列5 QT011H实验程序.
更多内容请参考原文
链接: Arduino -uno 核心板 之中级系列5 QT011H实验.