I am trying to control 6x6 led matrix using arduino and I have written up such a code.
int a1 = 13;
int a2 = 12;
int a3 = 11;
int a4 = 10;
int a5 = 9;
int a6 = 8;
int b1 = 2;
int b2 = 3;
int b3 = 4;
int b4 = 5;
int b5 = 6;
int b6 = 7;
int array[6][6] =
{
{0,0,0,0,0,0},
{0,0,0,0,0,0},
{0,0,0,0,0,0},
{0,0,0,0,0,0},
{0,0,0,0,0,0},
{0,0,0,0,0,0}
};
void setup()
{
Serial.begin(9600);
pinMode(a1, OUTPUT);
pinMode(a2, OUTPUT);
pinMode(a3, OUTPUT);
pinMode(a4, OUTPUT);
pinMode(a5, OUTPUT);
pinMode(a6, OUTPUT);
pinMode(b1, OUTPUT);
pinMode(b2, OUTPUT);
pinMode(b3, OUTPUT);
pinMode(b4, OUTPUT);
pinMode(b5, OUTPUT);
pinMode(b6, OUTPUT);
// Set them high so nothing would be on
digitalWrite(a1, HIGH);
digitalWrite(a2, HIGH);
digitalWrite(a3, HIGH);
digitalWrite(a4, HIGH);
digitalWrite(a5, HIGH);
digitalWrite(a6, HIGH);
digitalWrite(b1, HIGH);
digitalWrite(b2, HIGH);
digitalWrite(b3, HIGH);
digitalWrite(b4, HIGH);
digitalWrite(b5, HIGH);
digitalWrite(b6, HIGH);
Serial.flush();
}
void loop()
{
//delay(100);
if (Serial.available() > 35) {
for (int j = 0; j<6; j++){
for (int i = 0; i<6; i++){
array[j][i] = Serial.read()-65;
}
}
Serial.flush();
}
draw(array,10);
}
void draw(int anim[6][6], int time) {
for (int a=0; a<time; a++) {
for (int i=0; i<6; i++) {
digitalWrite(a1, anim[i][0]);
digitalWrite(a2, anim[i][1]);
digitalWrite(a3, anim[i][2]);
digitalWrite(a4, anim[i][3]);
digitalWrite(a5, anim[i][4]);
digitalWrite(a6, anim[i][5]);
digitalWrite(i+2, LOW);
delay(1); // wait
digitalWrite(i+2, HIGH);
digitalWrite(a1, HIGH);
digitalWrite(a2, HIGH);
digitalWrite(a3, HIGH);
digitalWrite(a4, HIGH);
digitalWrite(a5, HIGH);
digitalWrite(a6, HIGH);
// set the LED off
}
}
}
User inputs 36 A or B and according led light up. It works fine if I input it through arduino's software's serial monitor and do it slowly. The problem arises if I try to use processing to write to serial.
import processing.serial.*;
Serial myPort;
int a = 200;
void setup(){
println(Serial.list());
myPort = new Serial(this, Serial.list()[1], 9600);
//myPort.buffer(0);
size(400, 400);
background(51);
// noLoop();
}
void draw(){
myPort.write("BAAAABBAAAABBAAAABBAAAABBAAAABBAAAAB");
delay(1000);
myPort.write("BAAAAAABAAAAAABAAAAAABAAAAAABAAAAAAB");
delay(1000);
myPort.write("ABAAAAAABAAAAAABAAAAAABAAAAAABAAAAAA");
delay(1000);
}
Patterns seems to get randomly shifted. What could be the problem with this set up? How can I fix it?