Programming 8x8 LED Matrix

Sending Bytes to an 8x8 LED Matrix.

Feb 13, 2017

529726 views

296 respects

Components and supplies

1

USB Cable - Standard A-B for ARDUINO

2

Breadboard (generic)

1

Arduino UNO

16

Jumper wires (generic)

1

8x8 LED Matrix

Apps and platforms

1

Arduino IDE

Project description

Code

Here's the code

arduino

Here's the code

arduino

Downloadable files

Connections diagram

This is to make the connections easier

Connections diagram

Comments

Only logged in users can leave comments

kiet_21022013

4 months ago

what a bad project!!!

danger2011

5 months ago

I just see a random jumble on mine

aadsfwasdwafsa

2 years ago

vaya proyecto de mierda me cago en dios

mishalxxx_555

2 years ago

you need to make the jumper wires lesser than it be here

korab

2 years ago

the codes wont work it says missing terminating character like whatt?plz help

cowdude

2 years ago

I got it to work but it spells out ARDUINO! I've been trying to work on spelling other words, but have been unsuccessful. Edit: I read the instructions again and no I can.

SAnwandter1

2 years ago

If you want to change what it says you would have to go to line 78 and change the A in (drawScreen(A);) the R in (drawScreen(R);) etc... If you want to write something longer than what I did you can enable from line 113 to 139 another piece of code that you would have to change the letters.You can enable them by deleting the two " // " the have. Good luck with arduino

scientificcrabs

2 years ago

Thanks, this is really helping with the project I’m working on!

Anonymous user

2 years ago

I keep having an "expected initialiser before serial" error in the code can anyone maybe tell me what I need to change?

LBeukennoot

2 years ago

Hi, my LEDs are too bright to see any difference. I only see something if I add a byte with everything off. Could you please help me with this?

Anonymous user

2 years ago

Perhaps you might try to add resistors to LED? Resistors limit the power LEDs consume... Or you could just view it in sunglasses, if thats what you mean. If you have enough PWM pins, you could analogWrite() them.

Anonymous user

2 years ago

Stop using ARDUINO!, People who does not have brain, only those will use ARDUINO

Anonymous user

2 years ago

Why? I mean you can say anything, but can u give a reason?

frans23

2 years ago

Good Day! I tried simulating it using Proteus 8, but it does not show any descent letters, the lit LEDs are scattered. They don't form any letter. could it be that the problem is with the Proteus? or the matrix there has a different config. of pins?

Anonymous user

2 years ago

I have no experience with Proteus 8, but I would say the pin config is different.

Anonymous user

2 years ago

need help ! the letters did not appear? what is the problem?

Anonymous user

2 years ago

Hey there! I have used, and love the ease and use, of the code and started experimenting a bit. I've made a few different basic emoji's which have worked brilliantly. But I've run into an issue. I have a duinotechmega2560, and when i use a pushButton it resets the device. i know it's not the individual pin input, because all three are assigned to 3 seperate pins (50,51,52), well away from the other pins. It's not the same type of reset as the reset button on the device (code reset), it resets the input to the computer. My computer makes the disconnect/connected sound. but the device reset happens as fast as the button push. All three buttons i had set up are supposed to do three different emojis, but they all do the same device reset.

Anonymous user

2 years ago

It's making a short circuit and the Arduino shuts off. Don't hold the button for a long time, because you will fry the motherboard. You can feel it if you touch the little golden thing with 500T written on it (it's next to the usb input), while pressing the button.

Anonymous user

2 years ago

What if I only wanted to turn one LED on a time.. Like say for instance Row 2, Column 4?

Anonymous user

2 years ago

I struggled a bit but got it to work. There is nothing to indicate which pin on the LED Matrix is which. My tip - lower left of the picture is pin 1, and counter-clockwise to the top left is pin 16. Works much better this way than my first assumption of pin 1 being top left. I also put together a quick pin-to-pin chart. Now I have to figure out how to attach/upload it! Thanks for a fun, easy to mod project!

Anonymous user

2 years ago

Lo que dice mi nombre :Vv

Anonymous user

2 years ago

slight modification to the code that allows arbitrary strings to be displayed // update from SAnwandter // second update by MXCA (25/09/2020) char mystring[]=" MAURO CANARECCI "; // string to write int timeInterval = 40; #define ROW_1 2 #define ROW_2 3 #define ROW_3 4 #define ROW_4 5 #define ROW_5 6 #define ROW_6 7 #define ROW_7 8 #define ROW_8 9 #define COL_1 10 #define COL_2 11 #define COL_3 12 #define COL_4 13 #define COL_5 A0 #define COL_6 A1 #define COL_7 A2 #define COL_8 A3 const byte rows[] = { ROW_1, ROW_2, ROW_3, ROW_4, ROW_5, ROW_6, ROW_7, ROW_8 }; const byte cols[] = { COL_1,COL_2, COL_3, COL_4, COL_5, COL_6, COL_7, COL_8 }; // The display buffer // It's prefilled with a smiling face (1 = ON, 0 = OFF) byte ALL[] = {B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111}; byte BLANK[] = {B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000}; byte EX[] = {B00000000,B00010000,B00010000,B00010000,B00010000,B00000000,B00010000,B00000000}; byte letter[][8] = { {B00000000,B00011000,B00100100,B00100100,B00111100,B00100100,B00100100,B00100100}, //A {B01111000,B01001000,B01001000,B01110000,B01001000,B01000100,B01000100,B01111100}, //B {B00000000,B00011110,B00100000,B01000000,B01000000,B01000000,B00100000,B00011110}, //C {B00000000,B00111000,B00100100,B00100010,B00100010,B00100100,B00111000,B00000000}, //D {B00000000,B00111100,B00100000,B00111000,B00100000,B00100000,B00111100,B00000000}, //E {B00000000,B00111100,B00100000,B00111000,B00100000,B00100000,B00100000,B00000000}, //F {B00000000,B00111110,B00100000,B00100000,B00101110,B00100010,B00111110,B00000000}, //G {B00000000,B00100100,B00100100,B00111100,B00100100,B00100100,B00100100,B00000000}, //H {B00000000,B00111000,B00010000,B00010000,B00010000,B00010000,B00111000,B00000000}, //I {B00000000,B00011100,B00001000,B00001000,B00001000,B00101000,B00111000,B00000000}, //J {B00000000,B00100100,B00101000,B00110000,B00101000,B00100100,B00100100,B00000000}, //K {B00000000,B00100000,B00100000,B00100000,B00100000,B00100000,B00111100,B00000000}, //L {B00000000,B00000000,B01000100,B10101010,B10010010,B10000010,B10000010,B00000000}, //M {B00000000,B00100010,B00110010,B00101010,B00100110,B00100010,B00000000,B00000000}, //N {B00000000,B00111100,B01000010,B01000010,B01000010,B01000010,B00111100,B00000000}, //O {B00000000,B00111000,B00100100,B00100100,B00111000,B00100000,B00100000,B00000000}, //P {B00000000,B00111100,B01000010,B01000010,B01000010,B01000110,B00111110,B00000001}, //Q {B00000000,B00111000,B00100100,B00100100,B00111000,B00100100,B00100100,B00000000}, //R {B00000000,B00111100,B00100000,B00111100,B00000100,B00000100,B00111100,B00000000}, //S {B00000000,B01111100,B00010000,B00010000,B00010000,B00010000,B00010000,B00000000}, //T {B00000000,B01000010,B01000010,B01000010,B01000010,B00100100,B00011000,B00000000}, //U {B00000000,B00100010,B00100010,B00100010,B00010100,B00010100,B00001000,B00000000}, //V {B00000000,B10000010,B10010010,B01010100,B01010100,B00101000,B00000000,B00000000}, //W {B00000000,B01000010,B00100100,B00011000,B00011000,B00100100,B01000010,B00000000}, //X {B00000000,B01000100,B00101000,B00010000,B00010000,B00010000,B00010000,B00000000}, //Y {B00000000,B00111100,B00000100,B00001000,B00010000,B00100000,B00111100,B00000000}, //Z }; int timeCount = 0; int letterIdx = 0; char currentLetter = '\\0'; void setup() { // Open serial port Serial.begin(9600); // Set all used pins to OUTPUT // This is very important! If the pins are set to input // the display will be very dim. for (byte i = 2; i <= 13; i++) pinMode(i, OUTPUT); pinMode(A0, OUTPUT); pinMode(A1, OUTPUT); pinMode(A2, OUTPUT); pinMode(A3, OUTPUT); } void loop() { // This could be rewritten to not use a delay, which would make it appear brighter delay(5); timeCount++; if (timeCount>=timeInterval) {timeCount=0; letterIdx++;} if (mystring[letterIdx]=='\\0') {letterIdx=0;} currentLetter=mystring[letterIdx]; if (currentLetter==' ') drawScreen(BLANK); else if (currentLetter>='A' && currentLetter<='Z') drawScreen(letter[currentLetter-'A']); else drawScreen(ALL); } void drawScreen(byte buffer2[]) { // Turn on each row in series for (byte i = 0; i < 8; i++) // count next row { digitalWrite(rows[i], HIGH); //initiate whole row for (byte a = 0; a < 8; a++) // count next row { // if You set (~buffer2[i] >> a) then You will have positive digitalWrite(cols[a], (~buffer2[i] >> a) & 0x01); // initiate whole column delayMicroseconds(100); // uncoment deley for diferent speed of display //delayMicroseconds(1000); //delay(10); //delay(100); digitalWrite(cols[a], 1); // reset whole column } digitalWrite(rows[i], LOW); // reset whole row // otherwise last row will intersect with next row } } // /* this is simplest resemplation how for loop is working with each row. digitalWrite(COL_1, (~b >> 0) & 0x01); // Get the 1st bit: 10000000 digitalWrite(COL_2, (~b >> 1) & 0x01); // Get the 2nd bit: 01000000 digitalWrite(COL_3, (~b >> 2) & 0x01); // Get the 3rd bit: 00100000 digitalWrite(COL_4, (~b >> 3) & 0x01); // Get the 4th bit: 00010000 digitalWrite(COL_5, (~b >> 4) & 0x01); // Get the 5th bit: 00001000 digitalWrite(COL_6, (~b >> 5) & 0x01); // Get the 6th bit: 00000100 digitalWrite(COL_7, (~b >> 6) & 0x01); // Get the 7th bit: 00000010 digitalWrite(COL_8, (~b >> 7) & 0x01); // Get the 8th bit: 00000001 }*/

Anonymous user

2 years ago

Is there a way to do it without the breadboard? im trying to save as much space as possible

scientificcrabs

2 years ago

You could use pcb or just use an arduino nano micro or mini then solder the components together

Anonymous user

2 years ago

Too many missing libraries. This should be archived or delted if required libraries no longer available. Waste of time without required libraries. Library links result in Page not found.

Anonymous user

2 years ago

I've got everything to work but all the characters are flipped along the horizontal axis, does anyone know how to fix this?

Anonymous user

2 years ago

hi, im new to coding, How do you use the frequencytimer2library?

Anonymous user

2 years ago

you can go: #include <FrequencyTimer2.h> or with () instead of <>. If that doesn't work the include the file route e.g: #include <D:/Arduino/FrequncyTime2/FrequencyTime2.h> :)

Anonymous user

2 years ago

Hello I hope you can help me....I have 8x8 led display de code say 1 = ON, 0 = OFF but my display do 0 = ON, 1 = OFF....I try all I can but i have not luck with it.....someone can help me to fix this issue....Please.....

Anonymous user

2 years ago

add a ~ before buffer2[i] in line 131 131 digitalWrite(col[a], (~buffer2[i] >> a) & 0x01); // initiate whole column maybe for you this is too late, but had the same issue

idonthaveanarduinoboar

2 years ago

Did you try inverting the zeros and ones? If not then this might work I had the same problem and this method worked

maxim2511

2 years ago

I make amasing update with this code. Before was posible to set or slow down only rows, but colums was fixt and no mather what, row was already set for whole lenght. My update have fixt that, and is slowing down each pixel. I can slowing down whole matrix to speed of 1sec, from 1 milisec. Chenging delay for micros, then picture is shining stady light.

maxim2511

2 years ago

https://create.arduino.cc/projecthub/maxim2511/display-letters-from-led-matrix-using-array-9cb677 Its an update. Maybe will help to many peoples.

Anonymous user

2 years ago

Hi, This looks like a good project but I can't understand the wiring diagram. My LED matrix has only 5 pins on the top and bottom even though it's an 8 x 8 so do you know how i connect it? Also, I saw o you tube demo that said I should use resistots when using LEDs but there are none on you diagram, are they necessary for this project?

Anonymous user

2 years ago

We

Anonymous user

2 years ago

Eu não estou conseguindo usar os codigos...

SAnwandter1

2 years ago

que erro te mostra??

harsha7addanki

2 years ago

Não seja estranho falar em inglês. ENTENDI?

Louis-Charles

2 years ago

it would not be better with resistance ???

Anonymous user

2 years ago

For the record: yes and it should. many examples on this site do not use resistors, so they will run fine for a couple of minutes. After that, they could burn the board. imho, a 220m will work

Anonymous user

2 years ago

This isnt working for me, its only lighting up every led. Please help thanks

Anonymous user

2 years ago

Hello, I tried making this project. But I needed it to be a 8x24 matrix. Is there any way on how i can increase the number of byte in the void setColumn area? Thank you for any help that you would give me I really need this.

okalipton

2 years ago

Hi! I tryed this porject and it worked but I have a problem. : O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O /\\ I This columnhas a problem, it lights and I can't turn this column off or change it. Also it lights quite low. I don't where the problem from. My dot matrix, arduino, or the project. Can anyone help me??

kvovk

2 years ago

So this might come over as a stupid question. But i have connected everything correctly and edited a code because i juste want to see if the 8x8 even works. In the end i got an error message stating 'drawScreen' was not declared in this scope. I have searched google but nothin really came up. I apologize if this is a stupid question.

Anonymous user

2 years ago

HELLO,I HAVE LEARN MOST ABOUT LED MATRIX. BUT,STILL UNABLE TO GENERATED CODE FOR ARDUINO NANO/UNO. I WANT TO DISPLAY THE WORD " WELCOME HAPPY DIWALI " ON 8*48 LED MATRIX.. HOW CAN I DO THIS .PLEASE HELPPPPPPPPPPP......... .

Anonymous user

2 years ago

Please help, i did everything you said in tutorial, like installing libraries, followed schematic diagram, but still it's not working properly, lights are steady, 64 lights are on, no shape is forming. Please guide me. Thanks

Anonymous user

2 years ago

i don't have two breadboards ;( rip

Anonymous user

2 years ago

Wow very big thanks to you. This is seriously a good project for starters. props to you bro

Anonymous user

2 years ago

Good day, I have uploaded the code as is, i only get straight lines with dots here and there. when i cross reference the layout I'm on par.

Anonymous user

2 years ago

Nice project, i made it display my name! But it seems like my MEGA 2560 inverted the 0s and the 1s?

Anonymous user

2 years ago

hi, good day. does it make a difference if ı use 16x16 for 8x8? unless it does, how am ı gonna code 16x16 LED matrix, thanks for responding and thanks for your time!

Anonymous user

2 years ago

thank you. Worked to me :) greetings from poland

Anonymous user

2 years ago

I soldered a 5x5 matrix with my students. We connectes horizontal rows(GND) via NPN Transistor to the Arduino pins 4 - 8 and vertikal colums (VCC) via 220ohm Resistors to Pins 9-13. I rearranged your script to fit to the shorter matix but I only get all LEDs lit. https://pastebin.com/iJBYyn6w ----- Testing in Tinkercad ------ https://www.tinkercad.com/things/0dla6V0ymGQ-8x8-to-5x5/editel?sharecode=Fyizll7RDCI_ADNozngjuF_erpVrOy_zMT2179KVDrs

Anonymous user

2 years ago

Not work in my project

Anonymous user

2 years ago

i love you a lot a lot

Anonymous user

2 years ago

i love you

Anonymous user

2 years ago

Not working for me. Using an Arduino Uno Rev3, and sketch is not compatible with this device. Won't upload and the Matrix goes crazy :-(

Anonymous user

2 years ago

So I followed the connections diagram, but all my LED's just sort of light up whenever they want. Is there something I could be doing wrong?

Anonymous user

2 years ago

Hi, This is a really cool project for a ground zero starter like me! I just have a few questions, do I need to include frequencytimer2 header at the beginning of the code? I first tried not to include it but nothing happens after I upload the code. But then I get the error message " fatal error: wiring.h: No such file or directory #include <wiring.h>" after I do include the frequencytimer2 header Can you help me out here? Thank you very much!

Anonymous user

2 years ago

No you don't, I tried to remove it and it still worked

SAnwandter1

2 years ago

Sorry for replying so late, yes ypu need to include frequencytimer2, but for it to work you have to download its library, you will find it here: https://github.com/rookie/FrequencyTimer2.After that you will the have to go to sketch (in arduino software), then to include library, then to add .ZIP library and open frequency timer2. After that you are ready to go Good Luck!

Anonymous user

2 years ago

not working

mikerowaveoven

2 years ago

Thank you, you really helped me in building Snake game on this display :-)

Anonymous user

2 years ago

Hi all, why my all leds are ON. what am I doing wrong? I uploaded FrequencyTimer2 library but notting happens.

Anonymous user

2 years ago

Replace the rows with the columns and the columns replaced with rows

Anonymous user

2 years ago

same problem

Anonymous user

2 years ago

I admire your work but on thoughts here is some ledmatrix codegenerator generating int64 for the leds and you can create beutifull characters with it. https://xantorohara.github.io/led-matrix-editor/#

SAnwandter1

2 years ago

Thanks for your contribution, really appreciate it!! When I have time I'll update de code.

Anonymous user

2 years ago

Thank you for this easy and simple project! I did this and it run perfectly, except that somehow the ON and OFF of the LEDs are all inverted. I overcame this by inverting 0 to 1 like "B00000000" to "B11111111". Any idea why this happened?

abdulhd1888

2 years ago

perfect

Huzaim

2 years ago

It doesn't really work for me, and that might be because I have a matrix module rather than a matrix, but I am a beginner at arduino.

bahadiro

2 years ago

Thank You For Project Hi all, why my all leds are ON. what am I doing wrong? I uploaded FrequencyTimer2 library but notting happens.

Anonymous user

2 years ago

Hi, I tried to make the text scroll vertically, and somewhat it is working but the code needs fine tuning. //update from SAnwandter #define ROW_1 2 #define ROW_2 3 #define ROW_3 4 #define ROW_4 5 #define ROW_5 6 #define ROW_6 7 #define ROW_7 8 #define ROW_8 9 #define COL_1 10 #define COL_2 11 #define COL_3 12 #define COL_4 13 #define COL_5 A0 #define COL_6 A1 #define COL_7 A2 #define COL_8 A3 const byte rows[] = { ROW_1, ROW_2, ROW_3, ROW_4, ROW_5, ROW_6, ROW_7, ROW_8 }; const byte col[] = { COL_1,COL_2, COL_3, COL_4, COL_5, COL_6, COL_7, COL_8 }; // The display buffer // It's prefilled with a smiling face (1 = ON, 0 = OFF) byte ALL0[] = {B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000}; byte ALL[] = {B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111}; byte EX[] = {B00000000,B00010000,B00010000,B00010000,B00010000,B00000000,B00010000,B00000000}; byte A[] = { B00000000,B00111100,B01100110,B01100110,B01111110,B01100110,B01100110,B01100110}; byte B[] = {B01111000,B01001000,B01001000,B01110000,B01001000,B01000100,B01000100,B01111100}; byte C[] = {B00000000,B00011110,B00100000,B01000000,B01000000,B01000000,B00100000,B00011110}; byte D[] = {B00000000,B00111000,B00100100,B00100010,B00100010,B00100100,B00111000,B00000000}; byte E[] = {B00000000,B00111100,B00100000,B00111000,B00100000,B00100000,B00111100,B00000000}; byte F[] = {B00000000,B00111100,B00100000,B00111000,B00100000,B00100000,B00100000,B00000000}; byte G[] = {B00000000,B00111110,B00100000,B00100000,B00101110,B00100010,B00111110,B00000000}; byte H[] = {B00000000,B00100100,B00100100,B00111100,B00100100,B00100100,B00100100,B00000000}; byte I[] = {B00000000,B00111000,B00010000,B00010000,B00010000,B00010000,B00111000,B00000000}; byte J[] = {B00000000,B00011100,B00001000,B00001000,B00001000,B00101000,B00111000,B00000000}; byte K[] = {B00000000,B00100100,B00101000,B00110000,B00101000,B00100100,B00100100,B00000000}; byte L[] = {B00000000,B00100000,B00100000,B00100000,B00100000,B00100000,B00111100,B00000000}; byte M[] = {B00000000,B00000000,B01000100,B10101010,B10010010,B10000010,B10000010,B00000000}; byte N[] = {B00000000,B00100010,B00110010,B00101010,B00100110,B00100010,B00000000,B00000000}; byte O[] = {B00000000,B00111100,B01000010,B01000010,B01000010,B01000010,B00111100,B00000000}; byte P[] = {B00000000,B00111000,B00100100,B00100100,B00111000,B00100000,B00100000,B00000000}; byte Q[] = {B00000000,B00111100,B01000010,B01000010,B01000010,B01000110,B00111110,B00000001}; byte R[] = {B00000000,B00111000,B00100100,B00100100,B00111000,B00100100,B00100100,B00000000}; byte S[] = {B00000000,B00111100,B00100000,B00111100,B00000100,B00000100,B00111100,B00000000}; byte T[] = {B00000000,B01111100,B00010000,B00010000,B00010000,B00010000,B00010000,B00000000}; byte U[] = {B00000000,B01000010,B01000010,B01000010,B01000010,B01000010,B00111100,B00000000}; byte V[] = {B00000000,B00100010,B00100010,B00100010,B00010100,B00010100,B00001000,B00000000}; byte W[] = {B00000000,B10000010,B10010010,B01010100,B01010100,B00101000,B00000000,B00000000}; byte X[] = {B00000000,B01000010,B00100100,B00011000,B00011000,B00100100,B01000010,B00000000}; byte Y[] = {B00000000,B01000100,B00101000,B00010000,B00010000,B00010000,B00010000,B00000000}; byte Z[] = {B00000000,B00111100,B00000100,B00001000,B00010000,B00100000,B00111100,B00000000}; byte buffer_Temp[8]; int timeCount = 0; int scrollCount = 0; int k=8; void setup() { // Open serial port Serial.begin(9600); // Set all used pins to OUTPUT // This is very important! If the pins are set to input // the display will be very dim. for (byte i = 2; i <= 13; i++) pinMode(i, OUTPUT); pinMode(A0, OUTPUT); pinMode(A1, OUTPUT); pinMode(A2, OUTPUT); pinMode(A3, OUTPUT); } void loop() { // This could be rewritten to not use a delay, which would make it appear brighter delay(32); timeCount += 32; //scrollCount+= 1; if(timeCount <= 320) { drawScreenScroll(A,R); } else if (timeCount <= 640) { drawScreenScroll(R,D); } else if (timeCount <= 960) { drawScreenScroll(D,U); } else if (timeCount <= 1280) { drawScreenScroll(U,I); } else if (timeCount <= 1600) { drawScreenScroll(I,N); } else if (timeCount <= 1920) { drawScreenScroll(N,O); } else if (timeCount <= 2240) { drawScreenScroll(O,ALL0); } else if (timeCount <= 2560) { drawScreenScroll(ALL0,A); } else if (timeCount <= 2880) { drawScreenScroll(ALL0,ALL0); } else { // back to the start if (timeCount>=2880) timeCount = 0; if(scrollCount>=10*k) scrollCount=0; } } /* void drawScreen(byte buffer2[]) { // Turn on each row in series for (byte i = 0; i < 8; i++) // count next row { digitalWrite(rows[i], HIGH); //initiate whole row for (byte a = 0; a < 8; a++) // count next row { // if You set (~buffer2[i] >> a) then You will have positive digitalWrite(col[a], (~buffer2[i] >> a) & 0x01); // initiate whole column delayMicroseconds(100); // uncoment deley for diferent speed of display //delayMicroseconds(1000); //delay(10); //delay(100); digitalWrite(col[a], 1); // reset whole column } digitalWrite(rows[i], LOW); // reset whole row // otherwise last row will intersect with next row } } */ void drawScreenScroll(byte buffer1[], byte buffer3[]) { // Turn on each row in series scrollCount+=1; if (scrollCount<=2*k) { buffer_Temp[0]=buffer1[0]; buffer_Temp[1]=buffer1[1]; buffer_Temp[2]=buffer1[2]; buffer_Temp[3]=buffer1[3]; buffer_Temp[4]=buffer1[4]; buffer_Temp[5]=buffer1[5]; buffer_Temp[6]=buffer1[6]; buffer_Temp[7]=buffer1[7]; } else if(scrollCount<=3*k) { buffer_Temp[0]=buffer1[1]; buffer_Temp[1]=buffer1[2]; buffer_Temp[2]=buffer1[3]; buffer_Temp[3]=buffer1[4]; buffer_Temp[4]=buffer1[5]; buffer_Temp[5]=buffer1[6]; buffer_Temp[6]=buffer1[7]; buffer_Temp[7]=buffer3[0]; } else if(scrollCount<=4*k) { buffer_Temp[0]=buffer1[2]; buffer_Temp[1]=buffer1[3]; buffer_Temp[2]=buffer1[4]; buffer_Temp[3]=buffer1[5]; buffer_Temp[4]=buffer1[6]; buffer_Temp[5]=buffer1[7]; buffer_Temp[6]=buffer3[0]; buffer_Temp[7]=buffer3[1]; } else if(scrollCount<=5*k) { buffer_Temp[0]=buffer1[3]; buffer_Temp[1]=buffer1[4]; buffer_Temp[2]=buffer1[5]; buffer_Temp[3]=buffer1[6]; buffer_Temp[4]=buffer1[7]; buffer_Temp[5]=buffer3[0]; buffer_Temp[6]=buffer3[1]; buffer_Temp[7]=buffer3[2]; } else if(scrollCount<=6*k) { buffer_Temp[0]=buffer1[4]; buffer_Temp[1]=buffer1[5]; buffer_Temp[2]=buffer1[6]; buffer_Temp[3]=buffer3[7]; buffer_Temp[4]=buffer3[0]; buffer_Temp[5]=buffer3[1]; buffer_Temp[6]=buffer3[2]; buffer_Temp[7]=buffer3[3]; } else if(scrollCount<=7*k) { buffer_Temp[0]=buffer1[5]; buffer_Temp[1]=buffer1[6]; buffer_Temp[2]=buffer1[7]; buffer_Temp[3]=buffer3[0]; buffer_Temp[4]=buffer3[1]; buffer_Temp[5]=buffer3[2]; buffer_Temp[6]=buffer3[3]; buffer_Temp[7]=buffer3[4]; } else if(scrollCount<=8*k) { buffer_Temp[0]=buffer1[6]; buffer_Temp[1]=buffer1[7]; buffer_Temp[2]=buffer3[0]; buffer_Temp[3]=buffer3[1]; buffer_Temp[4]=buffer3[2]; buffer_Temp[5]=buffer3[3]; buffer_Temp[6]=buffer3[4]; buffer_Temp[7]=buffer3[5]; } else if(scrollCount<=9*k) { buffer_Temp[0]=buffer1[7]; buffer_Temp[1]=buffer3[0]; buffer_Temp[2]=buffer3[1]; buffer_Temp[3]=buffer3[2]; buffer_Temp[4]=buffer3[3]; buffer_Temp[5]=buffer3[4]; buffer_Temp[6]=buffer3[5]; buffer_Temp[7]=buffer3[6]; } else if(scrollCount<=10*k) { buffer_Temp[0]=buffer3[0]; buffer_Temp[1]=buffer3[1]; buffer_Temp[2]=buffer3[2]; buffer_Temp[3]=buffer3[3]; buffer_Temp[4]=buffer3[4]; buffer_Temp[5]=buffer3[5]; buffer_Temp[6]=buffer3[6]; buffer_Temp[7]=buffer3[7]; } for (byte i = 0; i < 8; i++) // count next row { digitalWrite(rows[i], HIGH); //initiate whole row for (byte a = 0; a < 8; a++) // count next row { // if You set (~buffer_Temp[i] >> a) then You will have positive digitalWrite(col[a], (~buffer_Temp[i] >> a) & 0x01); // initiate whole column //delayMicroseconds(8); // uncoment deley for diferent speed of display //delayMicroseconds(1000); //delay(10); //delay(100); digitalWrite(col[a], 1); // reset whole column } digitalWrite(rows[i], LOW); // reset whole row // otherwise last row will intersect with next row } } // /* this is siplest resemplation how for loop is working with each row. digitalWrite(COL_1, (~b >> 0) & 0x01); // Get the 1st bit: 10000000 digitalWrite(COL_2, (~b >> 1) & 0x01); // Get the 2nd bit: 01000000 digitalWrite(COL_3, (~b >> 2) & 0x01); // Get the 3rd bit: 00100000 digitalWrite(COL_4, (~b >> 3) & 0x01); // Get the 4th bit: 00010000 digitalWrite(COL_5, (~b >> 4) & 0x01); // Get the 5th bit: 00001000 digitalWrite(COL_6, (~b >> 5) & 0x01); // Get the 6th bit: 00000100 digitalWrite(COL_7, (~b >> 6) & 0x01); // Get the 7th bit: 00000010 digitalWrite(COL_8, (~b >> 7) & 0x01); // Get the 8th bit: 00000001 }*/

Anonymous user

2 years ago

Hi. I am trying to understand why do you set the pin to high then low? digitalWrite(rows[i], HIGH); <----- delay(2); digitalWrite(rows[i], LOW); <------- ________________________________________________________ void drawScreen(byte buffer2[]){ // Turn on each row in series for (byte i = 0; i < 8; i++) { setColumns(buffer2[i]); // Set columns for this specific row digitalWrite(rows[i], HIGH); delay(2); // Set this to 50 or 100 if you want to see the multiplexing effect! digitalWrite(rows[i], LOW); } } ______________________________________________________ Thank you

maxim2511

2 years ago

Hi make that to reset whole row to 0volts. otherwise next row will intersect with last row.

Anonymous user

2 years ago

You don't need TWO breadboards an led matrix can fit on 1 mini breadboard. And thanks!

Anonymous user

2 years ago

Either for me all the leds are on, or it switches the leds but I can’t make any sense of what it is saying. Any advice on how I should fix that?

Anonymous user

2 years ago

Please help i have a 5 pin matrix led

dysin

3 years ago

Please help i have a 5 pin matrix led

Anonymous user

3 years ago

i don't have two breadboards ;( rip

kvovk

3 years ago

So this might come over as a stupid question. But i have connected everything correctly and edited a code because i juste want to see if the 8x8 even works. In the end i got an error message stating 'drawScreen' was not declared in this scope. I have searched google but nothin really came up. I apologize if this is a stupid question.

scientificcrabs

3 years ago

Thanks, this is really helping with the project I’m working on!

Anonymous user

3 years ago

Is there a way to do it without the breadboard? im trying to save as much space as possible

scientificcrabs

2 years ago

You could use pcb or just use an arduino nano micro or mini then solder the components together

okalipton

3 years ago

Hi! I tryed this porject and it worked but I have a problem. : O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O /\\ I This columnhas a problem, it lights and I can't turn this column off or change it. Also it lights quite low. I don't where the problem from. My dot matrix, arduino, or the project. Can anyone help me??

Anonymous user

3 years ago

Good day, I have uploaded the code as is, i only get straight lines with dots here and there. when i cross reference the layout I'm on par.

mikerowaveoven

4 years ago

Thank you, you really helped me in building Snake game on this display :-)

Anonymous user

4 years ago

Either for me all the leds are on, or it switches the leds but I can’t make any sense of what it is saying. Any advice on how I should fix that?

Anonymous user

4 years ago

need help ! the letters did not appear? what is the problem?

koolcing

4 years ago

Thank you for this easy and simple project! I did this and it run perfectly, except that somehow the ON and OFF of the LEDs are all inverted. I overcame this by inverting 0 to 1 like "B00000000" to "B11111111". Any idea why this happened?

Anonymous user

4 years ago

Hi, This looks like a good project but I can't understand the wiring diagram. My LED matrix has only 5 pins on the top and bottom even though it's an 8 x 8 so do you know how i connect it? Also, I saw o you tube demo that said I should use resistots when using LEDs but there are none on you diagram, are they necessary for this project?

Anonymous user

4 years ago

This isnt working for me, its only lighting up every led. Please help thanks

polo12345

4 years ago

thank you. Worked to me :) greetings from poland

jediaelnath

4 years ago

not working

krishna5302

4 years ago

HELLO,I HAVE LEARN MOST ABOUT LED MATRIX. BUT,STILL UNABLE TO GENERATED CODE FOR ARDUINO NANO/UNO. I WANT TO DISPLAY THE WORD " WELCOME HAPPY DIWALI " ON 8*48 LED MATRIX.. HOW CAN I DO THIS .PLEASE HELPPPPPPPPPPP......... .

Anonymous user

4 years ago

You don't need TWO breadboards an led matrix can fit on 1 mini breadboard. And thanks!

Anonymous user

4 years ago

slight modification to the code that allows arbitrary strings to be displayed // update from SAnwandter // second update by MXCA (25/09/2020) char mystring[]=" MAURO CANARECCI "; // string to write int timeInterval = 40; #define ROW_1 2 #define ROW_2 3 #define ROW_3 4 #define ROW_4 5 #define ROW_5 6 #define ROW_6 7 #define ROW_7 8 #define ROW_8 9 #define COL_1 10 #define COL_2 11 #define COL_3 12 #define COL_4 13 #define COL_5 A0 #define COL_6 A1 #define COL_7 A2 #define COL_8 A3 const byte rows[] = { ROW_1, ROW_2, ROW_3, ROW_4, ROW_5, ROW_6, ROW_7, ROW_8 }; const byte cols[] = { COL_1,COL_2, COL_3, COL_4, COL_5, COL_6, COL_7, COL_8 }; // The display buffer // It's prefilled with a smiling face (1 = ON, 0 = OFF) byte ALL[] = {B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111}; byte BLANK[] = {B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000}; byte EX[] = {B00000000,B00010000,B00010000,B00010000,B00010000,B00000000,B00010000,B00000000}; byte letter[][8] = { {B00000000,B00011000,B00100100,B00100100,B00111100,B00100100,B00100100,B00100100}, //A {B01111000,B01001000,B01001000,B01110000,B01001000,B01000100,B01000100,B01111100}, //B {B00000000,B00011110,B00100000,B01000000,B01000000,B01000000,B00100000,B00011110}, //C {B00000000,B00111000,B00100100,B00100010,B00100010,B00100100,B00111000,B00000000}, //D {B00000000,B00111100,B00100000,B00111000,B00100000,B00100000,B00111100,B00000000}, //E {B00000000,B00111100,B00100000,B00111000,B00100000,B00100000,B00100000,B00000000}, //F {B00000000,B00111110,B00100000,B00100000,B00101110,B00100010,B00111110,B00000000}, //G {B00000000,B00100100,B00100100,B00111100,B00100100,B00100100,B00100100,B00000000}, //H {B00000000,B00111000,B00010000,B00010000,B00010000,B00010000,B00111000,B00000000}, //I {B00000000,B00011100,B00001000,B00001000,B00001000,B00101000,B00111000,B00000000}, //J {B00000000,B00100100,B00101000,B00110000,B00101000,B00100100,B00100100,B00000000}, //K {B00000000,B00100000,B00100000,B00100000,B00100000,B00100000,B00111100,B00000000}, //L {B00000000,B00000000,B01000100,B10101010,B10010010,B10000010,B10000010,B00000000}, //M {B00000000,B00100010,B00110010,B00101010,B00100110,B00100010,B00000000,B00000000}, //N {B00000000,B00111100,B01000010,B01000010,B01000010,B01000010,B00111100,B00000000}, //O {B00000000,B00111000,B00100100,B00100100,B00111000,B00100000,B00100000,B00000000}, //P {B00000000,B00111100,B01000010,B01000010,B01000010,B01000110,B00111110,B00000001}, //Q {B00000000,B00111000,B00100100,B00100100,B00111000,B00100100,B00100100,B00000000}, //R {B00000000,B00111100,B00100000,B00111100,B00000100,B00000100,B00111100,B00000000}, //S {B00000000,B01111100,B00010000,B00010000,B00010000,B00010000,B00010000,B00000000}, //T {B00000000,B01000010,B01000010,B01000010,B01000010,B00100100,B00011000,B00000000}, //U {B00000000,B00100010,B00100010,B00100010,B00010100,B00010100,B00001000,B00000000}, //V {B00000000,B10000010,B10010010,B01010100,B01010100,B00101000,B00000000,B00000000}, //W {B00000000,B01000010,B00100100,B00011000,B00011000,B00100100,B01000010,B00000000}, //X {B00000000,B01000100,B00101000,B00010000,B00010000,B00010000,B00010000,B00000000}, //Y {B00000000,B00111100,B00000100,B00001000,B00010000,B00100000,B00111100,B00000000}, //Z }; int timeCount = 0; int letterIdx = 0; char currentLetter = '\\0'; void setup() { // Open serial port Serial.begin(9600); // Set all used pins to OUTPUT // This is very important! If the pins are set to input // the display will be very dim. for (byte i = 2; i <= 13; i++) pinMode(i, OUTPUT); pinMode(A0, OUTPUT); pinMode(A1, OUTPUT); pinMode(A2, OUTPUT); pinMode(A3, OUTPUT); } void loop() { // This could be rewritten to not use a delay, which would make it appear brighter delay(5); timeCount++; if (timeCount>=timeInterval) {timeCount=0; letterIdx++;} if (mystring[letterIdx]=='\\0') {letterIdx=0;} currentLetter=mystring[letterIdx]; if (currentLetter==' ') drawScreen(BLANK); else if (currentLetter>='A' && currentLetter<='Z') drawScreen(letter[currentLetter-'A']); else drawScreen(ALL); } void drawScreen(byte buffer2[]) { // Turn on each row in series for (byte i = 0; i < 8; i++) // count next row { digitalWrite(rows[i], HIGH); //initiate whole row for (byte a = 0; a < 8; a++) // count next row { // if You set (~buffer2[i] >> a) then You will have positive digitalWrite(cols[a], (~buffer2[i] >> a) & 0x01); // initiate whole column delayMicroseconds(100); // uncoment deley for diferent speed of display //delayMicroseconds(1000); //delay(10); //delay(100); digitalWrite(cols[a], 1); // reset whole column } digitalWrite(rows[i], LOW); // reset whole row // otherwise last row will intersect with next row } } // /* this is simplest resemplation how for loop is working with each row. digitalWrite(COL_1, (~b >> 0) & 0x01); // Get the 1st bit: 10000000 digitalWrite(COL_2, (~b >> 1) & 0x01); // Get the 2nd bit: 01000000 digitalWrite(COL_3, (~b >> 2) & 0x01); // Get the 3rd bit: 00100000 digitalWrite(COL_4, (~b >> 3) & 0x01); // Get the 4th bit: 00010000 digitalWrite(COL_5, (~b >> 4) & 0x01); // Get the 5th bit: 00001000 digitalWrite(COL_6, (~b >> 5) & 0x01); // Get the 6th bit: 00000100 digitalWrite(COL_7, (~b >> 6) & 0x01); // Get the 7th bit: 00000010 digitalWrite(COL_8, (~b >> 7) & 0x01); // Get the 8th bit: 00000001 }*/

Anonymous user

4 years ago

Too many missing libraries. This should be archived or delted if required libraries no longer available. Waste of time without required libraries. Library links result in Page not found.

Anonymous user

5 years ago

What if I only wanted to turn one LED on a time.. Like say for instance Row 2, Column 4?

yshishani

5 years ago

Hi, I tried to make the text scroll vertically, and somewhat it is working but the code needs fine tuning. //update from SAnwandter #define ROW_1 2 #define ROW_2 3 #define ROW_3 4 #define ROW_4 5 #define ROW_5 6 #define ROW_6 7 #define ROW_7 8 #define ROW_8 9 #define COL_1 10 #define COL_2 11 #define COL_3 12 #define COL_4 13 #define COL_5 A0 #define COL_6 A1 #define COL_7 A2 #define COL_8 A3 const byte rows[] = { ROW_1, ROW_2, ROW_3, ROW_4, ROW_5, ROW_6, ROW_7, ROW_8 }; const byte col[] = { COL_1,COL_2, COL_3, COL_4, COL_5, COL_6, COL_7, COL_8 }; // The display buffer // It's prefilled with a smiling face (1 = ON, 0 = OFF) byte ALL0[] = {B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000}; byte ALL[] = {B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111}; byte EX[] = {B00000000,B00010000,B00010000,B00010000,B00010000,B00000000,B00010000,B00000000}; byte A[] = { B00000000,B00111100,B01100110,B01100110,B01111110,B01100110,B01100110,B01100110}; byte B[] = {B01111000,B01001000,B01001000,B01110000,B01001000,B01000100,B01000100,B01111100}; byte C[] = {B00000000,B00011110,B00100000,B01000000,B01000000,B01000000,B00100000,B00011110}; byte D[] = {B00000000,B00111000,B00100100,B00100010,B00100010,B00100100,B00111000,B00000000}; byte E[] = {B00000000,B00111100,B00100000,B00111000,B00100000,B00100000,B00111100,B00000000}; byte F[] = {B00000000,B00111100,B00100000,B00111000,B00100000,B00100000,B00100000,B00000000}; byte G[] = {B00000000,B00111110,B00100000,B00100000,B00101110,B00100010,B00111110,B00000000}; byte H[] = {B00000000,B00100100,B00100100,B00111100,B00100100,B00100100,B00100100,B00000000}; byte I[] = {B00000000,B00111000,B00010000,B00010000,B00010000,B00010000,B00111000,B00000000}; byte J[] = {B00000000,B00011100,B00001000,B00001000,B00001000,B00101000,B00111000,B00000000}; byte K[] = {B00000000,B00100100,B00101000,B00110000,B00101000,B00100100,B00100100,B00000000}; byte L[] = {B00000000,B00100000,B00100000,B00100000,B00100000,B00100000,B00111100,B00000000}; byte M[] = {B00000000,B00000000,B01000100,B10101010,B10010010,B10000010,B10000010,B00000000}; byte N[] = {B00000000,B00100010,B00110010,B00101010,B00100110,B00100010,B00000000,B00000000}; byte O[] = {B00000000,B00111100,B01000010,B01000010,B01000010,B01000010,B00111100,B00000000}; byte P[] = {B00000000,B00111000,B00100100,B00100100,B00111000,B00100000,B00100000,B00000000}; byte Q[] = {B00000000,B00111100,B01000010,B01000010,B01000010,B01000110,B00111110,B00000001}; byte R[] = {B00000000,B00111000,B00100100,B00100100,B00111000,B00100100,B00100100,B00000000}; byte S[] = {B00000000,B00111100,B00100000,B00111100,B00000100,B00000100,B00111100,B00000000}; byte T[] = {B00000000,B01111100,B00010000,B00010000,B00010000,B00010000,B00010000,B00000000}; byte U[] = {B00000000,B01000010,B01000010,B01000010,B01000010,B01000010,B00111100,B00000000}; byte V[] = {B00000000,B00100010,B00100010,B00100010,B00010100,B00010100,B00001000,B00000000}; byte W[] = {B00000000,B10000010,B10010010,B01010100,B01010100,B00101000,B00000000,B00000000}; byte X[] = {B00000000,B01000010,B00100100,B00011000,B00011000,B00100100,B01000010,B00000000}; byte Y[] = {B00000000,B01000100,B00101000,B00010000,B00010000,B00010000,B00010000,B00000000}; byte Z[] = {B00000000,B00111100,B00000100,B00001000,B00010000,B00100000,B00111100,B00000000}; byte buffer_Temp[8]; int timeCount = 0; int scrollCount = 0; int k=8; void setup() { // Open serial port Serial.begin(9600); // Set all used pins to OUTPUT // This is very important! If the pins are set to input // the display will be very dim. for (byte i = 2; i <= 13; i++) pinMode(i, OUTPUT); pinMode(A0, OUTPUT); pinMode(A1, OUTPUT); pinMode(A2, OUTPUT); pinMode(A3, OUTPUT); } void loop() { // This could be rewritten to not use a delay, which would make it appear brighter delay(32); timeCount += 32; //scrollCount+= 1; if(timeCount <= 320) { drawScreenScroll(A,R); } else if (timeCount <= 640) { drawScreenScroll(R,D); } else if (timeCount <= 960) { drawScreenScroll(D,U); } else if (timeCount <= 1280) { drawScreenScroll(U,I); } else if (timeCount <= 1600) { drawScreenScroll(I,N); } else if (timeCount <= 1920) { drawScreenScroll(N,O); } else if (timeCount <= 2240) { drawScreenScroll(O,ALL0); } else if (timeCount <= 2560) { drawScreenScroll(ALL0,A); } else if (timeCount <= 2880) { drawScreenScroll(ALL0,ALL0); } else { // back to the start if (timeCount>=2880) timeCount = 0; if(scrollCount>=10*k) scrollCount=0; } } /* void drawScreen(byte buffer2[]) { // Turn on each row in series for (byte i = 0; i < 8; i++) // count next row { digitalWrite(rows[i], HIGH); //initiate whole row for (byte a = 0; a < 8; a++) // count next row { // if You set (~buffer2[i] >> a) then You will have positive digitalWrite(col[a], (~buffer2[i] >> a) & 0x01); // initiate whole column delayMicroseconds(100); // uncoment deley for diferent speed of display //delayMicroseconds(1000); //delay(10); //delay(100); digitalWrite(col[a], 1); // reset whole column } digitalWrite(rows[i], LOW); // reset whole row // otherwise last row will intersect with next row } } */ void drawScreenScroll(byte buffer1[], byte buffer3[]) { // Turn on each row in series scrollCount+=1; if (scrollCount<=2*k) { buffer_Temp[0]=buffer1[0]; buffer_Temp[1]=buffer1[1]; buffer_Temp[2]=buffer1[2]; buffer_Temp[3]=buffer1[3]; buffer_Temp[4]=buffer1[4]; buffer_Temp[5]=buffer1[5]; buffer_Temp[6]=buffer1[6]; buffer_Temp[7]=buffer1[7]; } else if(scrollCount<=3*k) { buffer_Temp[0]=buffer1[1]; buffer_Temp[1]=buffer1[2]; buffer_Temp[2]=buffer1[3]; buffer_Temp[3]=buffer1[4]; buffer_Temp[4]=buffer1[5]; buffer_Temp[5]=buffer1[6]; buffer_Temp[6]=buffer1[7]; buffer_Temp[7]=buffer3[0]; } else if(scrollCount<=4*k) { buffer_Temp[0]=buffer1[2]; buffer_Temp[1]=buffer1[3]; buffer_Temp[2]=buffer1[4]; buffer_Temp[3]=buffer1[5]; buffer_Temp[4]=buffer1[6]; buffer_Temp[5]=buffer1[7]; buffer_Temp[6]=buffer3[0]; buffer_Temp[7]=buffer3[1]; } else if(scrollCount<=5*k) { buffer_Temp[0]=buffer1[3]; buffer_Temp[1]=buffer1[4]; buffer_Temp[2]=buffer1[5]; buffer_Temp[3]=buffer1[6]; buffer_Temp[4]=buffer1[7]; buffer_Temp[5]=buffer3[0]; buffer_Temp[6]=buffer3[1]; buffer_Temp[7]=buffer3[2]; } else if(scrollCount<=6*k) { buffer_Temp[0]=buffer1[4]; buffer_Temp[1]=buffer1[5]; buffer_Temp[2]=buffer1[6]; buffer_Temp[3]=buffer3[7]; buffer_Temp[4]=buffer3[0]; buffer_Temp[5]=buffer3[1]; buffer_Temp[6]=buffer3[2]; buffer_Temp[7]=buffer3[3]; } else if(scrollCount<=7*k) { buffer_Temp[0]=buffer1[5]; buffer_Temp[1]=buffer1[6]; buffer_Temp[2]=buffer1[7]; buffer_Temp[3]=buffer3[0]; buffer_Temp[4]=buffer3[1]; buffer_Temp[5]=buffer3[2]; buffer_Temp[6]=buffer3[3]; buffer_Temp[7]=buffer3[4]; } else if(scrollCount<=8*k) { buffer_Temp[0]=buffer1[6]; buffer_Temp[1]=buffer1[7]; buffer_Temp[2]=buffer3[0]; buffer_Temp[3]=buffer3[1]; buffer_Temp[4]=buffer3[2]; buffer_Temp[5]=buffer3[3]; buffer_Temp[6]=buffer3[4]; buffer_Temp[7]=buffer3[5]; } else if(scrollCount<=9*k) { buffer_Temp[0]=buffer1[7]; buffer_Temp[1]=buffer3[0]; buffer_Temp[2]=buffer3[1]; buffer_Temp[3]=buffer3[2]; buffer_Temp[4]=buffer3[3]; buffer_Temp[5]=buffer3[4]; buffer_Temp[6]=buffer3[5]; buffer_Temp[7]=buffer3[6]; } else if(scrollCount<=10*k) { buffer_Temp[0]=buffer3[0]; buffer_Temp[1]=buffer3[1]; buffer_Temp[2]=buffer3[2]; buffer_Temp[3]=buffer3[3]; buffer_Temp[4]=buffer3[4]; buffer_Temp[5]=buffer3[5]; buffer_Temp[6]=buffer3[6]; buffer_Temp[7]=buffer3[7]; } for (byte i = 0; i < 8; i++) // count next row { digitalWrite(rows[i], HIGH); //initiate whole row for (byte a = 0; a < 8; a++) // count next row { // if You set (~buffer_Temp[i] >> a) then You will have positive digitalWrite(col[a], (~buffer_Temp[i] >> a) & 0x01); // initiate whole column //delayMicroseconds(8); // uncoment deley for diferent speed of display //delayMicroseconds(1000); //delay(10); //delay(100); digitalWrite(col[a], 1); // reset whole column } digitalWrite(rows[i], LOW); // reset whole row // otherwise last row will intersect with next row } } // /* this is siplest resemplation how for loop is working with each row. digitalWrite(COL_1, (~b >> 0) & 0x01); // Get the 1st bit: 10000000 digitalWrite(COL_2, (~b >> 1) & 0x01); // Get the 2nd bit: 01000000 digitalWrite(COL_3, (~b >> 2) & 0x01); // Get the 3rd bit: 00100000 digitalWrite(COL_4, (~b >> 3) & 0x01); // Get the 4th bit: 00010000 digitalWrite(COL_5, (~b >> 4) & 0x01); // Get the 5th bit: 00001000 digitalWrite(COL_6, (~b >> 5) & 0x01); // Get the 6th bit: 00000100 digitalWrite(COL_7, (~b >> 6) & 0x01); // Get the 7th bit: 00000010 digitalWrite(COL_8, (~b >> 7) & 0x01); // Get the 8th bit: 00000001 }*/

Anonymous user

5 years ago

I've got everything to work but all the characters are flipped along the horizontal axis, does anyone know how to fix this?

Anonymous user

5 years ago

I keep having an "expected initialiser before serial" error in the code can anyone maybe tell me what I need to change?

abdulhd1888

5 years ago

perfect

Anonymous user

5 years ago

Please help, i did everything you said in tutorial, like installing libraries, followed schematic diagram, but still it's not working properly, lights are steady, 64 lights are on, no shape is forming. Please guide me. Thanks

Anonymous user

5 years ago

Nice project, i made it display my name! But it seems like my MEGA 2560 inverted the 0s and the 1s?

Louis-Charles

5 years ago

it would not be better with resistance ???

Anonymous user

5 years ago

Stop using ARDUINO!, People who does not have brain, only those will use ARDUINO

Anonymous user

2 years ago

Why? I mean you can say anything, but can u give a reason?

coldfire2014

2 years ago

How old are you? Arduino can do things you can't even begin to imagine.

Anonymous user

5 years ago

hi, good day. does it make a difference if ı use 16x16 for 8x8? unless it does, how am ı gonna code 16x16 LED matrix, thanks for responding and thanks for your time!

Anonymous user

6 years ago

Not work in my project

Anonymous user

6 years ago

hi, im new to coding, How do you use the frequencytimer2library?

Anonymous user

2 years ago

you can go: #include <FrequencyTimer2.h> or with () instead of <>. If that doesn't work the include the file route e.g: #include <D:/Arduino/FrequncyTime2/FrequencyTime2.h> :)

Anonymous user

6 years ago

the basics of the led matrix is that you power a row and connect a column to ground. so how do you switch the grounds on and off, unless you make them inputs, which would surely not work...PLEASE EXPLAIN!

bahadiro

6 years ago

Thank You For Project Hi all, why my all leds are ON. what am I doing wrong? I uploaded FrequencyTimer2 library but notting happens.

Anonymous user

6 years ago

Wow very big thanks to you. This is seriously a good project for starters. props to you bro

Mahhony

6 years ago

Hi all, why my all leds are ON. what am I doing wrong? I uploaded FrequencyTimer2 library but notting happens.

idonthaveanarduinoboar

2 years ago

Replace the rows with the columns and the columns replaced with rows

Anonymous user

2 years ago

same problem

Huzaim

6 years ago

It doesn't really work for me, and that might be because I have a matrix module rather than a matrix, but I am a beginner at arduino.

jbdefries

6 years ago

So I followed the connections diagram, but all my LED's just sort of light up whenever they want. Is there something I could be doing wrong?

Anonymous user

6 years ago

Hello I hope you can help me....I have 8x8 led display de code say 1 = ON, 0 = OFF but my display do 0 = ON, 1 = OFF....I try all I can but i have not luck with it.....someone can help me to fix this issue....Please.....

Anonymous user

2 years ago

Did you try inverting the zeros and ones? If not then this might work I had the same problem and this method worked

Anonymous user

2 years ago

add a ~ before buffer2[i] in line 131 131 digitalWrite(col[a], (~buffer2[i] >> a) & 0x01); // initiate whole column maybe for you this is too late, but had the same issue

Anonymous user

6 years ago

Not working for me. Using an Arduino Uno Rev3, and sketch is not compatible with this device. Won't upload and the Matrix goes crazy :-(

Anonymous user

6 years ago

Lo que dice mi nombre :Vv

maxim2511

6 years ago

https://create.arduino.cc/projecthub/maxim2511/display-letters-from-led-matrix-using-array-9cb677 Its an update. Maybe will help to many peoples.

maxim2511

6 years ago

I make amasing update with this code. Before was posible to set or slow down only rows, but colums was fixt and no mather what, row was already set for whole lenght. My update have fixt that, and is slowing down each pixel. I can slowing down whole matrix to speed of 1sec, from 1 milisec. Chenging delay for micros, then picture is shining stady light.

pd1sr

7 years ago

I admire your work but on thoughts here is some ledmatrix codegenerator generating int64 for the leds and you can create beutifull characters with it. https://xantorohara.github.io/led-matrix-editor/#

SAnwandter1

2 years ago

Thanks for your contribution, really appreciate it!! When I have time I'll update de code.

Anonymous user

7 years ago

Hi. I am trying to understand why do you set the pin to high then low? digitalWrite(rows[i], HIGH); <----- delay(2); digitalWrite(rows[i], LOW); <------- ________________________________________________________ void drawScreen(byte buffer2[]){ // Turn on each row in series for (byte i = 0; i < 8; i++) { setColumns(buffer2[i]); // Set columns for this specific row digitalWrite(rows[i], HIGH); delay(2); // Set this to 50 or 100 if you want to see the multiplexing effect! digitalWrite(rows[i], LOW); } } ______________________________________________________ Thank you

maxim2511

2 years ago

Hi make that to reset whole row to 0volts. otherwise next row will intersect with last row.

alberlian

7 years ago

i love you a lot a lot

alberlian

7 years ago

i love you

Anonymous user

7 years ago

Hey there! I have used, and love the ease and use, of the code and started experimenting a bit. I've made a few different basic emoji's which have worked brilliantly. But I've run into an issue. I have a duinotechmega2560, and when i use a pushButton it resets the device. i know it's not the individual pin input, because all three are assigned to 3 seperate pins (50,51,52), well away from the other pins. It's not the same type of reset as the reset button on the device (code reset), it resets the input to the computer. My computer makes the disconnect/connected sound. but the device reset happens as fast as the button push. All three buttons i had set up are supposed to do three different emojis, but they all do the same device reset.

Anonymous user

2 years ago

It's making a short circuit and the Arduino shuts off. Don't hold the button for a long time, because you will fry the motherboard. You can feel it if you touch the little golden thing with 500T written on it (it's next to the usb input), while pressing the button.

Anonymous user

7 years ago

Hello, I tried making this project. But I needed it to be a 8x24 matrix. Is there any way on how i can increase the number of byte in the void setColumn area? Thank you for any help that you would give me I really need this.

Anonymous user

7 years ago

I struggled a bit but got it to work. There is nothing to indicate which pin on the LED Matrix is which. My tip - lower left of the picture is pin 1, and counter-clockwise to the top left is pin 16. Works much better this way than my first assumption of pin 1 being top left. I also put together a quick pin-to-pin chart. Now I have to figure out how to attach/upload it! Thanks for a fun, easy to mod project!

frans23

7 years ago

Good Day! I tried simulating it using Proteus 8, but it does not show any descent letters, the lit LEDs are scattered. They don't form any letter. could it be that the problem is with the Proteus? or the matrix there has a different config. of pins?

Anonymous user

2 years ago

I have no experience with Proteus 8, but I would say the pin config is different.

wren1017

7 years ago

Hi, This is a really cool project for a ground zero starter like me! I just have a few questions, do I need to include frequencytimer2 header at the beginning of the code? I first tried not to include it but nothing happens after I upload the code. But then I get the error message " fatal error: wiring.h: No such file or directory #include <wiring.h>" after I do include the frequencytimer2 header Can you help me out here? Thank you very much!

SAnwandter1

2 years ago

Sorry for replying so late, yes ypu need to include frequencytimer2, but for it to work you have to download its library, you will find it here: https://github.com/rookie/FrequencyTimer2.After that you will the have to go to sketch (in arduino software), then to include library, then to add .ZIP library and open frequency timer2. After that you are ready to go Good Luck!

idonthaveanarduinoboar

2 years ago

No you don't, I tried to remove it and it still worked

LBeukennoot

7 years ago

Hi, my LEDs are too bright to see any difference. I only see something if I add a byte with everything off. Could you please help me with this?

Anonymous user

2 years ago

Perhaps you might try to add resistors to LED? Resistors limit the power LEDs consume... Or you could just view it in sunglasses, if thats what you mean. If you have enough PWM pins, you could analogWrite() them.

Anonymous user

7 years ago

Eu não estou conseguindo usar os codigos...

harsha7addanki

2 years ago

Não seja estranho falar em inglês. ENTENDI?

SAnwandter1

2 years ago

que erro te mostra??

cowdude

7 years ago

I got it to work but it spells out ARDUINO! I've been trying to work on spelling other words, but have been unsuccessful. Edit: I read the instructions again and no I can.

SAnwandter1

2 years ago

If you want to change what it says you would have to go to line 78 and change the A in (drawScreen(A);) the R in (drawScreen(R);) etc... If you want to write something longer than what I did you can enable from line 113 to 139 another piece of code that you would have to change the letters.You can enable them by deleting the two " // " the have. Good luck with arduino