九层楼房电梯数字滚动显示 - Processing 示例代码
九层楼房电梯数字滚动显示 - Processing 示例代码
这是一个使用 Processing 实现九层楼房电梯数字滚动显示的示例代码,模拟了电梯显示屏上下滚动显示楼层的效果,点击相应的楼层,数字就会滚动显示到相应的数字。
// 九层电梯数字滚动显示
// 点击相应的楼层,单片机上面的数字就会滚动显示到相应的数字
import processing.serial.*;
Serial myPort; // 串口通信对象
int currentLevel = 1; // 当前楼层
int destLevel = 1; // 目标楼层
int offsetX = 0; // X轴偏移量
int offsetY = 0; // Y轴偏移量
int r = 0; // 当前数字的字节偏移量
int counter = 0; // 刷新计数器
int[] table = { // 数字编码表
0x3C, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3C, // 0
0x18, 0x38, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, // 1
0x00, 0x7E, 0x02, 0x02, 0x7E, 0x40, 0x40, 0x7E, // 2
0x00, 0x7E, 0x02, 0x02, 0x7E, 0x02, 0x02, 0x7E, // 3
0x00, 0x48, 0x48, 0x48, 0x7E, 0x08, 0x08, 0x08, // 4
0x00, 0x7E, 0x40, 0x40, 0x7E, 0x02, 0x02, 0x7E, // 5
0x00, 0x7C, 0x40, 0x40, 0x7C, 0x44, 0x44, 0x7C, // 6
0x00, 0x7C, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, // 7
0x00, 0x7C, 0x44, 0x44, 0x7C, 0x44, 0x44, 0x7C, // 8
0x00, 0x7E, 0x42, 0x42, 0x7E, 0x02, 0x02, 0x7E // 9
};
void setup() {
size(800, 600);
myPort = new Serial(this, Serial.list()[0], 9600); // 打开串口
}
void draw() {
background(255);
// 绘制楼层标签
for (int i = 1; i <= 9; i++) {
fill(0);
textSize(32);
text(i, 50, 600 - i * 60);
}
// 绘制电梯数字滚动显示
int[] currentNum = getNumber(currentLevel);
int[] destNum = getNumber(destLevel);
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 9; j++) {
int num = currentNum[i] & (1 << j);
if (num != 0) {
fill(0);
} else {
fill(255);
}
rect(j * 60 + offsetX, i * 60 + offsetY, 50, 50);
num = destNum[i] & (1 << j);
if (num != 0) {
fill(0);
} else {
fill(255);
}
rect(j * 60 + offsetX, (i + 9) * 60 + offsetY, 50, 50);
}
}
// 发送目标楼层给单片机
if (currentLevel == destLevel) {
if (mousePressed) {
int floor = (600 - mouseY) / 60;
if (floor >= 1 && floor <= 9 && floor != destLevel) {
destLevel = floor;
myPort.write(destLevel);
}
}
}
// 刷新数字滚动显示
counter++;
if (counter == 10) {
counter = 0;
r++;
if (r == 8) {
r = 0;
if (currentLevel < destLevel) {
offsetX--;
if (offsetX == -540) {
offsetX = 0;
currentLevel++;
}
} else if (currentLevel > destLevel) {
offsetX++;
if (offsetX == 540) {
offsetX = 0;
currentLevel--;
}
}
}
}
}
// 获取数字的编码数组
int[] getNumber(int num) {
int[] result = new int[8];
int index = (num - 1) * 8;
for (int i = 0; i < 8; i++) {
result[i] = table[index + i];
}
return result;
}
void serialEvent(Serial myPort) {
// 接收单片机的数据
String inString = myPort.readStringUntil('
');
if (inString != null) {
inString = trim(inString);
if (inString.length() > 0) {
destLevel = int(inString);
}
}
}
在 processing 中,我们使用了鼠标交互来选择目标楼层,并通过串口通信将目标楼层发送给单片机。同时,我们绘制了一个九层楼房的图画,并在每个楼层上标注了数字。数字滚动显示的实现方式与 51 单片机上的代码类似,不同点在于我们使用了偏移量来控制数字的滚动方向和速度。
这个示例代码仅供参考,你可以根据自己的需求进行修改和扩展。例如,你可以添加更多功能,例如:
- 添加电梯开门和关门动画
- 添加电梯运行声音效果
- 添加楼层按钮的显示和交互
- 添加电梯内部乘客的显示
原文地址: https://www.cveoy.top/t/topic/k43l 著作权归作者所有。请勿转载和采集!