Anda di halaman 1dari 34

LAPORAN BAB III

SISTEM TERBENAM DAN IOT


SEVEN SEGMEN

Nama : Anisa Eka Pujianti


NIM : 3.34.18.0.04
Kelas : IK-3A
Prodi : D3 Teknik Informatika

PROGRAM STUDI TEKNIK INFORMATIKA


JURUSAN TEKNIK ELEKTRO
POLITEKNIK NEGERI SEMARANG
2020
BAB III : SEVEN SEGMEN

I. TUJUAN
1. Mahasiswa memahami rangkaian interface mikrokontroller dengan 7 segmen
2. Mahasiswa dapat memahami program Arduino untuk menampilkan data ke 7 segment
3. Mahasiswa memahami beberapa instruksi Arduino dasar, array data dan bitRead.
4. Mahasiswa memahami rangkaian mikrokontroller dengan interface ke saklar.
5. Mahasiswa dapat memahami program Arduino untuk mengambil data saklar dan
mengeluarkan data ke LED.
6. Mahasiswa memahami beberapa instruksi Arduino dasar, digitalRead, if, dan for.

II. PERALATAN
1. Arduino board connected to the computer via USB
2. Breadboard dan kabel jumper
3. 7-segment
4. Resistors 220–1,000 ohm
5. Sebuah Komputer /Laptop
6. Saklar push button
7. Resistor antara 1K–100K ohm

III. DASAR TEORI

A. Seven Segment
Seven segment merupakan segment-segment yang digunakan untuk menampilkan angka-
angka atau huruf. Seven segment ini tersusun atas 7 buah LED yang membentuk
membentuk angka atau huruf dimana penyusunnya menggunakan label dari ‘a’ sampai ‘g’
dan satu lagi untuk dot point (DP). Salah satu terminal LED dihubungkan menjadi satu
sebagai kaki common (biasanya pin-nya berada ditengah).
Pin 3 dan 8 = untuk mengaktifkan seven segment diberikan logika high (common anode)
dan logika low (common cathode). Jenis-jenis Seven Segment:

Gambar 3.1 Skema Common Anode dan Common Catode


1. Common Anoda
Semua anoda dari LED dalam seven segment disatukan secara parallel dan semua itu
dihubungkan ke VCC, dan kemudian LED dihubungkan melalui tahanan pembatas arus
keluar dari penggerak LED. Karena dihubungkan ke VCC, maka COMMON ANODA
ini berada pada kondisi AKTIF LOW (led akan
menyala/aktif bila diberi logika 0).
2. Common Katoda
Merupakan kebalikan dari Common Anoda. Disini semua katoda disatukan secara
parallel dan dihubungkan ke GROUND. Karena seluruh katoda dihubungkan ke
GROUND, maka COMMON KATODA ini berada pada kondisi AKTIF HIGH (led
akan menyala/aktif bila diberi logika 1).

Prinsip Kerja :

Prinsip kerja seven segment ialah input biner pada switch dikonversikan masuk ke dalam
decoder, baru kemudian decoder mengkonversi bilangan biner tersebut menjadi decimal,
yang nantinya akan ditampilkan pada seven segment.
Seven segment dapat menampilkan angka-angka desimal dan beberapa karakter tertentu
melalui kombinasi aktif atau tidaknya LED dalam seven segment. Untuk memudahkan
penggunaan seven segment, umumnya digunakan sebuah decoder( mengubah/ mengkoversi
input bilangan biner menjadi decimal) atau seven segment driver yang akan mengatur aktif
tidaknya led-led dalam seven segment sesuai dengan nilai biner yang diberikan.

Gambar 3.2 Skema kaki pin 7-segment

Dekoder BCD ke seven segment digunakan untuk menerima masukan BCD 4-bit dan
memberikan keluaran yang melewatkan arus melalui segmen untuk menampilkan angka
desimal. Jenis dekoder BCD ke seven segment ada dua macam yaitu dekoder yang
berfungsi untuk menyalakan seven segment mode common anoda dan dekoder yang
berfungsi untuk menyalakan seven segment mode common katoda.
Langkah Kerja :
1. Pasang 7-segment dalam breadboard
2. Jika menggunakan konfigurasi anode (+), hubungkan anoda (+) ke VCC di arduino ( 5 v
atau 3.3 v). Jika menggunakan konfigurasi katoda (-), hubungkan katode dengan ground
dari Arduino.
3. Hubungkan setiap kaki dari 7-segmen pada pin digital yang digunakan. Setiap pin
output digunakan resistor untuk mengamankan LED dari seven segmen.

Skema Rangkaian :
Gambar 3.3 Skema rangkaian 7-Segment
Dengan skema rangkaian diatas akan bisa dibuat rangkaian dengan menggunakan arduino
dan resistor seperti berikut :

Gambar 3.4 Mockup rangkaian 7-Segment

Kode Program :

Akan menampilkan 7-segment dengan tampilan dari 3 sampai 0 dan restart dari awal.

// Declare the pins for the Segment display


int pinUP = 2; //a Upper segment
int pinUPR = 3; //b Up-right segment
int pinDWR = 4; //c Down-right segment
int pinDW = 5; //d Down segment
int pinDWL = 6; //e Down-left segment int
pinUPL = 7; //f Up-left segment int pinCT
= 8; //g Center segment

void setup() {
// Declare the pins as Outputs
pinMode(pinUP, OUTPUT);
pinMode(pinUPR, OUTPUT);
pinMode(pinDWR, OUTPUT);
pinMode(pinDW, OUTPUT);
pinMode(pinDWL, OUTPUT);
pinMode(pinUPL, OUTPUT);
pinMode(pinCT, OUTPUT);
}

void writeNumber(int value){


// First we erase the previous value
digitalWrite(pinUP, HIGH);
digitalWrite(pinUPR, HIGH);
digitalWrite(pinDWR, HIGH);
digitalWrite(pinDW, HIGH);
digitalWrite(pinDWL, HIGH);
digitalWrite(pinUPL, HIGH);
digitalWrite(pinCT, HIGH);
// If we want to write 0 if
(value == 0){
digitalWrite(pinUP, HIGH);
digitalWrite(pinUPR, HIGH);
digitalWrite(pinDWR, HIGH);
digitalWrite(pinDW, HIGH);
digitalWrite(pinDWL, HIGH);
digitalWrite(pinUPL, HIGH);
digitalWrite(pinCT, LOW);

}
// If we want to write 1

if (value == 1)
{ digitalWrite(pinUPR, LOW);
digitalWrite(pinUP, LOW);
digitalWrite(pinCT, LOW);
digitalWrite(pinDWR, LOW);
digitalWrite(pinDW, LOW);
}
// If we want to write 2 if
(value == 2){
digitalWrite(pinUPL, LOW);
//digitalWrite(pinCT, LOW);
//digitalWrite(pin, LOW);
digitalWrite(pinDWR, LOW);
//digitalWrite(pinDW, LOW);
}
// If we want to write 3 if
(value == 3){
//digitalWrite(pinUP, LOW);
digitalWrite(pinUPL, LOW);
//digitalWrite(pinCT, LOW);
digitalWrite(pinDWL, LOW);
//digitalWrite(pinDW, LOW);
}

}
void loop(){
// A resetting count-down
writeNumber(3); delay(1000);
/*writeNumber(2);
delay(1000);
writeNumber(1);
delay(1000);
writeNumber(0);
delay(1000);*/
}

Berikut merupakan contoh dari konfigurasi common-anode, dengan asumsi untuk


konfigurasi katode akan berlaku kebalikan, jika dalam anode memiliki nilai LOW dalam
konfigurasi common-anode dirubah menjadi HIGH dan nilai HIGH jadi LOW dalam kode
programnya.

Penjelasan kode :

1. Mendeklarasikan pin untuk setiap kaki pada 7-segment

int pinUP = 2; // Upper segment (a) int


pinUPR = 3; // Up-right segment (b)
int pinDWR = 4; // Down-right segment (c) int
pinDW = 5; // Down segment (d)
int pinDWL = 6; // Down-left segment (e) int
pinUPL = 7; // Up-left segment (f) int pinCT
= 8; // Center segment (g)

2. Mengkonfigurasikan pemakaian pin pada arduino sesui dengan nilai variabel yang
diberikan.

void setup() {
// Declare the pins as Outputs
pinMode(pinUP, OUTPUT);
pinMode(pinUPR, OUTPUT);
pinMode(pinDWR, OUTPUT);
pinMode(pinDW, OUTPUT);
pinMode(pinDWL, OUTPUT);
pinMode(pinUPL, OUTPUT);
pinMode(pinCT, OUTPUT);
}

3. Dengan memanggil fungsi writeNumber() ini kita bisa mematikan semua LED
yang semula dihidupkan pada tiap kaki-kaki 7-segmen dan memberikan nilai pada kaki
yang diinginkan sesuai dengan nilai inputan.
Sederhananya fungsi ini digunakan untuk mereset dan mengkonfigurasikan sesuai
dengan nilai angka yang diinginkan.

void writeNumber(int value){


// First we erase the previous value
digitalWrite(pinUP, HIGH);
digitalWrite(pinUPR, HIGH);
digitalWrite(pinDWR, HIGH);
digitalWrite(pinDW, HIGH);
digitalWrite(pinDWL, HIGH);
digitalWrite(pinUPL, HIGH);
digitalWrite(pinCT, HIGH);

if (value == 1){
digitalWrite(pinUPR, LOW);
digitalWrite(pinDWR, LOW);
}
...
}

4. Dalam fungsi loop() akan mengeksekusi fungsi write dengan parameter yang akan
digunakan untuk konfigurasi LED pada 7-segment.

void loop(){
writeNumber(2);
delay(1000);
writeNumber(1);
delay(1000);
writeNumber(0);
delay(1000);
}

Tampilan akan bertahan dengan memanggil fungsi delay() dengan parameter 1000
yang berarti 1000ms atau 1 detik.

Gambar 3.5 Konfigurasi karakter yang memungkinkan

B. MULTI-SEVEN SEGMENT

Percobaan kali ini akan menggunakan 7-segment seri 4 buah atau sering dituliskan 4 x 7-
segment. Penggunaan multi display ini sama aturannya dengan menggunakan single display,
yaitu seven segment akan menganut common anode da common cathode tergantung
pemberian daya pada konfigurasi pinnya. Untuk konfigurasi Pin untuk tiap segment harus
digunakan mode digit untuk mengatur pengaktifan tiap segment nya. Dengan
mengendalikan digit yang ditampilkan kita bisa kendalikan display meskipun nilai sudah
diberikan. Misal kita sudah definisikan nilai untuk segment ke-2 dengan nilai desimal 5, tapi
ketika kita tidak set segment ke-2 tersebut aktif maka tidak akan ditampilkan nilai desimal 5
tersebut. Pada penggunaan multi segment hanya akan ada 1 digit yang aktif pada satu
waktu, sehingga pengkonfigurasian untuk 4 digit membutuhkan 4 step pemindahan digit dan
pemberian nilai.
Gambar 3.6 Rangkaian 4 x 7-segment

Pada komponen yang dijual dipasaran banyak varian yang harus kita lihat detail dari
komposisi komponen tersebut melalui datasheet yang biasanya sudah disediakan oleh
produsen pembuat komponen. Gambar 3.7 berikut merupakan komponen yang kita punyai
dalam lab, dan penggunaanya akan berbeda jika menggunakan komponen yang berbeda,
begitupula kode programnya.

Gambar 3.7 Komponen 4 x 7-segment dengan 8 pin

Untuk percobaan konfigurasikan pin arduino dan display seperti berikut dibawah :
Gambar 3.8 Konfigurasi posisi dan nilai pin Konfigurasikan sesuai

dengan tabel

A 1 2 3 4 5 6 7 8 9 10 11 12
B 11 7 4 2 1 10 5 3 12 9 8 6
(A) (B) (C) (D) (E) (F) (G) (P) (D1) (D2) (D3) (D4)

A : Pin ArduinoUNO B :
Pin Display

note : Untuk tiap Digit diberikan resistor 1K Ohm

Kode Program
Kode program berikut untuk common anode, yang akan menjalankan penambahan desimal
secara increment dengan menggunakan fungsi millis() yang build in di arduino IDE.

int digit1 = 9; //Display pin 12


int digit2 = 10; //Display pin 9
int digit3 = 11; //Display pin 8
int digit4 = 12; //Display pin 6

int segA = 1; //Display pin 11


int segB = 2; //Display pin 7
int segC = 3; //Display pin 4
int segD = 4; //Display pin 2
int segE = 5; //Display pin 1
int segF = 6; //Display pin 10
int segG = 7; //Display pin 5

void setup() {
pinMode(segA, OUTPUT);
pinMode(segB, OUTPUT);
pinMode(segC, OUTPUT);
pinMode(segD, OUTPUT);
pinMode(segE, OUTPUT);
pinMode(segF, OUTPUT);
pinMode(segG, OUTPUT);

pinMode(digit1, OUTPUT);
pinMode(digit2, OUTPUT);
pinMode(digit3, OUTPUT);
pinMode(digit4, OUTPUT);

pinMode(13, OUTPUT);
}

void loop()
{ displayNumber(millis()/1000);

}
void displayNumber(int toDisplay)
{ #define DISPLAY_BRIGHTNESS 1000

#define DIGIT_ON HIGH


#define DIGIT_OFF LOW

long beginTime = millis();

for(int digit = 4 ; digit > 0 ; digit--) {

//Turn on a digit for a short amount of time


switch(digit)
{ case 1:
digitalWrite(digit1, DIGIT_ON);
break;
case 2:
digitalWrite(digit2, DIGIT_ON);
break;
case 3:
digitalWrite(digit3, DIGIT_ON);
break;
case 4:
digitalWrite(digit4, DIGIT_ON);
break;
}

//Turn on the right segments for this digit


lightNumber(toDisplay % 10);
toDisplay = toDisplay / 10;

delayMicroseconds(DISPLAY_BRIGHTNESS);
//Display digit for fraction of a second (1us to 5000us,
500 is pretty good)

//Turn off all segments


lightNumber(10);

//Turn off all digits


digitalWrite(digit1, DIGIT_OFF);
digitalWrite(digit2, DIGIT_OFF);
digitalWrite(digit3, DIGIT_OFF);
digitalWrite(digit4, DIGIT_OFF);
}

while( (millis() - beginTime) < 10) ;


//Wait for 20ms to pass before we paint the display again
}

//Given a number, turns on those segments


//If number == 10, then turn off number
void lightNumber(int numberToDisplay) {

#define SEGMENT_ON LOW


#define SEGMENT_OFF HIGH

switch (numberToDisplay)

{ case 0:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_ON);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_OFF);
break;

case 1:
digitalWrite(segA, SEGMENT_OFF);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_OFF);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_OFF);
break;

case 2:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_OFF);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_ON);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_ON);
break;

case 3:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_ON);
break;

case 4:
digitalWrite(segA, SEGMENT_OFF);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_OFF);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;

case 5:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_OFF);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;

case 6:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_OFF);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_ON);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;

case 7:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_OFF);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_OFF);
break;

case 8:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_ON);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;

case 9:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON); break;

case 10:
digitalWrite(segA, SEGMENT_OFF);
digitalWrite(segB, SEGMENT_OFF);
digitalWrite(segC, SEGMENT_OFF);
digitalWrite(segD, SEGMENT_OFF);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_OFF);
break;
}
}

Penjelasan Kode Program :

1. Inisiasi variabel yang akan dijadikan pin output

int digit1 = 9; //Display pin 12 int


digit2 = 10; //Display pin 9 int
digit3 = 11; //Display pin 8 int
digit4 = 12; //Display pin 6

int segA = 1; //Display pin 11 int


segB = 2; //Display pin 7 int segC
= 3; //Display pin 4 int segD = 4;
//Display pin 2 int segE = 5;
//Display pin 1 int segF = 6;
//Display pin 10 int segG = 7;
//Display pin 5

2. Meregistrasikan variabel pada pin arduino sebagai output

void setup() { pinMode(segA,


OUTPUT); pinMode(segB,
OUTPUT); pinMode(segC,
OUTPUT); pinMode(segD,
OUTPUT); pinMode(segE,
OUTPUT); pinMode(segF,
OUTPUT); pinMode(segG,
OUTPUT);

pinMode(digit1, OUTPUT);
pinMode(digit2, OUTPUT);
pinMode(digit3, OUTPUT);
pinMode(digit4, OUTPUT);

3. Memulai loop() dengan memanggil fungsi millis() yang akan digunakan sebagai timer
dengan nilai perubahan per miliseconds.
void loop() {
displayNumber(millis()/1000);

Dengan script di dalam loop tersebut akan mengkonversi nilai hasil eksekusi fungsi
millis() dibagi 1000 sehingga dihasilkan 1, yang dimanfaatkan sebagai increment
desimal. Karena fungsi millis akan mengembalikan nilai dalam millisecond dihitung
sejak arduino board menyala. Penapungnya harus long integer.
Fungsi displayNumber() akan mengkonfigurasikan nilai sesuai dengan digit yang harus
dihidupkan sesuai dengan nilai desimal yang harus ditampilkan.

Dalam pencahayaan / brightness pada 7-segment dengan


mendefinisikan DISPLAY_BRIGHTNESS pada setiap segment nya.

#define DISPLAY_BRIGHTNESS 1000

Nilai yang dapat diberikan dari 1 sampai 5000 dengan status kenyamanan dan konsumsi
daya :
• 5000 blindingly bright (15.7mA current draw per digit)
• 2000 shockingly bright (11.4mA current draw per digit)
• 1000 pretty bright (5.9mA)
• 500 normal (3mA)
• 200 dim but readable (1.4mA)
• 50 dim but readable (0.56mA)
• 5 dim but readable (0.31mA)
• 1 dim but readable in dark (0.28mA)

C. PUSH BUTTON

Sebuah lampu adalah perangkat sederhana dengan dua posisi, menghidupkan dan
mematikan. Ketika di dua kawat yang terhubung di dalam, yang memungkinkan arus
mengalir. Ketika off, dua kabel terputus dan berarti arus terputus.

Push Button adalah saklar tekan yang berfungsi untuk menghubungkan atau memisahkan
bagian – bagian dari suatu instalasi listrik satu sama lain (suatu sistem saklar tekan push
button terdiri dari saklar tekan start. Pada dasarnya, terdapat 2 jenis Push-Button di pasaran:
Push-On dan Push- Off . Tetapi yang kita gunakan pada tutorial ini adalah yang berjenis
Push-On, yaitu komponen yang terdiri atas dua kutub yang saling terpisah / tidak terhubung,
dan sebuah tombol yang ketika ditekan akan menghubungkan kedua kutub tersebut
sehingga akan mengalirkan arus listrik dari satu sisi kutub ke sisi kutub berikutnya.

Gambar Komponen Push Button sebagai saklar

Dengan 4 kaki tersebut, jika tombol ditekan otomatis semua pin yang ada pada kedua elips
merah tersebut akan terhubung keempat-empatnya.

Langkah yang harus dilakukan :


1. Hubungkan GND arduino dan 5 V pada lajur + dan – pada breadboard
2. Pasang push button pada breadboard dan hubungkan salah satu terminal ke 5V
pada lajur breadboard dan yang lainnya ke digital pin arduino (misal pin 2)
3. Pasang resistor antara pin yang dipilih (pin 2) dan GND yang ada di breadboard,
ini yang disebut pull-down setup.
Gambar Skema rangkaian push-button

Gambar Mockup dari pengkabelan push-button

Kode Program

// Declare the pins for the Button and the LED int
buttonPin = 2;
int LED = 13;
void setup() {
// Define pin #2 as input
pinMode(buttonPin, INPUT);
// Define pin #13 as output, for the LED
pinMode(LED, OUTPUT);
}
void loop() {
// Read the value of the input. It can either be 1 or 0.
int buttonValue = digitalRead(buttonPin); if
(buttonValue == HIGH) {
// If button pushed, turn LED on
digitalWrite(LED,HIGH);
} else {
// Otherwise, turn the LED off
digitalWrite(LED, LOW);
}
}

Penjelasan Kode Program :


1. Mendefinisikan nilai yang diasumsikan pin yang akan digunakan

// Declare the pins for the Button and the LED int
buttonPin = 2;
int LED = 13;

2. Mengkonfigurasikan pin 2 menjadi bersifat sebagai input dan pin 13 sebagai output

void setup() {
// Define pin #2 as input
pinMode(buttonPin, INPUT);
// Define pin #13 as output, for the LED
pinMode(LED, OUTPUT);
}

3. Dengan menggunakan fungsi digitalRead pada pin 2, maka jika pin 2 dalam keadaan
high atau 1 maka pin 13 high atau Led akan menyala, jika pin 2 keadaan low atau 0
maka pin 13 bernilai low yang berarti led padam.

void loop() {
// Read the value of the input. It can either be 1 or 0.
int buttonValue = digitalRead(buttonPin); if
(buttonValue == HIGH) {
// If button pushed, turn LED on
digitalWrite(LED,HIGH);
} else {
// Otherwise, turn the LED off
digitalWrite(LED, LOW);
}
}

IV. LATIHAN : MULTI SEVEN SEGMEN

Buat konfigurasi yang dibutuhkan untuk menampilkan kode program berikut dalam 4 x 7-
segment.

//segments int a
= 1;//a int b =
2;//b int c =
3;//c int d =
4;//d int e =
5;//e int f =
6;//f int g =
7;//g
int p = 8;//dot
//digits int d4
= 9; int d3 =
10; int d2 = 11;
int d1 = 12;
//other
int del = 100;
int buttoncount = 0; int
loopcount = 0;

void setup()
{
pinMode(d1, OUTPUT);
pinMode(d2, OUTPUT);
pinMode(d3, OUTPUT);
pinMode(d4, OUTPUT);
pinMode(a, OUTPUT);
pinMode(b, OUTPUT);
pinMode(c, OUTPUT);
pinMode(d, OUTPUT);
pinMode(e, OUTPUT);
pinMode(f, OUTPUT);
pinMode(g, OUTPUT);
pinMode(p, OUTPUT);
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
digitalWrite(p, HIGH);
}

void loop()
{
roulette(2);
delay(500);
zigzag(2);
delay(500);
circles(2);
delay(500);
flash();
delay(1000);

void pickDigit(int x)
{
digitalWrite(d1, LOW);
digitalWrite(d2, LOW);
digitalWrite(d3, LOW);
digitalWrite(d4, LOW);

switch(x)
{
case 1:
digitalWrite(d1, HIGH);
break;
case 2:
digitalWrite(d2, HIGH);
break;
case 3:
digitalWrite(d3, HIGH);
break;
default:
digitalWrite(d4, HIGH);
break;
}
}

void clearLEDs()
{
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
digitalWrite(p, HIGH);
}

void roulette(int x)
{
loopcount = 0;
while (loopcount < x)
{
clearLEDs();
digitalWrite(a, LOW);
//digitalWrite(p, LOW);
pickDigit(1); delay(del);
pickDigit(2); delay(del);
pickDigit(3); delay(del);
pickDigit(4); delay(del);
digitalWrite(a, HIGH);
digitalWrite(f, LOW);
delay(del); digitalWrite(f,
HIGH); digitalWrite(e,
LOW); delay(del);
digitalWrite(e, HIGH);
digitalWrite(d, LOW);
delay(del); pickDigit(3);
delay(del); pickDigit(2);
delay(del); pickDigit(1);
delay(del);
digitalWrite(d, HIGH);
digitalWrite(c, LOW);
delay(del);
digitalWrite(c, HIGH);
digitalWrite(b, LOW);
delay(del);
digitalWrite(b, HIGH);
//delay(del);

loopcount++;
}
}

void zigzag(int x)
{
loopcount = 0;
while(loopcount < x)
{
digitalWrite(a, LOW);
pickDigit(1); delay(del);
pickDigit(2); delay(del);
pickDigit(3); delay(del);
pickDigit(4); delay(del);
digitalWrite(a, HIGH);
digitalWrite(f, LOW);
delay(del);
digitalWrite(f, HIGH);
digitalWrite(g, LOW);
delay(del); pickDigit(3);
delay(del); pickDigit(2);
delay(del); pickDigit(1);
delay(del);
digitalWrite(g, HIGH);
digitalWrite(c, LOW);
delay(del);
digitalWrite(c, HIGH);
digitalWrite(d, LOW);
delay(del); pickDigit(2);
delay(del); pickDigit(3);
delay(del); pickDigit(4);
delay(del);
digitalWrite(d, HIGH);
digitalWrite(e, LOW);
delay(del);
digitalWrite(e, HIGH);
digitalWrite(g, LOW);
delay(del); pickDigit(3);
delay(del); pickDigit(2);
delay(del); pickDigit(1);
delay(del);
digitalWrite(g, HIGH);
digitalWrite(b, LOW);

delay(del);
clearLEDs();
loopcount++;
}
}

void circles(int x)
{
loopcount = 0;
while (loopcount < x)
{
digitalWrite(a, LOW);
digitalWrite(b, LOW);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
pickDigit(1); delay(250);
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(f, HIGH);
digitalWrite(c, LOW);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
pickDigit(2); delay(250);
digitalWrite(a, LOW);
digitalWrite(b, LOW);
digitalWrite(f, LOW);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
pickDigit(3); delay(250);
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(f, HIGH);
digitalWrite(c, LOW);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
pickDigit(4); delay(250);
clearLEDs(); loopcount++;
}
}
//tampilan 0000 untuk semua segmen
void nyala()
{
digitalWrite(a, LOW);
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);

digitalWrite(d1, HIGH);
digitalWrite(d2, HIGH);
digitalWrite(d3, HIGH);
digitalWrite(d4, HIGH);
}

void flash()
{
int i; for(i=0;i<5;i+
+){
nyala();delay(250);
clearLEDs();delay(500);
nyala(); i+
+;
}
}

Latihan Menggunakan Aplikasi Proteus dan Arduino IDE


1. Rangkaian Pada Proteus

2. Kode pada Aplikasi Android IDE


3. Hasil Praktikum

a. Roulette

b. Zigzag

c. Circle
d. Flash

V. TUGAS : PUSH BUTTON


1. Buat auto increment dengan menggunakan gabungan dari push button dan multi
sevensegment, jika push button ditekan maka sevensegment akan menampilkan angka
increment.
2. Buat konfigurasi push button dengan Led, ketika push button ditekan akan menyala
sampai tombol ditekan kembali akan membuat led mati (Debounce).

Praktikum Pada Aplikasi Proteus dan Arduino IDE


1. Auto Increment menggunakan Push Button & Multi Segment
1. Rangkaian Pada Proteus
2. Kode pada Arduino
#define button A0

#define SegA 12
#define SegB 11
#define SegC 10
#define SegD 9
#define SegE 8
#define SegF 7
#define SegG 6

#define Dig1 5
#define Dig2 4
#define Dig3 3
#define Dig4 2

byte current_digit;
int count = 0;

void setup()
{
pinMode(button, INPUT_PULLUP);
pinMode(SegA, OUTPUT);
pinMode(SegB, OUTPUT);
pinMode(SegC, OUTPUT);
pinMode(SegD, OUTPUT);
pinMode(SegE, OUTPUT);
pinMode(SegF, OUTPUT);
pinMode(SegG, OUTPUT);
pinMode(Dig1, OUTPUT);
pinMode(Dig2, OUTPUT);
pinMode(Dig3, OUTPUT);
pinMode(Dig4, OUTPUT);

disp_off();

TCCR1A = 0;
TCCR1B = 1;
TCNT1 = 0;
TIMSK1 = 1;
}

ISR(TIMER1_OVF_vect)
{
disp_off(); // turn off the display

switch (current_digit)
{
case 1:
disp(count / 1000); // prepare to display digit 1 (most left)
digitalWrite(Dig1, LOW); // turn on digit 1
break;

case 2:
disp( (count / 100) % 10); // prepare to display digit 2
digitalWrite(Dig2, LOW); // turn on digit 2
break;

case 3:
disp( (count / 10) % 10); // prepare to display digit 3
digitalWrite(Dig3, LOW); // turn on digit 3
break;

case 4:
disp(count % 10); // prepare to display digit 4 (most right)
digitalWrite(Dig4, LOW); // turn on digit 4
}
current_digit = (current_digit % 4) + 1;
}
void loop()
{
if(digitalRead(button) == 0)
{
count++; // increment 'count' by 1
if(count > 9999)
count = 0;
delay(200); // wait 200 milliseconds
}
}

void disp(byte number)


{
switch (number)
{
case 0: // print 0
digitalWrite(SegA, LOW);
digitalWrite(SegB, LOW);
digitalWrite(SegC, LOW);
digitalWrite(SegD, LOW);
digitalWrite(SegE, LOW);
digitalWrite(SegF, LOW);
digitalWrite(SegG, HIGH);
break;

case 1: // print 1
digitalWrite(SegA, HIGH);
digitalWrite(SegB, LOW);
digitalWrite(SegC, LOW);
digitalWrite(SegD, HIGH);
digitalWrite(SegE, HIGH);
digitalWrite(SegF, HIGH);
digitalWrite(SegG, HIGH);
break;

case 2: // print 2
digitalWrite(SegA, LOW);
digitalWrite(SegB, LOW);
digitalWrite(SegC, HIGH);
digitalWrite(SegD, LOW);
digitalWrite(SegE, LOW);
digitalWrite(SegF, HIGH);
digitalWrite(SegG, LOW);
break;

case 3: // print 3
digitalWrite(SegA, LOW);
digitalWrite(SegB, LOW);
digitalWrite(SegC, LOW);
digitalWrite(SegD, LOW);
digitalWrite(SegE, HIGH);
digitalWrite(SegF, HIGH);
digitalWrite(SegG, LOW);
break;

case 4: // print 4
digitalWrite(SegA, HIGH);
digitalWrite(SegB, LOW);
digitalWrite(SegC, LOW);
digitalWrite(SegD, HIGH);
digitalWrite(SegE, HIGH);
digitalWrite(SegF, LOW);
digitalWrite(SegG, LOW);
break;

case 5: // print 5
digitalWrite(SegA, LOW);
digitalWrite(SegB, HIGH);
digitalWrite(SegC, LOW);
digitalWrite(SegD, LOW);
digitalWrite(SegE, HIGH);
digitalWrite(SegF, LOW);
digitalWrite(SegG, LOW);
break;

case 6: // print 6
digitalWrite(SegA, LOW);
digitalWrite(SegB, HIGH);
digitalWrite(SegC, LOW);
digitalWrite(SegD, LOW);
digitalWrite(SegE, LOW);
digitalWrite(SegF, LOW);
digitalWrite(SegG, LOW);
break;

case 7: // print 7
digitalWrite(SegA, LOW);
digitalWrite(SegB, LOW);
digitalWrite(SegC, LOW);
digitalWrite(SegD, HIGH);
digitalWrite(SegE, HIGH);
digitalWrite(SegF, HIGH);
digitalWrite(SegG, HIGH);
break;

case 8: // print 8
digitalWrite(SegA, LOW);
digitalWrite(SegB, LOW);
digitalWrite(SegC, LOW);
digitalWrite(SegD, LOW);
digitalWrite(SegE, LOW);
digitalWrite(SegF, LOW);
digitalWrite(SegG, LOW);
break;

case 9: // print 9
digitalWrite(SegA, LOW);
digitalWrite(SegB, LOW);
digitalWrite(SegC, LOW);
digitalWrite(SegD, LOW);
digitalWrite(SegE, HIGH);
digitalWrite(SegF, LOW);
digitalWrite(SegG, LOW);
}
}

void disp_off()
{
digitalWrite(Dig1, HIGH);
digitalWrite(Dig2, HIGH);
digitalWrite(Dig3, HIGH);
digitalWrite(Dig4, HIGH);
}
3. Hasil Praktik

2. konfigurasi push button dengan Led


1. Rangkaian Pada Proteus
2. Kode pada Arduino
const int buttonPin = 2; // inisiasi konstanta tombol pada pin 2
const int LEDPin = 13; // inisiasi konstanta LED pada pin 13
int value = 0; // inisiasi status tombol

void setup()
{
// inisiasi pin LED sebagai OUTPUT
pinMode(LEDPin, OUTPUT);
// inisiasi pin tombol sebagai INPUT
pinMode(buttonPin, INPUT);
}

void loop()
{
// baca status tombol apakah LOW atau HIGH
value = digitalRead(buttonPin);
// jika status tombol HIGH maka
if (value == HIGH)
{
// menyalakan LED
digitalWrite(LEDPin, HIGH);
}
// jika status tombol selain HIGH maka
else
{
// mematikan LED
digitalWrite(LEDPin, LOW);
}
}
3. Hasil Praktik

Anda mungkin juga menyukai