【S.O.S求救信号】基于Mind+ Ardunio入门教程02
本帖最后由 DFEDU 于 2019-12-2 10:15 编辑本项目将继续使用项目一的搭建的电路,但我们这里将改变一下代码,就能让我们的LED变为S.O.S求救信号了。这是国际摩尔斯码求救信号。摩尔斯码是一种字符编码,英文的每个字母,都是由横杠和点不同的组合而成。这样的好处是,使用简单的两种状态,就能来传递所有的字母和数字,非常的简便!不得不佩服前人的聪明吧!
我们正好可以通过LED开关两种状态来拼出一个个字母。通过长闪烁和短闪烁来表示横杠和点。这个项目中,我们就拼写S.O.S这三个字母。
通过查阅摩尔斯码表,我们可以知道,字母“S”用三个点表示,我们这里用短闪烁替代,字母“O”则用三个横杠表示,用长闪烁替代。
图形化编程 在输入指令前我们先来理解样例程序2-1,先不要急着输入这段代码,只是看一下。
样例程序 2-1:
https://mc.dfrobot.com.cn/data/attachment/album/201911/22/103031s66h2kh2csm60zgn.pnghttps://mc.dfrobot.com.cn/data/attachment/album/201911/22/103042d6nq2tw2227bwzbp.png
这一编法正确无疑,然而是不是觉得有点繁琐呢?如果有个100个,难不成还重复100遍吗?有没有更好的书写程序的方法呢?想必发明编程的人也考虑到这个问题了,所以我们使用一个新的模块来解决这一问题。
连接好主板和电脑,打开Mind+载入扩展的Arduino UNO库,输入样例程序2-2所示程序。
样例程序2-2
https://mc.dfrobot.com.cn/data/attachment/album/201911/22/103052qn3g63195rknn0z5.png
输入完毕后,确认正确后,点击https://mc.dfrobot.com.cn/data/attachment/album/201911/22/103858pafzmmtgxjaqa9zq.png下载代码到Arduino中,如果一切顺利的话,我们将看到LED闪烁出摩尔斯码S.O.S信号,等待0.5秒。重复闪烁。给Arduino外接电池,整个装到防水的盒子里,就可以用来发S.O.S信号了。S.O.S通常用于航海或者登山。
图形化指令学习
https://mc.dfrobot.com.cn/data/attachment/album/201911/22/103053ehn0pz0hmmloz0gv.png
代码学习
本项目的C代码如下。接下来我们将依次学习每一行代码的意义
// 主程序开始
void setup() {
}
void loop() {
for (int index = 0; index < 3; index++) {
digitalWrite(13, HIGH);
delay(150);
digitalWrite(13, LOW);
delay(100);
}
delay(100);
for (int index = 0; index < 3; index++) {
digitalWrite(13, HIGH);
delay(450);
digitalWrite(13, LOW);
delay(100);
}
delay(100);
for (int index = 0; index < 3; index++) {
digitalWrite(13, HIGH);
delay(150);
digitalWrite(13, LOW);
delay(100);
}
delay(100);
}
当程序运行后我们可以看到,灯闪了3次而不是只闪了1次。我们再来看一下,在loop主函数中包含了三个独立的代码段,每一段的开头都能发现for的字样,这就是我们用来解决重复执行相同代码的好帮手。正式因为使用了for循环才能产生这样的效果。
for 循环
for语句格式如下:
https://mc.dfrobot.com.cn/data/attachment/album/201911/22/104720rlgegmmbyy3ms6yy.png
for循环顺序如下:
第一轮:1 → 2 → 3 → 4 第二轮:2 → 3 → 4 … 直到2不成立,for循环结束。 来看下我们程序中的for循环:
for(int index=0;index<3;index++){
……
}
第一步:初始化变量index=0。 第二步:判断index是否小于3。 第三步:判断第二步成立,for循环中执行LED亮与灭。 第四步:index自加,变为1。 (index++这句话表示把index的值增加1,等同于写成index=index+1,也就是把index当前的值变为index+1,再赋给index一遍。0变为1,第二轮循环则1变2。) 第五步:回到第二步,此时index=1,判断是否小于3。 第六步:重复第三步。 …… 直到index循环到3时,判断index<3不成立,自动跳出for循环,程序继续往下走。
我们这里需要它循环3次,所以设置为index<3。从0开始计算,0到2,循环了3次。那如果要循环100次的话呢?答案:for(int index=0;index<100;index++){}
必须说明的,花括号必须成对出现,如有遗留编译器编译时将不通过。有个小技巧大家可以学一下,在开始写花括号的时候,就先把“{”“}”都写上,之后再在两个括号之间输入代码,这样就不会出现写到最后括号对应不上的情况。在本章的课后作业中,我们就要开始尝试自己敲击键盘,在手动编辑区输入代码。这些小细节还需要大家牢记在心。
我们在写一些判断语句的时候会经常用到一些比较运算符,比如大于,小于等等。下面就说下常用的比较运算符。
比较运算符
“<”称为比较运算符。比较运算符在代码中是用作判断的,比较两个值。我们常用的比较运算符有:
==(等于) >(大于)
!=(不等于) <=(小于等于)
<(小于) >=(大于等于)
特别要说明一下,在之后手动编写代码的时候,等于必须是两个等号。还有像小于等于和大于等于,<和=之间不能留有空格,否则编译不通过。
当然,除了比较运算符外,程序也可以用的+、-、*、/(加、减、乘、除)这些常用的算术运算符。
现在知道for循环是如何运作吧!我们代码中有3个for循环:第一个for循环3次,短闪烁3次,代表输出3个点,也就是字母“S”。第二个for循环同样循环3次,长闪烁3次,代码输出3个横杠,也就是字母“0”。第三个for循环又来输出个“S”。
在每for循环之间有个小延时100毫秒,是S.O.S字母之间有个清晰的停顿说明。最后,在回到主函数loop重新执行一遍之前,有个相对较长的延时,为0.5秒。
好了,我们S.O.S信号源项目就算告一个段落了。有所收获吗?
课后作业
学习了两个项目的基础,让我们来自己动手输入一下本项目“代码学习”中的一行行语句吧!
点击“手动编辑”即可通过键盘输入代码!
https://mc.dfrobot.com.cn/data/attachment/album/201911/22/103055cewwdp66wridpwpw.png
输入完代码后,右键点击“上传到设备”旁的上箭头,通过“仅编译”检验代码是否存在格式等问题
https://mc.dfrobot.com.cn/data/attachment/album/201911/22/103055g403q7v56gjz34e5.png
*进行图形化编程来修改程序的时候,只会更改“自动生成”中的代码。若此时对话框处于“手动编辑”,点击“上传到设备”,并不能够将图形化编程转化的代码烧录到板中!需要我们再点击“自动生成”进行切换,再上传,才能够更新板子中的程序。
C语言编程就好比写字,字迹要求横平竖直、排版工整、美观隽秀的同时还要保证一定的书写速度。风格良好的代码亦是如此,语句格式、缩进对齐与输入代码的效率,一并需要。这两者都得积累平时一点一滴的水磨工夫,才能养成良好的习惯,写代码时更得心应手,为项目六及其之后的纯代码学习夯实基础!
*仅编译后出现报错的可能原因(1):
https://mc.dfrobot.com.cn/data/attachment/album/201911/22/103055yjj8mjcwzbt8at33.png
*出现这一问题的原因是在某一行语句指令的末端,没有加上 ; 或者输入的是中文输入法中的分号
此外再用Mind+做个课后习题:交通信号灯吧~下图是整个一个运行过程,虚线框的是程序循环的部分。
提示:以上我们是只点亮的一个LED灯,现在需要点亮三个LED灯。电路连接的原理是和一个灯相同,程序中需要改变的是用三个数字口来分别控制3个LED灯。自己动手试一下吧!
https://mc.dfrobot.com.cn/data/attachment/album/201912/02/101418nzwqdiwlo9jlgqv7.png
好教程 好教程
页:
[1]