返回
用树莓派打造倒计时神器:用JavaScript点亮数码管
人工智能
2024-02-05 05:08:36
在物联网时代风起云涌的当下,JavaScript与微控制器联袂登场,擦出耀眼的火花。就如同2006年Ajax横空出世,带来前端开发的革命,这番协奏曲也预示着一场技术新浪潮的到来。
本文将带领你踏上用树莓派和数码管打造倒计时的神奇之旅。还记得大学时代用汇编语言编写单片机秒表的艰辛吗?这一次,我们将用现代化的编程语言JavaScript来实现同样的功能,让这段旅程更加轻松便捷。
对于那些热衷于硬件探索的小伙伴,这或许是一个打造跳一跳物理外挂的契机哦!
硬件准备
踏上数码管倒计时之旅的第一步,我们需要准备以下硬件:
- 树莓派(任意版本)
- 8 段数码管(共阴极)
- 74HC595 移位寄存器
- 面包板
- 杜邦线
电路连接
电路连接是实现倒计时的关键。按照以下步骤进行连接:
- 将树莓派GPIO 18连接到 74HC595 的DS(数据)端
- 将树莓派GPIO 23连接到 74HC595 的STCP(存储时钟脉冲)端
- 将树莓派GPIO 24连接到 74HC595 的RCLK(移位时钟脉冲)端
- 将 74HC595 的Q0端连接到数码管的a端
- 将 74HC595 的Q1端连接到数码管的b端
- 将 74HC595 的Q2端连接到数码管的c端
- 将 74HC595 的Q3端连接到数码管的d端
- 将 74HC595 的Q4端连接到数码管的e端
- 将 74HC595 的Q5端连接到数码管的f端
- 将 74HC595 的Q6端连接到数码管的g端
- 将数码管的正极(通常为较长的一端)连接到电源的5V端
- 将数码管的负极(通常为较短的一端)连接到地线
JavaScript编程
万事俱备,只欠东风!让我们用JavaScript来让数码管动起来吧:
// 引入必要的库
const Gpio = require('onoff').Gpio;
// 定义 GPIO 引脚
const dataPin = new Gpio(18, 'out');
const latchPin = new Gpio(23, 'out');
const clockPin = new Gpio(24, 'out');
// 数码管数字对应的二进制值
const numCodes = [
0b11000000, // 0
0b11111001, // 1
0b10100100, // 2
0b10110000, // 3
0b10011001, // 4
0b10010010, // 5
0b10000010, // 6
0b11111000, // 7
0b10000000, // 8
0b10010000 // 9
];
// 设置倒计时时间(单位:秒)
const targetTime = 10;
// 当前倒计时时间
let currentTime = targetTime;
// 定时器句柄
let timer;
// 设置 GPIO 引脚为低电平
dataPin.writeSync(0);
latchPin.writeSync(0);
clockPin.writeSync(0);
// 主循环
while (currentTime >= 0) {
// 将当前时间转换为二进制数组
const binaryArray = [];
for (let i = 0; i < 8; i++) {
binaryArray[i] = currentTime % 2;
currentTime = Math.floor(currentTime / 2);
}
// 逐位写入二进制数组
for (let i = 7; i >= 0; i--) {
dataPin.writeSync(binaryArray[i]);
// 时钟脉冲
clockPin.writeSync(1);
clockPin.writeSync(0);
}
// 存储时钟脉冲
latchPin.writeSync(1);
latchPin.writeSync(0);
// 延时 1 秒
timer = setTimeout(() => {
currentTime--;
}, 1000);
}
// 清理定时器句柄
clearTimeout(timer);
// 释放 GPIO 资源
dataPin.unexport();
latchPin.unexport();
clockPin.unexport();
感受数字流逝的魅力
代码运行后,数码管将逐秒倒计时,直到时间归零。看着数字一步步减少,仿佛时间在指尖流淌,令人不禁感慨万千。
通过这个项目,你不仅体会到了物联网的魅力,更领略了JavaScript与微控制器珠联璧合的强大威力。相信这一趟数码管倒计时之旅,会为你打开编程和硬件探索的新大门。