2018年,我们买了个七段四位数码显示LED组件,如下图。经试验,它是与TM1637兼容的。右侧的引脚从上到下依次是,G(GND)、D(Data,数据)、C(Clock,时钟)、V(Vcc)。有两种,一种下图所示的,四位数码,中间有冒号,用来做时钟显示;另一种是每位数码右下角都有一个小数点,用来显示数值。我们买的是后者。
这次代码搞得复杂一点,TM1637显示PC通过USB线发来的数值。这个组件的代码必须先装入TM1637库。代码第一句就是做这个。这个库的主要内容是声明一个名叫SevenSegmentTM1637的类。
然后是按照SevenSegmentTM1637类,创建一个名叫display的对象,它有两个参数,分别是TM1637所接的数据口与时钟口。我们接的是A0、A1(模拟口用作数字口)。
在初始化setup()函数里,设置串口速率、启用串口、设置TM1637的亮度、清除TM1637的内容。
在主体循环loop()里,每个循环都是先测试串口的接收缓冲区有没有数据?如果为空,进入下一循环。如果有数据,就让它们显示在TM1637上。这个很简单,我们把串口读字符串函数Serial.readString()的输出直接作为对象dispay的方法print的输入就行了。如果你要对来自串口的数据要做处理后再显示,也简单,你把语句display.print(Serial.readString());拆开,加入你的代码就行了。
我们看到的书籍、资料、教程,很少看到有说Arduino支持OOP(面向对象编程)。极少有,也只有两三句话。有人说,Arduino资源这么少,OOP没实用价值,就是个花架子。开始,绝大部分库里描述都是类class。不学OOP是不行的。
#include
SevenSegmentTM1637 display(A1,A0);
void setup(){
Serial.begin(9600);
display.begin();
display.setBacklight(20);
display.clear();
}
void loop(){
if (Serial.available() > 0) {
display.print(Serial.readString());
}
}