QC

Analog Clock with LED Matrix and Arduino

 Analog Clock with LED Matrix and Arduino

Giới thiệu

Ma trận LED với MAX7219 rất linh hoạt và có thể được sử dụng trong một số dự án với Arduino.

Trong trường hợp này, tôi đã sử dụng nó để mô phỏng đồng hồ kim không có kim, với kết quả rất thú vị. Giờ và phút được đặt xung quanh trung tâm của ma trận tạo ra một cái nhìn quen thuộc của đồng hồ kim. Mã tôi đã phát triển áp dụng một chút lượng giác (sin và cosine) để tính toán tọa độ của giờ và phút được hiển thị thành ma trận LED. Với điều đó, tôi đã lưu nhiều dòng mã hóa.

Việc lắp ráp rất đơn giản, sử dụng ít thành phần và bạn sẽ không gặp khó khăn gì khi làm việc trên đó.

Hãy làm nó!



Danh sách vật liệu

Vật liệu bạn cần được hiển thị trong danh sách sau:

-Arduino UNO R3

-Mô-đun của Ma trận LED với MAX7219 (Tích hợp tối đa)

- Các nút nhấn (02 x)

-Breadboard (kích thước nhỏ)

-Dây nhảy

Mẫu giấy để bao phủ Ma trận LED (xem tệp đính kèm để in)

Lưu ý: Dự án này sử dụng đồng hồ bên trong Arduino. Nó không quá chính xác như một RTC (Đồng hồ thời gian thực) bên ngoài, nhưng đối với mục đích của dự án này, nó hoạt động rất tốt.





/*
  Project:  Analog Clock with LED Matrix
  Author:   LAGSILVA
  Hardware: Arduino UNO R3 / LED Matrix with MAX72XX
  Date:     26.Jul.2017
  Revision: 1.1
  License:  CC BY-NC-ND 4.0
            (Attribution-NonCommercial-NoDerivatives 4.0 International)
*/

#include <LedControl.h>
#include <Time.h>
#include <TimeLib.h>

/*
  ***** Pin numbers for LedControl *****
  pin 10 is connected to the DataIn
  pin 08 is connected to the CLK
  pin 09 is connected to LOAD / CS
  We have only a single MAX72XX.
*/
LedControl lc = LedControl(10, 8, 9, 1);

byte xRef = 4; // Reference Row
byte yRef = 3; // Reference Collunm
byte mm1, mm5, hora, minuto;
byte ultMinuto = 10, ultHora = 10;
byte horaPin = 7, minutoPin = 6;
boolean ajustaHora = true, ajustaMinuto = true;
float pi = 3.1415927, xHH, yHH, xMM1, yMM1, xMM5, yMM5;


void setup() {

  pinMode(horaPin, INPUT_PULLUP);
  pinMode(minutoPin, INPUT_PULLUP);

  /* Wakeup call for MAX72XX */
  lc.shutdown(0, false);

  /* Set the brightness to a medium values */
  lc.setIntensity(0, 2);

}


void loop() {

  // Setup of Hours & Minutes
  ajustaHora = digitalRead(horaPin);
  ajustaMinuto = digitalRead(minutoPin);

  if (!ajustaHora) {
    adjustTime(3600);
  }

  if (!ajustaMinuto) {
    adjustTime(60);
  }

  hora = hour();
  minuto = minute();

  if (minuto != ultMinuto || hora != ultHora) {

    ultMinuto = minuto;
    ultHora = hora;
    lc.clearDisplay(0);

    // Minutes in steps of 5 (range of 0 to 55)
    mm5 = minuto / 5 * 5;

    //Minutes (1 to 4)
    mm1 = minuto % 5;

    // AM period
    if (hora >= 0 && hora <= 11) lc.setLed(0, xRef + 1, yRef, true);

    // PM period
    if (hora >= 12 && hora <= 23)lc.setLed(0, xRef - 1, yRef, true);

    // Coordinates for Hours & Minutes (steps of 5)
    xHH = round(-cos(hora * pi / 6) * 2) + xRef;
    yHH = round(sin(hora * pi / 6) * 2) + yRef;
    lc.setLed(0, xHH, yHH, true);

    xMM5 = round(-cos(mm5 * pi / 30) * 3.1) + xRef;
    yMM5 = round(sin(mm5 * pi / 30) * 3.1) + yRef;
    lc.setLed(0, xMM5, yMM5, true);

    //Coordinates for Minutes (1 to 4)
    yMM1 = yRef + 4;
    xMM1 = (mm1 - 1) * 2 + xRef - 3;
    if (mm1 > 0) lc.setLed(0, xMM1, yMM1, true);

  }

  // Center LED Blinking
  if (ajustaHora && ajustaMinuto) {
    lc.setLed(0, xRef, yRef, true);
    delay(200);
    lc.setLed(0, xRef, yRef, false);
    delay(800);
  }
  else delay(250);

}











Nap Code vào PY32F003 dùng Stlink

 Nap Code vào PY32F003 dùng Stlink Bước 1: Cài đặt  KeilC v5.39 theo link sau ( chú ý 5.39 keil c mới nạp ok). https://edge07.111.ir.cdn.ir/...