undefined

Selama saya menggunakan Arduino UNO, salah satu yang menjadi batasan adalah jumlah pin yang tersedia. Misalnya ketika menggunakan seven segment. Saat menggunakan satu seven segment, kita menyiapkan delapan pin, tujuh pin display dan satu pin untuk Vcc atau GND tergantung tipe seven segment yang kita gunakan. Saat menggunakan dua seven segment, normalnya kita menyiapkan 15 pin. Wew, hanya untuk display saja.

Saya mencoba mencari sebuah cara. Entah sudah ada yang menggunakannya atau belum. Saya juga tidak tahu cara ni dapat diterima atau tidak. Kita perlu menyiapkan ( 7 + jumlah seven segment ) buat pin. Idenya adalah kita menggunakan 7 buah pin untuk membentuk display untuk "semua" seven segment. Pada satu waktu hanya ada satu seven segment yang menyala. Bergantian secara cepat hingga mata manusia melihatnya menyala semuanya. Berikut rangkaiannya.

undefined

Pada rangkaian di atas saya tidak menggunakan resistor untuk seven segment agar nyalanya lebih terang hehe. Pin 13 dan 5 berfungsi sebagai pengatur nyala seven segment, diatur sedemikian rupa agar hanya satu yang menyala pada satu waktu. Perlu diingat bahwa ada jenis seven segment common anode dan common cathode. Jadi, kodingannya perlu disesuaikan.

// Fat Han Nuraddin @ 19 Februari 2017

//Pin-pin digital untuk 7 segment
#define GL 13    // Ground/Vcc untuk 7 segment kiri
#define GR 5     // Ground/Vcc untuk 7 segment kanan
#define led_A 9
#define led_B 10
#define led_C 7
#define led_D 6
#define led_E 8
#define led_F 11
#define led_G 12


int count=0;  //nilai yang ditampilkan pada 7 segment

void tulis_angka(int angka){
  //menulis angka ke 7 segment
  tulis(GR,angka,1);     // satuan
  tulis(GL,angka/10,0);  // puluhan
  
}

void tulis(int G,int count, int tipe){
  //menulis 1 digit ke 7 segment
  //tipe = 1, common cathode
  //tipe = 0, common anodhe
  count=count%10;
  digitalWrite(G,1-tipe);
  if(!tipe){
    digitalWrite(led_A,!(count!=1 && count!=4));
    digitalWrite(led_B,!(count!=5 && count!=6));
    digitalWrite(led_C,!(count!=2));
    digitalWrite(led_D,!(count!=1 && count!=4 && count!=7));
    digitalWrite(led_E,!(count==0 || count==2 || count==6 || count==8));
    digitalWrite(led_F,!(count!=1 && count!=2 && count!=3 && count!=7));
    digitalWrite(led_G,!(count!=0 && count!=1 && count!=7));
  }else{
    digitalWrite(led_A,(count!=1 && count!=4));
    digitalWrite(led_B,(count!=5 && count!=6));
    digitalWrite(led_C,(count!=2));
    digitalWrite(led_D,(count!=1 && count!=4 && count!=7));
    digitalWrite(led_E,(count==0 || count==2 || count==6 || count==8));
    digitalWrite(led_F,(count!=1 && count!=2 && count!=3 && count!=7));
    digitalWrite(led_G,(count!=0 && count!=1 && count!=7));
  }
  delay(5);
  digitalWrite(G,tipe);

}

void setup(){
  
  pinMode(GR, OUTPUT);
  pinMode(GL, OUTPUT);
  pinMode(led_A,OUTPUT);
  pinMode(led_B,OUTPUT);
  pinMode(led_C,OUTPUT);
  pinMode(led_D,OUTPUT);
  pinMode(led_E,OUTPUT);
  pinMode(led_F,OUTPUT);
  pinMode(led_G,OUTPUT);
}

void loop(){
  //increment counter
  count=(count+1)%100;
  
  //menulis angka
  for(int i=0;i<20;i++){ // 20 kedipan untuk 1 tampilan angka
    tulis_angka(count);
  } 
}

Hasil implementasi :

Dan tidak terbatas 2 seven segment saja. Selama pin digital masih tersedia, kita dapat menambah jumlahnya. Menjadi 4 misalnya.

undefined