Adruino:人机界面及接口技术
目录
零、按键接口技术
1、按键接口的控制方式*
编辑
2、模拟量按键接口*
一、红外遥控技术
0、红外编码*
1、工作原理
2、IRrecv类库函数
二、数码管显示器接口技术
1、工作原理*
2、静态显示控制技术
3、动态显示控制技术
三、LCD接口技术
1、基本介绍
2、LCD1602实物图:
3、LCD1602接口定义:
4、LCD1602类库函数*
四、语言识别技术*
1、ld3320类库函数
零、按键接口技术
1、按键接口的控制方式*
按键接口的控制方式有以下三种:
(1)随机方式:当Arduino空闲时执行按键扫描程序。
(2)中断方式:当有按键按下时通过或门产生中断请求,Arduino中断响应后执行按键扫描程序。
(3)定时方式:每隔一定时间执行一次按键扫描程序,定时时间由Arduino定时器完成。
2、模拟量按键接口*
模拟量按键是一种连接A/D转换器的方案,优点是只占1个模拟信号输入口,将开关信号转成模拟信号。当不同的按键被按下时,通过电阻分压, A/D转换的电压不同,通过A/D转换值便可以判断出是哪个按键被按下。一个有两种方案,一种是并联式,另一种是串联式。
并联式:
电路中的各个电阻值不相同,按下不同按键时,进入A0的模 拟量不同,通过A/D转 换,就可以判断出哪个键被按下。这种方式可以同时识别多个按键, 即只要电阻取得合适, 可以设置组合键。
串联式:
按下不同按键时,进入A0的模拟量也不同,为方便计算,电阻值可以相等,但是不能有组合按键。因为当按下前面的按键后,后面所有按键都会被短路。
一、红外遥控技术
0、红外编码*
在同一环境中,通常有多种红外遥控接收设备,这样就要求遥控器要按一定的编码传送,防止相互干扰,而编码则会由专用芯片或电路完成。发送端采用脉冲位置调制方式,将二进制数字信号调制成某一频率的脉冲序列,并驱动红外发射管以光脉冲的形式发送出去。接收端对应于编码芯片通常会有相配对的解码芯片或采用软件解码。红外遥控器的编码格式通常由引导码(起始码)、用户码、数据码和数据码反码组成,编码总共占32位。数据反码是数据码反相后的编码,用于对数据的纠错。
1、工作原理
红外遥控器是一种无线发射装置,是利用波长为0.761.5um的近红外线来传输控制信号的遥控设备,其工作原理是通过现代的数字编码技术,将按键信息进行编码,通过红外线二极管发射光波,红外线接收器将收到的红外信号转变成电信号,处理器对该信号进行解码,解调出相应的指令,控制设备完成所需的动作。
图1 红外接收头结构
GND接地,VCC接电源,OUT接数字引脚,引脚设置为输入。
2、IRrecv类库函数
红外解码一般是32位的NEC红外协议。由8位按键值补码 8位按键值 8位地址补码 8位地址码组成。
函数 | 解释 |
---|---|
IRrecv irrecv(irRecePin) | 定义与红外接收头连接的Arduino引脚编号。 |
irrecv.decode() | 解码接收的IR消息,返回true or false。 |
irrecv.enableIRln() | 启动红外解码。 |
irrecv.disableIRIn() | 关闭红外解码。 |
irrecv.resume() | 继续等待接受下一组信号。 |
irrecv.blink13(1/0) | 在红外处理中启用/禁用引脚13闪烁。 |
关于获取按键编码数据通过IRData类,decode()会将解码结果存储在这个类里。以下是关于如何获取解码结果的函数。
irrecv.decodedIRData.decodedRawData获取32位原始数据。
irrecv.decodedIRData.protocol获取协议类型。
irrecv.decodedIRData.address获取地址值。
irrecv.decodedIRData.command获取命令值。
irrecv.decodedIRData.numberOfBits获取接收到的位数。
案例:获取按键值
连接图
代码
#include<IRremote.h>
const int IRremotePin=9;
IRrecv irrecv(IRremotePin);void setup()
{Serial.begin(9600);irrecv.enableIRIn();
}void loop()
{if(irrecv.decode()){Serial.print("value:");Serial.println(irrecv.decodedIRData.decodedRawData,HEX);irrecv.resume();}delay(600);
}
二、数码管显示器接口技术
1、工作原理*
8个发光二极管封装在一起组成的元件,当数码管中的某个二极管导通时,相应的一个字段便发光,不导通时择不发光。根据接法不同,数码管可以分为共阴极(8个发光二极管阴极并联连接阴极)和共阳极(8个发光二极管正极并联连接正极)。
图2 共阴极和共阳极
2、静态显示控制技术
静态显示是占用一定数量的8位引脚接口来控制数码管的显示,优点:稳定亮度大,节约CPU资源, 静态显示是每一个数码管的段码都要独占具有锁存功能的输出口,控制器把要显示的字码送到输出口上。缺点:占用引脚接口多。
3、动态显示控制技术
动态显示是将所有数码管对应的段选线并联在一起,由位选线控制是哪一位数码管有效,轮流向各位数码送出字形码和位选信号,使各位数码管按照一定顺序显示,数码管每隔一段时间(定时扫描)点亮一次,只要频率足够高,就能输出稳定的显示。优点:占用引脚接口少。缺点:消耗CPU资源。
图4 共阴极数码管动态态显示原理图
三、LCD接口技术
1、基本介绍
LCD液晶显示屏,它按显示技术分为4类,点阵式液晶屏(图像、字符、数字)、段码式液晶屏(字符、数字)、字符式液晶屏(字母、数字、符号)和TFT彩屏(彩色点阵图像)。这里着重介绍一下LCD1602液晶显示屏。
2、LCD1602实物图:
LCD1602内部封装HD44780驱动控制零件,LCD屏,控制电路及背光调节电路等,主要特性:
(1)可编程选择显示三种带光标的字形。一行宽5高8、二行宽5高8、一行宽5高10
(2) 内含字形库CGROM。根据8位显示码DB7~DB0产生192个点阵字形。
(3)内含128字节的RAM,其中80字节为显示DDRAM,可以存储80个字符显示码。
(4) 内含64个字节的自定义字形CGRAM,可以暂存自建矩阵。
(5)具有多种控制命令。
3、LCD1602接口定义:
Microsoft Word - 通用1602LCD使用手册.doc
4、LCD1602类库函数*
函数 | 解释 |
---|---|
LiquidCrystal lcd(rs,rw,enable,[d0,d1,d2,d3],d4,d5,d6,d7) | 类实例化。 |
lcd.begin(cols,rows) | 类初始化。1602是16列2行 |
lcd.clear() | 清除LCD屏幕内容。 |
lcd.home() | 光标定位屏幕左上角。 |
lcd.SetCursor(cols,rows) | 设定显示光标位置,从零开始计数。 |
lcd.write(data) | 向LCD写一个字符 |
lcd.print(data,[BASE]) | 文本显示在LCD上,和串口打印类似。 |
lcd.cursor() | 显示光标。 |
lcd.noCursor() | 隐藏光标。 |
lcd.blink() | 显示光标闪烁。 |
lcd.noBlink() | 隐藏光标闪烁。 |
lcd.display() | 打开液晶显示。 |
lcd.noDisplay() | 关闭液晶显示。 |
lcd.scrollDisplayLeft() | 向左边滚动一个字符。 |
lcd.scrollDisplayRight() | 向右边滚动一个字符。 |
lcd.autoscroll() | 自动滚动功能。 |
lcd.noAutoscroll() | 关闭自动滚动功能。 |
lcd.leftToRight() | 从左到右写入屏幕。 |
lcd.rightToLeft() | 从右到左写入屏幕。 |
lcd.createChar(num,data) | 创建用户自定义字符,总共只可创建8个。 |
详解:
LiquidCrystal lcd(rs,rw,enable,[d0,d1,d2,d3],d4,d5,d6,d7)
rs:与RS连接的引脚号
rw:与R/W连接引脚号
enable:与E使能连接引脚号
d0~d7:有四线和八线模式,使用四线默认是d4~d7.
如果rw接GND,则参数可以忽略。
lcd.createChar(num,data)
num:表示序号,如果为0,要写作byte(0)。
data:表示字符的像素数据
例如:苦脸数组
byte smile[8]={B00000,B10001,B10001,B00000,B00000,B01110,B10001,B00000,
}
四、语言识别技术*
语音识别技术,其目标是将人的语音中的词汇内容转换为计算机可读的输入,让机器通过识别和理解过程把语音信号转变为相应的文本或命令。非特定人语音识别,可以满足不同人的语音识别要求,适合广泛人群应用,如智能家居、互动机器人等。
LD3320芯片是一款语音识别专用芯片,可以实现语音识别功能,识别的关键词语列表是可以任意动态编辑的。每次识别最多可以设置50项候选识别句,每个识别句可以是单字、词组或短句,长度为不超过10个汉字或者79个字节的拼音串。
1、ld3320类库函数
(1)VoiceRecognition
功能:构造函数
语法格式:VoiceRecognition Voice。
参数说明:无。
返回值:无。
(2)start()
功能:开始识别。各参数按默认值设定。
语法格式:voice.start()。
参数说明:无。
(3)addCommand()
功能:添加识别命令和指令编号。
语法格式:voice.addCommand(char *pass, int num)。
参数说明:pass:指令内容, num:指令编号。
返回值:无。
(4)int read()
功能:读取识别结果。
语法格式:voice. read()。
参数说明:无。
返回值:指令编号。
案例:
#include <ld3320.h>
VoiceRecognition Voice; //声明一个语音识别对象
#define Led 8 //定义LED控制引脚
void setup(){pinMode(Led, OUTPUT); //初始化LED引脚为输出模式digitalWrite(Led, LOW); //LED引脚低电平Voice.init(); //初始化模块Voice.addCommand("kai deng", 0); //添加指令,序号Voice.addCommand("guan deng", 1); Voice.start();
} //开始识别void loop() {switch (Voice.read()) { //判断识别case 0: //若是指令“kai deng”digitalWrite(Led, HIGH); break; //点亮LEDcase 1: //若是指令“guan deng”digitalWrite(Led, LOW); break; //熄灭LEDdefault: break;}
}