返回

用树莓派打造倒计时神器:用JavaScript点亮数码管

人工智能

在物联网时代风起云涌的当下,JavaScript与微控制器联袂登场,擦出耀眼的火花。就如同2006年Ajax横空出世,带来前端开发的革命,这番协奏曲也预示着一场技术新浪潮的到来。

本文将带领你踏上用树莓派和数码管打造倒计时的神奇之旅。还记得大学时代用汇编语言编写单片机秒表的艰辛吗?这一次,我们将用现代化的编程语言JavaScript来实现同样的功能,让这段旅程更加轻松便捷。

对于那些热衷于硬件探索的小伙伴,这或许是一个打造跳一跳物理外挂的契机哦!

硬件准备

踏上数码管倒计时之旅的第一步,我们需要准备以下硬件:

  • 树莓派(任意版本)
  • 8 段数码管(共阴极)
  • 74HC595 移位寄存器
  • 面包板
  • 杜邦线

电路连接

电路连接是实现倒计时的关键。按照以下步骤进行连接:

  1. 将树莓派GPIO 18连接到 74HC595 的DS(数据)端
  2. 将树莓派GPIO 23连接到 74HC595 的STCP(存储时钟脉冲)端
  3. 将树莓派GPIO 24连接到 74HC595 的RCLK(移位时钟脉冲)端
  4. 将 74HC595 的Q0端连接到数码管的a端
  5. 将 74HC595 的Q1端连接到数码管的b端
  6. 将 74HC595 的Q2端连接到数码管的c端
  7. 将 74HC595 的Q3端连接到数码管的d端
  8. 将 74HC595 的Q4端连接到数码管的e端
  9. 将 74HC595 的Q5端连接到数码管的f端
  10. 将 74HC595 的Q6端连接到数码管的g端
  11. 将数码管的正极(通常为较长的一端)连接到电源的5V端
  12. 将数码管的负极(通常为较短的一端)连接到地线

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);

  // 延时 1timer = setTimeout(() => {
    currentTime--;
  }, 1000);
}

// 清理定时器句柄
clearTimeout(timer);

// 释放 GPIO 资源
dataPin.unexport();
latchPin.unexport();
clockPin.unexport();

感受数字流逝的魅力

代码运行后,数码管将逐秒倒计时,直到时间归零。看着数字一步步减少,仿佛时间在指尖流淌,令人不禁感慨万千。

通过这个项目,你不仅体会到了物联网的魅力,更领略了JavaScript与微控制器珠联璧合的强大威力。相信这一趟数码管倒计时之旅,会为你打开编程和硬件探索的新大门。