基于Arduino的嵌入式系统入门与实践-Arduino板常用外设与应用_第1页
基于Arduino的嵌入式系统入门与实践-Arduino板常用外设与应用_第2页
基于Arduino的嵌入式系统入门与实践-Arduino板常用外设与应用_第3页
基于Arduino的嵌入式系统入门与实践-Arduino板常用外设与应用_第4页
基于Arduino的嵌入式系统入门与实践-Arduino板常用外设与应用_第5页
已阅读5页,还剩73页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第六章

Arduino板常用外设与应用六.一超声测距六.二蜂鸣器六.三温湿度传感器六.四直流电机六.五步电机六.六舵机六.七SD卡读写模块六.一五火焰传感器六.一六红外光电开关传感器六.一七红外体感应传感器六.一八温度传感器DS一八B二零六.一九心率传感器六.二零MPU六零五零空间运动传感器六.二一继电器六.八RFID读卡模块六.九日历时钟六.一零三色LED灯六.一一灰尘传感器六.一二颜色传感器六.一三水位传感器六.一四气体传感器六.一超声测距SR零四超声波测距离传感器,采用超声波回波测距原理,运用精确地时差测量技术,检测传感器与目地物之间地距离。采用小角度,小盲区超声波传感器,具有测量准确,无接触,防水,防腐蚀与低成本等优点。一.SR零四工作原理SR零四引脚引脚说明Vcc电源Trig触发输入端Echo回响输出端GND地六.一超声测距二.SR零四地类库函数(一)SR零四()功能:构造函数,创建一个SR零四类地对象时被执行,初始化对象,设置SR零四引脚。语法格式:SR零四sr零四(intechoPin,inttriggerPin)。参数说明:echoPin:回波引脚,int类型。triggerPin:触发引脚,int类型。返回值:创建了一个SR零四类地对象。例如:SR零四sr零四=SR零四(六,七);或SR零四sr零四(六,七);创建了一个对象sr零四,初始化回波与触发引脚为数字引脚六与七。(二)Distance()功能:读取测距距离。语法格式:sr零四.Distance()参数说明:无。返回值:测距距离,long型,单位是厘米。六.一超声测距三.SR零四地应用实例#include"SR零四.h" //添加库函数#defineTRIG_PIN六 //定义引脚#defineECHO_PIN七 //定义引脚SR零四sr零四=SR零四(ECHO_PIN,TRIG_PIN); //构造函数longa;voidsetup(){Serial.begin(九六零零); //定义串口波特率Serial.println("ExamplewrittenbyColozFromArduin.");delay(一零零零);}voidloop(){a=sr零四.Distance(); //读取障碍物与SR零四地距离Serial.print(a); //送串口监视器显示Serial.println("");delay(一零零零);}程序编译下载成功后,打开串口监视器,可看到当障碍物与超声测距模块地距离变化时,所显示地测量距离也发生变化。六.二蜂鸣器一.蜂鸣器地工作原理蜂鸣器是一种一体化结构地电子讯响器,采用直流电压供电,广泛应用于计算机,打印机,复印机,报警器,电子玩具,汽车电子设备,电话机,定时器等电子产品作发声器件。有源蜂鸣器内部有振荡电路,能将恒定地直流电转化成一定频率地脉冲信号,一旦供电,蜂鸣器就会发出声音。无源蜂鸣器内部不带震荡源,需要加方波信号能够发声。频率不同,震荡出来地音调也不同。六.二蜂鸣器二.蜂鸣器地应用实例(无源)intbuzzer=八; //设置控制蜂鸣器地数字引脚voidsetup(){pinMode(buzzer,OUTPUT); //设置数字引脚为输出模式}voidloop(){unsignedchari,j; //定义变量for(i=零;i<八零;i++){ //输出一个频率地声音digitalWrite(buzzer,HIGH); //发声delay(一); //延时一msdigitalWrite(buzzer,LOW); //不发声delay(一);} //延时一msfor(j=零;j<一零零;j++){ //输出另一个频率地声音digitalWrite(buzzer,HIGH); //发声delay(二); //延时二msdigitalWrite(buzzer,LOW); //不发声delay(二);} //延时二ms}六.三温湿度传感器一.DHT一一地工作原理数字温湿度传感器DHT一一是一款含有已校准数字信号输出地复合传感器。DHT一一地DATA端采用串行接口(单线双向)与微控制器行同步与通信。DHT一一地供电电压为三~五.五V。传感器上电后,要等待一s以越过不稳定状态,在此期间无需发送任何指令。电源引脚(VDD,GND)之间可增加一个一零零nF地电容,用于去耦滤波。温湿度传感器模块接口•VCC—电源引脚•GND—电源引脚•DAT—数字引脚六.三温湿度传感器二.DHT一一地类库函数(一)read()功能:获取读取温湿度数值地状态返回码。语法格式:DHT一一.read(intpin)。参数说明:pin:指定与DHT一一数据引脚连接地Arduino引脚,int型。返回值:零为没有错误发生;一为校验与错误;二为传感器反应超时。(二)DHT一一.humidity读取地湿度值,int型。(三)DHT一一.temperature读取地温度值,int型。六.三温湿度传感器三.DHT一一地应用实例#include"dht一一.h" //添加库函数dht一一DHT一一; //构造函数#defineDHT一一PIN二 //DHT一一信号接arduino二号引脚voidsetup(){Serial.begin(一一五二零零);Serial.println("DHT一一测试");Serial.print("库版本:");Serial.println(DHT一一LIB_VERSION);Serial.println();}voidloop(){Serial.println("\n");intchk=DHT一一.read(DHT一一PIN);//读取传感器值Serial.print("读取传感器:");六.三温湿度传感器三.DHT一一地应用实例switch(chk){ //根据返回状态输出caseDHTLIB_OK:Serial.println("OK");break;caseDHTLIB_ERROR_CHECKSUM:Serial.println("校验与错误");break;caseDHTLIB_ERROR_TIMEOUT:Serial.println("超时错误");break;default:Serial.println("未知错误");break;}Serial.print("湿度(%):");Serial.println((float)DHT一一.humidity,二); //显示湿度,二位小数Serial.print("温度(oC):");Serial.println((float)DHT一一.temperature,二);//显示温度,二位小数delay(二零零零);}六.四直流电机直流电机是将直流电能转换成机械能地机器。定子:直流电机运行时静止不动地部分。定子地主要作用是产生磁场。转子:运行时转动地部分,其主要作用是产生电磁转矩与感应电动势,应用:智能小车地驱动器件。六.四直流电机一.直流电机地调速原理(一)改变电机两端地电压(二)改变磁通量改变电压调速是常用办法,使用脉冲控制PWM方法,输入不同占空量地方波,改变直流电机电枢两端地电压,即可改变直流电机转速,实现调速功能,可以实现无级调速。换向方法:通过改变输入电压极实现。直流电机有额定控制电源,电压太低电机不能工作,PWM输出有最低启动值。值越大电机转动越快。六.四直流电机二.直流电机转速控制实例直流电机只有两个引出端,可通过驱动芯片与Arduino地数字接口连接地。通过PWM输出改变控制端地电压值即可控制电机地转速,两个引出端对调即可改变直流电机地转向。可以采用继电器,晶体管或多种驱动芯片对电机行驱动。constintanalogOutPin一=九;//定义输出引脚constintanalogOutPin二=一零;voidsetup(){inti;intj;}voidloop(){for(bytei=一五零;i<=二五四;++i){//一五零是最低值,不同电机启动值不同。analogWrite(analogOutPin一,i);analogWrite(analogOutPin二,零);delay(五零);}analogWrite(analogOutPin一,零);delay(二零零零);for(bytej=一五零;j<=二五四;++j){analogWrite(analogOutPin二,j);analogWrite(analogOutPin一,零);delay(五零);}analogWrite(analogOutPin二,零);delay(二零零零);}六.四直流电机六.五步电机步电机是一种将电脉冲转化为角位移地执行机构。当步电机驱动器接收到一个脉冲信号时,它就驱动步电机按设定地方向转动一个固定地角度(即步距角)。可以通过控制脉冲个数来控制角位移量,从而达到准确定位地目地,同时也可以通过控制脉冲频率来控制电机转动地速度与加速度,从而达到调速地目地。六.五步电机步电机是根据定子绕组数量与引出接线确地结构。

A与C是一组联通地,B与D是一组联通地。每组间抽头可以引出或不引出,可以组成两相四线,四相五线或四相六线步电机。一.步电机工作原理六.五步电机分为单四拍,双四拍,四相八拍三种工作模式:(一)步电机单四拍工作方式正转绕组地通电顺序:A→B→C→D→A→…。反转绕组地通电顺序:D→C→B→A→D→…。(二)步电机地双四拍工作方式正转绕组地通电顺序:AB→BC→CD→DA→AB。反转绕组地通电顺序:DA→CD→BC→AB→DA。一.步电机工作原理六.五步电机分为单四拍,双四拍,四相八拍三种工作模式:(三)步电机地四相八拍工作方式正转绕组地通电顺序:A→AB→B→BC→C→CD→D→DA→A。反转绕组地通电顺序:A→DA→D→CD→C→BC→B→AB→A。一.步电机工作原理六.五步电机二.步电机地类库函数(一)Stepper()功能:构造函数,创建一个Stepper类地对象时被执行,执行时设置步数与控制引脚。语法格式:SteppermyStepper(steps,pin一,pin二)。SteppermyStepper(steps,pin一,pin二,pin三,pin四)。参数说明:steps:电机转一圈地步数,int类型。若已知步距角,则步数=三六零/步距角;pin一,pin二,pin三,pin四:连到电机地控制引脚,int类型。返回值:无。(二)setSpeed()功能:设置电机旋转速度。语法格式:myStepper.setSpeed(rpms)。参数说明:rpms:转数/每分钟(RPMs),long型,一个正数。返回值:无。三.step()功能:设置步电机按setSpeed()设置地速度转动地步数。语法格式:myStepper.step(steps)参数说明:steps:电机转动地步数,参数为正数则正向旋传,负数则反向旋转。返回值:无。六.五步电机#include<Stepper.h> //添加库函数#defineSTEPS一零零 //电机转一圈地步数为一零零Stepperstepper=Stepper(STEPS,八,九,一零,一一);//创建实例,指定步电机地步数与//控制引脚。intprevious=零; //模拟输入变量初始化voidsetup(){stepper.setSpeed(三零); //设置步电机地速度三零转/分钟}voidloop(){intval=analogRead(零); //读取电位器地值stepper.step(val-previous); //电位器地变化值作为步电机转动步数previous=val; //更新电位器地值}六.五步电机三.步电机地应用实例实例一:单四拍模式输出高低电,给线圈通电,断电。#defineTIME五//定义每拍间隔时间(速度)voidsetup(){pinMode(八,OUTPUT);pinMode(九,OUTPUT);pinMode(一零,OUTPUT);pinMode(一一,OUTPUT);}voidloop(){intq=一零零;for(inti=零;i<q;i++){//正向旋转digitalWrite(八,一);//A相通电digitalWrite(九,零);digitalWrite(一零,零);digitalWrite(一一,零);delay(TIME);//改变TIME地大小可控制电机转速

六.五步电机digitalWrite(八,零);digitalWrite(九,一);//B相通电digitalWrite(一零,零);digitalWrite(一一,零);delay(TIME);digitalWrite(八,零);digitalWrite(九,零);digitalWrite(一零,一);//C相通电digitalWrite(一一,零);delay(TIME);digitalWrite(八,零);digitalWrite(九,零);digitalWrite(一零,零);digitalWrite(一一,一);//D相通电delay(TIME);}

六.五步电机for(inti=零;i<q;i++){//反向旋转digitalWrite(八,零);digitalWrite(九,零);digitalWrite(一零,零);digitalWrite(一一,一);//D相通电delay(TIME);digitalWrite(八,零);digitalWrite(九,零);digitalWrite(一零,一);//C相通电digitalWrite(一一,零);delay(TIME);digitalWrite(八,零);digitalWrite(九,一);//B相通电digitalWrite(一零,零);digitalWrite(一一,零);delay(TIME);digitalWrite(八,一);//A相通电digitalWrite(九,零);digitalWrite(一零,零);digitalWrite(一一,零);delay(TIME);}}六.五步电机实例二:应用类库成员函数实现功能:利用电位器控制步电机地转速。六.五步电机#include<Stepper.h> //添加库函数#defineSTEPS一零零 //电机转一圈地步数为一零零Stepperstepper=Stepper(STEPS,八,九,一零,一一);//创建实例,指定步电机地步数与//控制引脚。intprevious=零; //模拟输入变量初始化voidsetup(){stepper.setSpeed(三零); //设置步电机地速度三零转/分钟}voidloop(){intval=analogRead(零); //读取电位器地值stepper.step(val-previous); //电位器地变化值作为步电机转动步数previous=val; //更新电位器地值}六.六舵机舵机是一种位置(角度)伺服地驱动器,适用于那些需要角度不断变化并可以保持地控制系统。例如舵机是船舶上地一种大甲板机械,选型时主要考虑扭矩大小,姿态变换地俯仰,偏航,滚转运动等都是靠舵机相互配合完成地。舵机在船舶,高档遥控玩具,智能车与机器控制等方面有很多应用。标准地舵机三条引出线是:电源线(红色),地线(橙色),控制线(黄色)。舵机地控制信号是PWM信号,可利用占空比地变化,改变舵机地位置。电源线与地线用于提供舵机内部地直流电机与控制线路所需地能源。电压通常介于四~六V,一般取五V。注意,给舵机供电地电源应能提供足够地功率。控制线地输入是一个宽度可调地周期方波脉冲信号,方波脉冲信号地周期为二零ms(即频率为五零Hz)。当方波地脉冲宽度改变时,舵机转轴地角度发生改变,角度变化与脉冲宽度地变化成正比。一.舵机地工作原理六.六舵机六.六舵机一.舵机地工作原理六.六舵机二.舵机地类库函数(一).attach()功能:为舵机指定一个引脚。语法格式:servo.attach(pin)与servo.attach(pin,min,max)。参数说明:pin:指定地引脚号。min:可选参数,脉冲宽度,单位us,默认最小值为五四四,对应最小角度零°。max:可选参数,脉冲宽度,单位us,默认最大值为二四零零,对应最大角度一八零°。返回值:无。(二)write()功能:设定舵机地角度值。语法格式:servo.write(angle)。参数说明:angle:设定地角度值。范围是零-一八零°。返回值:无。(三)writeMicroseconds()功能:设定舵机地脉冲宽度,单位us。语法格式:servo.writeMicroseconds(us)。参数说明:us:设定地脉宽值。单位us,int类型。返回值:无。六.六舵机(四)read()功能:读取舵机地角度值。语法格式:servo.read()。参数说明:无。返回值:舵机地角度值,int类型。范围是零~一八零°。(五)attached()功能:检查舵机是否指定了引脚。语法格式:servo.attached()。参数说明:无。返回值:布尔类型,为true表示指定了引脚。(六)detach()功能:将舵机与指定引脚分离。语法格式:servo.detach()。参数说明:无。返回值:无。六.六舵机三.舵机地应用实例实例一没有调用类库intservopin=九; //定义舵机接口数字接口九intmyangle; //定义角度变量intpulsewidth; //定义脉宽变量intval;voidservopulse(intservopin,intmyangle){//定义一个脉冲函数pulsewidth=(myangle*一一)+五零零; //将角度转化为五零零~二四八零地脉宽值digitalWrite(servopin,HIGH); //将舵机接口电置高delayMicroseconds(pulsewidth); //延时脉宽值地微秒数digitalWrite(servopin,LOW); //将舵机接口电置低delay(二零-pulsewidth/一零零零);}voidsetup(){pinMode(servopin,OUTPUT); //设定舵机接口为输出接口Serial.begin(九六零零); //连接到串行端口,波特率为九六零零Serial.println("servu=o_seral_simpleready");}六.六舵机//将零到九地数转化为零到一八零角度voidloop(){val=Serial.read(); //读取串行端口地值if(val>'零'&&val<='九'){val=val-'零'; //将字符转化为数值变量val=val*(一八零/九); //将数字转化为角度Serial.print("movingservoto");Serial.print(val,DEC);Serial.println();for(inti=零;i<=五零;i++) //给予舵机足够地时间让它转到指定角度{servopulse(servopin,val); //引用脉冲函数}}}程序编译下载后,从串口监视器输入零-九地数字后,观察运行情况。六.六舵机三.舵机地应用实例实例二:采用Servo类库,通过电位器控制舵机。程序下载后,当改变电位器地值时,舵机转动地角度会随之改变。#include<Servo.h>//使用伺服电机类库Servomyservo;//定义伺服对象myservointpotpin=零;//模拟引脚用于连接电位器intval;//电位器地模拟值存放变量voidsetup(){myservo.attach(九);//指定九脚连到舵机}voidloop(){val=analogRead(potpin);//读取电位器地值(零~一零二三)val=map(val,零,一零二三,零,一八零);//变换为控制舵机地角度值(零~一八零)myservo.write(val); //根据换算后地值设置舵机位置delay(一五); //等待舵机到位,以防舵机抖动}六.七SD卡读写模块一.SD卡读写模块简介SD卡在日常生活与工作使用广泛,目前已经成为最为通用地数据存储卡。SD卡具有价格低廉,存储容量大,使用方便,通用与安全强等优点,将SD卡应用到嵌入式应用系统,将使系统变得更加出色。六.七SD卡读写模块一.SD卡读写模块简介SD卡支持两种总线方式:SD方式与SPI方式。其SD方式采用六线制,使用CLK,D,DAT零~DAT三行数据通信(PC等设备使用)。而SPI方式采用四线制,使用CS,CLK,DataIn与DataOut行数据通信。SD方式地数据传输速度比SPI方式要快,但采用单片机对SD卡行读写时一般都采用SPI模式。引脚编号SPI模式名称类型描述一CSI片选二DII数据输入三VSS一S电源地四VDDS电源五SCLKI时钟六VSS二S电源地七DOO或PP数据输出八X

九X

S:电源供给I:输入O:采用推拉驱动地输出;PP:采用推拉驱动地输入输出Arduino地I/O接口输出五V高电,SD卡地工作电压是三.三V,故需要通过电转换才可与Arduino连接,可以使用SD读写模块与Arduino连接。六.七SD卡读写模块二.SD卡地类库函数SD卡支持两种总线方式:SD方式与SPI方式。其SD方式采用六线制,使用CLK,D,DAT零~DAT三行数据通信(PC等设备使用)。而SPI方式采用四线制,使用CS,CLK,DataIn与DataOut行数据通信。SD方式地数据传输速度比SPI方式要快,但采用单片机对SD卡行读写时一般都采用SPI模式。SDclass封装类库SD.h定义了一个SDclass类地对象SD,通过SD可访问SDclass类地成员函数,实现对SD卡上地文件与目录地操作。(一)begin()功能:初始化SD类库与SD卡。语法格式:SD.begin()。SD.begin(cspin)。参数说明:cspin(可选):连接到SD卡地片选引脚,默认为SPI总线SS引脚。返回值:true:初始化完成;false:初始化失败。六.七SD卡读写模块二.SD卡地类库函数(二)exists()功能:测试一个文件或目录是否存储在SD卡。语法格式:SD.exists(filename)。参数说明:filename:可包含目录地文件名(用"/"分界)。返回值:若文件或目录存在返回真(true),否则返回假(false)。(三)mkdir()功能:在SD卡上创建一个目录。也可以创建任何间目录。例如SD.mkdir("a/b/c")将创建a,b与c。语法格式:SD.mkdir(filename)。参数说明:filename:创建地目录名,包括用"/"分界地子目录。返回值:若目录创建成功返回真,否则返回假。六.七SD卡读写模块二.SD卡地类库函数(四)open()功能:打开SD卡上地文件。当按写模式打开文件时,若文件不存在则创建文件(但包含文件地文件夹需要已存在)。语法格式:SD.open(filename)。SD.open(filename,mode)。参数说明:filename:打开地文件名,可包括用"/"分界地文件夹。char*类型。mode(可选参数):打开文件地模式有两种(默认是FILE_READ),byte类型。FILE_READ:按读模式打开文件,从头开始读;FILE_WRITE:按读写模式打开文件,从文件末尾开始写。返回值:被打开地文件对象(实例)。若无法打开文件,文件对象将为假,即可以用"if(f)"测试返回值。六.七SD卡读写模块二.SD卡地类库函数(四)open()功能:打开SD卡上地文件。当按写模式打开文件时,若文件不存在则创建文件(但包含文件地文件夹需要已存在)。语法格式:SD.open(filename)。SD.open(filename,mode)。参数说明:filename:打开地文件名,可包括用"/"分界地文件夹。char*类型。mode(可选参数):打开文件地模式有两种(默认是FILE_READ),byte类型。FILE_READ:按读模式打开文件,从头开始读;FILE_WRITE:按读写模式打开文件,从文件末尾开始写。返回值:被打开地文件对象(实例)。若无法打开文件,文件对象将为假,即可以用"if(f)"测试返回值。六.七SD卡读写模块二.SD卡地类库函数(五)remove()功能:从SD卡删除一个文件。语法格式:SD.remove(filename)。参数说明:filename:可包含路径地文件名(用"/"分界)。返回值:删除成功返回真。否则返回假(若文件不存在,返回值不确定)。(六)rmdir()功能:从SD卡删除一个目录,目录需要为空。语法格式:SD.rmdir(name)。参数说明:name:目录名,子目录用"/"分界。返回值:目录删除成功返回真,否则返回假(若目录不存在,返回值不确定)。六.七SD卡读写模块二.SD卡地类库函数File封装类库File类库允许对SD卡上地文件行读写。下面以对象名file为例介绍其成员函数。(一)name()功能:返回文件名。语法格式:()。参数说明:file:File类地一个实例(SD.open()地返回值)。返回值:文件名。(二)available()功能:检查文件地字节数,available()继承了流实用类。语法格式:file.available()。参数说明:file:File类地一个实例(SD.open()地返回值)。返回值:文件地字节数,int类型。六.七SD卡读写模块二.SD卡地类库函数(三)close()功能:关闭文件。语法格式:file.close()。参数说明:file:File类地一个实例(SD.open()地返回值)。返回值:无。(四)flush()功能:确保写到文件里地字节存储到SD卡上。当文件关闭时,自动完成。语法格式:file.flush()。参数说明:file:File类地一个实例(SD.open()地返回值)。返回值:无。(五)peek()功能:从文件读取下一个字节,连续调用该函数将返回同一个值。peek()继承了流实用类。语法格式:file.peek()。参数说明:file:File类地一个实例(SD.open()地返回值)。返回值:下一个字节或字符,若无则返回-一。六.七SD卡读写模块二.SD卡地类库函数(六)position()功能:获取文件地当前位置(将要读写地下一个字节地位置)。语法格式:file.position()。参数说明:file:File类地一个实例(SD.open()地返回值)。返回值:文件位置,unsignedlong类型。(七)print()功能:输出数据到以写方式打开地文件。按ASCII形式输出数字(例如:一二三按'一','二','三'输出)。语法格式:file.print(data)与file.print(data,BASE)。参数说明:file:File类地一个实例(SD.open()地返回值)。data:输出数据,char,byte,int,long,或string类型。BASE(可选参数):输出数据地制:BIN是二制;DEC是十制;OCT是八制;HEX是十六制。返回值:byte:输出地字节数,读取该数据是可选操作。六.七SD卡读写模块二.SD卡地类库函数(八)println()功能:按ASCII文本输出数据到以写方式打开地文件,后接一个回车换行。语法格式:file.println(),file.println(data)与file.print(data,BASE)。参数说明:同print()函数。返回值:同print()函数。(九)seek()功能:移动位置指针。需要在零到文件尾之间。语法格式:file.seek(pos)。参数说明:file:File类地一个实例(SD.open()地返回值)。pos:位置指针地位置,unsignedlong类型。返回值:成功返回真,否则返回假。(一零)size()功能:获取文件地字节数。语法格式:file.size()。参数说明:file:File类地一个实例(SD.open()地返回值)。返回值:文件地字节数,unsignedlong类型。六.七SD卡读写模块二.SD卡地类库函数(一一)read()功能:读取文件地一个字符或字符串,read()继承了流实用类。语法格式:file.read()与file.read(buf,len)。参数说明:file:File类地一个实例(SD.open()地返回值)。buf:字符或字节地一个数组。len:buf元素地个数。返回值:下一个字节或字符,否则返回-一。(一二)write()功能:写数据到文件。语法格式:file.write(value)与file.write(buf,len)。参数说明:file:File类地一个实例(SD.open()地返回值)。value:写入地数据,byte类型。buf:要写入文件地字节,字符或字符串(char*)。len:buf元素地个数。返回值:写入地字节数,该数据地读取是可选操作。六.七SD卡读写模块二.SD卡地类库函数(一一)read()功能:读取文件地一个字符或字符串,read()继承了流实用类。语法格式:file.read()与file.read(buf,len)。参数说明:file:File类地一个实例(SD.open()地返回值)。buf:字符或字节地一个数组。len:buf元素地个数。返回值:下一个字节或字符,否则返回-一。(一二)write()功能:写数据到文件。语法格式:file.write(value)与file.write(buf,len)。参数说明:file:File类地一个实例(SD.open()地返回值)。value:写入地数据,byte类型。buf:要写入文件地字节,字符或字符串(char*)。len:buf元素地个数。返回值:写入地字节数,该数据地读取是可选操作。六.七SD卡读写模块二.SD卡地类库函数(一三)isDirectory()功能:目录(或文件夹)是特殊地文件,该函数检查当前地文件是否为一个目录。语法格式:file.isDirectory()。参数说明:file:File类地一个实例(SD.open()地返回值)。返回值:当前地文件是目录返回真,否则返回假。(一四)openNextFile()功能:打开某个目录下地下一个文件或文件夹。语法格式:file.openNextFile()。参数说明:file:File类地一个实例(SD.open()地返回值)。返回值:char:下一个文件或文件夹(一五)rewindDirectory()功能:使目录指针指向目录地第一个文件。一般与openNextFile()一起使用。语法格式:file.rewindDirectory()。参数说明:file:File类地一个实例(SD.open()地返回值)。返回值:无。。六.八RFID读卡模块一.RFID读卡模块简介射频识别即RFID(RadioFrequencyIdentification)技术,又称无线射频识别,是一种短距离通信识别技术,可通过无线电讯号识别特定目地并读写有关数据,而无需识别系统与特定目地之间建立机械或光学接触。常用地有低频(一二五k~一三四.二K),高频(一三.五六MHz),超高频与微波等技术。RFID读写器有移动式与固定式两种类型。目前RFID技术已广泛应用于图书馆,门禁,地铁,公与食品安全溯源等系统。一套完整地RFID系统由阅读器(Reader),电子标签(TAG)也就是所谓地应答器(Transponder)及应用软件三个部分组成。六.八RFID读卡模块二.RFID地类库函数RFID是第三方类库,采用SPI通信接口,其定义了一个构造函数与多个成员函数。(一)RFID()功能:构造函数,创建一个RFID类地对象时被执行,执行时设置读卡器使能SS(模块SDA)与RST引脚。语法格式:RFIDrfid(pin一,pin二)。参数说明:pin一:与读卡器使能引脚(SS)连接地Arduino引脚编号。pin二:与读卡器复位(RST)引脚连接地Arduino引脚编号。例如:RFIDrfid(四九,四七);创建了一个对象rfid,SS(模块SDA)引脚与Arduino地四九脚连接,RST与Arduino地四七脚连接。下面以该对象为例描述其它类成员函数地语法格式。(二)isCard()功能:寻卡。语法格式:rfid.isCard()。参数说明:无。返回值:成功返回true;失败返回false。六.八RFID读卡模块二.RFID地类库函数(三)eadCardSerial()功能:返回卡地序列号:四字节。语法格式:rfid.readCardSerial()。参数说明:无。返回值:成功返回true;失败返回false。(四)init()功能:初始化RC五二二。语法格式:rfid.init()。参数说明:无。返值:无。(五)auth()功能:验证卡片密码。语法格式:rfid.auth(unsignedcharauthMode,unsignedcharBlockAddr,unsignedchar*Sectorkey,unsignedchar*serNum)。参数说明:authMode:密码验证模式。零x六零为验证A密钥;零x六一为验证B密钥。BlockAddr:块地址。Sectorkey:扇区密码。serNum:卡片序列号,四字节。返回值:成功返回MI_OK(即零)。六.八RFID读卡模块二.RFID地类库函数(六)read()功能:读块数据。语法格式:rfid.read(unsignedcharblockAddr,unsignedchar*recvData)。参数说明:blockAddr:块地址;recvData:读出地块数据。返回值:成功返回MI_OK(即零)。(七)write()功能:写块数据。语法格式:rfid.write(unsignedcharblockAddr,unsignedchar*writeData)。参数说明:blockAddr:块地址。writeData:将一六字节数据写入块。返回值:成功返回MI_OK(即零)。六.八RFID读卡模块二.RFID地类库函数(八)selectTag()功能:选卡,读取卡存储器容量。语法格式:rfid.selectTag(unsignedchar*serNum)。参数说明:serNum:传入卡序列号。返回值:成功返回卡容量。(九)Halt()功能:命令卡片入休眠状态。语法格式:rfid.Halt()。参数说明:无。返回值:无。六.八RFID读卡模块三.RFID读卡模块地应用实例RC五二二引脚SSSCKMOSIMISOGNDRST三.三VArduino引脚四九五二五一五零GND四七三.三V引脚功能使能时钟数据入数据出电源地复位电源RC五二二模块与Arduino板连线实例:读取IC卡地ID号。#include<SPI.h> //添加SPI库函数#include<RFID.h> //添加RFID库函数RFIDrfid(四九,四七); //四九:读卡器地SDA引脚,四七:读卡器地RST引脚voidsetup() //初始化{Serial.begin(九六零零);SPI.begin();rfid.init();}六.八RFID读卡模块三.RFID读卡模块地应用实例voidloop(){if(rfid.isCard()){ //寻找卡Serial.println("Findthecard!");if(rfid.readCardSerial()){ //读取卡地序列号,送串口监视器显示Serial.print("Thecard'snumberis:");Serial.print(rfid.serNum[零],HEX);Serial.print(rfid.serNum[一],HEX);Serial.print(rfid.serNum[二],HEX);Serial.print(rfid.serNum[三],HEX);Serial.print(rfid.serNum[四],HEX);Serial.println("");}//选卡,可返回卡地容量,锁定卡片,防止多次读写,去掉本行将连续读卡rfid.selectTag(rfid.serNum);}rfid.halt(); //使卡休眠}程序编译下载运行后,在串口监视器上可显示读取地RFID地卡号。六.九日历时钟一.日历时钟模块PCF八五六三简介PCF八五六三是PHILIPS公司推出地一款工业级地多功能时钟/日历芯片,其内含I二C总线接口功能且具有极低功耗。PCF八五六三地多种报警功能,定时器功能,时钟输出功能以及断输出功能能完成各种复杂地定时服务,甚至可为单片机提供看门狗功能,内部时钟电路,内部振荡电路与内部低电压检测电路等。六.九日历时钟二.PCF八五六三地应用实例#include<Wire.h>#definePCF八五六三_Address零x五一//七位从地址:B一零一零零零一,不包括R/Wbytetime[]={三零,二三,二零,一,四,一零,二零};//初始值:秒,分,小时,日,星期,月,年bytevalue[一六];voidsetup(){Wire.begin();//加入I二C总线Serial.begin(九六零零);//串口波特率初始化PCF八五六三_Init(time);//日历时钟初始化}六.九日历时钟二.PCF八五六三地应用实例voidloop(){inti=零;byteval=零;PCF八五六三_GetTime(time);//读取日历,时钟for(i=零;i<七;i++){//监视器显示日历,时钟switch(i){case零:Serial.print("Second");break;case一:Serial.print("Minute");break;case二:Serial.print("Hour");break;case三:Serial.print("Day");break;case四:Serial.print("Week");break;case五:Serial.print("Month");break;case六:Serial.print("Year");break;}Serial.print("\t");Serial.println(time[i],DEC);}Serial.println("");delay(八零零零);}六.九日历时钟二.PCF八五六三地应用实例voidPCF八五六三_WriteReg(byteregaddress,bytevalue)//设置PCF八五六三某个寄存器地值{Wire.beginTransmission(PCF八五六三_Address);Wire.write(regaddress);Wire.write(value);Wire.endTransmission();}bytePCF八五六三_ReadReg(byteregaddress){//读取PCF八五六三某个寄存器地值bytevalue;Wire.beginTransmission(PCF八五六三_Address);Wire.write(regaddress);Wire.endTransmission();Wire.requestFrom(PCF八五六三_Address,一);value=Wire.read();Wire.endTransmission();returnvalue;}六.九日历时钟二.PCF八五六三地应用实例voidPCF八五六三_ReadAllReg(bytebuf[])//读取PCF八五六三所有寄存器地值{chari=一;//Masterreadsslaveimmediatelyafterfirstbyte(READmode)//so,readbeginsfromaddress零x零一,notaddress零x零.Wire.requestFrom(PCF八五六三_Address,一六);while(Wire.available()){buf[(i++)%一六]=Wire.read();}Wire.endTransmission();}//初始化实时时钟,同时设置时间地值,time[]={秒,分,时,日,周,月,年}voidPCF八五六三_Init(bytetime[]){PCF八五六三_Stop();PCF八五六三_SetTime(time);PCF八五六三_Start();}六.九日历时钟二.PCF八五六三地应用实例//读取时间值,其time[]={秒,分,时,日,周,月,年}voidPCF八五六三_GetTime(bytetime[]){bytei=零;bytemaskmode[]={零x七F,零x七F,零x三F,零x三F,零x七,零x一F,零xFF};Wire.beginTransmission(PCF八五六三_Address);Wire.write(零x二);//从第二个寄存器地址开始Wire.endTransmission();Wire.requestFrom(PCF八五六三_Address,七);//秒~年寄存器(零x二-零x八)while(Wire.available()){time[i++]=Wire.read();}Wire.endTransmission();for(i=零;i<七;i++){time[i]=BCD二DEC(time[i]&maskmode[i]);}}六.九日历时钟二.PCF八五六三地应用实例//设置日历,时间值,其time[]={秒,分,时,日,周,月,年}voidPCF八五六三_SetTime(bytetime[]){bytei=零;bytemaskmode[]={零x七F,零x七F,零x三F,零x三F,零x七,零x一F,零xFF};for(i=零;i<七;i++){time[i]=DEC二BCD(time[i])&maskmode[i];}Wire.endTransmission();Wire.beginTransmission(PCF八五六三_Address);Wire.write(零x二);//从第二个寄存器地址写for(i=零;i<七;i++){Wire.write(time[i]);}Wire.endTransmission();}六.九日历时钟二.PCF八五六三地应用实例voidPCF八五六三_Start(void){//启动实时时钟工作PCF八五六三_WriteReg(零x零,零x零);}voidPCF八五六三_Stop(void){//停止实时时钟工作PCF八五六三_WriteReg(零x零,零x二零);}byteBCD二DEC(bytebcd){//BCD转十制return(bcd>>四)*一零+(bcd&零xF);}byteDEC二BCD(bytedec){//十制转BCDreturn(dec/一零)<<四|(dec%一零);}上面代码编译下载成功后,打开串口监视器,可看到当前读取地时钟值。六.一零三色LED灯一.三色LED简介三色LED(RGBLED,也称为全彩LED)与普通单色LED地不同处在于,通过控制其红,绿,蓝三种颜色地组合,可以发出其它颜色地光。根据红,绿与蓝三色混色原理,利用analogWrite函数,可实现多种渐变地颜色,该方法可用于景观灯地实现。六.一零三色LED灯二.三色LED地应用实例为增大LED灯地亮度,需加驱动电路,阴极三色灯采用三极管八零五零行驱动。六.一零三色LED灯二.三色LED地应用实例为增大LED灯地亮度,需加驱动电路,阴极三色灯采用三极管八零五零行驱动。六.一零三色LED灯二.三色LED地应用实例constintred =一一;constintgreen =一二;constintblue =一三;voidsetup(){pinMode(red,OUTPUT);pinMode(green,OUTPUT);pinMode(blue,OUTPUT);}voidloop(){//红绿蓝三色混色(白色)从最暗到最亮渐变for(intbrightness=零;brightness<二五五;brightness++){analogWrite(red,brightness);analogWrite(green,brightness);analogWrite(blue,brightness);delay(一零);}六.一零三色LED灯二.三色LED地应用实例//红绿蓝三色混色(白色)从最亮到最暗渐变for(intbrightness=二五五;brightness>=零;brightness--){analogWrite(red,brightness);analogWrite(green,brightness);analogWrite(blue,brightness);delay(一零);}//红色从最暗到最亮渐变for(intbrightness=零;brightness<二五五;brightness++){analogWrite(red,brightness);delay(一零);}//红色从最亮到最暗渐变for(intbrightness=二五五;brightness>=零;brightness--){analogWrite(red,brightness);delay(一零);}六.一零三色LED灯二.三色LED地应用实例//绿色从最暗到最亮渐变for(intbrightness=零;brightness<二五五;brightness++){analogWrite(green,brightness);delay(一零);}//绿色从最亮到最暗渐变for(intbrightness=二五五;brightness>=零;brightness--){analogWrite(green,brightness);delay(一零);}

六.一零三色LED灯二.三色LED地应用实例//蓝色从最暗到最亮渐变for(intbrightness=零;brightness<二五五;brightness++){analogWrite(blu

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论