Arduino
OKUDUĞUNUZ KONU
Arduino ile 4 Digit 7 Segment Display Uygulaması
9

Arduino ile 4 Digit 7 Segment Display Uygulaması

Yazar : Erdi Dedemli16 Şubat 2016

İlk olarak , 7 segment displayler plastik kalıp içine 8 adet LED’in yerleştirilmesiyle oluşturulmuştur. Display’in büyüklüğüne göre birden fazla LED seri olarak bağlanabilmektedir. Aşağıda segment isimleri ve display görülmektedir.

Arduino ile 4 digit 7 segment display uygulamasını gerçekleştireceğiz

Malzeme Listesi:

  1. Arduino UNO-1 Adet
  2. 220 Ohm Direnç-4 Adet
  3. 4 digit 7 segment display-1 Adet
  4. USB Yazıcı Kablosu – 1 Adet

1.Aşama: Malzemelerin Arduino ile birlikte yerleşimi4digit7segmentLedDisplay_LN3461AS2B_Steckplatine_600
7segLed

  Arduino ile Display bağlantı tablosu:

              Display Pin                     Arduino Pin
                 12                         2
                  9                         3
                  8                         4
                  6                         5
                 11                         6
                  7                         7
                  4                         8
                  2                         9
                  1                        10
                 10                        11
                  5                        12
                  3                        13

2.Aşama:Arduino UNO Üzerinde Kodlamasının Yapılması:
Aşağıdaki linkte Arduino kodu bulunmaktadır. Kolay gelsin…

Kodları İndir

boolean DigitOn = LOW;
boolean DigitOff = HIGH;
boolean SegOn=HIGH;
boolean SegOff=LOW;
int DigitPins[] = {2, 3, 4, 5};
int SegmentPins[] = {6, 7, 8, 9, 10, 11, 12, 13};
 

int BLANK[] = {LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW};
int N0[] = {HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, LOW, LOW};
int N0P[] = {HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, LOW, HIGH};
int N1[] = {LOW, HIGH, HIGH, LOW, LOW, LOW, LOW, LOW};
int N1P[] = {LOW, HIGH, HIGH, LOW, LOW, LOW, LOW, HIGH};
int N2[] = {HIGH, HIGH, LOW, HIGH, HIGH, LOW, HIGH, LOW};
int N2P[] = {HIGH, HIGH, LOW, HIGH, HIGH, LOW, HIGH, HIGH};
int N3[] = {HIGH, HIGH, HIGH, HIGH, LOW, LOW, HIGH, LOW};
int N3P[] = {HIGH, HIGH, HIGH, HIGH, LOW, LOW, HIGH, HIGH};
int N4[] = {LOW, HIGH, HIGH, LOW, LOW, HIGH, HIGH, LOW};
int N4P[] = {LOW, HIGH, HIGH, LOW, LOW, HIGH, HIGH, HIGH};
int N5[] = {HIGH, LOW, HIGH, HIGH, LOW, HIGH, HIGH, LOW};
int N5P[] = {HIGH, LOW, HIGH, HIGH, LOW, HIGH, HIGH, HIGH};
int N6[] = {HIGH, LOW, HIGH, HIGH, HIGH, HIGH, HIGH, LOW};
int N6P[] = {HIGH, LOW, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH};
int N7[] = {HIGH, HIGH, HIGH, LOW, LOW, LOW, LOW, LOW};
int N7P[] = {HIGH, HIGH, HIGH, LOW, LOW, LOW, LOW, HIGH};
int N8[] = {HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, LOW};
int N8P[] = {HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH};
int N9[] = {HIGH, HIGH, HIGH, HIGH, LOW, HIGH, HIGH, LOW};
int N9P[] = {HIGH, HIGH, HIGH, HIGH, LOW, HIGH, HIGH, HIGH};
int MIN[] = {LOW, LOW, LOW, LOW, LOW, LOW, HIGH, LOW};
int A[] = {HIGH, HIGH, HIGH, LOW, HIGH, HIGH, HIGH, LOW};
int B[] = {HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, LOW};
int C[] = {HIGH, LOW, LOW, HIGH, HIGH, HIGH, LOW, LOW};
int D[] = {HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, LOW, LOW};
int E[] = {HIGH, LOW, LOW, HIGH, HIGH, HIGH, HIGH, LOW};
int F[] = {HIGH, LOW, LOW, LOW, HIGH, HIGH, HIGH, LOW};
int G[] = {HIGH, LOW, HIGH, HIGH, HIGH, HIGH, HIGH, LOW};
int H[] = {LOW, HIGH, HIGH, LOW, HIGH, HIGH, HIGH, LOW};
int I[] = {LOW, HIGH, HIGH, LOW, LOW, LOW, LOW, LOW};
int J[] = {LOW, HIGH, HIGH, HIGH, HIGH, LOW, LOW, LOW};
int L[] = {LOW, LOW, LOW, HIGH, HIGH, HIGH, LOW, LOW};
int O[] = {HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, LOW, LOW};
int P[] = {HIGH, HIGH, LOW, LOW, HIGH, HIGH, HIGH, LOW};
int Q[] = {HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, LOW, HIGH};
int R[] = {HIGH, HIGH, HIGH, LOW, HIGH, HIGH, HIGH, LOW};
int S[] = {HIGH, LOW, HIGH, HIGH, LOW, HIGH, HIGH, LOW};
int U[] = {LOW, HIGH, HIGH, HIGH, HIGH, HIGH, LOW, LOW};
int Y[] = {LOW, HIGH, HIGH, HIGH, LOW, HIGH, HIGH, LOW};
 
int* lights[4];
 

char incoming[9] = {}; 
 
void setup() {
 Serial.begin(9600);
 
 for (byte digit=0;digit<4;digit++) {
 pinMode(DigitPins[digit], OUTPUT);
 }
 for (byte seg=0;seg<8;seg++) {
 pinMode(SegmentPins[seg], OUTPUT);
 }
 
 lights[0] = N1P;
 lights[1] = N2;
 lights[2] = N3;
 lights[3] = N4;
}
 
void loop() {
 
 if (Serial.available() > 0) {
 int i = 0;
 memset(incoming, 0, sizeof(incoming));
 while (Serial.available() > 0 && i < sizeof(incoming) - 1) {
 incoming[i] = Serial.read();
 i++;
 delay(3);
 }
 Serial.println(incoming); 
 
 
 int counter = -1;
 for (int tmp = 0; tmp < 9; tmp++) {
 counter++;
 switch(incoming[tmp]){
 case '0': 
 if (tmp < 8 && (incoming[tmp + 1] == '.' || incoming[tmp + 1] == ',')) {
 lights[counter] = N0P;
 tmp++;
 } else {
 lights[counter] = N0; 
 }
 break;
 case '1': 
 if (tmp < 8 && (incoming[tmp + 1] == '.' || incoming[tmp + 1] == ',')) {
 lights[counter] = N1P;
 tmp++;
 } else {
 lights[counter] = N1; 
 }
 break;
 case '2': 
 if (tmp < 8 && (incoming[tmp + 1] == '.' || incoming[tmp + 1] == ',')) {
 lights[counter] = N2P;
 tmp++;
 } else {
 lights[counter] = N2; 
 }
 break;
 case '3': 
 if (tmp < 8 && (incoming[tmp + 1] == '.' || incoming[tmp + 1] == ',')) {
 lights[counter] = N3P;
 tmp++;
 } else {
 lights[counter] = N3; 
 }
 break;
 case '4': 
 if (tmp < 8 && (incoming[tmp + 1] == '.' || incoming[tmp + 1] == ',')) {
 lights[counter] = N4P;
 tmp++;
 } else {
 lights[counter] = N4; 
 }
 break;
 case '5': 
 if (tmp < 8 && (incoming[tmp + 1] == '.' || incoming[tmp + 1] == ',')) {
 lights[counter] = N5P;
 tmp++;
 } else {
 lights[counter] = N5; 
 }
 break;
 case '6': 
 if (tmp < 8 && (incoming[tmp + 1] == '.' || incoming[tmp + 1] == ',')) {
 lights[counter] = N6P;
 tmp++;
 } else {
 lights[counter] = N6; 
 }
 break;
 case '7': 
 if (tmp < 8 && (incoming[tmp + 1] == '.' || incoming[tmp + 1] == ',')) {
 lights[counter] = N7P;
 tmp++;
 } else {
 lights[counter] = N7; 
 }
 break;
 case '8': 
 if (tmp < 8 && (incoming[tmp + 1] == '.' || incoming[tmp + 1] == ',')) {
 lights[counter] = N8P;
 tmp++;
 } else {
 lights[counter] = N8; 
 }
 break;
 case '9': 
 if (tmp < 8 && (incoming[tmp + 1] == '.' || incoming[tmp + 1] == ',')) {
 lights[counter] = N9P;
 tmp++;
 } else {
 lights[counter] = N9; 
 }
 break;
 case '-':
 lights[counter] = MIN; 
 if (tmp < 8 && (incoming[tmp + 1] == '.' || incoming[tmp + 1] == ',')) {
 tmp++;
 } 
 break; 
 case 'a': 
 case 'A': 
 lights[counter] = A; 
 if (tmp < 8 && (incoming[tmp + 1] == '.' || incoming[tmp + 1] == ',')) {
 tmp++;
 } 
 break; 
 case 'b': 
 case 'B': 
 lights[counter] = B; 
 if (tmp < 8 && (incoming[tmp + 1] == '.' || incoming[tmp + 1] == ',')) {
 tmp++;
 } 
 break; 
 case 'c': 
 case 'C': 
 lights[counter] = C; 
 if (tmp < 8 && (incoming[tmp + 1] == '.' || incoming[tmp + 1] == ',')) {
 tmp++;
 } 
 break; 
 case 'd':
 case 'D': 
 lights[counter] = D; 
 if (tmp < 8 && (incoming[tmp + 1] == '.' || incoming[tmp + 1] == ',')) {
 tmp++;
 } 
 break; 
 case 'e': 
 case 'E': 
 lights[counter] = E; 
 if (tmp < 8 && (incoming[tmp + 1] == '.' || incoming[tmp + 1] == ',')) {
 tmp++;
 } 
 break; 
 case 'f': 
 case 'F': 
 lights[counter] = F; 
 if (tmp < 8 && (incoming[tmp + 1] == '.' || incoming[tmp + 1] == ',')) {
 tmp++;
 } 
 break; 
 case 'g': 
 case 'G': 
 lights[counter] = G; 
 if (tmp < 8 && (incoming[tmp + 1] == '.' || incoming[tmp + 1] == ',')) {
 tmp++;
 } 
 break; 
 case 'h': 
 case 'H': 
 lights[counter] = H; 
 if (tmp < 8 && (incoming[tmp + 1] == '.' || incoming[tmp + 1] == ',')) {
 tmp++;
 } 
 break; 
 case 'i': 
 case 'I': 
 lights[counter] = I; 
 if (tmp < 8 && (incoming[tmp + 1] == '.' || incoming[tmp + 1] == ',')) {
 tmp++;
 } 
 break; 
 case 'j': 
 case 'J': 
 lights[counter] = J; 
 if (tmp < 8 && (incoming[tmp + 1] == '.' || incoming[tmp + 1] == ',')) {
 tmp++;
 } 
 break; 
 case 'l': 
 case 'L': 
 lights[counter] = L; 
 if (tmp < 8 && (incoming[tmp + 1] == '.' || incoming[tmp + 1] == ',')) {
 tmp++;
 } 
 break; 
 case 'o': 
 case 'O': 
 lights[counter] = O; 
 if (tmp < 8 && (incoming[tmp + 1] == '.' || incoming[tmp + 1] == ',')) {
 tmp++;
 } 
 break; 
 case 'p': 
 case 'P': 
 lights[counter] = P; 
 if (tmp < 8 && (incoming[tmp + 1] == '.' || incoming[tmp + 1] == ',')) {
 tmp++;
 } 
 break; 
 case 'q': 
 case 'Q': 
 lights[counter] = Q; 
 if (tmp < 8 && (incoming[tmp + 1] == '.' || incoming[tmp + 1] == ',')) {
 tmp++;
 } 
 break; 
 case 'r': 
 case 'R': 
 lights[counter] = R; 
 if (tmp < 8 && (incoming[tmp + 1] == '.' || incoming[tmp + 1] == ',')) {
 tmp++;
 } 
 break; 
 case 's': 
 case 'S': 
 lights[counter] = S; 
 if (tmp < 8 && (incoming[tmp + 1] == '.' || incoming[tmp + 1] == ',')) {
 tmp++;
 } 
 break; 
 case 'u': 
 case 'U': 
 lights[counter] = U; 
 if (tmp < 8 && (incoming[tmp + 1] == '.' || incoming[tmp + 1] == ',')) {
 tmp++;
 } 
 break; 
 case 'y': 
 case 'Y': 
 lights[counter] = Y; 
 if (tmp < 8 && (incoming[tmp + 1] == '.' || incoming[tmp + 1] == ',')) {
 tmp++;
 } 
 break; 
 case 1 ... 43: counter--; break;
 case 47: counter--; break;
 //chars between Z and a
 case 91 ... 96: counter--; break;
 case 123 ... 127: counter--; Serial.println("above 122"); break;
 
 default: lights[counter] = BLANK;
 }
 } 
 for (int y = 0; y < 4; y++) {
 Serial.print(y);
 Serial.print(": ");
 for (int z = 0; z < 8; z++) {
 Serial.print(lights[y][z]);
 }
 Serial.println("");
 }
 }
 for (byte seg=0;seg<8;seg++) {
 digitalWrite(SegmentPins[seg],SegOn);
 
 for (byte digit=0;digit<4;digit++){
 if (lights[digit][seg]==1) {
 digitalWrite(DigitPins[digit],DigitOn);
 }
 }
 
 for (byte digit=0;digit<4;digit++){
 digitalWrite(DigitPins[digit],DigitOff);
 }
 
 digitalWrite(SegmentPins[seg],SegOff);
 } 
}
 
SİZCE NASIL OLMUŞ?
Beğendim
40%
İlginç
4%
Eh İşte
4%
Anlamadım
6%
Kötü
2%
Berbat
40%
YAZAR HAKKINDA
Erdi Dedemli
Erdi Dedemli
Erciyes üniversitesi Elektrik-Elektronik ögrencisiyim aynı zamanda Erciyes Teknoparkta Start-up şirketine sahibim.Amatörce elektronik üzerine proje çıkartmaktayım
9 YORUMLAR
  • Murat Coşkun
    27 Ocak 2017 at 00:52

    Bağlantıları defalarca kontrol ettim ancak ekrandaki tüm ledler her durumda yanıyor. Sebebi ne olabilir

  • Erdi Dedemli
    27 Ocak 2017 at 16:12

    Bağlantılarınız da sorun vardır kod ve devre test edilip öyle siteye yüklenmiştir.

  • Adem POLAT
    20 Şubat 2017 at 17:14

    Bağlantılar çok karışık görünüyor. daha düzgün bir bağlantı şeması var mıdır?

  • yunus şahin
    2 Mayıs 2017 at 21:00

    bağlantıları bende kontrol ettim bende aynı durumla karşı karşıya kaldım hatta ustune teker teker kabloları cıkarıp denedım ve hepside bi ışığın yanıp sönmesini sağlıyor yani bağlantımda bir sıkıntım yok ama tüm ışıklar yanıyor.

  • Oğuzhan Başkan
    1 Temmuz 2017 at 10:40

    kodda HIGH olanların hepsini LOW yapmama rağmen hepsi yanıyor. Bağlantı şemasını pin ve bağlantı noktalarını verdiğin tabloya göre yaptım dirençleri de. kodda sıkıntı olmayabilir ama şema da bir aksilik var galiba gözden geçirmeniz mümkün müdür.

  • idris yeğ
    11 Temmuz 2017 at 20:42

    Kod ve devre çalışıyor, Arduino kullanan arkadaşlar direnç kullanmadanda bağlantı yapabilirsiniz. Saat ve counter kodları mevcut mu?

  • Sait müftü
    17 Ağustos 2017 at 01:22

    Dev C ile bu devreyi nasıl çalıştırabilirim yardımcı olabilirmisiniz

  • Akash
    8 Ekim 2017 at 17:39

    C:\Users\e-logic\Desktop\_7_Sigment\_7_Sigment.ino: In function ‘void show_date(DateTime, boolean)’:

    _7_Sigment:207: error: ‘class DateTime’ has no member named ‘dayOfWeek’

    tft.print(get_day_of_week(now.dayOfWeek()));

    Please help…..

  • Yasin şirin
    10 Aralık 2017 at 07:27

    Selam arkadaşlar
    Bende yeniyim bu konuda fakat bu 4 digit 7 segmenti anlamak istedim 7 ledin a uçları birleşik yine b uçları c uçları d,e,f,g uçları hep birleşik dolayısı ile her rakamı ayrı ayrı yakmak için kod sürekli alt alta olunca her yakılan led yanık kalıyor sönmüyor kodda araya küçük bir 10 ms gibi delay koymak gerekiyor
    Örnek olarak ilk digitte 8 yazdınız abcdefg hepsi high ve common1 low
    Burada sadece ilk digitte 8 yazar evet ama 2.3.4.digitlerin de tüm abcdefg pinleri de high oldu aynı anda fakat commonları low olmadığı için hiçbirşey yazmıyor henüz!
    Siz 2.segmente örneğin 1 yazmak isteyince b ve c high common2 low yapınca 2.segmentte 1 değil yine 8 yazacaktır yani tüm seçmenlere herhangi bir sayı yazmak isteyince hepsi 8
    araya küçük bir delay (10) koyunca sürekli tekrarlama yapacak tüm ledleri ayrı ayrı ve ard arda yakacak ama göz onu hep yanıyormuş gibi
    7 segmentin 4 divitin tüm uçları ortak yani toplamda az sayıda pin ile kontrol edilebilmesi bu mantıkla sağlanıyor işte. Selamlar

YORUM YAP