收藏 分销(赏)

Arduino-编程.ppt

上传人:w****g 文档编号:13311065 上传时间:2026-02-27 格式:PPT 页数:94 大小:17.32MB 下载积分:8 金币
下载 相关 举报
Arduino-编程.ppt_第1页
第1页 / 共94页
Arduino-编程.ppt_第2页
第2页 / 共94页


点击查看更多>>
资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,第六级,第七级,第八级,第九级,*,*,Arduino,编程导论,章平,2017/10/30,Arduino,三个重点,集成开发环境,Arduino,USB,连接线,单芯线,面包板,电子材料包,准备材料,下载解压,arduino-x.x.x.zip,将,Arduino,接上方头,USB,线,另一头接电脑,接上之后进入安装驱动环节,Arduino,使用,选择驱动程序安装目录,一般选择文件夹,.arduino-1.0.6drivers,。,安装驱动,击我的电脑,选管理,再选设备管理器,查看串口号,集成开发环境,Arduino,程序开发工具介绍,Arduino,程序开发流程,实验所需材料:,Arduino UNO,连接示意图,实验:板载,LED,灯闪烁(,Blink,),连接在,13,脚的板载,LED,灯,代码,void setup(),pinMode(13,OUTPUT);,void loop(),digitalWrite(13,HIGH),;,delay(1000);,digitalWrite(13,LOW);,delay(1000);,Arduino,语言使用,C/C+,语言编写程序,Arduino,程序都包含配置和循环两个部分,1,Arduino,语言及程序结构,Arduino,语言是指,Arduino,核心库文件提供的各种应用程序编程接口(,Application Programming Interface,,,简称,API,),的集合。,例如,使用,AVR,单片机的,Arduino,核心库是对,AVRLibc,(,基于,GCC,的,AVR,支持库)的二次封装。,Arduino,使用,C/C+,语言编写程序,早期的,Arduino,核心库使用,C,语言编写;,后来引进了面向对象的思想,采用,C,与,C,混合编程。,Arduino,语言,程序中的语句更容易理解,避免繁杂的寄存器配置,优点,/,*,AVR,单片机开发中,将一个,I/O,口设置为输出高电平*,/,DDRB,(,1,5,);,/portB,第,5,位设为输出,PORTB,(,1,5,);,/portB,第,5,位设为高电平,/,*在,Arduino,中,将,13,口设置为输出高电平*,/,pinMode,(,13,,,OUTPUT,);,/13,脚设为输出,digitalWrite,(,13,,,HIGH,);,/13,脚设为高电平,Arduino,程序结构,void setup,(),/,在这里填写,setup,()函数代码,它只会运行一次,void loop,(),/,在这里填写,loop,()函数代码,它会不断重复运行,setup(),中存放只运行一次的程序,在,Arduino,控制器通电或者复位后执行;,通常包括一些初始化设置,如,配置,I/O,口状态,如,pinMode,(,13,,,OUTPUT,);,/13,脚设为输出,digitalWrite,(,13,,,HIGH,);,/13,脚设为高电平,初始化串口,Serial.begin(9600);/,串口波特率设为,9600,setup(),loop(),中的程序会不断地重复运行(死循环),在,setup(),函数执行完毕后执行;,通常包含程序的主要功能,如,驱动各种模块,采集数据,loop(),2 C/C,语言基础,常量:,#define LED pin13,变量,整型:,int i=90,浮点型:,float l=9.8,字符型:,char col=C,布尔型:,boolean running=false,数据类型,算术运算符:,+,、,-,、*、,/,、,=,、,%,比较运算符:,=,、!,=,、,=,逻辑运算符:,&,、,|,、!,复合运算符:,+,、,-,、,+=,,,-=,通过运算符将运算对象连接起来的式子成为表达式:,5+3,、,a-b,、,19,等,运算符和表达式,数组由一组具有相同数据类型的数据构成,如,int a5,int a5=1,2,3,4,5,int a5;a0=1;a1=2;a2=3;a3=4;a4=5;,字符串既可以通过字符数组方式定义,也可以用,String,类型定义,char a5=h,e,l,l,o,String abc=“Arduino”,数组和字符串,顺序结构,选择结构,if,switchcase,循环结构,while,dowhile,for,循环控制语句,break,continue,顺序、选择和循环结构,delay(),此函数为毫秒级延时。参数的数据类型为,unsigned long,。,delayMicroseconds(),此函数为微秒级延时。参数的数据类型为,unsigned int,。,延时函数,CPU,和外部通信有两种,并行通信:数据的各位同时传送,串行通信:数据一位一位顺序传送,串口通信,并行通信,串行通信,串口通信优点,串行通信,并行通信,通信距离,远,近,抗干扰能力,高,低,传输速度,慢,快,成本,低,高,在,Arduino,控制器上,串口都是位于,0,(,RX,)和,1,(,TX,)的两个引脚;,Arduino,的,USB,口通过一个转换芯片(通常为,ATmega16u2,)与这两个串口引脚连接。,串口通信是,Arduino,最常用的方式,初始化,Serial.begin,(,speed,);,其中参数,speed,指串口通信波特率,如,300,、,600,、,1200,、,2400,、,4800,、,9600,、,14400,、,19200,、,28800,、,38400,、,57600,、,115200,。,发送信息,Serial.print,(,val,);,其中参数,val,是要输出的数据。,Serial.println,(,val,);,在输出完指定数据后,再输出一组回车换行符。,接收信息,Serial.available,()函数检测是否有信息,Serial.read,()函数读取信息,串口函数,实验:串口输出实验,int counter,0,;,/,计数器,void setup,(),Serial.begin,(,9600,);,void loop,(),counter,counter,1,;,Serial.print,(,counter,);,Serial.print,(,:,),;,Serial.println,(,Hello World,);,delay,(,1000,);,实验:串口输入,void setup,(),Serial.begin,(,9600,);,/,初始化串口,void loop,(),if,(,Serial.available,(),0,),char ch,Serial.read,();,Serial.print,(,ch,);,注意:,Serial.available,(),0,条件必不可少,当缓冲区中没有可读数据时,,Serial.read,()函数会返回,int,型值,1,,从而形成乱码。,实验所需材料:,Arduino UNO,实验现象:程序中使用,Serial.read,()语句接收数据并进行判断,当接收到的数据为“,a”,时,便点亮,LED,,并输出提示;当为“,b”,时,便关闭,LED,,并输出提示。,实验:串口控制开关灯,void setup,(),Serial.begin,(,9600,);,pinMode,(,13,,,OUTPUT,);,void loop,(),if,(,Serial.available,(),0,),char ch,Serial.read,();,Serial.print,(,ch,);,if,(,ch,“,a,”,),/,开灯,digitalWrite,(,13,,,HIGH,);,Serial.println,(,turn on,);,else if,(,ch,b,),/,关灯,digitalWrite,(,13,,,LOW,);,Serial.println,(,turn off,);,使用运行时间函数,millis,()或,micros,()能够获取,Arduino,从通电(或复位)后到现在的时间,用法是:,millis,();,该函数返回系统运行时间,单位为毫秒。返回值是,unsigned long,类型,大概,50,天会溢出一次。,micros,();,该函数返回系统运行时间,单位为微秒。返回值是,unsigned long,类型,约,70,分钟会溢出一次。,运行时间函数,实验:串口输出系统运行时间,/,Get the run time,/,unsigned long time1,;,unsigned long time2,;,void setup,(),Serial.begin,(,9600,);,void loop,(),time1,millis,();,time2,micros,();,/,输出系统运行时间,Serial.print,(,time1,);,Serial.println,(,ms,);,Serial.print,(,time2,);,Serial.println,(,us,);,/,等待,1,秒开始下一次,loop,循环,delay,(,1000,);,面包板,电阻,二,/,三节管,3,电子元件与扩展模块,面包板,橫向相通、中間不通,面包板连接示意,面包板连接示意,电阻是对电流起阻碍作用的元件。,电阻的作用有,控制某一部份电路的电压和电流比例。,分配电路不同部份的电压比例。,限制流经某一段电路的电流。,释放热能。发热线便是根据电阻的这个特性而产生出来的。,通过电阻自身的一些特性,采集环境信息。比如根据阻值随温度变化特性,来采集环境温度。,电阻,阻值读取,电阻值练习,电阻值练习答案,8,3,6,4,0,0,3,1,x10,3,x10,-1,x10,3,x10,0,5,1,7,2,6,2,9,0,3,8,0,5,x10,-2,x10,2,x10,8,x10,-1,二极管是单向传导电流的元件;,发光二极管是可以发光的二极管;,三极管是能够起放大、振荡或者开关等作用的元件;,二极管、发光二极管(,LED,)、三极管,LED,名称:,LED,类型:模拟组件,控制:输入电压,/,电流将其转为光源信号,极性:有正负之分,长为正、短为负,此组件将电能转换成光能,具有极性,只有连接方向正确才回亮,需要,1.5V,电压,使用要配合电阻,(,在,Arduino,的板子上有内建一个在,pin 13),通常情况下,长脚为正,短脚接地。如果从上面往下看,通常有一面为平面,表示负极,LED,由计算机控制,LED,void setup(),Serial.begin(9600);Serial.print(“Ready”);,pinMode(3,OUTPUT);,void loop(),if(Serial.available(),char ch=Serial.read();/,接收由计算机端传来的字符,Serial.print(ch);,switch(ch),case t:,digitalWrite(3,HIGH);,/,将,PIN3,输出高电位,delay(1000);,break;,case r:,digitalWrite(3,LOW);,/,将,PIN3,输出低电位,delay(1000);,break;,3,G,(+),(-),传感器扩展板是最常用的,Arduino,外围硬件之一;,和面包板相比,使用传感器扩展板则只需要通过连接线,把各种模块接插到扩展板上即可。,使用传感器扩展板可以更快速地搭建出自己的项目。,4,传感器扩展板,扩展板的构成,扩展板的使用,数字信号,模拟信号,5,输入与输出,数字信号与模拟信号差别,模数转换,噪声影响,数字信号是以,0,、,1,表示的不连续信号,也就是以二进制形式表示的信号。在,Arduino,中数字信号用高低电平来表示,高电平为数字信号,1,,低电平为数字信号,0,。,Arduino,上每一个带有数字编号的引脚都是数字引脚,包括写有,“,A,”,编号的模拟输入引脚。使用这些引脚可以完成输入,/,输出数字信号的功能。,数字,I/O,在使用输入或输出功能前,需要先通过,pinMode,(,pin,,,mode,);,配置引脚的模式为输入模式或输出模式,其中,pin,为指定配置的引脚编号,,mode,可选,INPUT,(输入模式)、,OUTPUT,(输出模式)或者,INPUT_PULLUP,(输入上拉模式),然后通过,digitalWrite,(,pin,,,value,),输出高电平或低电平,其中,value,可选,HIGH,(输出高电平,一般,5V,)或者,LOW,(输出低电平),或者通过,digitalRead,(,pin,),读取外部输入的数字信号,数字,I/O,的使用,实验:板载,LED,闪烁(,Blink,),/*,Blink,Turns on an LED on for one second,then off for one second,repeatedly.,*/,int led=13,;,/the setup function runs once when you press reset or power the board,void setup(),pinMode(,led,OUTPUT);,/initialize digital pin 13 as an output.,/the loop function runs over and over again forever,void loop(),digitalWrite(,led,HIGH);,/turn the LED on(HIGH is the voltage level),delay(1000);,/wait for a second,digitalWrite(,led,LOW);,/turn the LED off by making the voltage LOW,delay(1000);,/wait for a second,实验材料:,Arduino UNO,、面包板、,6,个,LED,、,6,个,220,电阻。,连接示意图,实验:流水灯,电路原理图,程序代码,/,流水灯效果,/,void setup,(),/,初始化,I/O,口,for,(,int i,2,;,i,8,;,i,),pinMode,(,i,,,OUTPUT,);,void loop,(),/,从引脚,2,到引脚,7,,逐个点亮,LED,,等待,1,秒再熄灭,LED,for,(,int i,2,;,i,7,;,i,),digitalWrite,(,i,,,HIGH,);,delay,(,1000,);,digitalWrite,(,i,,,LOW,);,/,从引脚,7,到引脚,2,,逐个点亮,LED,,等待,1,秒再熄灭,LED,for,(,int i,7,;,i,2,;,i,),digitalWrite,(,i,,,HIGH,);,delay,(,1000,);,digitalWrite,(,i,,,LOW,);,实验材料:,Arduino UNO,、面包板、,1,个,LED,、,1,个按键、,1,个,220,电阻、,1,个,10 k,电阻。,连接示意图与电路原理图,实验:按键控制,LED,实验,开关,簡介,電路符號,名称:按扭开关,类型:模拟组件,控制:改变电压电流之输出(,on/off,),极性:无正负之分,但有接脚之别(,in/out),一定要记得使用开关时,在线路中一定要加上电阻,防止短路,。,开关使用,下拉,电阻,降低,输出到,GND(0 volts),按下开关输入,5,V,按下为,HIGH,放开为,LOW,上拉,电阻连接到,5,V,的输入,按下开关输出到,GND(0 volts),按下为,LOW,放开为,HIGH,上拉与下拉,上(下)拉的目的的避免信号脚悬空,产生异常值。,/,通过,2,号引脚连接的按键来控制,13,号引脚连接的,LED,/,const int buttonPin,2,;,/,连接按键的引脚,const int ledPin,13/,连接,LED,的引脚,int buttonState,0,;,/,存储按键状态的变量,void setup,(),/,初始化,LED,引脚为输出状态,pinMode,(,ledPin,,,OUTPUT,);,/,初始化按键引脚为输入状态,pinMode,(,buttonPin,,,INPUT,);,程序代码,void loop,(),/,读取按键状态并存储在变量中,buttonState,digitalRead,(,buttonPin,);,/,检查按键是否被按下,/,如果按键被按下,则,buttonState,应该为高电平,if,(,buttonState,HIGH,),/,点亮,LED,digitalWrite,(,ledPin,,,HIGH,);,else,/,熄灭,LED,digitalWrite,(,ledPin,,,LOW,);,使用内部上拉电阻,修改实验电路如右,同时将原来的程序,setup,()部分中的,pinMode,(,buttonPin,,,INPUT,);,修改为,pinMode,(,buttonPin,,,INPUT PULLUP,);,这样就可使能该引脚上的内部上拉电阻,等效于在该引脚与,VCC,之间连接了一个阻值为,20k,50 k,的电阻。,,实现一个新的控制效果,即按一下按键点亮,LED,,再按一下按键熄灭,LED,。,修改控制效果,int buttonPin,2,;,int ledPin,13,;,boolean ledState,false,void setup,(),/,初始化,I/O,口,pinMode,(,buttonPin,,,INPUT PULLUP,);,pinMode,(,ledPin,,,OUTPUT,);,void loop,(),while,(,digitalRead,(,buttonPin,),HIGH,),/,当按键按下时,点亮或熄灭,LED,if,(,ledState,true,),digitalWrite,(,ledPin,,,LOW,);,ledState,!,ledState,;,else,digitalWrite,(,ledPin,,,HIGH,);,ledState,!,ledState,;,delay,(,500,);,实验材料:,Arduino UNO,、,1,个继电器、,1,个人体红外传感器、,1,个,LED,灯,连接示意图,项目:人体感应灯,继电器,ab,之间是线圈,只要在,ab,两端加上一定的电压,线圈中就会流过一定的电流,从而产生电磁效应。,S,端上的衔铁开关也会在电磁力吸引的作用下克服弹簧的拉力,吸向,D,端所连接的铁芯,从而导通,S,端和,D,端。当线圈断电后,电磁的吸力也随之消失,衔铁开关就会在弹簧的反作用力作用下返回原来的位置,将,S,端与,C,端导通,人传体热释电红外传感器是一种对人体辐射出的红外线敏感的感器。当无人在其检测范围内运动时,模块保持输出低电平;当有人在其检测范围内运动时,模块输出一个高电平脉冲信号。,人体热释电红外传感器,程序代码,/,人体感应灯,/,int PIRpin,2,;,int RELAYpin,3,;,void setup,(),pinMode,(,PIRpin,,,INPUT,);,pinMode,(,RELAYpin,,,OUTPUT,);,void loop,(),/,等待传感器检测到人,while,(!,digitalRead,(,PIRpin,),/,将灯打开,10,秒,然后关闭,digitalWrite,(,RELAYpin,,,HIGH,);,delay,(,10000,);,digitalWrite,(,RELAYpin,,,LOW,);,生活中接触到的大多数信号都是模拟信号,如声音和温度的变化等。,Arduino,中,常用,05V,的电压来表示模拟信号。,Arduino,控制器中,编号前带有“,A”,的引脚是模拟输入引脚。,Arduino,可以读取这些引脚上输入的模拟值,即读取引脚上输入的电压大小。,模拟,I/O,模拟输入引脚是带有,ADC,(,AnalogtoDigital Converter,,模,/,数转换器)功能的引脚。它可以将外部输入的模拟信号转换为芯片运算时可以识别的数字信号,从而实现读入模拟值的功能。,使用,AVR,芯片作主控器的,Arduino,模拟输入功能有,10,位精度,即可以将,05 V,的电压转换为,01023,的整数形式表示。,模拟输入功能需要使用,analogRead,(,pin,);,其中参数,pin,是要读取模拟值的引脚,被指定的引脚必 须是模拟输入引脚,如,analogRead,(,A0,)即是读取,A0,引脚上的模拟值。,模拟输入引脚,模拟输出功能使用,analogWrite,()函数来实现,但该该函数并不是输出真正意义上的模拟值,而是以脉冲宽度调制(,Pulse Width Modulation,,,PWM,)种特殊的方式来达到输出模拟值的效果,这种方式叫做,PWM,脉冲宽度调制(,Pulse Width Modulation,)。,analogWrite,(,pin,,,value,)参数,value,是,PWM,的脉冲宽度,范围为,0,255,。,模拟输出功能,大多数,Arduino,控制器的,PWM,引脚都会用“”标识;,PWM,引脚,实验所需材料:,Arduino UNO,、面包板、,1,个,LED,、,1,个,220,电阻。,连接示意图,实验:呼吸灯,电路原理图,程序代码,/,通过,analogWrite,()函数实现呼吸灯效果,/,int ledPin,9,;,/LED,连接在,9,号引脚上,void setup,(),/,在,analogWrite,()和,analogRead,()函数内部已经完成了引脚的初始化,因此就不用在,setup,()函数中进行初始化操作了。,void loop,(),/,从暗到亮,以每次亮度值加,5,的形式逐渐亮起来,for,(,int fadeValue,0,;,fadeValue,255,;,fadeValue,5,),analogWrite,(,ledPin,,,fadeValue,);,/,输出,PWM,delay,(,30,);,/,等待,30 ms,,以便观察到渐变效果,/,从亮到暗,以每次亮度值减,5,的形式逐渐暗下来,for,(,int fadeValue,255,;,fadeValue,0,;,fadeValue,5,),analogWrite,(,ledPin,,,fadeValue,);,/,输出,PWM,delay,(,30,);,/,等待,30 ms,,以便观察到渐变效果,实验材料:,Arduino UNO,、面包板、,1,个,LED,、,1,个,220,电阻、,1,个,10 k,电位器。,连接示意图,实验:电位器调节呼吸灯,电位器是一个可调电阻,通过旋转旋钮改变,2,号引脚的位置,从而改变,2,号引脚到两端的阻值。,实验中需要将电位器的,1,、,3,号引脚分别接到,5 V,和,GND,上,再通过模拟输入引脚读取电位器,2,号引脚输出的电压(,05V,)。,电位器,电路原理图,程序代码,int ledPin,9,;,/9,号引脚控制,LED,int pot,A0,;,/A0,引脚读取电位器输出电压,void setup,(),void loop,(),/LED,逐渐变亮,for,(,int fadeValue,0,;,fadeValue,255,;,fadeValue,5,),analogWrite,(,ledPin,,,fadeValue,);,/,读取电位器输出电压,除以,5,是为了缩短延时时间,int time,analogRead,(,pot,),/5,;,delay,(,time,);,/,将,time,用于延时,/LED,逐渐变暗,for,(,int fadeValue,255,;,fadeValue,0,;,fadeValue,5,),analogWrite,(,ledPin,,,fadeValue,);,delay,(,analogRead,(,pot,),/5,);,/,读取电位器输出电压,并用于延时,实验所需材料:,Arduino UNO,、面包板、,1,个光敏电阻、,1,个,1 k,电阻。,连接示意图,实验:光敏电阻检测环境光亮度,光敏电阻是一种电阻值随照射光强度增加而下降的电阻。,光敏电阻的使用方法很简单,只需将其作为一个电阻接入电路中,然后使用,analogRead,()函数读取电压即可。由于光敏电阻的阻值一般较大,直接接入电路后观察到的电压变化并不明显,所以这里将光敏电阻与一个普通电阻串联(图,2-42,),再根据串联分压的方法来读取光敏电阻上的电压。,光敏电阻,电路原理图,程序代码,/,光敏传感器,/,void setup,(),Serial.begin,(,9600,);,/,初始化串口,void loop,(),/,读出当前光线强度,并输出到串口显示,int sensorValue,analogRead,(,A0,);,Serial.println,(,sensorValue,);,delay,(,1000,);,实验所需材料:,Arduino UNO,、面包板、,1,个,LM35,温度传感器。,连接示意图,项目:电子温度计,LM35,(图,2-46,)是一个常用的温度检测传感器,其输出电压线性地与温度成正比,因此根据电压便可计算出当前环境的温度。,LM35DZ,参数,LM35,模拟温度传感器,电路原理图,程序代码,/,LM35,温度传感器,/,int LM35,A0,;,void setup,(),/,初始化串口通信,Serial.begin,(,9600,);,void loop,(),/,读取传感器模拟值,并计算出当前温度,float temp,(,5.0,analogRead,(,LM35,),100.0,),/1024,;,/,将温度输出至串口显示,Serial.print,(,temperature,);,Serial.print,(,temp,);,Serial.println,(,C,);,delay,(,1000,);,类似于人体热释电红外传感器和,LM35,温度传感器的器件还有很多,根据其输出信号的形式可以分为数字传感器和模拟传感器。这些传感器的使用都大同小异,只需知道它是输出数字值还是模拟值,然后对应使用,digitalRead,()或者,analogRead,()函数读取即可。,传感器使用的一般方法,五向倾斜模块内部由一个金属球和,4,个触点组成,用来检测倾斜方向。相较于陀螺仪,它的成本更低,更简单易用,可以检测,4,个倾斜方向和水平位置共,5,种状态,因此可以满足很多互动场合的要求。,五向倾斜模块,触摸模块是通过电容触摸感应原理来检测人体接触的模块,当有人触摸时输出高电平,当无人触摸时输出低电平。,触摸模块,模拟声音传感器可以检测周围环境声音的大小。,Arduino,可以通过模拟输入接口对其输出信号进行采集。使用它可以制作声控开关等有趣的互动作品。,模拟声音传感器,MQx,系列气体传感器所使用的气敏材料是在清洁空气中电导率较低的二氧化锡(,SnO2,)。当传感器所处环境中存在可燃气体时,传感器的电导率随空气中可燃气体浓度的增加而增大。使用简单的电路就可将电导率的变化转换为与该气体浓度相对应的输出信号。,MQx,系列气体传感器,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服