在本Arduino教程中,我们将学习如何使用MAX7219驱动程序和Arduino板控制8×8 LED矩阵。你可以观看下面的视频或阅读下面的书面教程了解更多细节。
概述
我们将制作三个例子,第一个我们将解释MAX7219的基本工作原理,在第二个例子中,我们将看到8×8 LED矩阵工作的滚动文本如何,并且在第三个例子中我们将控制它们通过蓝牙和自定义构建Android应用程序。
MAX7219
现在让我们仔细看看MAX7219驱动程序。该IC能够驱动64个单独的LED,同时仅使用3条电线与Arduino通信,以及我们可以菊花链多个驱动器和矩阵以及仍然使用相同的3根线。
64个LED由IC的16个输出引脚驱动。现在的问题是这是如何实现的。嗯,同时亮起的最大LED数实际上是八个。LED布置为8×8套行和列。因此MAX7219在非常短的时间段内激活每个列,同时它也驱动每行。因此,通过快速切换柱子并排行人眼只会注意到连续光。
注意一个常见的8×8 LED矩阵的引脚是如何内部安排的,所以如果你正在建立自己的矩阵,你应该考虑它。还需要注意的是,MAX7219的常用接线板在5V和IC引脚18之间有一个电阻。电阻器用于设置led的亮度或电流。
来自IC的数据表的下表显示了我们应根据我们LED的正向电压降的电阻器的值。
电路原理图
现在让我们将8×8 LED矩阵模块连接到Arduino板。这是电路原理图:
模块的VCC和GND接Arduino的5V和GND引脚,其他三个引脚DIN、CLK和CS接Arduino板的任何数字引脚。如果我们想要连接多个模块,我们只需将以前的插接板的输出引脚连接到新模块的输入引脚。实际上这些引脚都是一样的,除了之前板的DOUT引脚换成了新板的DIN引脚。
您可以从下面的链接获取此Arduino教程所需的组件:
- 8×8 LED MAX7219点阵模块.....亚马逊/伯格多德/aliexpress.
- HC-05蓝牙模块 ...........................亚马逊/伯格多德/aliexpress.
- Arduino Board ..........................................亚马逊/伯格多德/aliexpress.
- 面包板和跳跃电线.....................亚马逊/伯格多德/aliexpress.
必威外围提钱披露:这些是联盟链接。作为亚马逊助理,我从合格购买中获得。
基本的MAX7219 Arduino代码
一旦我们连接模块,我们就准备好看看了第一个示例的Arduino代码。我们将使用可从中下载的MaxMatrix库GitHub。
/ * 8x8 LED矩阵MAX7219示例01由Dejan Nedelkovski,www.howtomechatronicbet188官方网站s.com基于以下图书馆:GitHub |Riyas-org / max7219 https://github.com/riyas-org/max7219 * / #includeint din = 7;// MAX7219模块INT CLK = 6的DIN引脚;// MAX7219模块INT CS = 5的CLK引脚;// MAX7219模块的CS引脚INT MAXINUSE = 1;MaxMatrix M(DIN,CS,CLK,MAXINUSE);Char A [] = {4,8,B01111110,B00010001,B00010001,B01111110,};Char B [] = {4,8,B01111111,B01001001,B01001001,B00110110,};Char Smile01 [] = {8,8,B00111100,B01000010,121001,2100001,B10100001,B10010101,B01000010,B00111100};CHAR SMILE02 [] = {8,8,B00111100,B01000010,12100101,B10010001,B10010001,B10010101,B01000010,B00111100}; char smile03[] = {8, 8, B00111100, B01000010, B10100101, B10010001, B10010001, B10100101, B01000010, B00111100 }; void setup() { m.init(); // MAX7219 initialization m.setIntensity(8); // initial led matrix intensity, 0-15 } void loop() { // Seting the LEDs On or Off at x,y or row,column position m.setDot(6,2,true); delay(1000); m.setDot(6,3,true); delay(1000); m.clear(); // Clears the display for (int i=0; i<8; i++){ m.setDot(i,i,true); delay(300); } m.clear(); // Displaying the character at x,y (upper left corner of the character) m.writeSprite(2, 0, A); delay(1000); m.writeSprite(2, 0, B); delay(1000); m.writeSprite(0, 0, smile01); delay(1000); m.writeSprite(0, 0, smile02); delay(1000); m.writeSprite(0, 0, smile03); delay(1000); for (int i=0; i<8; i++){ m.shiftLeft(false,false); delay(300); } m.clear(); }
描述:因此,首先,我们需要包含MaxMatrix.h库,定义模块已连接的引脚,设置我们使用的模块和定义MaxMatrix对象的数量。
为了显示字符,我们需要在字符或字节数组中定义它们,这里有几个例子。我们可以注意到比特是如何形成字符的实际上是0和1。在本例中,它们被旋转了90度,但是库中的示例建议以这种方式使用它们,以便稍后更容易实现用于滚动文本的shiftLeft自定义函数。
在设置部分中,我们只需要初始化模块并设置led的亮度。在循环部分中,使用setDot()函数我们可以设置任意单个LED在X, Y或Row/ Column位置亮起,使用clear()函数我们可以清除显示。
为了显示预定义的字符,我们使用writeSprite()函数,前两个参数是字符左上角的X和Y位置。最后使用shiftLeft()函数将字符移动或滚动到左边。
8×8 LED矩阵滚动Arduino代码
接下来让我们看一下滚动文本的例子,看看有什么不同。在代码下面,您将看到它的描述。
/ * 8x8 LED矩阵MAX7219滚动文本示例根据以下库:GitHub |Riyas-org / max7219 https://github.com/riyas-org/max7219 * / #include#include progmem const unsigned char ch [] = {3,8,b00000000,B00000000,B00000000,B00000000,B00000000,B00000000,// Space 1,8,B01011111,B00000000,B00000000,B00000000,B00000000,//!3,8,B00000011,B00000000,B00000011,B00000000,B00000000,//“5,8,B00010100,B00111110,B000100,B00111110,B000100,//#4,8,B00100100,B01101010,B001011,B00010010,B00000000,//US $ 5,8,B01100011,B00010011,B00001000,121100100,B01100011110,B01001001,B010110,B01001001,B010110,B00100000,B01010000,//&1,8,B00000011,B00000000,B00000000,B00000000,B00000000,//'3,8,B00011100,B00100010,B01000001,B00000000,B00000000,//(3,8,B01000001,B00100010,B00011100,B00000000,B00000000,//)5,8,B00101000,B00011000,B00001110,B00011000,B00101000,// * 5,8,B00001000,B00001000,B00111110,B00001000,B00001000,// + 2,8,B10110000,B01110000,B00000000,B00000000,B00000000,// 4,8,B00001000,B00001000,B00001000,B00001000,B00000000,B0000000000,B00000000,// - 2,8,B01100000,B01100000,B00000000,B00000000,B00000000,//。4,8,B01100000,B00011000,B00000110,B00000001,B00000000,// / 4,8,B00111110,B01000001,B01000001,B00111110,B00000000,// 0 3,8,B0100.0.0.10., B01111111, B01000000, B00000000, B00000000, // 1 4, 8, B01100010, B01010001, B01001001, B01000110, B00000000, // 2 4, 8, B00100010, B01000001, B01001001, B00110110, B00000000, // 3 4, 8, B00011000, B00010100, B00010010, B01111111, B00000000, // 4 4, 8, B00100111, B01000101, B01000101, B00111001, B00000000, // 5 4, 8, B00111110, B01001001, B01001001, B00110000, B00000000, // 6 4, 8, B01100001, B00010001, B00001001, B00000111, B00000000, // 7 4, 8, B00110110, B01001001, B01001001, B00110110, B00000000, // 8 4, 8, B00000110, B01001001, B01001001, B00111110, B00000000, // 9 2, 8, B01010000, B00000000, B00000000, B00000000, B00000000, // : 2, 8, B10000000, B01010000, B00000000, B00000000, B00000000, // ; 3, 8, B00010000, B00101000, B01000100, B00000000, B00000000, // < 3, 8, B00010100, B00010100, B00010100, B00000000, B00000000, // = 3, 8, B01000100, B00101000, B00010000, B00000000, B00000000, // > 4, 8, B00000010, B01011001, B00001001, B00000110, B00000000, // ? 5, 8, B00111110, B01001001, B01010101, B01011101, B00001110, // @ 4, 8, B01111110, B00010001, B00010001, B01111110, B00000000, // A 4, 8, B01111111, B01001001, B01001001, B00110110, B00000000, // B 4, 8, B00111110, B01000001, B01000001, B00100010, B00000000, // C 4, 8, B01111111, B01000001, B01000001, B00111110, B00000000, // D 4, 8, B01111111, B01001001, B01001001, B01000001, B00000000, // E 4, 8, B01111111, B00001001, B00001001, B00000001, B00000000, // F 4, 8, B00111110, B01000001, B01001001, B01111010, B00000000, // G 4, 8, B01111111, B00001000, B00001000, B01111111, B00000000, // H 3, 8, B01000001, B01111111, B01000001, B00000000, B00000000, // I 4, 8, B00110000, B01000000, B01000001, B00111111, B00000000, // J 4, 8, B01111111, B00001000, B00010100, B01100011, B00000000, // K 4, 8, B01111111, B01000000, B01000000, B01000000, B00000000, // L 5, 8, B01111111, B00000010, B00001100, B00000010, B01111111, // M 5, 8, B01111111, B00000100, B00001000, B00010000, B01111111, // N 4, 8, B00111110, B01000001, B01000001, B00111110, B00000000, // O 4, 8, B01111111, B00001001, B00001001, B00000110, B00000000, // P 4, 8, B00111110, B01000001, B01000001, B10111110, B00000000, // Q 4, 8, B01111111, B00001001, B00001001, B01110110, B00000000, // R 4, 8, B01000110, B01001001, B01001001, B00110010, B00000000, // S 5, 8, B00000001, B00000001, B01111111, B00000001, B00000001, // T 4, 8, B00111111, B01000000, B01000000, B00111111, B00000000, // U 5, 8, B00001111, B00110000, B01000000, B00110000, B00001111, // V 5, 8, B00111111, B01000000, B00111000, B01000000, B00111111, // W 5, 8, B01100011, B00010100, B00001000, B00010100, B01100011, // X 5, 8, B00000111, B00001000, B01110000, B00001000, B00000111, // Y 4, 8, B01100001, B01010001, B01001001, B01000111, B00000000, // Z 2, 8, B01111111, B01000001, B00000000, B00000000, B00000000, // [ 4, 8, B00000001, B00000110, B00011000, B01100000, B00000000, // \ backslash 2, 8, B01000001, B01111111, B00000000, B00000000, B00000000, // ] 3, 8, B00000010, B00000001, B00000010, B00000000, B00000000, // hat 4, 8, B01000000, B01000000, B01000000, B01000000, B00000000, // _ 2, 8, B00000001, B00000010, B00000000, B00000000, B00000000, // ` 4, 8, B00100000, B01010100, B01010100, B01111000, B00000000, // a 4, 8, B01111111, B01000100, B01000100, B00111000, B00000000, // b 4, 8, B00111000, B01000100, B01000100, B00101000, B00000000, // c 4, 8, B00111000, B01000100, B01000100, B01111111, B00000000, // d 4, 8, B00111000, B01010100, B01010100, B00011000, B00000000, // e 3, 8, B00000100, B01111110, B00000101, B00000000, B00000000, // f 4, 8, B10011000, B10100100, B10100100, B01111000, B00000000, // g 4, 8, B01111111, B00000100, B00000100, B01111000, B00000000, // h 3, 8, B01000100, B01111101, B01000000, B00000000, B00000000, // i 4, 8, B01000000, B10000000, B10000100, B01111101, B00000000, // j 4, 8, B01111111, B00010000, B00101000, B01000100, B00000000, // k 3, 8, B01000001, B01111111, B01000000, B00000000, B00000000, // l 5, 8, B01111100, B00000100, B01111100, B00000100, B01111000, // m 4, 8, B01111100, B00000100, B00000100, B01111000, B00000000, // n 4, 8, B00111000, B01000100, B01000100, B00111000, B00000000, // o 4, 8, B11111100, B00100100, B00100100, B00011000, B00000000, // p 4, 8, B00011000, B00100100, B00100100, B11111100, B00000000, // q 4, 8, B01111100, B00001000, B00000100, B00000100, B00000000, // r 4, 8, B01001000, B01010100, B01010100, B00100100, B00000000, // s 3, 8, B00000100, B00111111, B01000100, B00000000, B00000000, // t 4, 8, B00111100, B01000000, B01000000, B01111100, B00000000, // u 5, 8, B00011100, B00100000, B01000000, B00100000, B00011100, // v 5, 8, B00111100, B01000000, B00111100, B01000000, B00111100, // w 5, 8, B01000100, B00101000, B00010000, B00101000, B01000100, // x 4, 8, B10011100, B10100000, B10100000, B01111100, B00000000, // y 3, 8, B01100100, B01010100, B01001100, B00000000, B00000000, // z 3, 8, B00001000, B00110110, B01000001, B00000000, B00000000, // { 1, 8, B01111111, B00000000, B00000000, B00000000, B00000000, // | 3, 8, B01000001, B00110110, B00001000, B00000000, B00000000, // } 4, 8, B00001000, B00000100, B00001000, B00000100, B00000000, // ~ }; int DIN = 7; // DIN pin of MAX7219 module int CLK = 6; // CLK pin of MAX7219 module int CS = 5; // CS pin of MAX7219 module int maxInUse = 2; MaxMatrix m(DIN, CS, CLK, maxInUse); byte buffer[10]; char text[]= "HowToMechatronics.com "; // Scrolling text void setup() { m.init(); // module initialize m.setIntensity(15); // dot matix intensity 0-15 } void loop() { printStringWithShift(text, 100); // (text, scrolling speed) } // Display=the extracted characters with scrolling void printCharWithShift(char c, int shift_speed) { if (c < 32) return; c -= 32; memcpy_P(buffer, CH + 7 * c, 7); m.writeSprite(32, 0, buffer); m.setColumn(32 + buffer[0], 0); for (int i = 0; i < buffer[0] + 1; i++) { delay(shift_speed); m.shiftLeft(false, false); } } // Extract the characters from the text string void printStringWithShift(char* s, int shift_speed) { while (*s != 0) { printCharWithShift(*s, shift_speed); s++; } }
描述:在这里,我们必须包括一个用于Progmen的附加库,该库是可变修改器,它用于将数据存储在闪存中而不是SRAM中。当我们有一个较大的变量数据库时,这是静态的,如在这种情况下定义字母和字符,最好将它们存储在闪存中,因为它与SRAM的2K字节相比它更大,32k字节。
接下来,我们使用字符数组定义滚动文本,在循环部分,自定义函数printStringWithShift用第二个参数以毫秒为单位在LED矩阵上打印滚动文本。这个自定义函数做的第一件事是从文本字符串中提取字符,然后在led矩阵上显示这些滚动字符。
Android应用程序,用于通过蓝牙控制8×8 LED矩阵
一旦我们了解了MAX7219的工作原理,现在我们可以制作第三个例子,这是一个实用的Arduino项目,我们将建立一个自定义Android应用程序来通过蓝牙通信控制LED矩阵。在我们继续之前,我会建议您查看我的详细教程,就如何使用HC-05蓝牙模块以及如何建立自定义使用麻省理工学院app Inventor在线应用程序的Android应用程序。
这是Arduino代码,现在让我们看看与前一个例子相比的修改。
/ * 8x8 LED矩阵MAX7219通过蓝牙滚动文本Android控制由Dejan Nedelkovski,www.www.mfxpo.com基于以下图书馆:GitHub |bet188官方网站Riyas-org / max7219 https://github.com/riyas-org/max7219 * / #include#include #include progmem const unsigned char ch []= {3,8,B00000000,B00000000,B00000000,B00000000,B00000000,// Space 1,8,B01011111,B00000000,B00000000,B00000000,B00000000,//!3,8,B00000011,B00000000,B00000011,B00000000,B00000000,//“5,8,B00010100,B00111110,B000100,B00111110,B000100,//#4,8,B00100100,B01101010,B001011,B00010010,B00000000,//US $ 5,8,B01100011,B00010011,B00001000,121100100,B01100011110,B01001001,B010110,B01001001,B010110,B00100000,B01010000,//&1,8,B00000011,B00000000,B00000000,B00000000,B00000000,//'3,8,B00011100,B00100010,B01000001,B00000000,B00000000,//(3,8,B01000001,B00100010,B00011100,B00000000,B00000000,//)5,8,B00101000,B00011000,B00001110,B00011000,B00101000,// * 5,8,B00001000,B00001000,B00111110,B00001000,B00001000,// + 2,8,B10110000,B01110000,B00000000,B00000000,B00000000,// 4,8,B00001000,B00001000,B00001000,B00001000,B00000000,B0000000000,B00000000,// - 2,8,B01100000,B01100000,B00000000,B00000000,B00000000,//。4,8,B01100000,B00011000,B00000110,B00000001,B00000000,// / 4,8,B00111110,B01000001,B01000001,B00111110,B00000000,// 0 3,8,B0100.0.0.10., B01111111, B01000000, B00000000, B00000000, // 1 4, 8, B01100010, B01010001, B01001001, B01000110, B00000000, // 2 4, 8, B00100010, B01000001, B01001001, B00110110, B00000000, // 3 4, 8, B00011000, B00010100, B00010010, B01111111, B00000000, // 4 4, 8, B00100111, B01000101, B01000101, B00111001, B00000000, // 5 4, 8, B00111110, B01001001, B01001001, B00110000, B00000000, // 6 4, 8, B01100001, B00010001, B00001001, B00000111, B00000000, // 7 4, 8, B00110110, B01001001, B01001001, B00110110, B00000000, // 8 4, 8, B00000110, B01001001, B01001001, B00111110, B00000000, // 9 2, 8, B01010000, B00000000, B00000000, B00000000, B00000000, // : 2, 8, B10000000, B01010000, B00000000, B00000000, B00000000, // ; 3, 8, B00010000, B00101000, B01000100, B00000000, B00000000, // < 3, 8, B00010100, B00010100, B00010100, B00000000, B00000000, // = 3, 8, B01000100, B00101000, B00010000, B00000000, B00000000, // > 4, 8, B00000010, B01011001, B00001001, B00000110, B00000000, // ? 5, 8, B00111110, B01001001, B01010101, B01011101, B00001110, // @ 4, 8, B01111110, B00010001, B00010001, B01111110, B00000000, // A 4, 8, B01111111, B01001001, B01001001, B00110110, B00000000, // B 4, 8, B00111110, B01000001, B01000001, B00100010, B00000000, // C 4, 8, B01111111, B01000001, B01000001, B00111110, B00000000, // D 4, 8, B01111111, B01001001, B01001001, B01000001, B00000000, // E 4, 8, B01111111, B00001001, B00001001, B00000001, B00000000, // F 4, 8, B00111110, B01000001, B01001001, B01111010, B00000000, // G 4, 8, B01111111, B00001000, B00001000, B01111111, B00000000, // H 3, 8, B01000001, B01111111, B01000001, B00000000, B00000000, // I 4, 8, B00110000, B01000000, B01000001, B00111111, B00000000, // J 4, 8, B01111111, B00001000, B00010100, B01100011, B00000000, // K 4, 8, B01111111, B01000000, B01000000, B01000000, B00000000, // L 5, 8, B01111111, B00000010, B00001100, B00000010, B01111111, // M 5, 8, B01111111, B00000100, B00001000, B00010000, B01111111, // N 4, 8, B00111110, B01000001, B01000001, B00111110, B00000000, // O 4, 8, B01111111, B00001001, B00001001, B00000110, B00000000, // P 4, 8, B00111110, B01000001, B01000001, B10111110, B00000000, // Q 4, 8, B01111111, B00001001, B00001001, B01110110, B00000000, // R 4, 8, B01000110, B01001001, B01001001, B00110010, B00000000, // S 5, 8, B00000001, B00000001, B01111111, B00000001, B00000001, // T 4, 8, B00111111, B01000000, B01000000, B00111111, B00000000, // U 5, 8, B00001111, B00110000, B01000000, B00110000, B00001111, // V 5, 8, B00111111, B01000000, B00111000, B01000000, B00111111, // W 5, 8, B01100011, B00010100, B00001000, B00010100, B01100011, // X 5, 8, B00000111, B00001000, B01110000, B00001000, B00000111, // Y 4, 8, B01100001, B01010001, B01001001, B01000111, B00000000, // Z 2, 8, B01111111, B01000001, B00000000, B00000000, B00000000, // [ 4, 8, B00000001, B00000110, B00011000, B01100000, B00000000, // \ backslash 2, 8, B01000001, B01111111, B00000000, B00000000, B00000000, // ] 3, 8, B00000010, B00000001, B00000010, B00000000, B00000000, // hat 4, 8, B01000000, B01000000, B01000000, B01000000, B00000000, // _ 2, 8, B00000001, B00000010, B00000000, B00000000, B00000000, // ` 4, 8, B00100000, B01010100, B01010100, B01111000, B00000000, // a 4, 8, B01111111, B01000100, B01000100, B00111000, B00000000, // b 4, 8, B00111000, B01000100, B01000100, B00101000, B00000000, // c 4, 8, B00111000, B01000100, B01000100, B01111111, B00000000, // d 4, 8, B00111000, B01010100, B01010100, B00011000, B00000000, // e 3, 8, B00000100, B01111110, B00000101, B00000000, B00000000, // f 4, 8, B10011000, B10100100, B10100100, B01111000, B00000000, // g 4, 8, B01111111, B00000100, B00000100, B01111000, B00000000, // h 3, 8, B01000100, B01111101, B01000000, B00000000, B00000000, // i 4, 8, B01000000, B10000000, B10000100, B01111101, B00000000, // j 4, 8, B01111111, B00010000, B00101000, B01000100, B00000000, // k 3, 8, B01000001, B01111111, B01000000, B00000000, B00000000, // l 5, 8, B01111100, B00000100, B01111100, B00000100, B01111000, // m 4, 8, B01111100, B00000100, B00000100, B01111000, B00000000, // n 4, 8, B00111000, B01000100, B01000100, B00111000, B00000000, // o 4, 8, B11111100, B00100100, B00100100, B00011000, B00000000, // p 4, 8, B00011000, B00100100, B00100100, B11111100, B00000000, // q 4, 8, B01111100, B00001000, B00000100, B00000100, B00000000, // r 4, 8, B01001000, B01010100, B01010100, B00100100, B00000000, // s 3, 8, B00000100, B00111111, B01000100, B00000000, B00000000, // t 4, 8, B00111100, B01000000, B01000000, B01111100, B00000000, // u 5, 8, B00011100, B00100000, B01000000, B00100000, B00011100, // v 5, 8, B00111100, B01000000, B00111100, B01000000, B00111100, // w 5, 8, B01000100, B00101000, B00010000, B00101000, B01000100, // x 4, 8, B10011100, B10100000, B10100000, B01111100, B00000000, // y 3, 8, B01100100, B01010100, B01001100, B00000000, B00000000, // z 3, 8, B00001000, B00110110, B01000001, B00000000, B00000000, // { 1, 8, B01111111, B00000000, B00000000, B00000000, B00000000, // | 3, 8, B01000001, B00110110, B00001000, B00000000, B00000000, // } 4, 8, B00001000, B00000100, B00001000, B00000100, B00000000, // ~ }; int dIn = 7; // DIN pin of MAX7219 module int clk = 6; // CLK pin of MAX7219 module int cs = 5; // CS pin of MAX7219 module int maxInUse = 2; // Number of MAX7219's connected MaxMatrix m(dIn, cs, clk, maxInUse); SoftwareSerial Bluetooth(8, 7); // Bluetooth byte buffer[10]; char incomebyte; int scrollSpeed = 100; char text[100] = "HowToMechatronics.com "; // Initial text message int brightness = 15; int count = 0; char indicator; void setup() { m.init(); // MAX7219 initialization m.setIntensity(brightness); // initial led matrix intensity, 0-15 Bluetooth.begin(38400); // Default communication rate of the Bluetooth module } void loop() { // Printing the text printStringWithShift(text, scrollSpeed); if (Bluetooth.available()) { // Checks whether data is comming from the serial port indicator = Bluetooth.read(); // Starts reading the serial port, the first byte from the incoming data // If we have pressed the "Send" button from the Android App, clear the previous text if (indicator == '1') { for (int i = 0; i < 100; i++) { text[i] = 0; m.clear(); } // Read the whole data/string comming from the phone and put it into text[] array. while (Bluetooth.available()) { incomebyte = Bluetooth.read(); text[count] = incomebyte; count++; } count = 0; } // Adjusting the Scrolling Speed else if (indicator == '2') { String sS = Bluetooth.readString(); scrollSpeed = 150 - sS.toInt(); // Milliseconds, subtraction because lower value means higher scrolling speed } // Adjusting the brightness else if (indicator == '3') { String sB = Bluetooth.readString(); brightness = sB.toInt(); m.setIntensity(brightness); } } } void printCharWithShift(char c, int shift_speed) { if (c < 32) return; c -= 32; memcpy_P(buffer, CH + 7 * c, 7); m.writeSprite(32, 0, buffer); m.setColumn(32 + buffer[0], 0); for (int i = 0; i < buffer[0] + 1; i++) { delay(shift_speed); m.shiftLeft(false, false); } } void printStringWithShift(char* s, int shift_speed) { while (*s != 0) { printCharWithShift(*s, shift_speed); s++; } } void printString(char* s) { int col = 0; while (*s != 0) { if (*s < 32) continue; char c = *s - 32; memcpy_P(buffer, CH + 7 * c, 7); m.writeSprite(col, 0, buffer); m.setColumn(col + buffer[0], 0); col += buffer[0] + 1; s++; } }
描述:首先,我们需要包含软件中的Softwareserial.h库,该库将启用蓝牙通信并定义程序所需的一些变量。在设置部分中,我们需要以每秒38400位的默认波特率初始化蓝牙。我将初始文本消息设置为“www.mfxpo.com”,具有1bet188官方网站00毫秒的延迟滚动速度。
接下来,在循环部分中,使用Bluetooth.available()函数检查是否有来自串行端口的传入数据,如果使用Bluetooth是真的。Read函数我们开始读取串口,每次迭代一个字节。因此,第一个输入的字节将始终存储到“指示器”变量,并根据它选择是否我们将改变文本信息,滚动速度或LED矩阵的亮度。
如果我们看看Android应用程序代码块,我们可以注意到单击“发送”按钮时,首先,我们将在这种情况下发送指示字节“1”,这意味着我们想要更改文本消息。为此,在Arduino侧,我们将清除整个字符阵列,并清除LED矩阵显示。然后在“while”循环中,我们将在串行端口中读取其余数据,这是在Android应用程序的文本框中键入的消息。
在指示变量为“2”的情况下,这意味着我们已更改滚动速度滑块的位置,因此我们将使用Bluetooth.readString()函数读取其新值并调整滚动速度。以同样的方式调整LED的亮度。
在这里你可以下载Android应用程序:
这就是本教程的全部内容,如果你有任何问题,可以使用下面的评论部分。
谢谢你的项目。我使用AVR微控制器制作了这个项目,但现在感谢您的教程,以便我可以再次从Arduino赚钱
MAX 7219点阵是唯一可能的例子?是否可以使用不同的点矩阵?
确保您可以通过不同的点阵实现此功能,但您可能需要不同的代码。
我很喜欢你的视频,其中一些信息量最大,但是这个却不能正常工作。我在矩阵上阅读mechatronics.com没有问题,但不能通过BT与它沟通。没有应用程序功能为我工作,你不使用arduino上的tx/rx引脚吗?似乎你在矩阵中使用7 8和7。我希望这很清楚。几个星期以来,我一直在想办法解决这个问题。我们正在为教堂做一个标志,并尝试使用这个,请帮助!!
没错,针9和针8是蓝牙,针7是Din,针6 CLK,针5 CS。我修改了代码。
此外,您还可以查看关于使用Arduino,Bluetooth,Android和App Inventor的其他详细教程。
你好,但它去了Rx,TX -OF模块Bluethoot的两个引脚9-8谢谢。
Tx -引脚8,RX -引脚9
亲爱的Dejan,谢谢您为您的笔记本教程和您的意愿与全球Arduino社区分享。现在我真的非常喜欢你的意见/帮助。
我在文章中做了一切,并且消息滚动完美,但我无法将我的智能手机与蓝牙设备连接。我看到了BT05,但是当我尝试conenct时,我没有回复它。似乎可能是问题是HC-05在模式下,而不是数据模式,这就是为什么红色LED闪烁缓慢闪烁(每2秒一次1次)。你有什么想法可能导致过错吗?同样在串行监控时,我按下的东西时,我不会收到“确定”作为模块的回复。
该代码需要以下更正:软件衰退BTSerial(8,9);
PIN 7已经占用了!
你应该先试试基本Arduino蓝牙教程中的例子。您可能错误地连接了蓝牙模块(或定义了错误的引脚),或者您的模型有不同的默认波特率9600而不是38400。
哇!它是如此教育,请我使用Arduino 1.6.12版本上传,但它是抱怨-致命的错误:MaxMatrix.h:没有这样的文件或目录。所以我不知道是否是使用的版本导致的。
听起来你尚未安装库。
我可以在序列中进行多少这些LED矩阵,如果我将其成10×104(13个LED矩阵8 * 8)?提前致谢
推荐的数字是8个模块。
这是一个伟大的项目,但它在蓝牙草图上有一些困难
经过一些修改它,它工作很好,就像一个魅力,我可以请使用蓝牙app aia文件
应用文件可以在文章的底部找到。
优秀的项目,所有工作正常,除了我不能从我的Android(版本4.1.2)使用应用程序连接。Android蓝牙设置看到的HC-05和配对与它OK,但当点击应用程序上的“连接”,它说“未连接”。已经测试了HC-05与其他设备,它工作良好-任何想法?
谢谢你。
不太确定,但我想你没有多少关于它。可能麻省理工学院App Inventor与较旧的Android版本不兼容。
谢谢回复;我在手机上加载了应用程序,它可以正常工作,所以你是对的。添加了另外4个LED矩阵板,总共制作8个,并获得以下问题:
从1到8的LED模块以最近的arduino开始编号,程序工作正常,最多4个模块,更改为5(MAXINUSE = 5),显示屏跨模块1开始半路,也不会在第一个上显示模块6的一半。
将模块的数量更改为6到8,我有同样的问题,但在一个模块上移动。设置为4,我获得两次的相同消息 - 在1到4和5到8上,所以我知道所有模块都正常工作,无法找到接线的任何问题。
你试过这个有8个模块的程序吗?
您好,我有一个问题的问题。
左下块有一个消息状态的声明集。文本……
我不知道这是从哪里来的,所以我不能发送任何文本到hc 05。
是否有可能你上传的。aia文件的应用程序发明者?
请立即查看下载,我更新了文章并添加了.Aia文件。
作为我之前的帖子的后续,我现在已经为这个项目制作了一个印刷电路板,与6个模块连接,它运行良好(30分钟,没有问题)。当我增加一个或两个以上的模块,大约1分钟后,各种故障发生-整个模块停止显示和/或随机led闪烁。我使用一个5伏电源供应能力供应几个安培,所以不认为这是一个电源问题。还增加了跨所有电压轨到每个模块的解耦电容。也曾尝试在CS、CLOCK和DIN线路上添加上拉电阻,然后再添加下拉电阻,但没有任何改进。如果我关机再开机,它会正常工作一分钟左右。只是想知道是否有人已经将所有八个模块连接起来。
谢谢你的跟进,你做了不少工作才到达那里。我很抱歉,我不能给任何具体的帮助在这一点上,因为我没有,也没有尝试与8个模块。用另一个Arduino板试试怎么样?
嗨德国
谢谢你的回复,你100%正确。用Uno和Nano尝试过它,两者都按预期工作;没有故障!用2个其他专业迷你重新尝试,这两个都给出了相同的问题,所以我有一个糟糕的批次,或者亲迷你不合适。现在将使用该项目的Nano。再次感谢您的帮助。
John&Dejan先生......
我很遗憾加入这方面。可能是我的答案会帮助你靠问题。
我的问题是供应8个点阵模块的5V是从哪里来的?是从arduino还是从外部电源?据我所知arduino的5V引脚只能在有限的安培下供应模块,所以当你在高亮度下使用6个或8个点阵时,可能会掉下来。
我的建议是设置亮度为(1)或使用一个外部5V电源直接到dotmatrix模块。
希望这可以有帮助......
对不起,我忘了提到虽然代码正常工作,但它在错误的方向上显示和滚动文本...文本需要旋转90度。任何方法做什么?
我知道这是一些模型会出现的问题。您可以尝试使用不同的库或字符数组的不同字节。
这个文件的使用是什么?
arduino_8x8_lex_matrix_control.aia.
我可以在Inventor应用程序中打开项目,以进行一些修改
是的,这是MIT应用程序Inventor项目文件,可以修改。
好的,我能够建立
欣赏
下午好,
我用两个矩阵MAX7219做了设计,在测试用代码“8×8 LED Matrix MAX7219 Scrolling Text Android Control via Bluetooth”,滚动是在每个矩阵同时开始。我使用的是Arduino Mega ADK,可能是这个错误的原因。我需要修改代码中的任何内容吗?
你需要改变:
int maxineuse = 1; / /使用maxineuse
至
int maxinuse = 2;
因为您使用的是两个模块。
非常鼓舞人心!感谢您与本教程分享您的知识!!
如果蓝牙控件不起作用,则需要将串行端口的速度更改为9600。
133.Bluetooth.begin (9600);//蓝牙模块默认通信速率
享受!
嗨Dejan,
非常感谢分享。干得漂亮!
对我来说,一切都可以(我只是为了使Arduino Uno的引脚调整到蓝牙模块到9600的速度和模块数量为8)。
我正在使用FC-16(2 x 4从工厂焊接的MAXX7216模块)。
有没有办法将每个模块转到1/4逆时针转动?我不想去焊接和转换8个模块!
PS在另一个项目中我尝试过(使用另一个库),我遇到了同样的问题,我发现我必须在IDE中适应这一点:
从这个:
#define硬件_type md_max72xx ::
为此:
#define硬件_type md_max72xx :: fc16_hw
我试图将很多东西更改为图书馆,代码等......但没有成功。
所以如果你有办法解决这个问题,我会很优雅的!!
祝你有美好的一天。
伯纳德