Components and supplies
USB Cable - Standard A-B for ARDUINO
Breadboard (generic)
Arduino UNO
Jumper wires (generic)
8x8 LED Matrix
Apps and platforms
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
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
Programming 8x8 LED Matrix | Arduino Project Hub
kiet_21022013
4 months ago
what a bad project!!!