Archive for November 2009
1602字符型液晶显示屏是电子制作中经常用到的一个模拟,它可以用来显示两排字符,每排16个字符:

不过,要控制这样一个常用的模块,其实也不是那么容易。首先,我们要按照其4线或者8线的工作模式,占用相应的Arduino引脚,但这样其实占用了较多的数字I/O引脚,特别是8线的连接方式。再次,虽然有相应的库可以支持,但要将其调试通过,并在Arduino上成功运行起来,相应也会遇到不少的问题。最后,控制液晶的代码需要占用相应的存储空间,这对于本来就不富裕的16K存储空间的Arduino来讲,无疑就是雪上加霜。
为了解决这些问题,我们设计了这款基于1602字符型LCD的串行液晶显示屏,与之前的做法相比,优点是很明显的:
- 采用串口进行控制,硬件连线降到最少;
- 不占用Arduino的存储空间;
- 成功验证的代码,将调试时间降到最低。

与传感器扩展板和专用连接线配合,可以非常容易地与Arduino连接上:

为了演示其功能,我在传感器扩展板上还接了一个按钮模块,当按钮按下时,Arduino会通过串口向液晶屏发送相应的命令进行控制。该模块上电时的效果如图所示

在Arduino里运行的代码为:
int switchPin = 7; int value = 0; void setup() { Serial.begin(9600); pinMode(switchPin, INPUT); } void loop() { if (HIGH == digitalRead(switchPin)){ Serial.print("$CLEAR\r\n"); Serial.print("$GO 1 1\r\n"); Serial.print("$PRINT Flamingo EDA\r\n"); Serial.print("$GO 2 4\r\n"); Serial.print("$PRINT Hello World!\r\n"); Serial.print("$CURSOR 1 1\r\n"); } }
对照代码你可以看出,所有对该液晶屏进行控制的串口命令都以字符”$”开始,以回车按行”\r\n”结束,两者之间是相应的命令和参数,不同的命令具有不同的参数。
- GO 光标移动
- PRINT 在当前光标位置上显示字符串
- CLEAR 清屏
- HOME 将光标移回到屏幕左上角的初始位置
- CURSOR 设置光标效果,第一个参数为是否显示光标(1和0),第二个参数为是否闪烁(1和0)
当Arduino检测到按钮按下时,会向连接在串口上的串行液晶显示屏发送相应的控制命令,效果如下图所示:

No tags
但凡玩过点游戏的对这个控制杆肯定不陌生,它可以用来对控制物体在二维平面内(X和Y方向)的运动,不知道加上Arduino后又能够变换出什么样的不同创意来。

从原理上来讲,这个控制杆可以看成由两个电位器和一个按钮组成:

其中两个电位器的输入值分别用来表示用户在X和Y轴上的偏移量,其类型为模拟量;而按钮则用来表示用户是否在Z轴上按下,其类型为数字量。因此该控制杆一共有三个输入接口,分别用来连接X、Y和Z:

具体使用的时候,可以和Arduino传感器扩展板结合起来,用相应的连接线与Arduino上对应的引脚连接起来。在下面的例子中,X和Y轴分别连接在模拟输入端口A0和A1上,而Z轴则连接在数字I/O的7号引脚上:

相应的代码如下所示:
int sensorPin = 5; int value = 0; void setup() { pinMode(7, OUTPUT); Serial.begin(9600); } void loop() { value = analogRead(0); Serial.print("X:"); Serial.print(value, DEC); value = analogRead(1); Serial.print(" | Y:"); Serial.print(value, DEC); value = digitalRead(7); Serial.print(" | Z: "); Serial.println(value, DEC); delay(100); }
好了,刚始玩吧;-)
