0% menganggap dokumen ini bermanfaat (0 suara)
142 tayangan15 halaman

Labsheet 05 Arduino

ARDUINO

Diunggah oleh

Duni doeni
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai DOC, PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
142 tayangan15 halaman

Labsheet 05 Arduino

ARDUINO

Diunggah oleh

Duni doeni
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
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