37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试做实验,不管成功与否,都会记录下来—小小的进步或是搞不定的问题,希望能够抛砖引玉。
【Arduino】108种传感器模块系列实验(资料+代码+图形+仿真)
实验二十二:MAX7219点阵显示模块(8X8 LED共阴屏幕)
8×8 LED矩阵 MAX7219显示模块实验所需硬件清单
Arduino Uno开发板 X1
杜邦线 若干(备了9条)
8*8 发光管 1088AS 共阴点阵屏X1
8×8 LED矩阵 MAX7219显示模块X2
Proto Shield 原型扩展板(带mini面包板)X1
程序一:快速扫描所有64个点
(1)Arduino参考开源代码
/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
程序一:快速扫描所有64个点
下载库 https://www.pjrc.com/teensy/arduino_libraries/Matrix_Sprite.zip
实验连线:
VCC → 5V
GND → GND
DIN 接 D11 (MOSI)
CS 接 D10 (SS)
CLK 接 D13 (SCK)
*/
#include <Sprite.h> // 点阵之前的精灵
#include <Matrix.h> // 点阵驱动库
const int numChips = 1;
//定义引脚DIN, CLK, CS
Matrix myLeds = Matrix(11, 13, 10, numChips);
void setup() {
myLeds.clear();//点阵屏初始化
}
void loop() {
byte x, y;
// 一次点亮一个 LED,从左到右扫描
// 从上到下...对于测试矩阵很有用
for (y = 0; y < 8; y++) {
for (x = 0; x < (numChips * 8); x++) {
myLeds.write(x, y, HIGH);
delay(20);
myLeds.write(x, y, LOW);
}
}
}
程序四:四个角落的闪烁光点
(1)实验开源仿真编程(Linkboy V4.63)
程序五:循环变幻对角线光点
实验开源仿真编程(Linkboy V4.63)
程序六:间隔一秒,满屏闪烁
实验开源图形编程(Mind+、编玩边学)
设置满屏亮灯
程序七:三种图案的闪烁变脸
实验开源图形编程(Mind+、编玩边学)
程序八:快速显示字符,逐点刷屏
Arduino参考开源代码
/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
程序八:快速显示字符,逐点刷屏
*/
//导入驱动库
#include "LedControl.h"
//定义点阵屏的引脚,接线DIN-D11,CLK-D13,CS-D10
LedControl lc = LedControl(11, 13, 10, 1);
//我们总是在显示更新之间等待一段时间
unsigned long delaytime = 100;
void setup() {
//MAX72XX 启动时处于省电模式,我们得叫醒
lc.shutdown(0, false);
//将亮度设置为中等值
lc.setIntensity(0, 8);
//并清除显示
lc.clearDisplay(0);
}
//快速显示字符
void writeArduinoOnMatrix() {
//这里是字符的数据
byte a[5] = {B01111110, B10001000, B10001000, B10001000, B01111110};
byte r[5] = {B00111110, B00010000, B00100000, B00100000, B00010000};
byte d[5] = {B00011100, B00100010, B00100010, B00010010, B11111110};
byte u[5] = {B00111100, B00000010, B00000010, B00000100, B00111110};
byte i[5] = {B00000000, B00100010, B10111110, B00000010, B00000000};
byte n[5] = {B00111110, B00010000, B00100000, B00100000, B00011110};
byte o[5] = {B00011100, B00100010, B00100010, B00100010, B00011100};
//现在以一个小的延迟一个一个地显示它们
lc.setRow(0, 0, a[0]);
lc.setRow(0, 1, a[1]);
lc.setRow(0, 2, a[2]);
lc.setRow(0, 3, a[3]);
lc.setRow(0, 4, a[4]);
delay(delaytime);
lc.setRow(0, 0, r[0]);
lc.setRow(0, 1, r[1]);
lc.setRow(0, 2, r[2]);
lc.setRow(0, 3, r[3]);
lc.setRow(0, 4, r[4]);
delay(delaytime);
lc.setRow(0, 0, d[0]);
lc.setRow(0, 1, d[1]);
lc.setRow(0, 2, d[2]);
lc.setRow(0, 3, d[3]);
lc.setRow(0, 4, d[4]);
delay(delaytime);
lc.setRow(0, 0, u[0]);
lc.setRow(0, 1, u[1]);
lc.setRow(0, 2, u[2]);
lc.setRow(0, 3, u[3]);
lc.setRow(0, 4, u[4]);
delay(delaytime);
lc.setRow(0, 0, i[0]);
lc.setRow(0, 1, i[1]);
lc.setRow(0, 2, i[2]);
lc.setRow(0, 3, i[3]);
lc.setRow(0, 4, i[4]);
delay(delaytime);
lc.setRow(0, 0, n[0]);
lc.setRow(0, 1, n[1]);
lc.setRow(0, 2, n[2]);
lc.setRow(0, 3, n[3]);
lc.setRow(0, 4, n[4]);
delay(delaytime);
lc.setRow(0, 0, o[0]);
lc.setRow(0, 1, o[1]);
lc.setRow(0, 2, o[2]);
lc.setRow(0, 3, o[3]);
lc.setRow(0, 4, o[4]);
delay(delaytime);
lc.setRow(0, 0, 0);
lc.setRow(0, 1, 0);
lc.setRow(0, 2, 0);
lc.setRow(0, 3, 0);
lc.setRow(0, 4, 0);
delay(delaytime);
}
/*
此功能连续点亮一些 LED。
该模式将在每一行上重复。
该模式将与行号一起闪烁。
行号 4 (index==3) 将闪烁 4 次,以此类推。
*/
void rows() {
for (int row = 0; row < 8; row++) {
delay(delaytime);
lc.setRow(0, row, B10100000);
delay(delaytime);
lc.setRow(0, row, (byte)0);
for (int i = 0; i < row; i++) {
delay(delaytime);
lc.setRow(0, row, B10100000);
delay(delaytime);
lc.setRow(0, row, (byte)0);
}
}
}
/*
此功能点亮一列中的一些 LED。
该模式将在每一列上重复。
该模式将与列号一起闪烁。
第 4 列(索引==3)将闪烁 4 次,以此类推。
*/
void columns() {
for (int col = 0; col < 8; col++) {
delay(delaytime);
lc.setColumn(0, col, B10100000);
delay(delaytime);
lc.setColumn(0, col, (byte)0);
for (int i = 0; i < col; i++) {
delay(delaytime);
lc.setColumn(0, col, B10100000);
delay(delaytime);
lc.setColumn(0, col, (byte)0);
}
}
}
/*
此功能将点亮矩阵上的每个 Led。
LED 将与行号一起闪烁。
行号 4 (index==3) 将闪烁 4 次,以此类推。
*/
void single() {
for (int row = 0; row < 8; row++) {
for (int col = 0; col < 8; col++) {
delay(delaytime);
lc.setLed(0, row, col, true);
delay(delaytime);
for (int i = 0; i < col; i++) {
lc.setLed(0, row, col, false);
delay(delaytime);
lc.setLed(0, row, col, true);
delay(delaytime);
}
}
}
}
//循环写入
void loop() {
writeArduinoOnMatrix();
rows();
columns();
single();
}
程序九:依序点亮每一颗LED 再依序熄灭每一颗LED
Arduino参考开源代码
/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
程序九://依序点亮每一颗LED 再依序熄灭每一颗LED
引脚定义
DIN = D11
CS = D10
CLK = D13
*/
//依序亮每一颗LED 再依序灭每一颗LED
#include "LedControl.h" //引用 LedControl 库
LedControl lc = LedControl(11, 13, 10, 1); //定义DIN,CLK,CS
void setup() {
lc.shutdown(0, false); // 关闭省电模式
lc.setIntensity(0, 0); // 设定亮度为 0 (介于0~15之间)
lc.clearDisplay(0); // 清除屏幕
}
void loop() {
int col;
int row;
for (col = 0; col < 8; col++) {
for (row = 0; row < 8; row++) {
lc.setLed(0, row, col, 1); // 将Led的列,行设定为亮
delay(100);
}
}
for (col = 7; col >= 0; col--) {
for (row = 7; row >= 0; row--) {
lc.setLed(0, row, col, 0); // 将Led的列,行设定为暗
delay(100);
}
}
}
程序十:依序显示 A,r,d,u,i,n,o
Arduino参考开源代码
/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
程序十:依序显示 A,r,d,u,i,n,o
引脚定义
DIN = D11
CLK = D13
CS = D10
*/
#include "LedControl.h" //引用 LedControl 库
LedControl lc = LedControl(11, 13, 10, 1); //定义DIN,CLK,CS
//字型码A,r,d,u,i,n,o
byte a[5]={B01111110,B10001000,B10001000,B10001000,B01111110};
byte r[5]={B00111110,B00010000,B00100000,B00100000,B00010000};
byte d[5]={B00011100,B00100010,B00100010,B00010010,B11111110};
byte u[5]={B00111100,B00000010,B00000010,B00000100,B00111110};
byte i[5]={B00000000,B00100010,B10111110,B00000010,B00000000};
byte n[5]={B00111110,B00010000,B00100000,B00100000,B00011110};
byte o[5]={B00011100,B00100010,B00100010,B00100010,B00011100};
void setup() {
lc.shutdown(0, false); // 关闭省电模式
lc.setIntensity(0, 15); // 设定亮度为 0 (介于0~15之间)
lc.clearDisplay(0); // 清除屏幕
}
void loop() {
//显示 A
for(int j=0;j<5;j++){
//显示 0~4 行
lc.setColumn(0,j,a[j]);
}
delay(500);
//显示 r
for(int j=0;j<5;j++){
//显示 0~4 行
lc.setColumn(0,j,r[j]);
}
delay(500);
//显示 d
for(int j=0;j<5;j++){
//显示 0~4 行
lc.setColumn(0,j,d[j]);
}
delay(500);
//显示 u
for(int j=0;j<5;j++){
//显示 0~4 行
lc.setColumn(0,j,u[j]);
}
delay(500);
//显示 i
for(int j=0;j<5;j++){
//显示 0~4 行
lc.setColumn(0,j,i[j]);
}
delay(500);
//显示 n
for(int j=0;j<5;j++){
//显示 0~4 行
lc.setColumn(0,j,n[j]);
}
delay(500);
//显示 o
for(int j=0;j<5;j++){
//显示 0~4 行
lc.setColumn(0,j,o[j]);
}
delay(50);
}