Arduino基础教程——基本函数的使用Arduino语言Arduino语言是建立在C/C++基础上的,其实也就是基础的C语言,Arduino语言只不过把AVR单片机(微控制器)相关的一些参数设置都函数化,不用我们去了解他的底层,让我们不了解AVR单片机(微控制器)的朋友也能轻松上手。Arduino语言关键字:ifif...elseforswitchCasewhiledo...whilebreakcontinuereturngotoArduino语言语法符号:;{}///**/运算符:=+-*/%Arduino语言数据类型:boolean布尔类型charbyte字节类型intunsignedintlongunsignedlongfloatdoublestringarrayvoid数据类型转换:char()byte()int()long()float()Arduino语言常量:HIGH|LOW表示数字IO口的电平,HIGH表示高电平(1),LOW表示低电平(0)。INPUT|OUTPUT表示数字IO口的方向,INPUT表示输入(高阻态),OUTPUT表示输出(AVR能提供5V电压40mA电流)。true|falsetrue表示真(1),false表示假(0)。Arduino语言/*************Arduino语言*************/结构voidsetup()初始化变量,管脚模式,调用库函数等voidloop()连续执行函数内的语句一、数字I/O口的操作函数1、pinMode(pin,mode);2、digitalWrite(pin,value);3、digitalRead(pin);1、pinMode(pin,mode)pinMode函数用以配置引脚与输出或输入模式,它是一个无返回值函数。函数有两个参数,pin和mode。Pin参数表示要配置的引脚,mode参数表示设置的参数INPUT(输入)和OUTPUT(输出)。INPUT参数用于读取信号,OUTPUT用于输出控制信号。PIN的范围是数字引脚0~13,也可以把模拟引脚(A0~A5)作为数字引脚使用,此时编号为14脚对应模拟引脚0,19脚对应模拟引脚5.一般会放在setup里,先设置再使用2、digitalWrite(pin,value)该函数的作用是设置引脚的输出电压为高电平或低电平。该函数也是一个无返回值的函数。Pin参数表示所要设置的引脚,value参数表示输出的电压HIGH(高电平)或LOW(低电平)。注意:使用前必须先用pinMode设置。3、digitalRead(pin)该函数在引脚设置为输入的情况下,可以获取引脚的电压情况HIGH(高电平)或者LOW第电平。例程intbutton=9;//设置第9脚为按钮输入引脚intLED=13;//设置第13脚为LED输出引脚,内部连上板上的LED灯。voidsetup(){pinMode(button,INPUT);//设置为输入pinMode(LED,OUTPUT);//设置为输出}voidloop(){if(digitalRead(button)==LOW)//如果读取低电平digitalWrite(LED,HIGH);//13脚输出高电平elsedigitalWrite(LED,LOW);//否则输出低电平}二、模拟I/O口的操作函数1、analogReference(type);2、analogRead(pin);3、analogWrite(pin,value);1、analogReference(type)该函数用于配置模拟引脚的参考电压。有3种类型。DEFAULT:默认值,参考电压是5V.INTERNAL:低电压模式,使用片内基准电压源2.56VEXTERNAL:扩展模式,通过AREF引脚获取参考电压。注意:不使用本函数的话,默认是参考电压5V。使用AREF接参考电压,需接个5K欧的上拉电阻。2、analogRead(pin)用于读取引脚的模拟量电压值,每读取一次需要花100US的时间。参数pin表示所要获取模拟量电压值的引脚,返回为int型。精度10位,返回值从0~1023。注意:函数参数的pin范围是0~5,对应板上的模拟口A0~A5。3、analogWrite(pin,value)该函数是通过PWM的方式在引脚上输出一个模拟量。PWM——Pulse-WidthModulation——脉冲宽度调制PWM输出的一般形式:主要用于LED亮度控制,电机转速控制等方面。Arduino中的PWM的频率大约为490HZ。UNO板上支持以下数字引脚(不是模拟输入引脚)作为PWM模拟输出:3、5、6、9、10、11.板上带PWM输出的都有~号。注意:PWM输出位数为8位,从0~255例程intsensor=A0;//A0引脚读取电位器intLED=11;//第11引脚输出LEDvoidsetup(){Serial.begin(9600);}voidloop(){intv;v=analogRead(sensor);Serial.println(v,DEC);//可以观察读取的模拟量analogWrite(LED,v/4);//读回的值范围是0~1023结果除以4才能得到0~255的区间值}三、高级I/OPulseln(pin,state,timeout)该函数用于读取引脚脉冲的时间长度,脉冲可以是HIGH或者LOW。如果是HIGH,函数将先等引脚变为高电平,然后开始计时,一直到变为低电平。返回脉冲持续的时间长度,单位为ms.如果超时没有读到的话,返回0.例程说明:做一个按钮脉冲计时器,测一下按钮的时间,测测谁的反应快,看谁能按出最短的时间。按钮接第3脚intbutton=3;intcount;voidsetup(){pinMode(button,INPUT);}voidloop(){count=pulseIn(button,HIGH);if(count!=0){Serial.println(count,DEC);count=0;}}四、时间函数1、delay(ms);2、delayMicroseconds(us);3、millis();4、micros();1、delay(ms);延时函数,参数是延时的时长,单位是ms(毫秒)。例程——跑马灯voidsetup(){pinMode(6,OUTPUT);//定义为输出pinMode(7,OUTPUT);pinMode(8,OUTPUT);pinMode(9,OUTPUT);}voidloop(){inti;for(i=6;i=9;i++)//依次循环四盏灯{digitalWrite(i,HIGH);//点亮LEDdelay(1000);//持续1秒digitalWrite(i,LOW);//熄灭LEDdelay(1000);//持续1秒}}2、delayMicroseconds(us);延时函数,参数是延时的时长,单位是us(微秒)。1ms=1000us.该函数可以产生更短的延时。3、millis()应用该函数,可以获取单片机通电到现在运行的时间长度,单位是ms.系统最长的记录时间为9小时22分,超出从0开始。返回值是unsignedlong型。该函数适合作为定时器使用,不影响单片机的其他工作。(使用delay函数期间无法做其他工作。)1000毫秒=1秒例程——延时10秒后自动点亮的灯intLED=13;unsignedlongi,j;voidsetup(){pinMode(LED,OUTPUT);i=millis();//读入初始值}voidloop(){j=millis();//不断读入当前时间值if((j-i)10000)//如果延时超过10秒,点亮LED{digitalWrite(LED,HIGH);}elsedigitalWrite(LED,LOW);}4、micros()该函数返回开机到现在运行的微秒值。返回值是unsignedlong.70分钟溢出。1000微秒=1毫秒例程原理连续按按钮,看你的反应有多快。按钮接D3;从第2按开始,每按一次会减去上一次按的时间,看你连续按的间隔时间有多快。例程——显示当前的微秒值unsignedlongtime;voidsetup(){Serial.begin(9600);}voidloop(){Serial.print(Time:);time=micros();//读取当前的微秒值Serial.println(time);//打印开机到目前运行的微秒值datadelay(1000);//延时1秒}例程——跑马灯intLED=13;unsignedlongi,j;voidsetup(){pinMode(LED,OUTPUT);i=micros();//读入初始值}voidloop(){j=micros();//不断读入当前时间值if((j-i)1000000)//如果延时超过10秒,点亮LED{digitalWrite(LED1+k,HIGH);}elsedigitalWrite(LED,LOW);}五、中断函数1、attachInterrupt(interrput,function,mode);2、detachInterrupt(interrput);日常生活中的中断你在看书,电话铃响,于是你在书上做上记号,去接电话,与对方通话;门铃响了,有人敲门,你让打电话的对方稍等一下,你去开门,并在门旁与来访者交谈,谈话结束,关好门;回到电话机旁,继续通话,接完电话后再回来从做记号的地方接着看书。看书接电话与来访者交谈电话铃响敲门声看书接电话中断的概念单片机中的中断概念中断——由于某一随机事件的发生,计算机暂停原程序的运行,转去执行另一程序(随机事件),处理完毕后又自动返回原程序继续运行。中断源——引起中断的原因,或能发生中断申请的来源。主程序——计算机现行运行的程序。中断服务子程序——处理突发事件的程序。主程序主程序中断服务程序1中断服务程序1中断服务程序2随机事件1随机事件21、attachInterrupt(interrput,function,mode);该函数用于设置外部中断,函数有3个参数,分别表示中断源,中断处理函数和触发模式。中断源可选0或者1,对应2或者3号数字引脚。中断处理函数是一段子程序,当中断发生时执行该子程序部分。触发模式有四种类型,LOW(低电平触发)、CHANGE(变化时触发)、RISING(低电平变为高电平触发)、FALLING(高电平变为低电平触发)例程原理数字D2口接按钮开关,D4口接LED灯1(红色)。D5口接LED2(绿色)。在例程中,LED3每秒闪烁一次。使用中断0来控制LED1,中断1来控制LED2。按下按钮,马上响应中断,由于中断响应速度快,LED3不受影响,继续闪烁。比查询的效率要高。尝试4个参数,例程1试验LOW,CHANGE参数,例程2试验RISING和FALLING参数。volatileintstate1=LOW,state2=LOW;intLED1=4;intLED2=5;intLED3=13;//使用板载的LED灯voidsetup(){pinMode(LED1,OUTPUT);pinMode(LED2,OUTPUT);pinMode(LED3,OUTPUT);attachInterrupt(0,LED1_Change,LOW);//低电平触发attachInterrupt(1,LED2_Change,CHANGE);//任意电平变化触发}voidloop(){digitalWrite(LED3,HIGH);delay(50