📜  如何使用 p5.js 库创建七段时钟?

📅  最后修改于: 2022-05-13 01:56:48.871000             🧑  作者: Mango

如何使用 p5.js 库创建七段时钟?

七段显示器是一种用于显示十进制数字的电子显示设备,可以替代更复杂的点阵显示器。

7 段显示时钟,每段是一个 LED,所有 7 个 LED 用一个公共引脚连接在一起,该引脚可以是共同的正极或共同的负极,并以特定的样式排列。典型的 7 段显示器有 10 个引脚排列在顶部和底部,每个中间引脚是公共引脚。七段显示器广泛用于数字时钟、电子仪表、基本计算器和其他显示数字信息的电子设备中。

p5.js是一个用于创意编码的 JavaScript 库,专注于为艺术家、设计师、教育工作者、初学者和其他任何人提供可访问和包容的编码! p5.js 是免费和开源的,因为我们相信每个人都应该可以使用软件以及学习它的工具。

使用草图的比喻,p5.js 具有一整套绘图功能。但是,您不仅限于绘图画布。您可以将整个浏览器页面视为草图,包括用于文本、输入、视频、网络摄像头和声音的 HTML5 对象。数字 0 到 9 是七段显示器上最常见的字符。用于这些中的最常见的模式是:

0 1 2 3 4 5 6 7 8 9

环境设置:我们将使用Visual Stdio Code编写代码来创建七段显示时钟。

  • 第 1 步:为了在 Visual Stdio Code 中使用 p5,我们必须安装扩展 p5.vscode,如下图所示。

  • 第 2 步:现在要创建一个新的 p5.js 项目,请转到View->Command Palette->Create p5.js Project。

项目结构:

例子:

sketch.js
let display = [];
let colon = [];
let number;
function setup() {
  createCanvas(600, 480);
  let inc = 80;
  let x = 50;
  let j = 0;
  for (let i = 0; i < 6; i++) {
    display[i] = new Display(x, height / 2 - 40, 100);
    if ((i + 1) % 2 == 0) {
      colon[j++] = x + inc;
      x = x + inc + 30;
    } else {
      x = x + inc;
    }
  }
  number = new Array(10);
  initializeArray();
}
function draw() {
  frameRate(1);
  background(0);
  let sec = ("0" + second()).slice(-2);
  let min = ("0" + minute()).slice(-2);
  let hrs = ("0" + hour()).slice(-2);
  console.log(colon);
  display[0].show(number[hrs[0]]);
  display[1].show(number[hrs[1]]);
  display[2].show(number[min[0]]);
  display[3].show(number[min[1]]);
  display[4].show(number[sec[0]]);
  display[5].show(number[sec[1]]);
  
  fill(255, 0, 0);
  for (let i = 0; i < 2; i++) {
    ellipse(colon[i], height / 2 - 20, 10);
    ellipse(colon[i], height / 2 + 40, 10);
  }
}
  
function initializeArray() {
  number[0] = [true, true, true, true, true, true, false];
  number[1] = [false, true, true, false, false, false, false];
  number[2] = [true, true, false, true, true, false, true];
  number[3] = [true, true, true, true, false, false, true];
  number[4] = [false, true, true, false, false, true, true];
  number[5] = [true, false, true, true, false, true, true];
  number[6] = [true, false, true, true, true, true, true];
  number[7] = [true, true, true, false, false, false, false];
  number[8] = [true, true, true, true, true, true, true];
  number[9] = [true, true, true, true, false, true, true];
}


index.html


  
    
    Seven Segment Display
    
  
    
    
    
    
  
    
  
  


display.js
class Display {
  constructor(x, y, size) {
    this.x = x;
    this.y = y;
    this.size = size;
    this.width = 10;
    this.height = size / 2 - this.width / 2;
    this.offset = this.width;
  }
  
  show(segments) {
    this.edge(this.x, this.y - this.offset, true, segments[0]);
    this.edge(this.x + this.height, this.y, false, segments[1]);
    this.edge(
      this.x + this.height,
      this.y + this.height + this.offset,
      false,
      segments[2]
    );
    this.edge(
      this.x,
      this.y + 2 * this.height + this.offset,
      true,
      segments[3]
    );
    this.edge(
      this.x - this.offset,
      this.y + this.height + this.offset,
      false,
      segments[4]
    );
    this.edge(this.x - this.offset, this.y, false, segments[5]);
    this.edge(this.x, this.y + this.height, true, segments[6]);
  }
  
  edge(x, y, hor, flag) {
    if (flag) fill(255, 0, 0);
    else fill(0);
    if (hor) rect(x, y, this.height, this.width);
    else rect(x, y, this.width, this.height);
  }
}


索引.html



  
    
    Seven Segment Display
    
  
    
    
    
    
  
    
  
  

显示.js

class Display {
  constructor(x, y, size) {
    this.x = x;
    this.y = y;
    this.size = size;
    this.width = 10;
    this.height = size / 2 - this.width / 2;
    this.offset = this.width;
  }
  
  show(segments) {
    this.edge(this.x, this.y - this.offset, true, segments[0]);
    this.edge(this.x + this.height, this.y, false, segments[1]);
    this.edge(
      this.x + this.height,
      this.y + this.height + this.offset,
      false,
      segments[2]
    );
    this.edge(
      this.x,
      this.y + 2 * this.height + this.offset,
      true,
      segments[3]
    );
    this.edge(
      this.x - this.offset,
      this.y + this.height + this.offset,
      false,
      segments[4]
    );
    this.edge(this.x - this.offset, this.y, false, segments[5]);
    this.edge(this.x, this.y + this.height, true, segments[6]);
  }
  
  edge(x, y, hor, flag) {
    if (flag) fill(255, 0, 0);
    else fill(0);
    if (hor) rect(x, y, this.height, this.width);
    else rect(x, y, this.width, this.height);
  }
}

输出: