Adafruit_GFX matrix ws2812像素屏库使用教程AWTRIX2.0像素时钟

news2025/7/19 21:01:57

AWTRIX2.0像素时钟很炫酷但必须要与服务器配合使用。这个库可以做自己的点阵时钟离线版。想怎么玩就怎么玩不受服务器牵绊。
第一步:下载mixy库然后倒入,必须有以下库文件: Adafruit_GFX FastLED FastLED_NeoMatrix TomThumb
#include <LightDependentResistor.h>//LDR光敏电阻
#include <Adafruit_GFX.h>
#include <FastLED.h>
#include <FastLED_NeoMatrix.h>
#include <Fonts/TomThumb.h> //字体库
特别说明TomThumb 字体必须用下载包里的字体,用原Adafruit_GFX字体效果很难看。
在这里插入图片描述
上测试时效果图:
在这里插入图片描述
需要的硬件:
WS2812软点阵屏 32X8 256灯珠。
在这里插入图片描述
以上全部齐全后即可开整!先看库使用程序图。一看即懂。
垂直线:
在这里插入图片描述
水平线
在这里插入图片描述
画空心矩形
在这里插入图片描述
显示效果
在这里插入图片描述
简单NTP时钟演示程序图
在这里插入图片描述
代码:

#include <LightDependentResistor.h>
#include <ESP8266WiFi.h>
#include <TimeLib.h>
#include <NtpClientLib.h>
#include <Adafruit_GFX.h>
#include <FastLED.h>
#include <FastLED_NeoMatrix.h>
#include <Fonts/TomThumb.h>

volatile int texiao;
String lnnmonth;
String lnnday;
String huor;
String feng;
String seconds;
volatile int ldrbr;
int8_t timeZone = 8;
const PROGMEM char *ntpServer = "ntp1.aliyun.com";
volatile int item;

LightDependentResistor myldr(A0,1000,LightDependentResistor::GL5516);

CRGB leds[256];
FastLED_NeoMatrix *matrix;
void sysloop() {
  matrix->setTextColor(matrix->Color(0,200,160));
  matrix->setCursor(0,6);
  matrix->print(String(String(huor) + String(":")) + String(feng));
  matrix->setCursor(18,8);
  matrix->print(".......");
  matrix->setTextColor(matrix->Color(0,200,160));
  matrix->setCursor(25,6);
  matrix->print(lnnday);
  switch (NTP.getDateWeekday()) {
   case 1:
    matrix->setTextColor(matrix->Color(50,255,50));
    matrix->setCursor(18,8);
    matrix->print(".");
    matrix->show();
    break;
   case 2:
    matrix->setTextColor(matrix->Color(50,255,50));
    matrix->setCursor(20,8);
    matrix->print(".");
    matrix->show();
    break;
   case 3:
    matrix->setTextColor(matrix->Color(50,255,50));
    matrix->setCursor(22,8);
    matrix->print(".");
    matrix->show();
    break;
   case 4:
    matrix->setTextColor(matrix->Color(50,255,50));
    matrix->setCursor(24,8);
    matrix->print(".");
    matrix->show();
    break;
   case 5:
    matrix->setTextColor(matrix->Color(50,255,50));
    matrix->setCursor(26,8);
    matrix->print(".");
    matrix->show();
    break;
   case 6:
    matrix->setTextColor(matrix->Color(50,255,50));
    matrix->setCursor(28,8);
    matrix->print(".");
    matrix->show();
    break;
   case 7:
    matrix->setTextColor(matrix->Color(50,255,50));
    matrix->setCursor(30,8);
    matrix->print(".");
    matrix->show();
    break;
   default:
    break;
  }
  myfillRect(19, 1, 5, 5, matrix->Color((random(50, 255)),(random(50, 255)),(random(50, 255))));
  mydrawCircle(21, 3, 1, matrix->Color((random(50, 255)),(random(50, 255)),(random(50, 255))));
  for(int i = 2; i <= 12; i++)
  {
    matrix->setTextColor(matrix->Color((random(50, 255)),(random(50, 255)),(random(50, 255))));
    matrix->setCursor((i + 1),8);
    matrix->print(".");
    matrix->show();
    delay(500);
    if (i == 12) {
      texiao = texiao + 1;
      if (texiao >= 5) {
        texiao = 1;

      }

    }
  }
  Serial.println(NTP.getDateYear());
  item = random(1, 5);
  Serial.println(String("1=") + String(item));
  switch (item) {
   case 1:
    for(int j = -3; j<= 33; j++)
    {
      matrix->clear();
      mydrawFastVLine(j + 1, 0, 8, matrix->Color(0,200,160));
      delay(15);
    }
    break;
   case 2:
    for(int j = 32; j>-3; j--)
    {
      matrix->clear();
      mydrawFastVLine(j + 1, 0, 8, matrix->Color(0,200,160));
      delay(15);
    }
    break;
   case 3:
    for(int j = -3; j<=10; j++)
    {
      matrix->clear();
      mydrawFastHLine(0, j + 1, 32, matrix->Color(100,255,100));
      delay(30);
    }
    break;
   case 4:
    for(int j = 10; j>-3; j--)
    {
      matrix->clear();
      mydrawFastHLine(0, j + 1, 32, matrix->Color(100,255,100));
      delay(30);
    }
    break;
   default:
    break;
  }
  for(int j = 7; j<= 17; j++)
  {
    matrix->clear();
    matrix->setTextColor(matrix->Color(50,255,50));
    matrix->setCursor((j + 1),8);
    matrix->print(".");
    matrix->setTextColor(matrix->Color(50,50,200));
    matrix->setCursor(7,6);
    matrix->print(String(String(lnnmonth) + String("-")) + String(lnnday));
    matrix->show();
    delay(400);
  }
  item = random(1, 5);
  Serial.println(item);
  switch (item) {
   case 1:
    for(int j = -3; j<= 33; j++)
    {
      matrix->clear();
      mydrawFastVLine(j + 1, 0, 8, matrix->Color(0,200,160));
      delay(15);
    }
    break;
   case 2:
    for(int j = 32; j>-3; j--)
    {
      matrix->clear();
      mydrawFastVLine(j + 1, 0, 8, matrix->Color(0,200,160));
      delay(15);
    }
    break;
   case 3:
    for(int j = -3; j<=10; j++)
    {
      matrix->clear();
      mydrawFastHLine(0, j + 1, 32, matrix->Color(100,255,100));
      delay(30);
    }
    break;
   case 4:
    for(int j = 10; j>-3; j--)
    {
      matrix->clear();
      mydrawFastHLine(0, j + 1, 32, matrix->Color(100,255,100));
      delay(30);
    }
    break;
   default:
    break;
  }
}

void mydrawCircle(uint16_t x0, uint16_t y0, uint16_t r, uint16_t color) {
  matrix->drawCircle(x0,y0,r,color);
  matrix->show();
}

void mydrawFastHLine(int x, int y, int w, int color) {
  matrix->drawFastHLine(x,y,w,color);
  matrix->show();
}

void mydrawFastVLine(int x, int y, int h, int color) {
  matrix->drawFastVLine(x,y,h,color);
  matrix->show();
}

void myfillRect(int x, int y, int w, int h, int color) {
  matrix->fillRect(x,y,w,h,color);
  matrix->show();
}

void date_time() {
  if (NTP.getTimeHour24() >= 0 && NTP.getTimeHour24() <= 9) {
    huor = String("0") + String(NTP.getTimeHour24());

  } else {
    huor = NTP.getTimeHour24();

  }
  if (NTP.getTimeMinute() >= 0 && NTP.getTimeMinute() <= 9) {
    feng = String("0") + String(NTP.getTimeMinute());

  } else {
    feng = NTP.getTimeMinute();

  }
  if (NTP.getTimeSecond() >= 0 && NTP.getTimeSecond() <= 9) {
    seconds = String("0") + String(NTP.getTimeSecond());

  } else {
    seconds = NTP.getTimeSecond();

  }
  if (NTP.getDateMonth() >= 0 && NTP.getDateMonth() <= 9) {
    lnnmonth = String("0") + String(NTP.getDateMonth());

  } else {
    lnnmonth = NTP.getDateMonth();

  }
  if (NTP.getDateDay() >= 0 && NTP.getDateDay() <= 9) {
    lnnday = String("0") + String(NTP.getDateDay());

  } else {
    lnnday = NTP.getDateDay();

  }
}

void inithaed() {
  matrix->clear();
  matrix->setTextColor(matrix->Color((random(50, 250)),(random(50, 255)),(random(50, 250))));
  matrix->setCursor(5,6);
  matrix->print("MATRIX");
  matrix->show();
}

void setup(){
  texiao = 0;
  lnnmonth = "";
  lnnday = "";
  huor = "";
  feng = "";
  seconds = "";
  ldrbr = 0;
  Serial.begin(9600);
  myldr.setPhotocellPositionOnGround(false);
  WiFi.begin("Redmi_2.4G", "12345678");
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  NTP.setInterval (600);
  NTP.setNTPTimeout (1500);
  NTP.begin (ntpServer, timeZone, false);
  matrix = new FastLED_NeoMatrix(leds, 32, 8, NEO_MATRIX_TOP + NEO_MATRIX_LEFT + NEO_MATRIX_COLUMNS + NEO_MATRIX_ZIGZAG);
  FastLED.addLeds<NEOPIXEL,4>(leds,256).setCorrection(TypicalLEDStrip);
  matrix->begin();
  matrix->setTextWrap(false);//显示字体
  matrix->setFont(&TomThumb);//字体
  matrix->setBrightness(5);
  inithaed();
  delay(2000);
  item = 0;
}

void loop(){
  date_loop();
  date_time();
  randomSeed(millis());
  ldrbr = (map(myldr.getCurrentLux(), 0, 800, 5, 50));
  matrix->setBrightness(ldrbr);
  matrix->clear();
  sysloop();
  matrix->show();
  delay(50);

}

有问题或有需要改模块功能的 可留言

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/17329.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Seata 1.5.2 源码学习(Client端)

在上一篇中通过阅读Seata服务端的代码&#xff0c;我们了解到TC是如何处理来自客户端的请求的&#xff0c;今天这一篇一起来了解一下客户端是如何处理TC发过来的请求的。要想搞清楚这一点&#xff0c;还得从GlobalTransactionScanner说起。 启动的时候&#xff0c;会调用Global…

【计算机毕业设计】新冠疫情隔离人员信息管理系统+vue源码

一、系统截图&#xff08;需要演示视频可以私聊&#xff09; 摘 要 网络的广泛应用给生活带来了十分的便利。所以把基于小程序的社区疫情防控管理与现在网络相结合&#xff0c;利用ssm框架技术建设基于小程序的社区疫情防控系统&#xff0c;实现基于小程序的社区疫情防控的信息…

双线路捆绑

双线路捆绑是在服务器上接入两条上网线路并行使用 以达到提高链路上下行带宽&#xff08;即上传和下载速度&#xff09;的目的 默认情况下双线路捆绑采用负载均衡模式&#xff0c;并可更改为互为备份模式。 在负载均衡模式下&#xff0c;双线路的使用是基于会话的&#xff0…

已经有 MESI 协议,为什么还需要 volatile 关键字?

本文已收录到 GitHub AndroidFamily&#xff0c;有 Android 进阶知识体系&#xff0c;欢迎 Star。技术和职场问题&#xff0c;请关注公众号 [彭旭锐] 进 Android 面试交流群。 前言 大家好&#xff0c;我是小彭。 在上一篇文章里&#xff0c;我们聊到了 CPU 的缓存一致性问…

树莓派使用docker搭建owncloud私有云--外挂硬盘

一&#xff0e;安装docker 1. 一键脚本&#xff1a; sudo curl -sSL https://get.docker.com | sh2. 查看docker是否安装成功 docker -v出现版本号即为成功 二&#xff0e;每次开机自动挂载硬盘到树莓派 sudo nano /etc/fstab在最后一行加入挂载信息 /dev/sda1 /home/pi/…

[附源码]java毕业设计农村政务管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

[附源码]SSM计算机毕业设计智慧农业销售平台JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

多进程编程 VS 多线程编程

目录 一、进程 & 线程 二、进程与线程的优劣势 三、在什么场景下需要使用多进程编程&#xff1f; 进程也可以称为是“任务”。操作系统要想执行一个具体的“动作”&#xff0c;就需要创建出一个对应的进程。 一个程序在没有运行的时候&#xff0c;它仅仅是一个“可执行…

RHCE学习 --- 第六次作业

RHCE学习 — 第六次作业 首先要先装DNS服务器需要的包 [rootlocalhost ~]# yum install bind -y然后开始配置DNS服务 配置文件位置在/etc/named.conf下&#xff0c;建议先备份 注&#xff1a;备份的时候要cp -a&#xff0c;否则所属组会变&#xff0c;导致文件不可用 然后编辑…

WinForm,可能是Windows上手最快的图形框架了

文章目录Label和控件属性按钮和回调逻辑事件常用控件Label和控件属性 WinForm是一门非常经济实惠的技术&#xff0c;就是说&#xff0c;可以在短时间内学会&#xff0c;并迅速借此进行项目开发。尽管在很多方面不够现代&#xff0c;做出来的东西又Low又丑&#xff0c;但绝大多…

Redis的优惠券秒杀问题(六)超卖问题、一人一单问题

Redis的优惠券秒杀问题&#xff08;六&#xff09;超卖问题、一人一单问题 超卖问题 问题描述 使用Jmeter进行压测 发生超卖问题原因分析 解决方案 悲观锁与乐观锁 1. 版本号 2. CAS法 CAS三大问题&#xff08;题外话&#xff01;&#xff09; CAS三大问题的解…

误差和梯度下降

Datawhale开源学习&#xff0c;机器学习课程&#xff0c;项目地址&#xff1a;https://github.com/datawhalechina/leeml-notes 之前讲了线性模型&#xff0c;提到了误差&#xff0c;那么误差来自哪里&#xff1f;本节内容将介绍「偏差」、「方差」对模型拟合度的影响&#xff…

西电计组II 实验1

西电计组II 实验1 文章目录西电计组II 实验18086汇编 IO操作环境搭建8086汇编 helloworldassumesegmentdb编译链接lstmapobjexesymdobint 21H 软件中断程序设计要求全局变量函数设计putchargetcharprintnewlineinputmemsetexithexbinarycircle程序入口完整代码8086汇编 IO操作 …

wav to image 的数据集制作代码

🍿*★,*:.☆欢迎您/$:*.★* 🍿 目录 背景 正文 总结 背景描述

python+django网吧会员管理系统

系统项目截图 本网吧管理系统主要包括三大功能模块&#xff0c;即管理员、会员、网管。 &#xff08;1&#xff09;管理员模块&#xff1a;首页、个人中心、会员管理、网管管理、商品类型管理、商品信息管理、购买商品信息管理、呼叫网管管理、电脑信息管理、用户上机管理、用户…

汇编语言外中断

外中断 文章目录外中断1.外中断概念2.PC机键盘的处理过程1.外中断概念 CPU在计算机系统中&#xff0c;除了能够执行指令&#xff0c;进行运算以外&#xff0c;还应该能够对外部设备进行控制&#xff0c;接收它们的输入&#xff0c;向它们进行输出&#xff08;I/O能力&#xff0…

如何把家装修出温馨的感觉?极家好不好

如何把家装修出温馨的感觉&#xff1f;极家好不好&#xff1f;想要让家变成理想的样子&#xff01;如何进行&#xff01; 第一步&#xff1a;找一个靠谱的装修团队&#xff0c;特别重要的是项目经理&#xff0c;极家好不好这个真的真的真的很重要‼️ 一个好的装修团队&#xf…

Windbg可以看到Visual Studio中看不到的有效函数调用堆栈

目录 1、Visual Studio中看不到有效的函数调用堆栈 2、使用Windbg调试运行主程序&#xff0c;看到了有效的函数调用堆栈 3、根据函数名和行号去查看对应的C源码&#xff0c;定位问题 4、总结 VC常用功能开发汇总&#xff08;专栏文章列表&#xff0c;欢迎订阅&#xff0c;持…

Frechet distance距离计算原理及python实现

Frechet distance概念 弗雷彻距离(Frechet distance)定义了一种考虑位置和点的次序的计算两条曲线相似度的方法&#xff0c;常用于时间序列相似度度量和轨迹序列相似度度量。该指标的算法可用the walking dog problem来描述&#xff1a;想象一个人用牵引带遛狗的同时&#xff0…

“碳”零排放是什么意思

在气候变化问题上拖拖拉拉之后&#xff0c;澳大利亚联邦政府终于承诺到 2050 年实现净零排放&#xff0c;世界其他大部分地区也是如此。几乎所有发达经济体现在都加强了 2030 年目标&#xff0c;并承诺在本十年将排放量大致减半。 需要记住的重要一点是&#xff0c;如果没有本…