[经验] 【mBot试用体验】mBot编程语言之Arduino C详解及教程

[复制链接]

试用达人

发表于 2016-1-1 01:46:41   4384 查看 15 回复 显示全部楼层 倒序浏览
分享
本帖最后由 渴死的鱼儿 于 2016-1-3 20:59 编辑

       上次介绍了Arduino IDE的使用和mBot库文件的导入配置,有了mBot的库文件,玩mBot算是有了基本的地基,但是我们总不能一直只使用别人写的程序,一直被别人的思维方法所捆绑,我们玩电子的必须有创新意识,更何况我们还接触到编程这方面问题,就凭这一点我们必须要培养出创新的思维。这里,我们就要了解Arduino C的基本语法和函数封装等基本原理,下面我就借着mBot这个平台简单介绍一下Arduino C,这也是一个新手学习Arduino C的一个跳板吧。楼主也是现学现卖,所学知识不如大家,不足之处还望大家多多包涵,共同进步!


下面用mBot的实例介绍Arduino C,拿上次的rgb程序来说,不要以为简单,短短几句功能代码简单的背后是很多的基本语法:
程序1.png


程序2.png


程序3.png

大家可以看到整个代码中除了mcore的头文件,就只有MeRGBLed rgb的调用和void loop()、void setup()两个函数模块!看起来非常简洁,但是又有点摸不着头脑的感觉。MeRGBLed rgb就是调用了其他的封装函数,mcore头文件下面的那一大段注释就是其内部函数功能,但是里面的函数又调用了其他的函数块,这里我们可以暂且放一放,不要把自己搞迷糊了。具体想深入的可以参考我一好友写的贴,里面有这方面的深究挖掘:     http://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();

delay1000
这个我相信用过C语言的都不会陌生,我们给单片机编程经常用到delay各种延时,这里也是一样的。其功能就是延时1S,上面的led亮之后会暂停1S


rgb.setColor(0,0,20):
这个函数的看起来和rgb.setColorAt(1,0,20,0)类似,但是实质完全不同,之前的那个是自己执行自己的,而后面这个则是整体执行RGB灯。看到该函数参数只有3个没,比之前的那个少了1个,少的这个就是为了可以执行全部的led。这也就是我们的mbot小车上电后的红、绿、蓝间隔闪烁之后2个RGB灯的蓝色灯全部亮的程序。

delay1000
再次延时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
continue
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之旅;
第三章:进入硬件的世界;
Arduino从零开始学》: arduino从零开始学.rar (4.91 MB, 下载次数: 181)

实习生

发表于 2016-4-13 10:04:00  
hahaha 谢谢谢谢
回复

举报

试用达人

发表于 2016-4-13 14:05:47    楼主|

PCB在线计价下单

板子大小:

cm
X
cm

层数:

2

板子数量:

10

厚度:

1.6

不客气的哦
回复

点赞 举报

实习生

发表于 2016-4-21 12:03:18  
谢谢楼主分享!!!
回复

举报

实习生

发表于 2016-4-21 16:37:05  
额  每次都要回复一下 额
回复

点赞 举报

实习生

发表于 2016-4-21 16:37:16  
不过回复是一种精神
回复

举报

技术员

发表于 2016-10-27 18:05:31  
感谢楼主的分享,想了解一下mbot的库,由于之前也没接触过Arduino,所以看起库函数来比较费劲。谢谢!
回复

点赞 举报

试用达人

发表于 2016-10-27 20:10:53    楼主|
她叫小红 发表于 2016-10-27 18:05
感谢楼主的分享,想了解一下mbot的库,由于之前也没接触过Arduino,所以看起库函数来比较费劲。谢谢!

你可以看看之前发的资料帖子,里面有部分视频教程和mbot的图形编程介绍,图形话编程的话上面的积木功能写的很详细了,arduino IDE编程的话下载几个官方程序也是很容易明白的。
回复

点赞 举报

助理工程师

发表于 2016-11-1 14:55:41  
。。。。。。。。。。。。。。。。。
回复

举报

实习生

发表于 2017-1-5 03:08:20  
好帖啊,感谢,用功学习学习
回复

点赞 举报

技术员

发表于 2017-2-10 10:00:32  
渴死的鱼儿 发表于 2016-10-27 20:10
你可以看看之前发的资料帖子,里面有部分视频教程和mbot的图形编程介绍,图形话编程的话上面的积木功能写的很详细了,arduino IDE编程的话下载几个官方程序也是很容易明白的。

嗯,经过一段时间的学习,收获了很多知识,谢谢
回复

点赞 举报

高级工程师

发表于 2017-2-25 12:47:27  
谢谢分享啦~~~~很不错的资料。
回复

点赞 举报

工程师

发表于 2017-3-14 11:23:36  
谢谢分享啦~~~~很不错的资料。
回复

点赞 举报

工程师

发表于 2017-4-25 16:32:42  
谢谢楼主,学习学习。。。
回复

点赞 举报

技术员

发表于 2017-4-27 06:39:46  
谢谢楼主分享
回复

点赞 举报

实习生

发表于 2017-7-18 13:55:43  
谢谢分享!
回复

举报

只有小组成员才能发言,加入小组>>

99个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /9 下一条

快速回复 返回顶部 返回列表
-

推荐专区

技术干货集中营

专家问答

用户帮助┃咨询与建议┃版主议事

工程师杂谈

工程师创意

工程师职场

论坛电子赛事

社区活动专版

发烧友活动

-

嵌入式论坛

ARM技术论坛

Android论坛

Linux论坛

单片机/MCU论坛

FPGA|CPLD|ASIC论坛

DSP论坛

嵌入式系统论坛

-

电源技术论坛

电源技术论坛

无线充电技术

-

硬件设计论坛

PCB设计论坛

电路设计论坛

电子元器件论坛

控制|传感

总线技术|接口技术

-

测试测量论坛

LabVIEW论坛

Matlab论坛

测试测量技术专区

仪器仪表技术专区

-

EDA设计论坛

multisim论坛

PADS技术论坛

Protel|AD|DXP论坛

Allegro论坛

proteus论坛|仿真论坛

EasyEDA-中国人自已的EDA工具

Orcad论坛

-

综合技术与应用

电机控制

智能电网

光电及显示

参考设计中心

汽车电子技术论坛

医疗电子论坛

-

开源硬件

-

无线通信论坛

无线通信技术专区

天线|RF射频|微波|雷达技术

-

IC设计论坛

芯片测试与失效分析

Mixed Signal/SOC[数模混合芯片设计]

Analog/RF IC设计

设计与制造封装测试

-

厂商专区

TI论坛

TI Deyisupport社区

-

检测技术与质量

电磁兼容(EMC)设计与整改

安规知识论坛

检测与认证

-

消费电子论坛

手机技术论坛

平板电脑/mid论坛

音视/视频/机顶盒论坛

-

电子论坛综合区

聚丰众筹官方社区

新人报道区

聚丰供应链

-

论坛服务区

-

供求信息发布

供需广告

招聘┃求职发布区

电子展览展会专区