-Bread board veya delikli plaket
Arduino ile 8×8 Led Matrix Devresi
Aşağıdaki bağlantı şemasında 2 adet 74HC595 entegresi mevcut bu entegreler Led Matrix’i sürmemize yardımcı entegrelerdir. Entegrelerin birisi satır diğeri ise sütunları kontrol etmektedir. 74HC595 çalışma prensibini hatırlatacak olursak. Entegreye SHCP, STCP, DS bacaklarına palsler (5V) göndererek entegrenin çıkış gerilimlerini belirliyoruz. Bu palslerin gönderimi içinde Arduino uno kullanılmaktadır. 13, 12 ve 11 pinler birinci 74HC595 entegresinin SHCP, STCP, DS bacaklarına; 7, 6 ve 5 pinler ilede ikinci 74HC595 entegresinin SHCP, STCP, DS bacaklarına bağlanmıştır. Bu sayede arduino programlamasına göre çıkışlarımızı ayarlamış olacağız.
KOD:
int latchPin = 12; //Bacak Bağlantısı birinci 74HC595 için ST_CP
int clockPin = 13; //Bacak Bağlantısı birinci 74HC595 için SH_CP
int dataPin = 11; //Bacak Bağlantısı birinci 74HC595 için DS
int latchPin2 = 6; //Bacak Bağlantısı ikinci 74HC595 için ST_CP
int clockPin2 = 7; //Bacak Bağlantısı ikinci 74HC595 için ST_CP
int dataPin2 = 5; //Bacak Bağlantısı ikinci 74HC595 için ST_CP
int i=0,j=0,k=0,length_of_cathode_decimal_array, cathode_decimal_value=0;
int two_multiple=1;
int length_of_two_d_array=8;
int anode_decimal[]={1, 2, 4, 8, 16, 32, 64, 128};
int cathode_decimal[8];
int text_to_display[8][8]={
{0, 0, 1, 1, 1, 1, 0, 0},
{0, 1, 0, 0, 0, 0, 1, 0},
{1, 0, 1, 0, 0, 1, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 1, 0, 0, 1, 0, 1},
{1, 0, 0, 1, 1, 0, 0, 1},
{0, 1, 0, 0, 0, 0, 1, 0},
{0, 0, 1, 1, 1, 1, 0, 0}
};
void setup() {
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(latchPin2, OUTPUT);
pinMode(clockPin2, OUTPUT);
pinMode(dataPin2, OUTPUT);
for(j=0;j<length_of_two_d_array;j++)
{
for(i=0;i<8;i++) { if(text_to_display[i][j]==0) { if(i>0)
{
for(k=0;k<i;k++)
{
two_multiple=two_multiple * 2;
}
}
cathode_decimal_value=cathode_decimal_value + two_multiple;
two_multiple=1;
}
}
cathode_decimal[j]=cathode_decimal_value;
cathode_decimal_value=0;
}
}
void loop() {
for(k=0;k<7;k++)
{
for(j=0;j<8;j++)
{
for(i=0;i<5;i++)
{
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, anode_decimal[j]);
digitalWrite(latchPin, HIGH);
digitalWrite(latchPin2, LOW);
shiftOut(dataPin2, clockPin2, MSBFIRST, cathode_decimal[j]);
digitalWrite(latchPin2, HIGH);
}
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, 0);
digitalWrite(latchPin, HIGH);
digitalWrite(latchPin2, LOW);
shiftOut(dataPin2, clockPin2, MSBFIRST, 255);
digitalWrite(latchPin2, HIGH);
}
}
}
int clockPin = 13; //Bacak Bağlantısı birinci 74HC595 için SH_CP
int dataPin = 11; //Bacak Bağlantısı birinci 74HC595 için DS
int latchPin2 = 6; //Bacak Bağlantısı ikinci 74HC595 için ST_CP
int clockPin2 = 7; //Bacak Bağlantısı ikinci 74HC595 için ST_CP
int dataPin2 = 5; //Bacak Bağlantısı ikinci 74HC595 için ST_CP
int i=0,j=0,k=0,length_of_cathode_decimal_array, cathode_decimal_value=0;
int two_multiple=1;
int length_of_two_d_array=8;
int anode_decimal[]={1, 2, 4, 8, 16, 32, 64, 128};
int cathode_decimal[8];
int text_to_display[8][8]={
{0, 0, 1, 1, 1, 1, 0, 0},
{0, 1, 0, 0, 0, 0, 1, 0},
{1, 0, 1, 0, 0, 1, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 1, 0, 0, 1, 0, 1},
{1, 0, 0, 1, 1, 0, 0, 1},
{0, 1, 0, 0, 0, 0, 1, 0},
{0, 0, 1, 1, 1, 1, 0, 0}
};
void setup() {
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(latchPin2, OUTPUT);
pinMode(clockPin2, OUTPUT);
pinMode(dataPin2, OUTPUT);
for(j=0;j<length_of_two_d_array;j++)
{
for(i=0;i<8;i++) { if(text_to_display[i][j]==0) { if(i>0)
{
for(k=0;k<i;k++)
{
two_multiple=two_multiple * 2;
}
}
cathode_decimal_value=cathode_decimal_value + two_multiple;
two_multiple=1;
}
}
cathode_decimal[j]=cathode_decimal_value;
cathode_decimal_value=0;
}
}
void loop() {
for(k=0;k<7;k++)
{
for(j=0;j<8;j++)
{
for(i=0;i<5;i++)
{
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, anode_decimal[j]);
digitalWrite(latchPin, HIGH);
digitalWrite(latchPin2, LOW);
shiftOut(dataPin2, clockPin2, MSBFIRST, cathode_decimal[j]);
digitalWrite(latchPin2, HIGH);
}
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, 0);
digitalWrite(latchPin, HIGH);
digitalWrite(latchPin2, LOW);
shiftOut(dataPin2, clockPin2, MSBFIRST, 255);
digitalWrite(latchPin2, HIGH);
}
}
}
0 yorum:
Yorum Gönder