代码清单6-2中的代码提供了一个完整的计算闰年的程序,用于从用户处获取输入,并确定输入的年份是否为闰年。函数的作用是建立通信速率并初始化串行缓冲区。你可以将串行缓冲区看作是用于存储串行端口数据的一小部分内存(128字节)。
在loop()函数中,对Serial.available()函数的调用返回当前在串行缓冲区中的数据字节数。如果有任何数据可用,将定义几个工作变量,程序将调用ReadLine()。
代码清单6-2.Leap Year Program
ReadLine()的代码出现在清单6-2的底部附近。尽管ReadLine()代码中有一些非正确的元素,但对于我们这里的目的来说已经足够了。代码使用无限while循环等待字符出现在串行缓冲区。有数据传回时,通过调用Serial.read()将字符读入变量c。提示:库函数使用小写字母作为函数名的开头,而我们编写的函数以大写字母开头。大多数Arduino库使用面向对象的大写语法类名,如Serial后跟小写函数名如read(),并用点运算符引用这两个名称。如果该字符不是换行符'\n',然后将该字符分配到传递的函数(str)的字符数组中。变量索引指示字符在数组中的位置,增量后的索引将准备索引下一个角色。(www.xing528.com)
如果读取了换行符,则该字符不会放入字符数组中。相反,换行符被替换为空字符('\0')并放入数组中。回想一下第4章,在C中,空字符用于终止字符串。因此,程序的其余部分现在可以将字符数组视为字符串变量。
此时,索引保存字符串中的字符数(null不计入字符串长度)。存储在索引中的字符计数将返回给调用者,以便调用者需要时使用它。这就是为什么ReadLine()函数的类型说明符是int。
从ReadLine()返回时,代码调用标准库例程atoi()(ASCII转换为整数),将字符串变量的内容转换为名为year的整数变量,然后调用IsLeapYear()确定该年是否为闰年。
图6-2显示了程序运行时串行监视器的效果。你可以使用以下工具激活串行监视器。串行监视器菜单项或使用Ctrl-Shift-M快捷键。
图6-2 程序执行效果
要激活该程序,请将光标放在串行监视器对话框顶部的文本框中,然后键入要测试的年份。单击发送按钮将数据传输到开发板上的串行缓冲区。然后,调用IsLeapYear()会将相应的消息发送回PC端,如图6-2所示。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。