大家可以看到整个代码中除了mcore的头文件,就只有MeRGBLed rgb的调用和void loop()、void setup()两个函数模块!看起来非常简洁,但是又有点摸不着头脑的感觉。MeRGBLed rgb就是调用了其他的封装函数,mcore头文件下面的那一大段注释就是其内部函数功能,但是里面的函数又调用了其他的函数块,这里我们可以暂且放一放,不要把自己搞迷糊了。具体想深入的可以参考我一好友写的贴,里面有这方面的深究挖掘: https://bbs.elecfans.com/jishu_522284_1_1.html
主要是这两个函数:void setup()和void loop():
setup():在Arduino程序运行时首先要调用setup()函数,用于初始化变量、设置针脚的输出输入类型、配置串口、引入类库文件等等。每次 Arduino上电或重启(复位)后,setup()函数只运行一次。
loop():在setup()函数中初始化和定义变量,然后执行loop()函数。顾名思义,该函数在程序运行过程中不断地循环,根据反馈,相应地改变执行情况。通过该函数动态控制Arduino主控板。
结合rgb的程序我们再来看一下,首先上电执行setup()函数(仅执行一次),之后开始loop()函数(重复循环不间断执行loop函数里面的所有指令)。
rgb.setColorAt(0,20,0,0):
可以看到该函数是带参函数,有4个参数0,20,0,0,其对应的意思依次是:
0:指mcore主板上第一个rgb灯。(mcore主板上面一共有两个rgb灯,左右各一个)。
20:代指R-red的值为20,即红色灯的亮度值为20,所有灯的变化值在0~255之间,值越大亮度越明显,0为灭,255则最亮(特别刺眼的哦)。
0:指G-green值为0,即mcore上的绿色灯不亮。
0:指B-blue值为0,同样主板上的蓝色等也不会亮。
所以终上所述,此函数的功能就是让mcore主板上的第一个RGB灯显示红色,亮度值为20。
rgb.setColorAt(1,0,20,0):
同上面的那个函数功能大同小异,只是换成RGB2灯的绿色灯亮,亮度值为20;
rgb.show():
执行指令,功能是执行上面的rgb.setColorAt(0,20,0,0)和rgb.setColorAt(1,0,20,0)
两个函数。因为上面的这两个函数只是设置了一下模块的工作模式并没有执行,真正的执行函数就在rgb.show();
delay(1000):
这个我相信用过C语言的都不会陌生,我们给单片机编程经常用到delay各种延时,这里也是一样的。其功能就是延时1S,上面的led亮之后会暂停1S。
rgb.setColor(0,0,20):
这个函数的看起来和rgb.setColorAt(1,0,20,0)类似,但是实质完全不同,之前的那个是自己执行自己的,而后面这个则是整体执行RGB灯。看到该函数参数只有3个没,比之前的那个少了1个,少的这个就是为了可以执行全部的led。这也就是我们的mbot小车上电后的红、绿、蓝间隔闪烁之后2个RGB灯的蓝色灯全部亮的程序。
delay(1000);
再次延时1S钟,达到效果;
以上几句代码就是mbot上电时红、绿、蓝间隔闪烁的效果。
看过Arduino C 的整体结构框架之后,接下来我们再了解一下Arduino C的基本语法,进一步渗透到Arduino C的分支去:
Arduino C关键字:
Arduino C是从C语言延伸出来的,自然很多东西和C是相通的。比如它的关键字和C是一模一样的:
if
if...else
for
switch case
while
do... while
break
return
goto
Arduino C 基本运算符:和C也是一样的。
=
+
-
*
/
%
==
<
>
<=
>=
&&
||
!
++
--
+=
-=
*=
/=
Arduino C的数据类型:C同样适用。
boolean
char
byte
int
unsigned int
long
unsigned long
float
double
string
array
不同的就是Arduino程序特有的:引脚电压常量、数字引脚常量、函数结构、管脚I/O功能、数学相关函数等。
引脚电压常量:
HIGH | LOW:表示数字IO口的电平,HIGH 表示高电平1,LOW表示低电平0。
数字引脚常量:
INPUT | OUTPUT:表示数字IO口的方向,INPUT表示辒入(高阻态),OUTPUT表示辒出(AVR能提供5V电压 40mA电流)。
true| false true:表示真(1),false表示假(0)。
函数结构: 就是上面说过的非常重要的两个函数。
voidsetup() 初始化变量,管脚模式,调用库函数;
voidloop() 连续执行凼数内的语句;
管脚I/O功能: 分为数字I/O口和模拟I/O口。
1、数字I/O口:
pinMode(pin,mode) 数字IO口输入输出模式定义凼数,pin表示为0~13, mode表示为INPUT或OUTPUT。
digitalWrite(pin,value) 数字IO口输出电平定义凼数,pin表示为0~13,value表示为HIGH或LOW。比如定义HIGH可以驱动LED。
intdigitalRead(pin) 数字IO口读输入电平凼数,pin表示为0~13,value表示为HIGH或LOW。比如可以读数字传感器。
2、模拟I/O口:
intanalogRead(pin) 模拟IO口读凼数,pin表示为0~5(Arduino Diecimila为0~5,Arduinonano为0~7)。比如可以读模拟传感器(10位AD,0~5V表示为0~1023)。
analogWrite(pin,value) - PWM 数字IO口PWM输出凼数,Arduino数字IO口标注了PWM癿IO口可使用该凼数,pin表示3, 5, 6, 9, 10, 11,value表示为0~255。比如可用于电机PWM调速或音乐播放。
数学相关函数:
求最小值:min(x, y);
求最大值:max(x, y);
算绝对值:abs(x)计;
约束凼数,下限a,上限b,x必须在ab之间才能返回:constrain(x, a, b) ;
约束凼数,value必须在fromLow不toLow之间和fromHigh与toHigh之间: map(value,fromLow, fromHigh, toLow, toHigh);
开方凼数,base的exponent次方:pow(base,exponent) ;
平方:sq(x);
开根号:sqrt(x);
以上这些是我对Arduino C的基本认识,以后的学习则会更加深入,同时也会更加困难。
革命尚未成功,同志仍需努力呀!
--------------------------------------------------------分割线-------------------------------------------------------
--------------------------------------------------------分割线-------------------------------------------------------
--------------------------------------------------------分割线-------------------------------------------------------
最后推荐一些我平常随手收集来的和Arduno C相关的资料供大家学习参考:
Arduino中hex文件的保存及应用:
http://blog.sina.com.cn/s/blog_5e4725590101bjwv.html
Arduino为什么只有loop和setup函数:
Arduino IDE 编译生成过程:
http://www.tuicool.com/articles/y6F3ia
楼主强烈推荐: 很适合新手学习的一本书《Arduino从零开始学》,虽然只有3章,但内容十分详细,简明易懂。百度文库找到的,感觉非常不错,花了一个大洋下载下来了,这里分享给大家学习。
第一章:进入Arduino的世界;
第二章:开始Arduino之旅;
第三章:进入硬件的世界;