资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,智能垃圾分类机器人,arduino,基础,2,01,A,什么是,Arduino,?,02,B,Arduino,能做什么?,03,C,Arduino,怎么用?,一、,Arduino,的由来,Arduino,创始人,Massimo Banzi之前是意大利Ivrea一家高科技设计学校的老师。他的学生们经常抱怨找不到便宜好用的微控制器。,2005年冬天,Massimo Banzi跟David Cuartielles讨论了这个问题。David Cuartielles是一个西班牙籍晶片工程师,当时在这所学校做访问学者。,两人决定设计自己的电路板,并引入了Banzi的学生David Mellis为电路板设计编程语言。,两天以后,David Mellis就写出了程式码。又过了三天,电路板就完工了。这块电路板被命名为Arduino。,二、什么是,Arduino,?,Arduino,是一种开源的电子开发平台,该平台最初主要基于,AVR,单片机的微控制器和相应的开发软件,目前在国内正受到电子发烧友的广泛关注。,自从,2005,年,Arduino,腾空出世以来,其硬件和开发环境一直进行着更新迭代。,几乎任何人,即便不懂电脑编程,利用这个开发板也能用,Arduino,做出炫酷有趣的东西,比如对感测器探测做出一些回应、闪烁灯光、控制马达等。,三、,Arduino,能做什么?,最简单应用:,通过,Arduino,开发板引脚输出高电平点亮一盏,LED,灯。,三、,Arduino,能做什么?,利用,Arduino,板作为中央控制器实现家居智能化,语音口令开灯、开空调,随着室内光线环境自动调节亮度,手机,APP,控制家用电器等,让你的arduino连入物联网,Arduino,高端应用,乐为联网云数据平台,四、认识,Arduino,开发,板,-Arduino UNO,四、认识,Arduino,开发,板,-,arduino,Mega2560,五、,Arduino,开发环境,Arduino,的编程是在,Arduino IDE,上进行的,如左图编程界面所示;,开发环境提供了最基本的模板,包含了,setup(),函数和,loop(),函数;,在,setup(),函数上方空白区域,可以插入需要用到的函数,.h,头文件以及申明要用到的函数。,六、函数的概念,定义:,函数是一种能完成某种特定功能二端口通道,通过输入合适的东西获得想要的某种输出;,举例:,例如数学上,y=2x,,这条函数可以完成将输入值翻倍这样一个工作,;,注意:,arduino,提供了大量的基础函数,包括,I/O,控制、时间函数、中断函数、串口通信函数,等,;,arduino,也提供了许多关于这些基础函数的实例,程序,,这些例程可以在,arduino,开发环境的“,File-Examples,”菜单中找到。,七、,Arduino,的常用基本函数,Arduino,程序的主体包括,:,Setup(),函数和,loop(),函数;,(,1,),setup(),函数:,在程序中只运行一次,它的功能为完成程序的各类初始化工作;,(,2,),loop(),函数:,程序的主函数,程序运行过程中,loop(),函数不断循环。,Arduino,常用函数,-,pinMode(),功能:,将指定的引脚配置成输出或输入,语法:,pinMode(pin,mode),参数:,pin,:表示要设置模式的引脚,mode,:包括,INPUT,或,OUTPUT,返回值:,无,例程:,int ledPin=13;/LED,连接到数字脚,13,void setup(),pinMode,(,ledPin,,,OUTPUT,),;/,设置数字脚为输出,void loop(),digitalWrite,(,ledPin,,,HIGH,),;/,点亮,LED,delay(1000);/,等待一秒,digitalWrite(ledPin,LOW);/,灭掉,LED,延迟(,1000,),;/,等待第二个,Arduino,常用函数,-,digitalWrite(),功能:,给一个数字引脚写入,HIGH,或者,LOW,。,语法:,digitalWrite(pin,value),参数:,pin,:,引脚编号,value,:,HIGH or LOW,返回值:,无,例程:,int,ledPin=13;/LED,连接到数字,13,号端口,void setup(),pinMode(ledPin,OUTPUT);/,设置数字端口为输入模式,void loop(),digitalWrite(ledPin,HIGH);/,使,LED,亮,delay(1000);/,延迟一秒,digitalWrite(ledPin,LOW);/,使,LED,灭,delay(1000);/,延迟一秒,Arduino,常用基本函数,-,digitalRead(),功能:,读取指定引脚的值,,HIGH,或,LOW,。,语法:,digitalRead,(,PIN,),参数:,Pin,:你想读取的引脚号,返回值:,HIGH,或,LOW,例程:,int,ledPin=;/LED,连接到,13,脚,int inPin=7;/,按钮连接到数字引脚,7int val=0;/,定义变量以存储读值,void setup()pinMode(ledPin,OUTPUT);/,将,13,脚设置为输出,pinMode(inPin,INPUT);/,将,7,脚设置为输入,void loop()val=digitalRead(inPin);/,读取输入脚,digitalWrite(ledPin,val);/,将,LED,值设置为按钮的值,Arduino,常用基本函数,-,analogRead(),功能,:,从指定的模拟引脚读取模拟数据值。,语法:,analogRead,(,PIN,),参数:,pin,:从输入引脚读取数值,返回值:,从,0,到,1023,的整数值,例程:,int analogPin=3;/,电位器(中间的引脚)连接到模拟输入引脚,3/,另外两个引脚分别接地和,+5 Vint val=0;/,定义变量来存储读取的数值,void setup(),serial.begin,(,9600,),;/,设置波特率(,9600,),void loop()val=analogRead,(,analogPin,),;/,从输入引脚读取数值,serial.println,(,val,),;/,显示读取的数值,Arduino,常用基本函数,-,analogWrite(),功能:,从一个引脚输出模拟值(,PWM,),语法:,analogWrite,(,pin,value,),参数:,pin,:用于输入数值的引脚。,value,:占空比:,0,(完全关闭)到,255,(完全打开)之间。,返回值:,无,例程:,通过读取电位器的阻值控制,LED,的亮度,int ledPin=9;/LED,连接到数字引脚,9int analogPin=3;/,电位器连接到模拟引脚,3int val=0;/,定义变量存以储读值,void setup(),pinMode,(,ledPin,OUTPUT,),;/,设置引脚为输出引脚,void loop()val=analogRead,(,analogPin,),;/,从输入引脚读取数值,analogWrite,(,ledPin,,,val/4,),;/,以,val/4,的数值点亮,LED,(因为,analogRead,读取的数值从,0,到,1023,,而,analogWrite,输出的数值从,0,到,255,),Arduino,常用基本函数,-,delay(),功能:,使程序延时特定的时间(毫秒),语法:,delay(ms),参数:,ms,:暂停的毫秒数(,unsigned long,),返回值:,无,例程:,ledPin=13/LED 连接到数字 13 脚,void setup(),pinMode(ledPin,OUTPUT);/设置引脚为输出,void loop(),digitalWrite(ledPin,HIGH);/点亮 LED,delay(1000);/等待 1 秒,digitalWrite(ledPin,LOW);/灭掉 LED,delay(1000);/等待一秒,中断,的定义:,由于,某一随机事件的发生,单片机暂停原程序的运行,转去执行另一程序(随机事件),处理完毕后又自动返回原程序继续运行,其发生过程,如,右,图,。,中断,的要素:,主程序:单片机正在运行的程序。,中断源:引起中断的原因,或能发生中断申请的来源。,中断服务程序:处理中断事件的程序。,Arduino,常用基本函数,-,中断介绍,中断发生的过程,Arduino,常用基本函数,-,中断函数,1,、,interrupts(),函数,功能:,负责,打开总,中断,返回,值:,无,参数,:,无,2,、,noInterrupts(),函数,功能:,负责关闭总中断,返回值,:无,参数,:无,3,、,attachInterrupt(interrput,function,mode),功能:,用于,设置,外部中断,参数:,3,个,,分别表示中断源,中断处理函数和触发模式,它们的具体含义如下,。,中断源:,可选中断,0,或者,1,,对应,a,rduino,的,2,或者,3,号数字引脚。,中断处理函数:,是一段子程序,当中断发生时执行该子程序部分,其中参数值为函数的指针。,触发模式:,有四种类型,,LOW(,低电平触发)、,CHANGE(,变化时触发)、,RISING,(低电平变为高电平触发)、,FALLING(,高电平变为低电平触发),Arduino,常用基本函数,-,中断函数,4,、,detachInterrupt(interrput,),函数,功能:,用于,取消,中断,参数,:,Interrupt,:,表示,所要取消的中断,源,例程:,用中断源,0,(接引脚,D2,)作为触发源控制,arduino UNO,板上的,LED,亮或灭,volatile,int state=LOW;,void setup(),Serial.begin(9600);,attachInterrupt(0,change,CHANGE);/,当,D2,电平改变时,触发中断函数,void loop(),digitalWrite(13,state);,if(state=LOW),Serial.println(111);,if(state=HIGH),Serial.println(222);,void change()/,中断函数,state=!state;,Arduino,常用基本函数,-,串口通信函数,1,、,Serial.begin(),功能:,用于设置串口的,波特率,波特率是指每秒传输的比特数,除以,8,可得到每秒传输的字节数,。,一般的波特率有,9600,、,19200,、,57600,、,115200,等,。,介绍:,通过在头文件,HardwareSerial.h,中定义一个,HardwareSerial,类的对象,serial,,然后直接使用该类的成员函数来实现。,2,、,Serial.available(),功能:,用来判断串口是否收到数据,返回值,:,int,型,3,、,Serial.read(),功能:,用于,读入串口,数据,返回值,:,int,型的串口数据。,Arduino,常用基本函数,-,串口通信函数,4,、,Serial.print,(),功能:,用于,从串口输出数据,数据可以是变量,也可以是字符串,。,5,、,Serial.println(),功能,:,与,Serial.print,函数类似,都是从串口输出数据,只是,Serial.println,函数多了回车换行功能,。,例程:,读取输入的字符,并在监视器中显示出来的程序如下,。,String val=;,void setup(),Serial.begin(9600);,void loop(),while(Serial.available()0),val+=char(Serial.read();,delay(5);,if(val.length()0),Serial.println(val);,val=;,八、认识函数库,函数库:,由系统建立的具有一定功能的函数的集合。库中存放函数的名称和对应的目标代码,以及连接过程中所需的重定位信息。用户也可以根据自己的需要建立自己的用户函数库。,库函数:,存放在函数库中的函数。库函数具有明确的功能、入口调用参数和返回值。,头文件:,有时也称为包含文件。,C,语言库函数与用户程序之间进行信息通信时要使用的数据和变量,在使用某一库函数时,都要在程序中嵌入(用,#include,)该函数对应的头文件。,九、机器人包含的库函数,库函数组成:,由,.h,文件(头文件)和,.cpp,文件(源程序文件)组成。,序号,库函数名称,包含文件,库函数主要功能,1,Track,Track.h,、,Track.cpp,对应机器人红外传感器的库函数,主要用于控制机器人沿着黑色线进行循线。,2,ColSensor,ColSensor.h,、,ColSensor.cpp,对应机器人颜色传感器的库函数,主要用于识别机器人垃圾块的颜色。,3,ColQueue,ColQueue.h,、,ColQueue.cpp,对应机器人颜色传感器的库函数,以队列的形式来记忆机器人检测到的垃圾块的颜色数据。,4,Car,Car.h,、,Car.cpp,对应机器人电机的库函数,主要用于简单控制机器人的移动。,5,Function,Function.h,、,Function.cpp,定义红外传感器模块、颜色传感器模块、电机的,arduino,引脚,控制机器人进出路口、拐弯等,控制舵机动作和初始化等功能。,十、怎样使用库函数,放置位置:,一般是放到,lib,文件里,调用方法:,将它所在的文件名用,#include,libraries,所在的路径,库函数拷贝到的路径,#ifndef ColSensor_h,#define ColSensor_h,class ColSensor,private:,/定义引脚,int S0,S1,S2,S3,OUT;,/定义延时,unsigned long time;,public:,/定义计数器,unsigned long g_count;,/定义数组,用来存放读取到的RGB值,int g_array3;,/定义数组,用来存放比例系数,float g_SF3;,/构造函数,ColSensor(int a,int b,int c,int d,int e,unsigned long f);,/将引脚配置为输出,同时设置输出比例因子,void Mode(int a=1,int b=1);,/*控制数字引脚,切换滤波器。红,绿,蓝分别对,应S2与S3的00,11,01电平;10时过滤所有颜色*/,void Digital_out(int a,int b);,/计算比例系数,void Test();,/计算RGB值,void Get();,;,#endif,垃圾分类小车,ColSensor.h,文件内代码,#include,#include ColSensor.h,ColSensor:ColSensor(int a,int b,int c,int d,int e,unsigned long f),S0=a;S1=b;S2=c;S3=d;OUT=e;time=f;,g_count=0;,void ColSensor:Mode(int a,int b),pinMode(S0,OUTPUT);,pinMode(S1,OUTPUT);,pinMode(S2,OUTPUT);,pinMode(S3,OUTPUT);,pinMode(OUT,INPUT);,digitalWrite(S0,!(a=0);,digitalWrite(S1,!(b=0);,void ColSensor:Digital_out(int a,int b),digitalWrite(S2,!(a=0);,digitalWrite(S3,!(b=0);,void ColSensor:Test(),g_array0=0;g_array1=0;g_array2=0;,for(int j=0;j3;j+),for(int i=0;i time);,g_arrayj+=g_count;,g_arrayj/=3;,g_SFj=255.0/g_arrayj;,Digital_out(1,0);,g_count=0;,void ColSensor:Get(),for(int i=0;itime);,g_arrayi=g_count;,g_arrayi=g_SFi*g_arrayi;,Digital_out(1,0);,g_count=0;,垃圾分类小车,ColSensor.cpp,文件内代码,谢谢!,
展开阅读全文