Arduino中国 | Flamingo EDA

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”结束,两者之间是相应的命令和参数,不同的命令具有不同的参数。

  1. GO 光标移动
  2. PRINT 在当前光标位置上显示字符串
  3. CLEAR 清屏
  4. HOME 将光标移回到屏幕左上角的初始位置
  5. CURSOR 设置光标效果,第一个参数为是否显示光标(1和0),第二个参数为是否闪烁(1和0)

当Arduino检测到按钮按下时,会向连接在串口上的串行液晶显示屏发送相应的控制命令,效果如下图所示:

No tags

Nov/09

15

电子积木 控制杆 JoyStick

但凡玩过点游戏的对这个控制杆肯定不陌生,它可以用来对控制物体在二维平面内(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);
}

好了,刚始玩吧;-)

Theme Design by devolux.nh2.me