0% menganggap dokumen ini bermanfaat (0 suara)
137 tayangan

Labsheet 05 Arduino

ARDUINO

Diunggah oleh

Duni doeni
Hak Cipta
© © All Rights Reserved
Format Tersedia
Unduh sebagai DOC, PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
137 tayangan

Labsheet 05 Arduino

ARDUINO

Diunggah oleh

Duni doeni
Hak Cipta
© © All Rights Reserved
Format Tersedia
Unduh sebagai DOC, PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 15

FAKULTAS TEKNIK UNIVERSITAS NEGERI YOGYAKARTA

LAB SHEET Praktik Mikrokontroler


Semester 6 LS 5 : Aplikasi seven segment 8 X 60 Menit
No. LST/EKO/EKO 215/01 Revisi : 01 Tgl : 2017 Hal 1 dari 15

1. Kompetensi
Mahasiswa mampu menjelaskan pemrograman output digital mikrokontroler Arduino menggunakan
komponen seven segment
2. Sub Kompetensi
 Dapat menerapkan pemrograman output digital dengan seven segment
 Dapat menerapkan pemrograman aplikasi seven segment dengan shift register
3. Dasar Teori
Seven Segment (7-Segment) tidak asing lagi, yang sering dijumpai pada kehidupan sehari-sehari,
seperti pada jam tangan, jam dinding, mesin cuci, serta alat-alat elektronik lainnya. Walaupun bisa
dikatakan bahwa 7-Seg merupakan tampilan yang sudah lama ada, akan tetapi trend pengguanaanya
tidak bisa digantikan dengan tampilan lain. Hal inilah yang menjadikan 7-segment tetap masih
dipertahankan sebagai salah satu tampilan pada segala jenis alat-alat elektronik.
Pada dasarnya 7-seg terdiri dari 7 buah LED, yang dirangkai menjadi satu sehingga dapat
membentuk angka-angka 0-9. Pada perkembangannya 7-seg ditambahkan satu bagian lagi sebagai
tanda titik (dot point). Berdasarkan standart penamaan setiap bagian pada 7-seg dapat dituliskan
dengan ilustrasi gambar sebagai berikut;

7-seg terdiri dari 2 jenis atau type yang beredar dipasaran, yaitu Common Anode dan Common
Cathode. Common memiliki terjemahan “bersama”, artinya salah satu kutup pada 7-seg dijadikan
menjadi satu, atau dapat dikatakan satu kaki 7-seg dipakai bersama dengan jenis kutup yang sejenis.
Pengetahuan akan common pada setiap penggunaan 7-seg sangatlah penting, dikarena berkaitan
dengan cara untuk menghidupkannya apakah active high atau active low. Secara skematik dua jenis
tersebut dapat digambarkan sebagai berikut;

Sambungan pin Arduino dan display 7 segment yaitu :

Dibuat oleh : Dilarang memperbanyak sebagian atau seluruh isi dokumen Diperiksa oleh :
SGT tanpa ijin tertulis dari Fakultas Teknik Universitas Negeri Yogyakarta HSP
FAKULTAS TEKNIK UNIVERSITAS NEGERI YOGYAKARTA
LAB SHEET Praktik Mikrokontroler
Semester 6 LS 5 : Aplikasi seven segment 8 X 60 Menit
No. LST/EKO/EKO 215/01 Revisi : 01 Tgl : 2017 Hal 2 dari 15

Program seven segment satu digit :


/*
* MONSTER ARDUINO V2
* Program Seven Segment 1 Digit
* www.ElangSakti.com
*/

// definisikan CC, CA, ON, dan Brightness


#define COMMON_ANODE HIGH
#define COMMON_CATHODE LOW
#define ON HIGH
#define BRIGHTNESS 100

// konfigurasi seven segment CC


// CC : active low
boolean COMMON = COMMON_CATHODE;
boolean SEGMENT_ON = LOW;
boolean SEGMENT_OFF = !SEGMENT_ON;

// pin 2-9 untuk segmen A – DP


const byte SegA = 2; // A
const byte SegB = 3; // B
const byte SegC = 4; // C
const byte SegD = 5; // D
const byte SegE = 6; // E
const byte SegF = 7; // F
const byte SegG = 8; // G
const byte SegDp = 9; // DP

// jadikan array biar mudah


const byte SEGMENT[] = {SegA, SegB, SegC, SegD, SegE, SegF, SegG, SegD
// pengaturan untuk brightness
unsigned long brightness_now = 0;
unsigned long brightness_last = 0;
unsigned long brightness_limit = 0;

// data counter untuk ditampilkan


byte counter = 0;

void setup() {

// sesuaikan active low/high


// dengan tipe Common Anode atau Common Cathode
if( COMMON == COMMON_ANODE ){
SEGMENT_ON = !ON;
} else {
SEGMENT_ON = ON;
}
SEGMENT_OFF = !SEGMENT_ON;

// set segment sebagai output


for(byte i=0; i<sizeof(SEGMENT); i++){
pinMode(SEGMENT[i],OUTPUT);
}
}

void loop() {

// counter data setiap 1 detik


// jika lebih besar dr 9, reset ke 0
if( nonblocking_delay(1000) ){
counter++;
if(counter > 9) counter = 0;

Dibuat oleh : Dilarang memperbanyak sebagian atau seluruh isi dokumen Diperiksa oleh :
SGT tanpa ijin tertulis dari Fakultas Teknik Universitas Negeri Yogyakarta HSP
FAKULTAS TEKNIK UNIVERSITAS NEGERI YOGYAKARTA
LAB SHEET Praktik Mikrokontroler
Semester 6 LS 5 : Aplikasi seven segment 8 X 60 Menit
No. LST/EKO/EKO 215/01 Revisi : 01 Tgl : 2017 Hal 3 dari 15

// tampilkan angka di seven segment


Digit(counter, SEGMENT_OFF, BRIGHTNESS);

// fungsi Digit
// untuk menampilkan angka pada seven segment
void Digit(byte data, boolean dp, int brightness){

// delay nyala segment, efeknya pada brigthness


brightness_limit = constrain(brightness,1,100);
brightness_limit = map(brightness_limit,1,100,1,5000);

brightness_now = micros();
if(brightness_now – brightness_last < brightness_limit){
// nyalakan 7 segmen sesuai angka
switch(data){
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);
digitalWrite(SegDp, dp);
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);
digitalWrite(SegDp, dp);
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);
digitalWrite(SegDp, dp);
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);
digitalWrite(SegDp, dp);
break;

Dibuat oleh : Dilarang memperbanyak sebagian atau seluruh isi dokumen Diperiksa oleh :
SGT tanpa ijin tertulis dari Fakultas Teknik Universitas Negeri Yogyakarta HSP
FAKULTAS TEKNIK UNIVERSITAS NEGERI YOGYAKARTA
LAB SHEET Praktik Mikrokontroler
Semester 6 LS 5 : Aplikasi seven segment 8 X 60 Menit
No. LST/EKO/EKO 215/01 Revisi : 01 Tgl : 2017 Hal 4 dari 15

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);
digitalWrite(SegDp, dp);
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);
digitalWrite(SegDp, dp);
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);
digitalWrite(SegDp, dp);
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);
digitalWrite(SegDp, dp);
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);
digitalWrite(SegDp, dp);
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);

Dibuat oleh : Dilarang memperbanyak sebagian atau seluruh isi dokumen Diperiksa oleh :
SGT tanpa ijin tertulis dari Fakultas Teknik Universitas Negeri Yogyakarta HSP
FAKULTAS TEKNIK UNIVERSITAS NEGERI YOGYAKARTA
LAB SHEET Praktik Mikrokontroler
Semester 6 LS 5 : Aplikasi seven segment 8 X 60 Menit
No. LST/EKO/EKO 215/01 Revisi : 01 Tgl : 2017 Hal 5 dari 15

digitalWrite(SegDp, dp);
break;
}
}else{
// matikan semua 7 segment
for(byte d=0; d<sizeof(SEGMENT); d++){
digitalWrite(SEGMENT[d], SEGMENT_OFF);
}
brightness_last = brightness_now;
}
}

// tambahan untuk membuat delay non blocking


unsigned long nonblocking_time = millis();
unsigned long nonblocking_last = millis();
boolean nonblocking_delay(long milidetik){
nonblocking_time = millis();
if(nonblocking_time – nonblocking_last >= milidetik){
nonblocking_last = nonblocking_time;
return true;
}
return false;
}

Seven segment 4 digit


Seven segment 4 digit memiliki 12 kaki. 8 kaki untuk segment, dan 4 untuk digit D1, D2, D3, dan
D4. Cara kerjanya sama dengan seven segment 1 digit. Hanya saja, untuk menampilkan angka di semua
digit, kita harus melakukan scanning untuk setiap digit. Jadi ke-4 digit harus gantian nyala.

Gambar rangkaian seven segment 4 digit

Program Seven Segment 4 Digit:


/*
* MONSTER ARDUINO V2
* Program Seven Segment 4 Digit
* www.ElangSakti.com
*/

// definisikan CC, CA, ON, dan Brightness


#define COMMON_ANODE HIGH
#define COMMON_CATHODE LOW

Dibuat oleh : Dilarang memperbanyak sebagian atau seluruh isi dokumen Diperiksa oleh :
SGT tanpa ijin tertulis dari Fakultas Teknik Universitas Negeri Yogyakarta HSP
FAKULTAS TEKNIK UNIVERSITAS NEGERI YOGYAKARTA
LAB SHEET Praktik Mikrokontroler
Semester 6 LS 5 : Aplikasi seven segment 8 X 60 Menit
No. LST/EKO/EKO 215/01 Revisi : 01 Tgl : 2017 Hal 6 dari 15

#define ON HIGH
#define BRIGHTNESS 100

// konfigurasi seven segment CC


// CC : active low
boolean COMMON = COMMON_CATHODE;
boolean SEGMENT_ON = LOW;
boolean SEGMENT_OFF = !SEGMENT_ON;
boolean DIGIT_ON = HIGH;
boolean DIGIT_OFF = !DIGIT_ON;

// pin 2-9 untuk segmen A - DP


const byte SegA = 2; // A
const byte SegB = 3; // B
const byte SegC = 4; // C
const byte SegD = 5; // D
const byte SegE = 6; // E
const byte SegF = 7; // F
const byte SegG = 8; // G
const byte SegDp = 9; // DP

// pin A0-A3 untuk digit 1-4


const byte Digit1 = A0;
const byte Digit2 = A1;
const byte Digit3 = A2;
const byte Digit4 = A3;

// jadikan array biar mudah


const byte SEGMENT[] = {SegA, SegB, SegC, SegD, SegE, SegF, SegG, SegDp};
const byte DIGIT[] = {Digit1, Digit2, Digit3, Digit4};
// digit terpilih - 0 dari digit satuan (kanan)
byte DIGIT_SELECT = 0;

// pengaturan untuk brightness


unsigned long brightness_now = 0;
unsigned long brightness_last = 0;
unsigned long brightness_limit = 0;

// counter dari -50


int counter = -50;

// string angka
String str_data_last = "";

void setup() {

// sesuaikan active low/high


// dengan tipe Common Anode atau Common Cathode
if( COMMON == COMMON_ANODE ){
SEGMENT_ON = !ON;
DIGIT_ON = ON;
} else {
SEGMENT_ON = ON;
DIGIT_ON = !ON;
}
SEGMENT_OFF = !SEGMENT_ON;
DIGIT_OFF = !DIGIT_ON;

// set pin segment sebagai output


for(byte i=0; i<sizeof(SEGMENT); i++){
pinMode(SEGMENT[i],OUTPUT);
}

// set pin digit sebagai output


for(byte i=0; i<sizeof(DIGIT); i++){
pinMode(DIGIT[i],OUTPUT);

Dibuat oleh : Dilarang memperbanyak sebagian atau seluruh isi dokumen Diperiksa oleh :
SGT tanpa ijin tertulis dari Fakultas Teknik Universitas Negeri Yogyakarta HSP
FAKULTAS TEKNIK UNIVERSITAS NEGERI YOGYAKARTA
LAB SHEET Praktik Mikrokontroler
Semester 6 LS 5 : Aplikasi seven segment 8 X 60 Menit
No. LST/EKO/EKO 215/01 Revisi : 01 Tgl : 2017 Hal 7 dari 15

}
}

void loop() {

// counter data setiap 100 ms


// jika lebih besar dr 200, reset ke -50
if( nonblocking_delay(100) ){
counter++;
if(counter > 200) counter = -50;
}

// tampilkan angka di seven segment


Digit(counter, SEGMENT_OFF, BRIGHTNESS);

void Digit(int data, boolean dp, int brightness){

// delay nyala segment, efeknya pada brigthness


brightness_limit = constrain(brightness,1,100);
brightness_limit = map(brightness_limit,1,100,1,5000);

// konversi angka menjadi string


// lalu cek lebar angkannya
String str_data = String(data);
byte len_data = str_data.length();

brightness_now = micros();
if(brightness_now - brightness_last < brightness_limit){

// replace data sesuai digit yang terpilih


if( DIGIT_SELECT < len_data ){

// jika data < 0, berarti ada tanda - di depan


if( data < 0 && DIGIT_SELECT == 0){
data = '-';
} else {
// ambil data sesuai index digitnya
data = (str_data.substring(DIGIT_SELECT,DIGIT_SELECT+1)).toInt();
}

// nyalakan digit yang terpilih


digitalWrite(DIGIT[DIGIT_SELECT],DIGIT_ON);
}

// nyalakan 7 segmen sesuai angka


switch(data){
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);
digitalWrite(SegDp, dp);
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);

Dibuat oleh : Dilarang memperbanyak sebagian atau seluruh isi dokumen Diperiksa oleh :
SGT tanpa ijin tertulis dari Fakultas Teknik Universitas Negeri Yogyakarta HSP
FAKULTAS TEKNIK UNIVERSITAS NEGERI YOGYAKARTA
LAB SHEET Praktik Mikrokontroler
Semester 6 LS 5 : Aplikasi seven segment 8 X 60 Menit
No. LST/EKO/EKO 215/01 Revisi : 01 Tgl : 2017 Hal 8 dari 15

digitalWrite(SegDp, dp);
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);
digitalWrite(SegDp, dp);
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);
digitalWrite(SegDp, dp);
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);
digitalWrite(SegDp, dp);
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);
digitalWrite(SegDp, dp);
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);
digitalWrite(SegDp, dp);
break;

case 7:
digitalWrite(SegA, SEGMENT_ON);

Dibuat oleh : Dilarang memperbanyak sebagian atau seluruh isi dokumen Diperiksa oleh :
SGT tanpa ijin tertulis dari Fakultas Teknik Universitas Negeri Yogyakarta HSP
FAKULTAS TEKNIK UNIVERSITAS NEGERI YOGYAKARTA
LAB SHEET Praktik Mikrokontroler
Semester 6 LS 5 : Aplikasi seven segment 8 X 60 Menit
No. LST/EKO/EKO 215/01 Revisi : 01 Tgl : 2017 Hal 9 dari 15

digitalWrite(SegB, SEGMENT_ON);
digitalWrite(SegC, SEGMENT_ON);
digitalWrite(SegD, SEGMENT_OFF);
digitalWrite(SegE, SEGMENT_OFF);
digitalWrite(SegF, SEGMENT_OFF);
digitalWrite(SegG, SEGMENT_OFF);
digitalWrite(SegDp, dp);
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);
digitalWrite(SegDp, dp);
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);
digitalWrite(SegDp, dp);
break;

case '-':
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_ON);
digitalWrite(SegDp, dp);
break;
}
}else{
// matikan semua digit
for(byte d=0; d<sizeof(DIGIT); d++){
digitalWrite(DIGIT[d], DIGIT_OFF);
}

// matikan semua segment


for(byte d=0; d<sizeof(SEGMENT); d++){
digitalWrite(SEGMENT[d], SEGMENT_OFF);
}
// lanjut ke digit berikutnya
DIGIT_SELECT++;
// jika semua digit sudah ditampilkan, reset ke 0
if( DIGIT_SELECT >= len_data) DIGIT_SELECT = 0;

brightness_last = brightness_now;
}
}

// tambahan untuk membuat delay non blocking


unsigned long nonblocking_time = millis();
unsigned long nonblocking_last = millis();

Dibuat oleh : Dilarang memperbanyak sebagian atau seluruh isi dokumen Diperiksa oleh :
SGT tanpa ijin tertulis dari Fakultas Teknik Universitas Negeri Yogyakarta HSP
FAKULTAS TEKNIK UNIVERSITAS NEGERI YOGYAKARTA
LAB SHEET Praktik Mikrokontroler
Semester 6 LS 5 : Aplikasi seven segment 8 X 60 Menit
Hal 10 dari
No. LST/EKO/EKO 215/01 Revisi : 01 Tgl : 2017
15

boolean nonblocking_delay(long milidetik){


nonblocking_time = millis();
if(nonblocking_time - nonblocking_last >= milidetik){
nonblocking_last = nonblocking_time;
return true;
}
return false;
}

4. Alat dan Instrument


- Arduino Uno buah
- Kabel USB 1 buah
- 7-segment secukupnya
- Kabel jumper male – male secukupnya
- Shift register 74HC595 1 buah

5. Langkah Kerja
a. Rakit rangkaian arduino dan seven segment satu digit sebagai berikut :

b. Install library sevseg dengan cara sebagai berikut : Klik sketchinclude library pilih add.ZIP
library kemudian arahkan ke file sevseg-master.zip

c. Ketikkan program berikut :


/*
* MONSTER ARDUINO V2
* Program Seven Segment dengan SevSeg
* www.ElangSakti.com
*/

// include library sevseg


#include <SevSeg.h>

// buat object dari class sevseg


SevSeg SevSegment;

// pin digit 1-4


const byte Digit[] = {A0, A1, A2, A3};
// pin segment A,B,C - DP
const byte Segments[] = {2,3,4,5,6,7,8,9};
// penggunaan R internal
const bool R_Segments = false;
// tipe seven segment

Dibuat oleh : Dilarang memperbanyak sebagian atau seluruh isi dokumen Diperiksa oleh :
SGT tanpa ijin tertulis dari Fakultas Teknik Universitas Negeri Yogyakarta HSP
FAKULTAS TEKNIK UNIVERSITAS NEGERI YOGYAKARTA
LAB SHEET Praktik Mikrokontroler
Semester 6 LS 5 : Aplikasi seven segment 8 X 60 Menit
No. LST/EKO/EKO 215/01 Revisi : 01 Tgl : 2017 Hal 11 dari 15

const byte HW_Config = COMMON_CATHODE; // atau COMMON_ANODE

// counter dari -50


int counter = -50;

void setup() {
// konfigurasi sevseg
SevSegment.begin(HW_Config,
sizeof(Digit), Digit,
Segments,
R_Segments);

void loop() {

// counter data setiap 200ms


if( nonblocking_delay(200) ){
counter++;
if(counter > 200) counter = -50;
// ganti angka yang akan ditampilkan
SevSegment.setNumber(counter);
}

// refresh tampilan angka


SevSegment.refreshDisplay();

// tambahan untuk membuat delay non blocking


unsigned long nonblocking_time = millis();
unsigned long nonblocking_last = millis();
boolean nonblocking_delay(long milidetik){
nonblocking_time = millis();
if(nonblocking_time - nonblocking_last >= milidetik){
nonblocking_last = nonblocking_time;
return true;
}
return false;
}

d.Run dan upload program tersebut dan amati nyala 7 segment.


e. Rakit rangkaian 7segment dan arduino sebagai berikut :

f. Ketikan program berikut :


/*
* MONSTER ARDUINO V2
* Program Seven Segmen 1D dg Shift Register
* www.ElangSakti.com
*/

Dibuat oleh : Dilarang memperbanyak sebagian atau seluruh isi dokumen Diperiksa oleh :
SGT tanpa ijin tertulis dari Fakultas Teknik Universitas Negeri Yogyakarta HSP
FAKULTAS TEKNIK UNIVERSITAS NEGERI YOGYAKARTA
LAB SHEET Praktik Mikrokontroler
Semester 6 LS 5 : Aplikasi seven segment 8 X 60 Menit
Hal 12 dari
No. LST/EKO/EKO 215/01 Revisi : 01 Tgl : 2017
15

// untuk common cathode


#define OFF ~255

// konversi angka
// 8 bit data : A B C D E F G DP
const byte angka[] = {
B11111100, // 0
B01100000, // 1
B11011010, // 2
B11110010, // 3
B01100110, // 4
B10110110, // 5
B10111110, // 6
B11100000, // 7
B11111110, // 8
B11110110, // 9
B00000010 // -
};

// konfigurasi pin Arduino


const byte DataPin = 2; // data
const byte LatchPin = 3; // ST_CP
const byte ClockPin = 4; // SH_CP

// data counter
byte counter = 0;

void setup() {
// konfigurasi pin sebagai ouput
pinMode(LatchPin, OUTPUT);
pinMode(ClockPin, OUTPUT);
pinMode(DataPin, OUTPUT);

// pastikan seven segment mati


// mulai transfer
digitalWrite(LatchPin, LOW);
// kirim data
shiftOut(DataPin, ClockPin, LSBFIRST, OFF);
// stop transfer
digitalWrite(LatchPin, HIGH);
}

void loop() {
// delay 1 detik
if ( nonblocking_delay(1000) ){
counter++;
if(counter >= sizeof(angka)) counter = 0;

// mulai transfer
digitalWrite(LatchPin, LOW);
// kirim data
shiftOut(DataPin, ClockPin, LSBFIRST, angka[counter]);
// stop transfer
digitalWrite(LatchPin, HIGH);
}
}

// tambahan untuk membuat delay non blocking


unsigned long nonblocking_time = millis();
unsigned long nonblocking_last = millis();
boolean nonblocking_delay(long milidetik){
nonblocking_time = millis();
if(nonblocking_time - nonblocking_last >= milidetik){
nonblocking_last = nonblocking_time;
return true;

Dibuat oleh : Dilarang memperbanyak sebagian atau seluruh isi dokumen Diperiksa oleh :
SGT tanpa ijin tertulis dari Fakultas Teknik Universitas Negeri Yogyakarta HSP
FAKULTAS TEKNIK UNIVERSITAS NEGERI YOGYAKARTA
LAB SHEET Praktik Mikrokontroler
Semester 6 LS 5 : Aplikasi seven segment 8 X 60 Menit
Hal 13 dari
No. LST/EKO/EKO 215/01 Revisi : 01 Tgl : 2017
15

}
return false;
}

g. Rakit 7segment 4 digit , shift register dan arduino sebagai berikut :

h. Ketikkan program berikut :


/*
* MONSTER ARDUINO V2
* Program Seven Segmen 4D dg Shift Register
* www.ElangSakti.com
*/

// common cathode
#define OFF ~255

// untuk brightness
#define BRIGHTNESS 100

// konversi angka
// 8 bit data : A B C D E F G DP
const byte Angka[] = {
B11111100, // 0
B01100000, // 1
B11011010, // 2
B11110010, // 3
B01100110, // 4
B10110110, // 5
B10111110, // 6
B11100000, // 7
B11111110, // 8
B11110110, // 9
B00000010 // -
};

// konfigurasi pin Arduino


const byte DataPin = 2; // data
const byte LatchPin = 3; // ST_CP
const byte ClockPin = 4; // SH_CP

// untuk mengontrol digit,


// kita masih pakai pin arduino
// untuk lebih menghemat, bisa tambah
// IC shift register lagi
const byte Digit1 = A0;
const byte Digit2 = A1;
const byte Digit3 = A2;
const byte Digit4 = A3;

Dibuat oleh : Dilarang memperbanyak sebagian atau seluruh isi dokumen Diperiksa oleh :
SGT tanpa ijin tertulis dari Fakultas Teknik Universitas Negeri Yogyakarta HSP
FAKULTAS TEKNIK UNIVERSITAS NEGERI YOGYAKARTA
LAB SHEET Praktik Mikrokontroler
Semester 6 LS 5 : Aplikasi seven segment 8 X 60 Menit
Hal 14 dari
No. LST/EKO/EKO 215/01 Revisi : 01 Tgl : 2017
15

const byte DIGIT[] = {Digit1, Digit2, Digit3, Digit4};

// jumlah digit seven segment


const byte jumlah_digit = sizeof(DIGIT);

// digit terpilih untuk diaktifkan


byte DIGIT_SELECT = 0;

// pengaturan untuk brightness


unsigned long brightness_now = 0;
unsigned long brightness_last = 0;
unsigned long brightness_limit = 0;

int counter = 0;

void setup() {
// konfigurasi pin sebagai ouput
pinMode(LatchPin, OUTPUT);
pinMode(ClockPin, OUTPUT);
pinMode(DataPin, OUTPUT);

// pastikan bahwa display mati


for(byte i=0; i<sizeof(DIGIT); i++){
pinMode(DIGIT[i],OUTPUT);
digitalWrite(DIGIT[i],HIGH);
}

// pastikan semua segment mati


// mulai transfer
digitalWrite(LatchPin, LOW);
// kirim data
shiftOut(DataPin, ClockPin, LSBFIRST, OFF);
// stop transfer
digitalWrite(LatchPin, HIGH);

void loop() {

// delay 1 detik
if ( nonblocking_delay(1000) ){
counter++;
if( counter >= 10000 ) counter = 0;

// cetak angka
PrintDigit(counter, jumlah_digit);
}

// fungsi untuk mencetak angka


// INPUT : angka dan jumlah_digit
void PrintDigit(int angka, byte jumlah_digit){

// delay nyala segment, efeknya pada brigthness


brightness_limit = constrain(BRIGHTNESS,1,100);
brightness_limit = map(brightness_limit,1,100,1,5000);

// konversi angka jadi string


String numstr = String(angka);
byte lenstr = numstr.length();

// mulai transfer
digitalWrite(LatchPin, LOW);
brightness_now = micros();
if(brightness_now - brightness_last < brightness_limit){

Dibuat oleh : Dilarang memperbanyak sebagian atau seluruh isi dokumen Diperiksa oleh :
SGT tanpa ijin tertulis dari Fakultas Teknik Universitas Negeri Yogyakarta HSP
FAKULTAS TEKNIK UNIVERSITAS NEGERI YOGYAKARTA
LAB SHEET Praktik Mikrokontroler
Semester 6 LS 5 : Aplikasi seven segment 8 X 60 Menit
Hal 15 dari
No. LST/EKO/EKO 215/01 Revisi : 01 Tgl : 2017
15

// nyalakan digit yang terpilih


digitalWrite(DIGIT[DIGIT_SELECT],LOW);

if( DIGIT_SELECT < lenstr ){


// jika digit yang terpilih < jumlah angka
// cetak angka pada digit tersebut
byte angka = ( numstr.substring( DIGIT_SELECT, DIGIT_SELECT +
1)).toInt();
shiftOut(DataPin, ClockPin, LSBFIRST, Angka[ angka ]);
} else {
// jika tidak, matikan semua segment
shiftOut(DataPin, ClockPin, LSBFIRST, OFF);
}

}else{

// matikan semua digit


for(byte d=0; d<sizeof(DIGIT); d++){
digitalWrite(DIGIT[d], HIGH);
}

// matikan semua segment


shiftOut(DataPin, ClockPin, LSBFIRST, OFF);

DIGIT_SELECT++;
if( DIGIT_SELECT >= lenstr) DIGIT_SELECT = 0;

brightness_last = brightness_now;
}

// stop transfer
digitalWrite(LatchPin, HIGH);
}

// tambahan untuk membuat delay non blocking


unsigned long nonblocking_time = millis();
unsigned long nonblocking_last = millis();
boolean nonblocking_delay(long milidetik){
nonblocking_time = millis();
if(nonblocking_time - nonblocking_last >= milidetik){
nonblocking_last = nonblocking_time;
return true;
}
return false;
}
i. Run dan upload program dan amati nyala 7segment.
j.

Dibuat oleh : Dilarang memperbanyak sebagian atau seluruh isi dokumen Diperiksa oleh :
SGT tanpa ijin tertulis dari Fakultas Teknik Universitas Negeri Yogyakarta HSP

Anda mungkin juga menyukai