|
本帖最后由 topdog 于 2022-4-21 03:00 编辑
年老眼花,字要大些......
//这是用42个舵机来显示时间的软体程序
//引入LiquidCrystal库,支持多款LCD屏幕模块。这里推测使用的是最常见的LCD1602。
//已经建立lcd实体对象。
//lcd在屏幕上打印显示Time:
lcd.print("Time: ");
//建立字符串类型 t 的存储空间。
String t = "";
//使用rtc库来驱动ds1307,ds3231,pcf8563等模块设置时间
//已经建立RTC (Real Time Clock) 实时时钟对象rtc
//rtc使用类函数getTimeStr(),获取时间的字符串给t赋值。
t = rtc.getTimeStr();
//参考串口接收十六进制代码控制点灯-Arduino中文社区 - Powered by Discuz!
//使用字符串处理函数中的字符截取函数charAt(),截取字节,为字节类型。charAt()应用时字符在字符串中的实际位置截取。
//ASCII编码是由二进制表示的,譬如'0',二进制就是0011 0000,用十进制表示就是48。
//再结合ASCII编码的序列计算出十进制值:把t1至t8转化成整数类型十进制的过程,这是由编译器自动数据转化完成的,但是你要知道t是字符串类型,t.charAt()是字符类型,字符类型减去整数48的过程是编译器把字符翻译成ASCII码再计算的。
//t1小时十位,t2小时个位 ,t3分钟十位, t4 分钟个位,t5秒钟十位, t6秒钟个位。
// 第3,6位为“:”不需要。
t1 = t.charAt(0)-48;
t2 = t.charAt(1)-48;
t3 = t.charAt(3)-48;
t4 = t.charAt(4)-48;
t5 = t.charAt(6)-48;
t6 = t.charAt(7)-48;
//lcd在屏幕上打印显示时间。输出格式是24小时制,例如12:14:30。
lcd.print(rtc.getTimeStr());
//lcd类函数setCursor()的方法来重新定位光标。移动光标,调用setCursor()设置行和列的位置。
lcd.setCursor(0,1);
//lcd在屏幕上打印显示Date:
lcd.print("Date: ");
//lcd打印rtc使用函数getDateStr(),获取日期的字符串。
lcd.print(rtc.getDateStr());
//使用Servo库,用Arduino控制舵机(伺服电机)。常见的Arduino舵机有两种,一种舵机轴可以旋转180度,还有一种舵机轴可以连续旋转。这里使用的是前者。
//一个数字用七个舵机呈现,r数组表示0至9的数字。
//前部程序没见到r,推测为整数类型的一维数组,譬如: r[10] ={0,1,2,3,4,5,6,7,8,9}; 0是r[0],序列号为0,数组的序列号起始位是0。
//&&是逻辑运算符之与:只有在小括号里面的七段条件要素都为真时才为真,花括号里面程序才会运行。
//关系运算符 等价符号== 、 小于符号< 。
//t1==r[0] ,表示 t1等价 r[0] ,假如 t1为0,r[0]为0 ,那么 t1等价 r[0] ,为真。
//feed前面没有看到声明,应该是布尔数类型标识状态或者标志位,花括号里面feed赋值为false;if()里面运行的条件就不成立了。
if (t1==r[0] && t2==r[1] && t3==r[2] && t4==r[3]&& t5<1 && t6<3 && feed==true)
{
//已经建立舵机实体对象servo_test,命令旋转伺服到指定100角度
servo_test.write(100);
//阻塞性延时400毫秒(ms)
delay(400);
servo_test.write(55);
//改变标志位feed,赋值假。
feed=false;
}
|
|