8×8 LED Matrix MAX7219通过蓝牙滚动文本和Android控制的教程

在本Arduino教程中,我们将学习如何使用MAX7219驱动程序和Arduino板控制8×8 LED矩阵。你可以观看下面的视频或阅读下面的书面教程了解更多细节。

概述


我们将制作三个例子,第一个我们将解释MAX7219的基本工作原理,在第二个例子中,我们将看到8×8 LED矩阵工作的滚动文本如何,并且在第三个例子中我们将控制它们通过蓝牙和自定义构建Android应用程序。

MAX7219


现在让我们仔细看看MAX7219驱动程序。该IC能够驱动64个单独的LED,同时仅使用3条电线与Arduino通信,以及我们可以菊花链多个驱动器和矩阵以及仍然使用相同的3根线。

MAX7219 8X8 LED矩阵驱动器

64个LED由IC的16个输出引脚驱动。现在的问题是这是如何实现的。嗯,同时亮起的最大LED数实际上是八个。LED布置为8×8套行和列。因此MAX7219在非常短的时间段内激活每个列,同时它也驱动每行。因此,通过快速切换柱子并排行人眼只会注意到连续光。

注意一个常见的8×8 LED矩阵的引脚是如何内部安排的,所以如果你正在建立自己的矩阵,你应该考虑它。还需要注意的是,MAX7219的常用接线板在5V和IC引脚18之间有一个电阻。电阻器用于设置led的亮度或电流。

MAX7219电流调节器电阻

来自IC的数据表的下表显示了我们应根据我们LED的正向电压降的电阻器的值。

MAX7219段电流VS数据表的正向电压表

电路原理图


现在让我们将8×8 LED矩阵模块连接到Arduino板。这是电路原理图:

8x8 LED矩阵MAX7219电路示意图

模块的VCC和GND接Arduino的5V和GND引脚,其他三个引脚DIN、CLK和CS接Arduino板的任何数字引脚。如果我们想要连接多个模块,我们只需将以前的插接板的输出引脚连接到新模块的输入引脚。实际上这些引脚都是一样的,除了之前板的DOUT引脚换成了新板的DIN引脚。

您可以从下面的链接获取此Arduino教程所需的组件:

必威外围提钱披露:这些是联盟链接。作为亚马逊助理,我从合格购买中获得。

基本的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 * / #include  int 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()函数我们可以清除显示。

8x8 LED矩阵微笑性格

为了显示预定义的字符,我们使用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字节。

8x8 LED矩阵滚动文本Arduino代码

接下来,我们使用字符数组定义滚动文本,在循环部分,自定义函数printStringWithShift用第二个参数以毫秒为单位在LED矩阵上打印滚动文本。这个自定义函数做的第一件事是从文本字符串中提取字符,然后在led矩阵上显示这些滚动字符。

Android应用程序,用于通过蓝牙控制8×8 LED矩阵


一旦我们了解了MAX7219的工作原理,现在我们可以制作第三个例子,这是一个实用的Arduino项目,我们将建立一个自定义Android应用程序来通过蓝牙通信控制LED矩阵。在我们继续之前,我会建议您查看我的详细教程,就如何使用HC-05蓝牙模块以及如何建立自定义使用麻省理工学院app Inventor在线应用程序的Android应用程序

Android应用程序控制8x8 LED矩阵通过蓝牙

这是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矩阵的亮度。

8 × 8 LED矩阵Arduino蓝牙控制Android应用程序块

如果我们看看Android应用程序代码块,我们可以注意到单击“发送”按钮时,首先,我们将在这种情况下发送指示字节“1”,这意味着我们想要更改文本消息。为此,在Arduino侧,我们将清除整个字符阵列,并清除LED矩阵显示。然后在“while”循环中,我们将在串行端口中读取其余数据,这是在Android应用程序的文本框中键入的消息。

在指示变量为“2”的情况下,这意味着我们已更改滚动速度滑块的位置,因此我们将使用Bluetooth.readString()函数读取其新值并调整滚动速度。以同样的方式调整LED的亮度。

在这里你可以下载Android应用程序:

这就是本教程的全部内容,如果你有任何问题,可以使用下面的评论部分。

34岁的反应

  1. prasant

    谢谢你的项目。我使用AVR微控制器制作了这个项目,但现在感谢您的教程,以便我可以再次从Arduino赚钱

    回复
  2. MAX 7219点阵是唯一可能的例子?是否可以使用不同的点矩阵?

    回复
  3. 克里斯Donovant

    我很喜欢你的视频,其中一些信息量最大,但是这个却不能正常工作。我在矩阵上阅读mechatronics.com没有问题,但不能通过BT与它沟通。没有应用程序功能为我工作,你不使用arduino上的tx/rx引脚吗?似乎你在矩阵中使用7 8和7。我希望这很清楚。几个星期以来,我一直在想办法解决这个问题。我们正在为教堂做一个标志,并尝试使用这个,请帮助!!

    回复
    • 德扬Nedelkovski

      没错,针9和针8是蓝牙,针7是Din,针6 CLK,针5 CS。我修改了代码。
      此外,您还可以查看关于使用Arduino,Bluetooth,Android和App Inventor的其他详细教程。

      回复
  4. 艾默生维拉

    你好,但它去了Rx,TX -OF模块Bluethoot的两个引脚9-8谢谢。

    回复
      • 乔治·拉布鲁堡

        亲爱的Dejan,谢谢您为您的笔记本教程和您的意愿与全球Arduino社区分享。现在我真的非常喜欢你的意见/帮助。

        我在文章中做了一切,并且消息滚动完美,但我无法将我的智能手机与蓝牙设备连接。我看到了BT05,但是当我尝试conenct时,我没有回复它。似乎可能是问题是HC-05在模式下,而不是数据模式,这就是为什么红色LED闪烁缓慢闪烁(每2秒一次1次)。你有什么想法可能导致过错吗?同样在串行监控时,我按下的东西时,我不会收到“确定”作为模块的回复。

        该代码需要以下更正:软件衰退BTSerial(8,9);
        PIN 7已经占用了!

      • 德国

        你应该先试试基本Arduino蓝牙教程中的例子。您可能错误地连接了蓝牙模块(或定义了错误的引脚),或者您的模型有不同的默认波特率9600而不是38400。

  5. Matthew Joseph.

    哇!它是如此教育,请我使用Arduino 1.6.12版本上传,但它是抱怨-致命的错误:MaxMatrix.h:没有这样的文件或目录。所以我不知道是否是使用的版本导致的。

    回复
  6. FOXY ROXFORD.

    我可以在序列中进行多少这些LED矩阵,如果我将其成10×104(13个LED矩阵8 * 8)?提前致谢

    回复
  7. Adithya Srinivas.

    这是一个伟大的项目,但它在蓝牙草图上有一些困难
    经过一些修改它,它工作很好,就像一个魅力,我可以请使用蓝牙app aia文件

    回复
  8. 约翰•沃伦

    优秀的项目,所有工作正常,除了我不能从我的Android(版本4.1.2)使用应用程序连接。Android蓝牙设置看到的HC-05和配对与它OK,但当点击应用程序上的“连接”,它说“未连接”。已经测试了HC-05与其他设备,它工作良好-任何想法?
    谢谢你。

    回复
      • 约翰•沃伦

        谢谢回复;我在手机上加载了应用程序,它可以正常工作,所以你是对的。添加了另外4个LED矩阵板,总共制作8个,并获得以下问题:
        从1到8的LED模块以最近的arduino开始编号,程序工作正常,最多4个模块,更改为5(MAXINUSE = 5),显示屏跨模块1开始半路,也不会在第一个上显示模块6的一半。
        将模块的数量更改为6到8,我有同样的问题,但在一个模块上移动。设置为4,我获得两次的相同消息 - 在1到4和5到8上,所以我知道所有模块都正常工作,无法找到接线的任何问题。
        你试过这个有8个模块的程序吗?

  9. 霍尔斯特

    您好,我有一个问题的问题。
    左下块有一个消息状态的声明集。文本……
    我不知道这是从哪里来的,所以我不能发送任何文本到hc 05。
    是否有可能你上传的。aia文件的应用程序发明者?

    回复
  10. 约翰•沃伦

    作为我之前的帖子的后续,我现在已经为这个项目制作了一个印刷电路板,与6个模块连接,它运行良好(30分钟,没有问题)。当我增加一个或两个以上的模块,大约1分钟后,各种故障发生-整个模块停止显示和/或随机led闪烁。我使用一个5伏电源供应能力供应几个安培,所以不认为这是一个电源问题。还增加了跨所有电压轨到每个模块的解耦电容。也曾尝试在CS、CLOCK和DIN线路上添加上拉电阻,然后再添加下拉电阻,但没有任何改进。如果我关机再开机,它会正常工作一分钟左右。只是想知道是否有人已经将所有八个模块连接起来。

    回复
    • 德扬Nedelkovski

      谢谢你的跟进,你做了不少工作才到达那里。我很抱歉,我不能给任何具体的帮助在这一点上,因为我没有,也没有尝试与8个模块。用另一个Arduino板试试怎么样?

      回复
      • 约翰•沃伦

        嗨德国
        谢谢你的回复,你100%正确。用Uno和Nano尝试过它,两者都按预期工作;没有故障!用2个其他专业迷你重新尝试,这两个都给出了相同的问题,所以我有一个糟糕的批次,或者亲迷你不合适。现在将使用该项目的Nano。再次感谢您的帮助。

    • Wachid Elektronik

      John&Dejan先生......
      我很遗憾加入这方面。可能是我的答案会帮助你靠问题。

      我的问题是供应8个点阵模块的5V是从哪里来的?是从arduino还是从外部电源?据我所知arduino的5V引脚只能在有限的安培下供应模块,所以当你在高亮度下使用6个或8个点阵时,可能会掉下来。

      我的建议是设置亮度为(1)或使用一个外部5V电源直接到dotmatrix模块。

      希望这可以有帮助......

      回复
  11. 松懈oza.

    对不起,我忘了提到虽然代码正常工作,但它在错误的方向上显示和滚动文本...文本需要旋转90度。任何方法做什么?

    回复
  12. 尼尔顿奥利维拉

    这个文件的使用是什么?
    arduino_8x8_lex_matrix_control.aia.

    我可以在Inventor应用程序中打开项目,以进行一些修改

    回复
  13. 尼尔顿奥利维拉

    下午好,
    我用两个矩阵MAX7219做了设计,在测试用代码“8×8 LED Matrix MAX7219 Scrolling Text Android Control via Bluetooth”,滚动是在每个矩阵同时开始。我使用的是Arduino Mega ADK,可能是这个错误的原因。我需要修改代码中的任何内容吗?

    回复
    • kolo.

      你需要改变:
      int maxineuse = 1; / /使用maxineuse

      int maxinuse = 2;
      因为您使用的是两个模块。

      回复
  14. 塞巴

    如果蓝牙控件不起作用,则需要将串行端口的速度更改为9600。
    133.Bluetooth.begin (9600);//蓝牙模块默认通信速率
    享受!

    回复
  15. 伯纳德

    嗨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

    我试图将很多东西更改为图书馆,代码等......但没有成功。
    所以如果你有办法解决这个问题,我会很优雅的!!

    祝你有美好的一天。

    伯纳德

    回复

发表评论

您的电子邮件地址不会被公开。

受到推崇的

2019年初学者和爱好者的最佳进入级示波器

最适合初学者和爱好者的示波器

受到推崇的

2019年初学者的8个最佳Arduino Starter Kits

8个最好的arduino初学者工具包

受到推崇的

最佳3D打印机初学者和爱好者- 3D打印

初学者和爱好者的最佳3D打印机