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

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

概述


我们将制作三个例子,第一个我们将解释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之间。电阻器用于设置发光二极管的亮度或电流。

MAX7219电流调节电阻

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

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

电路原理图


现在我们将8×8 LED Matrix模块连接到Arduino Board。这是电路原理图:

8x8 LED矩阵MAX7219电路示意图

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

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

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

基本MAX7219 Arduino代码


连接模块后,就可以看第一个示例的Arduino代码了。我们将使用可以下载的MaxMatrix库GitHub

/* 8x8 LED Matrix MAX7219 Example 01 by Dejan Nedelkovski, www.bet188官方网站HowToMechatronics.com基于以下库:GitHub | riyas-org/ MAX7219 https://github.com/riyas-org/max7219 */ #include  int DIN = 7;// MAX7219模块的DIN引脚int CLK = 6;// MAX7219模块的CLK引脚int CS = 5;// MAX7219模块的CS引脚int maxuse = 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, B10010101, B10100001, B10100001, B10010101, B01000010, B00111100};char smile02[] = {8, 8, B00111100, B01000010, B10010101, 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对象的数量。

对于显示字符,我们需要在字符数组或字节数组中定义它们,此处我有几个示例。我们可以注意到比特是如何形成实际零的字符。在这种情况下,它们被旋转90度,但是图书馆示例建议以这样的方式使用它们,以便稍后更容易地实现用于滚动文本的ShiftLeft自定义功能。

在设置部分中,我们只需要初始化模块并设置LED的亮度。在使用SetDot()函数的循环部分中,我们可以将任何单独的LED设置为在x,y或行/列位置点亮,并使用CLEAR()函数我们可以清除显示屏。

8x8 LED矩阵微笑性格

为了显示预定义字符,我们使用WritePrite()函数,并且前两个参数是字符左上角的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。当我们有一个更大的静态变量数据库时,就像在这种情况下定义字母和字符,最好将它们存储在闪存中,因为它更大,32K字节,而SRAM的2K字节。

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

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

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


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

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()函数检查是否有来自串行端口的传入数据,以及使用蓝牙是否为真。读取函数我们开始读取串口,每个迭代一个字节。所以第一个输入的字节将总是存储在“指示器”变量中,并根据它选择我们是否将改变文本信息,滚动速度或LED矩阵的亮度。

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

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

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

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

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

34回应

  1. 赞美

    谢谢你的项目。我是用AVR微控制器做的这个项目,但现在感谢你的教程,这样我可以从arduino再次做它

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

    回复
  3. 克里斯Donovant

    我喜欢你的视频,一些最有信息量的,但是这个工作不正常。我在矩阵上读mechatronics.com没有问题,但不能通过BT与它交流。所有的应用功能对我都不起作用,你没有用arduino上的tx/rx引脚吗?似乎你用7 8和7来表示矩阵。我希望这是清楚的。我这几个星期一直在想这个问题,但就是想不出来。我们正在为教堂做一个标志,请帮助我们!!

    回复
    • Dejan Nedelkovski.

      这是正确的,引脚9和8用于蓝牙,并且对于矩阵,7是DIN,6 CLK,5CS。我在代码中进行了纠正。
      此外,您还可以查看关于使用Arduino,Bluetooth,Android和App Inventor的其他详细教程。

      回复
  4. 艾默生维拉

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

    回复
      • 乔治Lambrou

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

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

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

      • 德国

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

  5. 马修·约瑟夫

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

    回复
  6. FOXY ROXFORD.

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

    回复
  7. Adithya斯

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

    回复
  8. 约翰•沃伦

    优秀的项目,除了我无法使用该应用程序无法连接我的Android(版本4.1.2)。Android蓝牙设置会看到HC-05和对,只需单击应用程序上的“连接”时,它会显示“未连接”。用其他设备测试了HC-05,它可以正常工作 - 任何想法?
    谢谢你。

    回复
      • 约翰•沃伦

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

  9. 霍斯特

    您好,我有一个问题的问题。
    左下块有一个stetement set message status.text ...
    我不知道这来自哪里,所以我不能发送任何文本到hc 05。
    是否可能是您上传应用程序发明家的.Aia文件?

    回复
  10. 约翰•沃伦

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

    回复
    • Dejan Nedelkovski.

      谢谢你的后续行动,你做了很多工作要到达那里。我很抱歉,我无法在这一点上给出任何特定的帮助,因为我没有并且没有尝试使用8个模块。如何与另一个Arduino板一起尝试它?

      回复
      • 约翰•沃伦

        嗨,德扬
        谢谢您的回复,您是100%正确的。已经在Uno和Nano上尝试过了,两者都能正常工作;没有故障!重新尝试了其他2个Pro Mini,都给出了同样的问题,所以要么我有一个坏批次,要么Pro Mini不适合。将在这个项目中使用Nano。再次感谢你的帮助。

    • Wachid Elektronik

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

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

      我的建议将亮度设置为(1)或直接使用extelnal 5V电源到DOTMatrix模块。

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

      回复
  11. 松懈oza.

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

    回复
  12. 尼尔顿奥利维拉

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

    我可以在inventor app中打开项目做一些修改吗

    回复
  13. 尼尔顿奥利维拉

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

    回复
    • kolo

      你需要改变:
      int maxInUse = 1;

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

      回复
  14. 塞巴

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

    回复
  15. 伯纳德

    嗨,德扬,

    非常感谢分享。干得好!
    对我来说,一切都可以(我只是为了使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年最佳Arduino入门套件

初学者的8个最佳Arduino Starter Kits

受到推崇的

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

最好的3d打印机为初学者和爱好者