Cara Menampilkan Karakter dari Arduino pada 7 Segment dengan Metode Scanning

Assalamu’alaikum Warahmatullahi Wabarakatuh teman teman, meneruskan artikel saya yang kemarin yaitu cara menampilkan karakter pada 7 segment dengan arduino. karena pada pembahasan kemarin kita hanya mampu menampilkan karakter di 1 seven segment saja oleh karena itu kita akan coba menampilkan beberapa karakter ke beberapa seven segment, namun kali ini saya hanya akan coba menampilkan 2 karakter ke 2 seven segment saja, lah kok cuma 2? iya, karena masih buat belajar, secara prinsip untuk menampilkan ke 3,4 dan seterusnya sama kok. jadi jika temen temen paham dengan cara yang akan kita bahas ini nanti maka temen temen insyaAllah juga akan bisa menampilkan pada 4 , 5 atau 6 seven segment.

Nah, seperti biasa sebelum kita memulai mari kita siapkan komponen komponennya dulu. komponennya sama seperti kemarin hanya saja kita butuh 1 seven segment lagi dan beberapa kabel jumper. jadi komponennya adalah :

  1. Arduino
  2. Breadboard
  3. Kabel Jumper
  4. 2 Seven Segment
  5. 4 Resistor 330 ohm

Untuk percobaan kali ini buat rangkaiannya seperti berikut.

Setelah rangkian diatas selesai dibuat sekarang saatnya kita belajar dulu apa itu metode scanning, jadi metode scanning itu ilustrasinya adalah seperti ini. misalnya kita akan menampilkan nagka 51, karena data pin abcdefg kedua 7 segment itu jadi satu maka ketika kita mengirim angka 5 ke seven segment apa yang terjadi? kedua 7 segment akan menampilkan angka 5 semua? tentu tidak karena kaki common kedua 7 segment terpisah, jadi saat kita mengirim angka 5 ke jalur pin abcdefg seven segment yang kiri kita aktifkan dengan memberi tegangan ke pin commonnya, dan seven segment yang kanan kita matikan dengan cara tidak memberi tegangan ke kaki commonnya, sehingga hanya 7 segment sebelah kiri saja yang hidup dan 7 segment yang kanan mati. berarti cuma nampilin nagka 5 dong, bukan 51? sabar teman teman. hehe.

setelah angka 5 ditampilkan maka sekarang giliran angka 1 kita tampilkan di 7 segment di sebelah kanan, sedangkan 7 segment yang kiri kita matikan, proses penyalaan kanan kiri kanan kiri itu dilakukan dengan sangat cepat sehiingga mata kita terkelabuhi dan seakan akan kedua 7 seven segment itu menyala secara bersamaan dan menampilkan angka 51.

langsaung saja kita praktikan dengan code, oh iya, kebetulan saya memakai common katoda ya, seperti artikel sebelumnya jika kalian menggunakan common anoda maka 0 tinggal diganti 1 dan 1 diganti 0, jika bingung silahkan lihat penjelasan di bagian akhir postingan saya sebelumnya. dan untuk mematikan dan menghidupkan 7 segment tinggal dibalik aja, jika pada common katoda untuk mematikan adalah LOW maka untuk common anoda untuk mematikan adalah LOW begitu juga sebaliknya. dan berikut kodenya :

#define segment1 A1
#define segment2 A0
/* Program untuk seven segment Common Katoda */
byte digit[10] = {
 //abcdefg dp
  B11111100, // 0
  B01100000, // 1
  B11011010, // 2
  B11110010, // 3
  B01100110, // 4
  B10110110, // 5
  B10111110, // 6
  B11100000, // 7
  B11111110, // 8
  B11110110, // 9
};
byte pinSegment[] = {A2,2,3,A5,A4,A3,5,4}; // pin yang digunakan untuk seven segment (pin dp,g,f,e,d,c,b,a)

long angka ;

void setup() 
  {
    for(int i=0; i < 8; i++) 
    {
        pinMode(pinSegment[i], OUTPUT);
    }

    pinMode(segment1,OUTPUT);
    pinMode(segment2,OUTPUT);
  } 
  
void loop() 
  {
     /* ---------------- kirim angka 5----------------------- */
     digitalWrite(segment2,HIGH); // matikan 7 segment 2
     
       for ( byte segment = 0; segment < 8; segment++)
        {
          boolean Status = bitRead(digit[5],segment);
          digitalWrite(pinSegment[segment],Status);
        }
        
     digitalWrite(segment1, LOW); // hidupkan 7 segment 1
     delay(5);


      /* --------------- kirim angka 1 ------------------------*/
       digitalWrite(segment1, HIGH); // matikan 7 segment 1
       
      for ( byte segment = 0; segment < 8; segment++)
        {
          boolean Status = bitRead(digit[1],segment);
          digitalWrite(pinSegment[segment],Status);
        }
        
      digitalWrite(segment2,LOW); // hidupkan 7 segment 2
      delay(5);  
  }

Kode diatas hanya berfungsi menampilkan angka Statis, gimana kalau menampilkan angka dinamis? misalkan nilai dari x++ atau dari pembacaan sensor? dan jika nilainya kurang dari 10 maka depan angka ada angka ‘0’nya? misal 01, 02 , 03 dst ? untuk itu kalian perlu mengubahnya menjadi kode seperti berikut.

#define segment1 A1
#define segment2 A0
/* Program untuk seven segment Common Katoda */
byte digit[10] = {
 //abcdefg dp
  B11111100, // 0
  B01100000, // 1
  B11011010, // 2
  B11110010, // 3
  B01100110, // 4
  B10110110, // 5
  B10111110, // 6
  B11100000, // 7
  B11111110, // 8
  B11110110, // 9
};
byte pinSegment[] = {A2,2,3,A5,A4,A3,5,4}; // pin yang digunakan untuk seven segment (pin dp,g,f,e,d,c,b,a)

int angka ;

void setup() 
  {
    for(int i=0; i < 8; i++) 
    {
        pinMode(pinSegment[i], OUTPUT);
    }

    pinMode(segment1,OUTPUT);
    pinMode(segment2,OUTPUT);
  } 

  byte x = 0;
void loop() 
  {
     tampilkan(x);
        
     x = millis()/1000;
  }

void tampilkan(int nilai)
{
  if (nilai < 10 && nilai < 100) // jika x / nilai kurang dari 9 dan kurang dari 100, maka
  {
     /* ---------------kirim digit 0----------------------- */
       digitalWrite(segment2,HIGH); // matikan 7 segment 2
     
       for ( byte segment = 0; segment < 8; segment++)
        {
          boolean Status = bitRead(digit[0],segment);
          digitalWrite(pinSegment[segment],Status);
        }
        
     digitalWrite(segment1, LOW); // hidupkan 7 segment 1
     delay(5);


      /* ------kirim angka 1 ------------------------*/
       digitalWrite(segment1, HIGH); // matikan 7 segment 1
       
      for ( byte segment = 0; segment < 8; segment++) { boolean Status = bitRead(digit[nilai],segment); // mengirim nilai x digitalWrite(pinSegment[segment],Status); } digitalWrite(segment2,LOW); // hidupkan 7 segment 2 delay(5); } else if ( nilai > 9 && nilai < 100) // jika nilai x lebih dari 9 dan kurang dari 100, maka
  {
   byte digit1 = nilai/10; //mmengampil nilai puluhan
   byte digit2 = nilai-(digit1*10); // mengambil nilai satuan
  /* ---------------kirim digit pertama----------------------- */
       digitalWrite(segment2,HIGH); // matikan 7 segment 2
     
       for ( byte segment = 0; segment < 8; segment++)
        {
          boolean Status = bitRead(digit[digit1],segment); // kirim digit pertama
          digitalWrite(pinSegment[segment],Status);
        }
        
     digitalWrite(segment1, LOW); // hidupkan 7 segment 1
     delay(5);


      /* ---------- kirim didigt kedua ------------------------*/
       digitalWrite(segment1, HIGH); // matikan 7 segment 1
       
      for ( byte segment = 0; segment < 8; segment++)
        {
          boolean Status = bitRead(digit[digit2],segment);   // mengirim digit kedua
          digitalWrite(pinSegment[segment],Status);
        }
        
      digitalWrite(segment2,LOW); // hidupkan 7 segment 2
      delay(5);  
  }
}

Mungkin cukup sampai disini dulu ya temen temen, jika ada yang perlu ditanyakan silahkan sampaikan di kolom komentar, untuk menampilkan nilai input dari sensor akan saya bahas pada artikel berikutnya, terima kasih, Wassalamu’alaikum. 🙂

About Giri Wahyu Pambudi

Giri Wahyu Pambudi - Seorang Pemuda Desa yang berkeinginan ikut membangun Indonesia dengan Sedikit Ilmu yang dimiliki SMK N 2 Wonogiri lulus 2015 UNIV Negeri Yogyakarta lulus 2019 2019 - Sekarang Bekerja di SMK Gajah Mungkur 1 Wuryantoro, Wonogiri

Check Also

Cara Menggunakan / Mengakses Keypad menggunakan Arduino

Assalamu’alaikum teman – teman, kali ini kita akan belajar Arduino lagi, kali ini kita akan …

One comment

  1. saya coba gunakan ini untuk menampilkan 3 digit..
    tp gagal terus..
    mohon petunjuknya…
    kalau ada untuk 3 digit boleh kirimkan ke Email saya untuk saya pelajari..

Tinggalkan Balasan