“开源LED点阵屏幕/zh”的版本间的差异

来自Microduino Wikipedia
跳转至: 导航搜索
第35行: 第35行:
 
Adafruit-LED-Backpack-Library:https://github.com/adafruit/Adafruit-LED-Backpack-Library
 
Adafruit-LED-Backpack-Library:https://github.com/adafruit/Adafruit-LED-Backpack-Library
  
图形库:
+
测试程序:
Adafruit-GFX-Library:https://github.com/adafruit/Adafruit-GFX-Library(如果需要画图,必须把Adafruit-GFX-Library也拷贝到IDE的libraries里)
+
Microduino_DotMatrix :https://github.com/wasdpkj/Library_for_Microduino/tree/master/_01_Microduino_DotMatrix
 
 
测试程序:'''[[File: _01_Microduino_DotMatrix.zip]]'''
 
  
 
===调试===
 
===调试===
步骤一:将microduino模块叠在一块(Microduino Core + Microduino USBTTL + Microduino-Cube-S1),连接LEDMatrix与Cube-S1的IIC引脚。
+
步骤一:将microduino模块叠在一块(Microduino Core + Microduino USBTTL + Microduino-Cube-S1),LEDMatrix与Cube-S1连接。
  
 
步骤二:下载使用到的库,将其解压到IDE的libraries文件夹内。
 
步骤二:下载使用到的库,将其解压到IDE的libraries文件夹内。
第47行: 第45行:
 
步骤三:下载示例程序并打开,编译通过后选择好板卡(Microduino Core)直接下载。
 
步骤三:下载示例程序并打开,编译通过后选择好板卡(Microduino Core)直接下载。
  
成功的话则可以在点阵屏上显示0到50计数和流动显示mcookie字符,由于点阵分辨率只有8*8,因此20以后的数字屏幕会显示不全。(下一篇教程中会有多个点阵屏幕级联)
+
成功的话则可以依次在点阵屏上显示实心矩形,实心四边形,空心矩形,空心四边形,空心圆,实心圆,直线和流动显示mcookie字符以及0-49计数,由于点阵分辨率只有8*8,因此20以后的数字屏幕会显示不全。(下一篇教程中会有多个点阵屏幕级联)
 
[[File: LEDMatrix.jpg|600px|center|thumb]]
 
[[File: LEDMatrix.jpg|600px|center|thumb]]
  
第55行: 第53行:
  
 
uint8_t Addr[MatrixPix_X][MatrixPix_Y] = {
 
uint8_t Addr[MatrixPix_X][MatrixPix_Y] = {
   { 64}             //IIC address
+
   { 64}
 
};
 
};
 +
 
Matrix display = Matrix(Addr);
 
Matrix display = Matrix(Addr);
 +
 +
static const unsigned char PROGMEM logo[] = {  //高位在前 逐行
 +
  0x00, 0x66, 0x66, 0xDB, 0xDB, 0xDB, 0xDB, 0x00
 +
};
  
 
void setup() {
 
void setup() {
第71行: 第74行:
  
 
   //setLedColor
 
   //setLedColor
   for (int y = 0; y < display.getHeight() * 8; y++) {
+
   for (int y = 0; y < display.getHeight() * 8; y++) {                               //8*8点阵
 
     for (int x = 0; x < display.getWidth() * 8; x++) {
 
     for (int x = 0; x < display.getWidth() * 8; x++) {
 
       randomSeed(analogRead(A0));
 
       randomSeed(analogRead(A0));
第79行: 第82行:
 
   }
 
   }
 
   delay(1000);
 
   delay(1000);
 +
  display.clearDisplay();
 +
 +
  display.setColor(0, 255, 0);
 +
  display.drawBMP(0, 0, 8, 8, logo);  //画点阵位图x,y,w,h,data 
 +
  delay(2000);
 
   display.clearDisplay();
 
   display.clearDisplay();
  
第93行: 第101行:
 
int i;
 
int i;
 
void loop() {
 
void loop() {
 +
  display.setColor(255, 255, 0);
 +
 +
  display.drawBox(0, 0, 8, 8);
 +
  delay(2000);
 +
  display.clearDisplay();
 +
 +
  display.drawRBox(0, 0, 8, 8, 2);
 +
  delay(2000);
 +
  display.clearDisplay();
 +
 +
  display.drawFrame(0, 0, 8, 8);
 +
  delay(2000);
 +
  display.clearDisplay();
 +
 +
  display.drawRFrame(0, 0, 8, 8, 2);
 +
  delay(2000);
 +
  display.clearDisplay();
 +
 +
  display.drawCircle(3, 3, 3);
 +
  delay(2000);
 +
  display.clearDisplay();
 +
 +
  display.drawDisc(3, 3, 3);
 +
  delay(2000);
 +
  display.clearDisplay();
 +
 +
  display.drawLine(0, 0, 7, 7);
 +
  delay(2000);
 +
  display.clearDisplay();
 +
 
   i = display.getStringWidth("mCookie!");
 
   i = display.getStringWidth("mCookie!");
 
   display.setColor(255, 255, 0);
 
   display.setColor(255, 255, 0);
第125行: 第163行:
 
</source>
 
</source>
  
代码uint8_t Addr[MatrixPix_X][MatrixPix_Y] = { 64 }中的64指的是DcolorMatrix模块的iic地址,要设置DcolorMatrix模块的iic地址,先要清楚模块的iic地址表示方式。先按着模块背面的按键,再接上电源,待屏幕变白色后应立即放开手,屏幕有多少个白格子代表iic地址就是多少,比如图中的iic地址就是60。
+
*库函数分析:
 +
**uint8_t Addr[MatrixPix_X][MatrixPix_Y] = { X }设置IIC地址
 +
***X:DcolorMatrix模块的iic地址(要设置DcolorMatrix模块的iic地址,先要清楚模块的iic地址表示方式。先按着模块背面的按键,再接上电源,待屏幕变白色后应立即放开手,屏幕有多少个白格子代表iic地址就是多少,比如图中的iic地址就是60。)
 +
**display.getDeviceAddr(a);
 +
***获得设备IIC地址
 +
**display.getHeight(),display.getWidth() ;
 +
***单个LED的高度,宽度;
 +
**display.setLedColor(x, y, random(0, 255), random(0, 255), random(0, 255))
 +
***随机设置每个LED的颜色
 +
** display.clearDisplay();
 +
***清理屏幕显示
 +
** display.setColor(X,Y,Z)设置全屏颜色;
 +
***X:红色  Y:绿色  Z:蓝色
 +
**display.writeString("string", MODE, time ,z);
 +
***string:任意字符串, MODE:MODE_H横向显示字符/MODE_V竖向显示字符, time:显示时间 ,z:X/Y坐标
 +
**display.drawBox(X,Y,I,W)函数用来画实心矩形;
 +
***X:水平位坐标,Y:纵向坐标,I:长,W:宽
 +
**:display.drawRBox(X, Y, I,W)函数用来画实心四边形;
 +
***X:水平位坐标,Y:纵向坐标,I:长,W:宽
 +
**display.drawFrame(X,Y,I,W)函数用来画空心矩形;
 +
***X:水平位坐标,Y:纵向坐标,I:长,W:宽
 +
**display.drawRFrame(X,Y,I,W,)函数用来画顶角弯曲矩形;
 +
***X:水平位坐标,Y:纵向坐标,I:长,W:宽
 +
**display.drawCircle(X,Y,D)函数用来画空心圆;
 +
***X:水平位坐标,Y:纵向坐标,D:直径
 +
**display.drawDisc(X,Y,D)函数用来画实心圆;
 +
***X:水平位坐标,Y:纵向坐标,D:直径
 +
**display.drawLine(X,Y,M,N)用来画直线;
 +
***X:起点水平位坐标,Y:起点纵向坐标,M:终点水平位坐标,N:终点纵向坐标
 +
 
 
[[File: anjian.jpg|500px|left]]
 
[[File: anjian.jpg|500px|left]]
 
[[File: gezi.png|500px|top]]
 
[[File: gezi.png|500px|top]]

2016年2月22日 (一) 06:49的版本

Language English


概述

  • 项目名称:Microduino LED点阵屏幕
  • 目的:了解Microduino DcolorMatrix 点阵屏幕的原理
  • 难度:低级
  • 耗时:1小时
  • 制作者:Microduino Studio-YLB

材料清单

  • Microduino设备
模块 数量 功能
Microduino-Core/zh 1 核心板
Microduino-USBTTL/zh 1 下载程序
  • 其他设备
Microduino LEDMatrix 1 显示
USB数据线 1 供电,下载

文档

IIC驱动库: Adafruit-LED-Backpack-Library:https://github.com/adafruit/Adafruit-LED-Backpack-Library

测试程序: Microduino_DotMatrix :https://github.com/wasdpkj/Library_for_Microduino/tree/master/_01_Microduino_DotMatrix

调试

步骤一:将microduino模块叠在一块(Microduino Core + Microduino USBTTL + Microduino-Cube-S1),LEDMatrix与Cube-S1连接。

步骤二:下载使用到的库,将其解压到IDE的libraries文件夹内。

步骤三:下载示例程序并打开,编译通过后选择好板卡(Microduino Core)直接下载。

成功的话则可以依次在点阵屏上显示实心矩形,实心四边形,空心矩形,空心四边形,空心圆,实心圆,直线和流动显示mcookie字符以及0-49计数,由于点阵分辨率只有8*8,因此20以后的数字屏幕会显示不全。(下一篇教程中会有多个点阵屏幕级联)

  • 程序
#include "Microduino_Matrix.h"

uint8_t Addr[MatrixPix_X][MatrixPix_Y] = {
  { 64}
};

Matrix display = Matrix(Addr);

static const unsigned char PROGMEM logo[] = {   //高位在前 逐行
  0x00, 0x66, 0x66, 0xDB, 0xDB, 0xDB, 0xDB, 0x00
};

void setup() {
  Serial.begin(115200); // See the connection status in Serial Monitor
  Wire.begin();

  //getDeviceAddr
  for (int a = 0; a < display.getMatrixNum(); a++) {
    Serial.print(display.getDeviceAddr(a));
    Serial.print(" ");
  }
  Serial.println("");

  //setLedColor
  for (int y = 0; y < display.getHeight() * 8; y++) {                               //8*8点阵
    for (int x = 0; x < display.getWidth() * 8; x++) {
      randomSeed(analogRead(A0));
      display.setLedColor(x, y, random(0, 255), random(0, 255), random(0, 255));   //x, y, r, g, b
      delay(5);
    }
  }
  delay(1000);
  display.clearDisplay();

  display.setColor(0, 255, 0);
  display.drawBMP(0, 0, 8, 8, logo);  //画点阵位图x,y,w,h,data  
  delay(2000);
  display.clearDisplay();

  //clearColor
  display.clearColor();
  //writeString H
  display.writeString("Microduino", MODE_H, 20, 0); //string, MODE, time ,y
  display.clearDisplay();
  //writeString V
  display.writeString("Microduino", MODE_V, 20, 0); //string, MODE, time ,x
  display.clearDisplay();
}

int i;
void loop() {
  display.setColor(255, 255, 0);

  display.drawBox(0, 0, 8, 8);
  delay(2000);
  display.clearDisplay();

  display.drawRBox(0, 0, 8, 8, 2);
  delay(2000);
  display.clearDisplay();

  display.drawFrame(0, 0, 8, 8);
  delay(2000);
  display.clearDisplay();

  display.drawRFrame(0, 0, 8, 8, 2);
  delay(2000);
  display.clearDisplay();

  display.drawCircle(3, 3, 3);
  delay(2000);
  display.clearDisplay();

  display.drawDisc(3, 3, 3);
  delay(2000);
  display.clearDisplay();

  display.drawLine(0, 0, 7, 7);
  delay(2000);
  display.clearDisplay();

  i = display.getStringWidth("mCookie!");
  display.setColor(255, 255, 0);
  display.setFontMode(MODE_H);
  for (int a = display.getWidth() * 8; a > -i - display.getWidth() * 8; a--) {
    display.setCursor(a, 0);   //x, y
    display.print("mCookie!");
    delay(20);
  }
  display.clearDisplay();

  i = display.getStringHeight("mCookie!");
  display.setColor(255, 0, 255);
  display.setFontMode(MODE_V);
  for (int a = display.getHeight() * 8; a > -i - display.getHeight() * 8; a--) {
    display.setCursor(0, a);   //x, y
    display.print("mCookie!");
    delay(20);
  }
  display.clearDisplay();

  unsigned long timer = millis();
  display.setColor(0, 255, 255);
  display.setFontMode(MODE_H);
  while (millis() - timer < 5000) {
    display.setCursor(0, 0);   //x, y
    display.print((millis() - timer) / 100);
    delay(20);
  }
  display.clearDisplay();
}
  • 库函数分析:
    • uint8_t Addr[MatrixPix_X][MatrixPix_Y] = { X }设置IIC地址
      • X:DcolorMatrix模块的iic地址(要设置DcolorMatrix模块的iic地址,先要清楚模块的iic地址表示方式。先按着模块背面的按键,再接上电源,待屏幕变白色后应立即放开手,屏幕有多少个白格子代表iic地址就是多少,比如图中的iic地址就是60。)
    • display.getDeviceAddr(a);
      • 获得设备IIC地址
    • display.getHeight(),display.getWidth() ;
      • 单个LED的高度,宽度;
    • display.setLedColor(x, y, random(0, 255), random(0, 255), random(0, 255))
      • 随机设置每个LED的颜色
    • display.clearDisplay();
      • 清理屏幕显示
    • display.setColor(X,Y,Z)设置全屏颜色;
      • X:红色 Y:绿色 Z:蓝色
    • display.writeString("string", MODE, time ,z);
      • string:任意字符串, MODE:MODE_H横向显示字符/MODE_V竖向显示字符, time:显示时间 ,z:X/Y坐标
    • display.drawBox(X,Y,I,W)函数用来画实心矩形;
      • X:水平位坐标,Y:纵向坐标,I:长,W:宽
    • :display.drawRBox(X, Y, I,W)函数用来画实心四边形;
      • X:水平位坐标,Y:纵向坐标,I:长,W:宽
    • display.drawFrame(X,Y,I,W)函数用来画空心矩形;
      • X:水平位坐标,Y:纵向坐标,I:长,W:宽
    • display.drawRFrame(X,Y,I,W,)函数用来画顶角弯曲矩形;
      • X:水平位坐标,Y:纵向坐标,I:长,W:宽
    • display.drawCircle(X,Y,D)函数用来画空心圆;
      • X:水平位坐标,Y:纵向坐标,D:直径
    • display.drawDisc(X,Y,D)函数用来画实心圆;
      • X:水平位坐标,Y:纵向坐标,D:直径
    • display.drawLine(X,Y,M,N)用来画直线;
      • X:起点水平位坐标,Y:起点纵向坐标,M:终点水平位坐标,N:终点纵向坐标

500px

如果屏幕亮的时候时候所有格子都是白色也不可认为此模块的iic地址就是64,可能会溢出,需要手动调。慢按背面按键是加一,快按背面按键是减一,按住不放即可设置成功。(例如想从60设置成64,即慢速按按键加到64时不松手长按等屏幕关闭即可)

注意问题

  • IIC地址更换