Thursday, July 28, 2016

Menampilkan angka di seven segment (seven segment) dengan arduino uno

Menampilkan angka di seven segment (seven segment) dengan arduino uno

7  Segment  merupakan  rangkaian  LED  yang  dikonfigurasikan  membentuk  7 segment/bagian  (+1  untuk  dot/titik).  7  segment  dapat digunakan  sebagai  opsi  untuk display selain menggunakan LCD 16x2, namun untuk menampilkan karakter yang lebih  terbatas tentunya. Gambar 7-1 merupakan tampilan 7 segment dalam berbagai ukuran  dan warna.
seven segment
seven segment

Sebelum belajar tentang cara memprogram 7 segment, mari kita memahami siapa  sih 7 segment itu? Eh, apa sih 7 segment itu? Hehehehe..
LED Common Anoda dan LED common Cathoda
LED Common Anoda dan LED common Cathoda


Jika kita lihat pada gambar di atas, terdapat 7 buah led (D1-D7) yang bagian katodanya terhubung menjadi 1, dan 7 buah led (D8-D14) lainnya bagian anodanya-lah yang terhubung menjadi 1. Rangkaian Led D1-D7 disebut commond katoda, dan rangkaian led D8-D14 disebut common anoda. Apa hubungannya dengan 7 segment?

Di dalam seven segment ternyata komponen utaman nya adalah LED, hanya saja dengan bentuk yang mungkin tidak sama dengan yang anda bayangkan,namun secara skematik, yang ada di dalam sebuah seven segment adalah LED yang di rangkai baik secara common anoda atau common cathode,silakan perhatikan gambar berikut :
Skematik seven segment common anoda
Skematik seven segment common anoda



Perhatikan gambar di bawah ini,ini adalah contoh mengakses 7 segment untuk menampilkan angka 1, sebagai catatatan jika anda perhatikan 7 segment yang ada, configutasinya adalah  common cathoda
7 segment membentuk angka 1


logika untuk menanpilkan angka pada seven segment common katoda  di tabel kan sebagai berikut:
logika untuk menanpilkan angka pada seven segment common katoda
Logika untuk menanpilkan angka pada seven segment common katoda





lalu bagaimana untuk menyalakan 2 buah seven segment yang semisal di paralel (dengan driver tentunya) driver pengontrolan led common katoda nya,semisal pin common katoda di berikan logika low otomatis seven segment yang bersesuaian dengan pin common catoda  akan menyala, namun ketika sebaliknya common katoda di berikan logika high maka seven segment yang bersesuaian dengan common catoda akan padam,

berikut gambarannya
akses seven segment paralel
akses seven segment paralel

Pada intinya, untuk menyalakan led pada 7 segment, pin CK (common katoda) harus berlogika low. Misalkan ingin menampilkan angka 20, maka prosesnya adalah: 

1. Membuat logika 1011011 pada pin A-G, 0 pada pin CKkiri dan 1 pada pin CKkanan
Ini membuat 7 segment bagian kiri akan menampilkan angka 2, sedangkan 7segment bagian kanan akan mati 


2. Membuat logika 0111111 pada pin A-G, 1 pada pin CKkiri dan 0 pada pin CKkanan
 Ini membuat 7 segment bagian kanan akan menampilkan angka 0, sedangkan 7segment bagian kiri akan mati 

3. Lakukan looping langkah1 dan langkah 2 secara terus menerus. Jadi sebenarnya, angka pada 7segmentkiri dan 7segmentkanan dinyalakan secara bergantian. Hanya saja, karena proses loopingnya cepat, mata kita melihatnya sebagai sebuah tampilan yang menyala secara bersamaan. 

7segment pin A, B, ..., G, dan Dot terhubung pada Arduino Uno pin 6-13
Pin aktifasi common anoda untuk segment kiri, kanan berturut-turut terhubung pada pin 5 dan 4. 
Karena aktifasi pin common anoda menggunakan transistor, maka agar pin common anoda berlogika low, pin 5 atau 4 harus berlogika high , perhatikan gambar






Source code Menampilkan angka di seven segment (seven segment) dengan arduino uno

const int segA = 6;
const int segB = 7;
const int segC = 8;
const int segD = 9;
const int segE = 10;
const int segF = 11;
const int segG = 12;
const int segDot = 13;

const int aktifSegmentKiri = 5;
const int aktifSegmentKanan = 4;

int segmentKiri = 0;
int segmentKanan = 0;
int konter;

void setup(){
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
 
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);
 
  pinMode(pButton1, INPUT_PULLUP);
  pinMode(pButton2, INPUT_PULLUP);  
  pinMode(pButton3, INPUT_PULLUP);  

}

void loop(){

 konter= konter+1;
 if (konter>99){
 konter = 99;

 if (konter < 10){
  segmentKiri = 0;
  segmentKanan = konter;
 } else
 {
  segmentKiri = konter/10;
  segmentKanan = konter%10;
 }

 bacaAngka(segmentKiri);
 digitalWrite(aktifSegmentKiri,HIGH);
 digitalWrite(aktifSegmentKanan,LOW); 
 delay(5);
 bacaAngka(segmentKanan);
 digitalWrite(aktifSegmentKiri,LOW);
 digitalWrite(aktifSegmentKanan,HIGH);
 delay(5);

}
}


void bacaAngka(int angkaSegment){
  switch (angkaSegment){
  case 0:  angka0(); break;
  case 1:  angka1(); break;
  case 2:  angka2(); break;
  case 3:  angka3(); break;
  case 4:  angka4(); break;
  case 5:  angka5(); break;
  case 6:  angka6(); break;
  case 7:  angka7(); break;
  case 8:  angka8(); break;
  case 9:  angka9(); break;
  } 
}


void angka0()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segB, HIGH);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, HIGH);
  digitalWrite(segE, HIGH);
  digitalWrite(segF, HIGH);
  digitalWrite(segG, LOW);
  digitalWrite(segDot, LOW);
}

void angka1()
{
  digitalWrite(segA, LOW);
  digitalWrite(segB, HIGH);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, LOW);
  digitalWrite(segE, LOW);
  digitalWrite(segF, LOW);
  digitalWrite(segG, LOW);
  digitalWrite(segDot, LOW);
}

void angka2()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segB, HIGH);
  digitalWrite(segC, LOW);
  digitalWrite(segD, HIGH);
  digitalWrite(segE, HIGH);
  digitalWrite(segF, LOW);
  digitalWrite(segG, HIGH);
  digitalWrite(segDot, LOW);
}

void angka3()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segB, HIGH);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, HIGH);
  digitalWrite(segE, LOW);
  digitalWrite(segF, LOW);
  digitalWrite(segG, HIGH);
  digitalWrite(segDot, LOW);
}

void angka4()
{
  digitalWrite(segA, LOW);
  digitalWrite(segB, HIGH);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, LOW);
  digitalWrite(segE, LOW);
  digitalWrite(segF, HIGH);
  digitalWrite(segG, HIGH);
  digitalWrite(segDot, LOW);
}

void angka5()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segB, LOW);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, HIGH);
  digitalWrite(segE, LOW);
  digitalWrite(segF, HIGH);
  digitalWrite(segG, HIGH);
  digitalWrite(segDot, LOW);
}

void angka6()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segB, LOW);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, HIGH);
  digitalWrite(segE, HIGH);
  digitalWrite(segF, HIGH);
  digitalWrite(segG, HIGH);
  digitalWrite(segDot, LOW);
}

void angka7()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segB, HIGH);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, LOW);
  digitalWrite(segE, LOW);
  digitalWrite(segF, LOW);
  digitalWrite(segG, LOW);
  digitalWrite(segDot, LOW);
}

void angka8()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segB, HIGH);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, HIGH);
  digitalWrite(segE, HIGH);
  digitalWrite(segF, HIGH);
  digitalWrite(segG, HIGH);
  digitalWrite(segDot, LOW);
}

void angka9()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segB, HIGH);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, HIGH);
  digitalWrite(segE, LOW);
  digitalWrite(segF, HIGH);
  digitalWrite(segG, HIGH);
  digitalWrite(segDot, LOW);
}


jika anda upload sketch di atas ke arduino dengan tampilan seven segment sebagaimana gambar yang ada pada penjelasan di atas, maka seven segment akan menampilkan angka 0-99 lalu kembali ke 0 dan naik 1 per 1 sampai angka 99

sedikit penjelasan

void bacaAngka(int angkaSegment){
  switch (angkaSegment){
  case 0:  angka0(); break;
  case 1:  angka1(); break;
  case 2:  angka2(); break;
  case 3:  angka3(); break;
  case 4:  angka4(); break;
  case 5:  angka5(); break;
  case 6:  angka6(); break;
  case 7:  angka7(); break;
  case 8:  angka8(); break;
  case 9:  angka9(); break;
  } 
}

merupakan fungsi untuk memanggil subprogram angka0() sampai dengan angka9(). Misalkan pada program utama kita tulis: bacaAngka(1);, maka subrutin angka1() akan dieksekusi


kemudian bagian 


void angka0()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segB, HIGH);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, HIGH);
  digitalWrite(segE, HIGH);
  digitalWrite(segF, HIGH);
  digitalWrite(segG, LOW);
  digitalWrite(segDot, LOW);
}

void angka1()
{
  digitalWrite(segA, LOW);
  digitalWrite(segB, HIGH);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, LOW);
  digitalWrite(segE, LOW);
  digitalWrite(segF, LOW);
  digitalWrite(segG, LOW);
  digitalWrite(segDot, LOW);
}

void angka2()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segB, HIGH);
  digitalWrite(segC, LOW);
  digitalWrite(segD, HIGH);
  digitalWrite(segE, HIGH);
  digitalWrite(segF, LOW);
  digitalWrite(segG, HIGH);
  digitalWrite(segDot, LOW);
}

void angka3()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segB, HIGH);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, HIGH);
  digitalWrite(segE, LOW);
  digitalWrite(segF, LOW);
  digitalWrite(segG, HIGH);
  digitalWrite(segDot, LOW);
}

void angka4()
{
  digitalWrite(segA, LOW);
  digitalWrite(segB, HIGH);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, LOW);
  digitalWrite(segE, LOW);
  digitalWrite(segF, HIGH);
  digitalWrite(segG, HIGH);
  digitalWrite(segDot, LOW);
}

void angka5()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segB, LOW);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, HIGH);
  digitalWrite(segE, LOW);
  digitalWrite(segF, HIGH);
  digitalWrite(segG, HIGH);
  digitalWrite(segDot, LOW);
}

void angka6()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segB, LOW);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, HIGH);
  digitalWrite(segE, HIGH);
  digitalWrite(segF, HIGH);
  digitalWrite(segG, HIGH);
  digitalWrite(segDot, LOW);
}

void angka7()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segB, HIGH);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, LOW);
  digitalWrite(segE, LOW);
  digitalWrite(segF, LOW);
  digitalWrite(segG, LOW);
  digitalWrite(segDot, LOW);
}

void angka8()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segB, HIGH);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, HIGH);
  digitalWrite(segE, HIGH);
  digitalWrite(segF, HIGH);
  digitalWrite(segG, HIGH);
  digitalWrite(segDot, LOW);
}

void angka9()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segB, HIGH);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, HIGH);
  digitalWrite(segE, LOW);
  digitalWrite(segF, HIGH);
  digitalWrite(segG, HIGH);
  digitalWrite(segDot, LOW);
}

merupakan program untuk mengkonfigurasikan pin a-g agar dapat menampilkan angka 0 sampai dengan 9, cek tabel yang ada di tengah postingan ini, jika bingung cek tabel di bawah ini (saya tampilkan kembali)




nah ini program utama sebenar nya 



 konter= konter+1;
 if (konter>99){
 konter = 99;

 if (konter < 10){
  segmentKiri = 0;
  segmentKanan = konter;
 } else
 {
  segmentKiri = konter/10;
  segmentKanan = konter%10;
 }

 Penjelasan:
7segment pada Ardu Mini Lab bagian kiri akan menampilkan nilai puluhan, dan bagian kanan menampilkan nilai satuan. Misalkan nilai konter = 23, maka 7segmentkiri akan menampilkan angka 2, dan 7segmentkanan akan menampilkan angka 3.
Nilai puluhan akan disimpan pada variabel segmentKiri, dan nilai satuan akan disimpan pada variabel segmentKanan.
Apabila nilai konter <10, maka 7segmentkiri akan selalu menampilkan angka 0 dan 7segmentkanan akan menampilkan nilai konter (code 7-1.5a). Sehingga variabel segmentKiri diberi nilai nol, dan segmentKanan diberi nilai sama dengan nilai konter.
Apabila nilai konter >= 10, maka nilai konter /10 untuk mendapatkan nilai puluhan (disimpan pada variabel segmentKiri) dan nilai konter %10 untuk mendapatkan nilai satuan (disimpan pada variabel segmentKanan ) (code 7-1.5b).
Misalkan konter bernilai 54. “konter/10;” akan menghasilkan nilai segmentKiri = 5, dan “konter%10;” akan menghasilkan nilai segmentKanan=4. “%” merupakan modulus, digunakan untuk menghitung sisa pembagian. Misal 10%4 = 2, 3%2=1, dll.


untuk bagian ini

bacaAngka(segmentKiri);
 digitalWrite(aktifSegmentKiri,HIGH);
 digitalWrite(aktifSegmentKanan,LOW); 
 delay(5);
 bacaAngka(segmentKanan);
 digitalWrite(aktifSegmentKiri,LOW);
 digitalWrite(aktifSegmentKanan,HIGH);
 delay(5);

Penjelasan:
Sesuai penjelasan sebelumnya, apabila konter = 54, maka segmentKiri bernilai 5 dan segmentKanan bernilai 4.
Untuk menampilkan angka 5 pada 7segmentKiri, terdapat 2 step, yaitu memanggil sub rutin bacaAngka(segmentKiri); untuk mengkonfigurasikan kondisi pin a-g, lalu membuat pin 5 (aktifSegmentKiri) berlogika High sedangkan pin 4 (aktifSegmentKanan) berlogika Low. Code 7-1.6a akan menampilkan angka 5 pada 7segmentkiri.
Untuk menampilkan angka 4 pada 7segmentkanan, terdapat 2 step, yaitu memanggil sub rutin bacaAngka(segmentKanan); untuk mengkonfigurasikan kondisi pin a-g, lalu membuat pin 4 (aktifSegmentKiri) berlogika High sedangkan pin 5 (aktifSegmentKanan) berlogika Low. Code 7-1.6a akan menampilkan angka 4 pada 7segmentkiri



Penjelasan:silakan di implementasi dikembangkan semisal untuk menampilkan data sensor suhu, pembacaan sensor suhu ada di halaman lain web site ini (cek postingan sebelumnya)

 

Related Posts

Menampilkan angka di seven segment (seven segment) dengan arduino uno
4/ 5
Oleh

1 comments:

November 12, 2016 at 12:10 AM delete

gan, penjelasan buttomnya gimana?

Reply
avatar

Silakan dikomentari