Perangkat Keras Pelatihan Bahasa Semaphore Bendera.

(1)

Perangkat Keras Pelatihan Bahasa Semaphore Bendera

Daniel Yerimi (0927051)

Jurusan Sistem Komputer, Fakultas Teknik

Universitas Kristen Maranatha

Jalan Prof. drg. Surya Sumantri, MPH 65

Bandung

Abstrak

Dalam cara berkomunikasi, pada bidang kelautan atau pramuka masih digunakan

teknik berkomunikasi dengan bahasa Semaphorebendera. Semaphore bendera

adalah sebuah sistem untuk mengirim informasi jarak jauh berupa sinyal visual

dengan menggunakan bendera kecil, tongkat, atau tangan. Informasi- informasi

kemudian diinterpretasikan dalam posisi bendera.

Melihat Semaphore bendera yang masih digunakan hingga saat ini, maka

pembuatan perangkat keras pelatihan bahasa Semaphore bendera dirasa perlu

untuk membantu melatih pembelajaran kode-kode yang digunakan dalam bahasa

Semaphore bendera.

Dalam perancangan dan pembuatan alat, digunakan modul Arduino Duemilanove

dengan ATMega328 sebagai microcontroller yang mengendalikan LED untuk

menggambarkan delapan arah yang digunakan dalam bahasa Semaphore bendera,

dan LCD untuk menampilkan input. Selain itu, dalam perancangan program

dibuat tiga jenis mode, yaitu: Practice Mode, Test Mode, dan Exam Mode.

Dengan adanya tiga jenis mode, pembelajaran bahasa Semaphore bendera dapat

dilakukan dengan lebih bervariasi.


(2)

Flag Semaphore Language Training Hardware

Daniel Yerimi (0927051)

Computer Engineering Major, Faculty of Technique

Maranatha Christian University

Prof. drg. Surya SumantriSt., MPH 65

Bandung

Abstract

In navy or scout, a flag Semaphore language is still used for communication. Flag

Semaphore is a system to send information in a long distance as a visual signal

using small flags, rods, or hands. The information then be interpreted in flags

positions.

Concerned that flag Semaphore is still used until now, then a making of

Semaphore language training hardware is considered necessary to help learning

the codes used in flag Semaphore language.

In design, Arduino Duemilanove module with ATMega328 as its microcontroller

is used to control LEDs which represent eight ways in flag Semaphore language,

and LCD to display the input. Besides that, three types of practice are designed in

the program, i.e.: Practice Mode, Test Mode, and Exam Mode.

With three types of practice, learning of flag Semaphore language can be done

variously.


(3)

DAFTAR ISI

Abstrak ...i

Abstract ... ii

DAFTAR ISI ... iii

DAFTAR GAMBAR ...v

DAFTAR TABEL ... vii

BAB I PENDAHULUAN ...1

1.1

Latar Belakang ...1

1.2

Identifikasi Masalah ...1

1.3

Tujuan ...2

1.4

Pembatasan Masalah ...2

1.5

Sistematika Penulisan ...2

BAB II LANDASAN TEORI ...4

2.1

Semaphore Bendera ...4

2.1.1.

Sejarah ...4

2.1.2.

Semaphore Modern ...4

2.1.3.

Penggunaan Semaphore Bendera ...6

2.2

Perangkat Keras ...6

2.2.1.

Module Arduino Duemilanove dengan ATMega328...6

2.2.2.

LCD 16x2 ...8

2.2.3.

IC HEF4094 ...9

2.2.4.

Keypad 3x4...9

2.2.5.

Resistor ...10

2.2.6.

LED ...10

2.2.7.

Potensiometer ...11

2.2.8.

Kabel Jumper Breadboard ...11

2.2.9.

Printed Circuit Board Berlubang ...12

2.3

Perangkat Lunak ...12

2.3.1.

PanduanAwalArduino IDE0022 ...15


(4)

BAB III PERANCANGAN ...21

3.1

Perancangan Perangkat Keras ...21

3.1.1

Diagram Blok ...21

3.1.2

Skematik ...21

3.1.3

LED dan Resistor ...23

3.2

Perancangan Perangkat Lunak ...24

BAB IV PENGAMATAN ...36

BAB V KESIMPULAN DAN SARAN ...51

5.1

Kesimpulan ...51

5.2

Saran...51

DAFTAR PUSTAKA ...52

LAMPIRAN A SOURCE CODE ... A - 1

LAMPIRAN B DIAGRAM ALIR ...B - 1

LAMPIRAN C SKEMATIK DAN ALAT ...C - 1


(5)

DAFTAR GAMBAR

Gambar 2.1 Kode Semaphore Bendera ...5

Gambar 2.2 Arduino Duemilanove dengan ATMega328 ...6

Gambar 2.3 LCD 16x2 JHD162A ...8

Gambar 2.4 IC HEF4094 ...9

Gambar 2.5 Keypad 3x4 ...9

Gambar 2.6 Resistor 100 ohm ...10

Gambar 2.7 Red LED ...10

Gambar 2.8 Potensiometer 10K ohm...11

Gambar 2.9 Kabel Penghubung ...12

Gambar 2.10 PCB Berlubang ...12

Gambar 2.11Tampilan Arduino IDE0022...13

Gambar 2.12 Menu BarArduino...14

Gambar 2.13 Pilihan board ...15

Gambar 2.14 Pilihan port ...16

Gambar 3.1 Diagram Blok ...21

Gambar 3.2 Skematik ...22

Gambar3.3Rangkaian LED dan Resistor ...23

Gambar 3.4 Startup flowchart ...24

Gambar 3.5 Sub Function Setup ...25

Gambar 3.6 Sub Function getMode ...25

Gambar 3.7 Sub Function Loop ...26

Gambar 3.8 Sub Function getCode ...27

Gambar 3.9 Sub Function lightOn ...28

Gambar 3.10 Sub Function numberOn ...29

Gambar 3.11 Sub Function practiceMode 1...30

Gambar 3.12 Sub Function practiceMode 2...32

Gambar 3.13 Sub Function testMode 1...33

Gambar 3.14 Sub Function testMode 2...34


(6)

Gambar 4.1 Startup Text ...36

Gambar 4.2 Input Mode Latihan ...37

Gambar 4.3 Mode Angka ...38

Gambar 4.4 Mode Huruf ...39

Gambar 4.5 Input Huruf dan Angka...40

Gambar 4.6

Fungsi ‘

C

lear’

...41

Gambar 4.7 Practice Mode ...42

Gambar 4.8 Test Mode dan Exam Mode Soal Random ...43

Gambar 4.9 Test Mode Jawaban Benar ...44

Gambar 4.10 Test Mode Jawaban Salah ...45

Gambar 4.11 Test Mode Kesempatan Jika Jawaban Salah ...46

Gambar 4.12 Exam Mode Jumlah JawabanBenar ...47

Gambar 4.13 Exam Mode Jumlah Jawaban Salah ...48

Gambar 4.14 Exam Mode Kembali ke Menu Utama...49


(7)

DAFTAR TABEL

Tabel 2.1 Spesifikasi Modul Arduino Duemilanove ATMega328 ...7

Tabel 2.2 Warna Resistor ...10

Tabel 2.3 File ...14

Tabel 2.4 Sketch ...14

Tabel 2.5 Tools ...15

Tabel 3.1 Karakteristik LED ...23

Tabel 4.1 Percobaan 1 Startup Text ...36

Tabel 4.2 Percobaan 2 Input Mode Latihan ...37

Tabel 4.3 Percobaan 3 Mode Angka ...38

Tabel 4.4 Percobaan 4 Mode Huruf ...39

Tabel 4.5 Percobaan 5 Input Huruf dan Angka...40

Tabel 4.6 Percobaan 6 Fungsi Clear ...41

Tabel 4.7 Percobaan 7 Practice Mode ...42

Tabel 4.8 Percobaan 8 Test Mode dan Exam Mode Soal Random ...43

Tabel 4.9 Percobaan 9 Test Mode Jawaban Benar...44

Tabel 4.10 Percobaan 10 Test Mode Jawaban Salah ...45

Tabel 4.11 Percobaan 11 Test Mode Kesempatan Jika Jawaban Salah ...46

Tabel 4.12 Percobaan 12 Exam Mode Jumlah Jawaban Benar...47

Tabel 4.13 Percobaan 13 Exam Mode Jumlah Jawaban Salah ...48

Tabel 4.14 Percobaan 14 Exam Mode Kembali ke Menu Utama ...49


(8)

LAMPIRAN A


(9)

#include <LCD3Wire.h> #include <Keypad.h> #define LCD_LINES 2 #define DOUT_PIN 11 #define STR_PIN 12 #define CLK_PIN 10

LCD3Wire lcd = LCD3Wire(LCD_LINES, DOUT_PIN, STR_PIN, CLK_PIN); const byte ROWS = 4;

const byte COLS = 3; char keys[ROWS][COLS] = { {'1','2','3'},

{'4','5','6'}, {'7','8','9'}, {'*','0','#'} };

byte rowPins[ROWS] = {9,A1,A2,A3}; byte colPins[COLS] = {A4,A5,0}; char letter;

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS); void setup() {

lcd.init(); randomSeed(analogRead(A0)); pinMode(13, OUTPUT); pinMode(2, OUTPUT); pinMode(3, OUTPUT); pinMode(4, OUTPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); pinMode(7, OUTPUT); pinMode(8, OUTPUT); digitalWrite(13, LOW); digitalWrite(2, LOW); digitalWrite(3, LOW); digitalWrite(4, LOW); digitalWrite(5, LOW); digitalWrite(6, LOW); digitalWrite(7, LOW); digitalWrite(8, LOW); }

void loop() { lcd.clear(); lcd.cursorTo(1,1); lcd.printIn("Semaphore Code"); lcd.cursorTo(2,2); lcd.printIn("Practice Set"); delay(2000); lcd.clear(); lcd.cursorTo(1,0); lcd.printIn("by:Daniel Yerimi"); lcd.cursorTo(2,5); lcd.printIn("0927051"); delay(2000);

char mode = getMode(); if(mode=='1') {

lcd.clear(); lcd.cursorTo(1,0);


(10)

delay(2000); practiceMode(); } else if(mode=='2') { lcd.clear();

lcd.cursorTo(1,0);

lcd.printIn("Test Mode"); delay(2000);

testMode();

} else if(mode=='3') { lcd.clear(); lcd.cursorTo(1,0); lcd.printIn("Exam Mode"); delay(2000); examMode(); } }

char getMode() { lcd.clear(); lcd.cursorTo(1,0); lcd.printIn("Choose Mode:"); delay(2000); lcd.clear(); lcd.cursorTo(1,0); lcd.printIn("1. Practice"); lcd.cursorTo(2,0); lcd.printIn("2. Test"); delay(2000); lcd.clear(); lcd.cursorTo(1,0); lcd.printIn("3. Exam");

char init_key = keypad.getKey(); while(1) {

init_key = keypad.getKey(); delay(100);

if(init_key=='1' || init_key=='2' || init_key=='3') break; }

return init_key; }

int getCode(int idx, int count) { int code;

if(idx==1 && count==1) { code = 1;

letter = 'A';

} else if(idx==1 && count==2) { code = 2;

letter = 'B';

} else if(idx==1 && count==3) { code = 3;

letter = 'C';

} else if(idx==2 && count==1) { code = 4;

letter = 'D';

} else if(idx==2 && count==2) { code = 5;

letter = 'E';

} else if(idx==2 && count==3) { code = 6;

letter = 'F';

} else if(idx==3 && count==1) { code = 7;


(11)

letter = 'G';

} else if(idx==3 && count==2) { code = 8;

letter = 'H';

} else if(idx==3 && count==3) { code = 9;

letter = 'I';

} else if(idx==4 && count==1) { code = 10;

letter = 'J';

} else if(idx==4 && count==2) { code = 11;

letter = 'K';

} else if(idx==4 && count==3) { code = 12;

letter = 'L';

} else if(idx==5 && count==1) { code = 13;

letter = 'M';

} else if(idx==5 && count==2) { code = 14;

letter = 'N';

} else if(idx==5 && count==3) { code = 15;

letter = 'O';

} else if(idx==6 && count==1) { code = 16;

letter = 'P';

} else if(idx==6 && count==2) { code = 17;

letter = 'Q';

} else if(idx==6 && count==3) { code = 18;

letter = 'R';

} else if(idx==7 && count==1) { code = 19;

letter = 'S';

} else if(idx==7 && count==2) { code = 20;

letter = 'T';

} else if(idx==7 && count==3) { code = 21;

letter = 'U';

} else if(idx==8 && count==1) { code = 22;

letter = 'V';

} else if(idx==8 && count==2) { code = 23;

letter = 'W';

} else if(idx==8 && count==3) { code = 24;

letter = 'X';

} else if(idx==9 && count==1) { code = 25;

letter = 'Y';

} else if(idx==9 && count==2) { code = 26;

letter = 'Z'; }

return code; }


(12)

void lightOn(int code) { if(code==1) { //A

digitalWrite(5, HIGH); digitalWrite(6, HIGH); } else if(code==2) { //B digitalWrite(5, HIGH); digitalWrite(7, HIGH); } else if(code==3) { //C digitalWrite(5, HIGH); digitalWrite(8, HIGH); } else if(code==4) { //D digitalWrite(13, HIGH); digitalWrite(5, HIGH); } else if(code==5) { //E digitalWrite(2, HIGH); digitalWrite(5, HIGH); } else if(code==6) { //F digitalWrite(3, HIGH); digitalWrite(5, HIGH); } else if(code==7) { //G digitalWrite(4, HIGH); digitalWrite(5, HIGH); } else if(code==8) { //H digitalWrite(6, HIGH); digitalWrite(7, HIGH); } else if(code==9) { //I digitalWrite(6, HIGH); digitalWrite(8, HIGH); } else if(code==10) { //J digitalWrite(13, HIGH); digitalWrite(3, HIGH); } else if(code==11) { //K digitalWrite(13, HIGH); digitalWrite(6, HIGH); } else if(code==12) { //L digitalWrite(2, HIGH); digitalWrite(6, HIGH); } else if(code==13) { //M digitalWrite(3, HIGH); digitalWrite(6, HIGH); } else if(code==14) { //N digitalWrite(4, HIGH); digitalWrite(6, HIGH); } else if(code==15) { //O digitalWrite(7, HIGH); digitalWrite(8, HIGH); } else if(code==16) { //P digitalWrite(13, HIGH); digitalWrite(7, HIGH); } else if(code==17) { //Q digitalWrite(2, HIGH); digitalWrite(7, HIGH); } else if(code==18) { //R digitalWrite(3, HIGH); digitalWrite(7, HIGH); } else if(code==19) { //S digitalWrite(4, HIGH); digitalWrite(7, HIGH); } else if(code==20) { //T digitalWrite(13, HIGH); digitalWrite(8, HIGH); } else if(code==21) { //U digitalWrite(2, HIGH);


(13)

digitalWrite(8, HIGH); } else if(code==22) { //V digitalWrite(13, HIGH); digitalWrite(4, HIGH); } else if(code==23) { //W digitalWrite(2, HIGH); digitalWrite(3, HIGH); } else if(code==24) { //X digitalWrite(2, HIGH); digitalWrite(4, HIGH); } else if(code==25) { //Y digitalWrite(3, HIGH); digitalWrite(8, HIGH); } else if(code==26) { //Z digitalWrite(3, HIGH); digitalWrite(4, HIGH); }

}

void numberOn(int code) { if(code==1) {

digitalWrite(5, HIGH); digitalWrite(6, HIGH); } else if(code==2) { digitalWrite(5, HIGH); digitalWrite(7, HIGH); } else if(code==3) { digitalWrite(5, HIGH); digitalWrite(8, HIGH); } else if(code==4) { digitalWrite(13, HIGH); digitalWrite(5, HIGH); } else if(code==5) { digitalWrite(2, HIGH); digitalWrite(5, HIGH); } else if(code==6) { digitalWrite(3, HIGH); digitalWrite(5, HIGH); } else if(code==7) { digitalWrite(4, HIGH); digitalWrite(5, HIGH); } else if(code==8) { digitalWrite(6, HIGH); digitalWrite(7, HIGH); } else if(code==9) { digitalWrite(6, HIGH); digitalWrite(8, HIGH); } else if(code==10) { digitalWrite(13, HIGH); digitalWrite(6, HIGH); }

}

void practiceMode() { lcd.clear();

lcd.printIn("Input:"); lcd.cursorTo(2,0); char key;

boolean numberMode = false; int idx_init = 255;

int idx_curr = 255; int num_idx_init = 255; int num_idx_curr = 255;


(14)

int counter = 0; int num_counter = 0; int num_code = 0; int i, code; while(1) {

if(numberMode == false) { key = keypad.getKey(); delay(100);

if(key!=NO_KEY) { switch(key) {

case '1': if(idx_init==255) idx_init = 1; idx_curr = 1;

if(idx_curr==idx_init) { if(counter<3) {

counter++;

code = getCode(idx_init, counter); lcd.cursorTo(2,0);

lcd.print(letter); }

} break;

case '2': if(idx_init==255) idx_init = 2; idx_curr = 2;

if(idx_curr==idx_init) { if(counter<3) {

counter++;

code = getCode(idx_init, counter); lcd.cursorTo(2,0);

lcd.print(letter); }

} break;

case '3': if(idx_init==255) idx_init = 3; idx_curr = 3;

if(idx_curr==idx_init) { if(counter<3) {

counter++;

code = getCode(idx_init, counter); lcd.cursorTo(2,0);

lcd.print(letter); }

} break;

case '4': if(idx_init==255) idx_init = 4; idx_curr = 4;

if(idx_curr==idx_init) { if(counter<3) {

counter++;

code = getCode(idx_init, counter); lcd.cursorTo(2,0);

lcd.print(letter); }

} break;

case '5': if(idx_init==255) idx_init = 5; idx_curr = 5;

if(idx_curr==idx_init) { if(counter<3) {

counter++;

code = getCode(idx_init, counter); lcd.cursorTo(2,0);

lcd.print(letter); }


(15)

} break;

case '6': if(idx_init==255) idx_init = 6; idx_curr = 6;

if(idx_curr==idx_init) { if(counter<3) {

counter++;

code = getCode(idx_init, counter); lcd.cursorTo(2,0);

lcd.print(letter); }

} break;

case '7': if(idx_init==255) idx_init = 7; idx_curr = 7;

if(idx_curr==idx_init) { if(counter<3) {

counter++;

code = getCode(idx_init, counter); lcd.cursorTo(2,0);

lcd.print(letter); }

} break;

case '8': if(idx_init==255) idx_init = 8; idx_curr = 8;

if(idx_curr==idx_init) { if(counter<3) {

counter++;

code = getCode(idx_init, counter); lcd.cursorTo(2,0);

lcd.print(letter); }

} break;

case '9': if(idx_init==255) idx_init = 9; idx_curr = 9;

if(idx_curr==idx_init) { if(counter<2) {

counter++;

code = getCode(idx_init, counter); lcd.cursorTo(2,0);

lcd.print(letter); }

} break; case '*': lcd.clear();

lcd.printIn("Input:"); lcd.cursorTo(2,0); idx_init = 255; idx_curr = 255; counter = 0; break;

case '#': if(idx_init!=255 && counter>0) { code = getCode(idx_init, counter); lightOn(code);

delay(2000);

for(i=2; i<=8; i++) digitalWrite(i, LOW); digitalWrite(13, LOW);

lcd.clear();

lcd.printIn("Input:"); lcd.cursorTo(2,0); idx_init = 255;


(16)

idx_curr = 255; counter = 0; }

break;

case '0': if(idx_init==255) idx_init = 0; idx_curr = 0;

if(idx_curr==idx_init) { numberMode = true; lcd.clear(); idx_init = 255; idx_curr = 255; counter = 0;

lcd.printIn("Number Mode"); digitalWrite(13, HIGH); digitalWrite(2, HIGH); delay(1000); lcd.clear(); lcd.printIn("Input:"); lcd.cursorTo(2,0); digitalWrite(13, LOW); digitalWrite(2, LOW); } break; default: break; }

}

} else if(numberMode==true) { key = keypad.getKey(); delay(100);

if(key!=NO_KEY) { switch(key) {

case '1': if(num_counter<1) { num_counter++; num_idx_curr = 1; num_code = 1; lcd.print(key); }

break;

case '2': if(num_counter<1) { num_counter++; num_idx_curr = 2; num_code = 2; lcd.print(key); }

break;

case '3': if(num_counter<1) { num_counter++; num_idx_curr = 3; num_code = 3; lcd.print(key); }

break;

case '4': if(num_counter<1) { num_counter++; num_idx_curr = 4; num_code = 4; lcd.print(key); }

break;

case '5': if(num_counter<1) { num_counter++; num_idx_curr = 5; num_code = 5;


(17)

lcd.print(key); }

break;

case '6': if(num_counter<1) { num_counter++; num_idx_curr = 6; num_code = 6; lcd.print(key); }

break;

case '7': if(num_counter<1) { num_counter++; num_idx_curr = 7; num_code = 7; lcd.print(key); }

break;

case '8': if(num_counter<1) { num_counter++; num_idx_curr = 8; num_code = 8; lcd.print(key); }

break;

case '9': if(num_counter<1) { num_counter++; num_idx_curr = 9; num_code = 9; lcd.print(key); }

break;

case '0': if(num_idx_curr==num_idx_init) { if(num_counter<2) {

num_counter++; if(num_counter==2) { numberMode = false; lcd.clear();

num_idx_curr = 255; num_idx_init = 255; num_code = 0; num_counter=0; lcd.printIn("Letter Mode"); digitalWrite(13, HIGH); digitalWrite(3, HIGH); delay(1000); lcd.clear(); lcd.printIn("Input:"); lcd.cursorTo(2,0); digitalWrite(13, LOW); digitalWrite(3, LOW); break; }

num_code = 9 + num_counter; lcd.print(key);

} } break; case '*': lcd.clear();

lcd.printIn("Input:"); lcd.cursorTo(2,0); num_idx_curr = 255; num_idx_init = 255; num_code = 0;


(18)

num_counter=0; break;

case '#': if(num_counter>0){ if(num_code!=0) { numberOn(num_code); delay(2000);

for(i=2; i<=8; i++) digitalWrite(i, LOW); digitalWrite(13, LOW);

lcd.clear();

lcd.printIn("Input:"); lcd.cursorTo(2,0); num_idx_curr = 255; num_idx_init = 255; num_code = 0; num_counter=0; }

} break; default: break; }

} } }; }

void testMode() {

int i, code, question_code, idx, idx_question, count_question; boolean isAnswered = false;

boolean numberMode = false; char key;

int temp = 1; int idx_init = 255; int idx_curr = 255; int num_idx_init = 255; int num_idx_curr = 255; int counter = 0;

int num_counter = 0; int num_code = 0; while(1) {

idx = random(36) + 1; if(idx<=26) {

if((idx%3) != 0) {

idx_question = idx/3 + 1; count_question = idx%3; } else {

idx_question = idx/3 + 1; count_question = idx%3 + 3; }

question_code = getCode(idx_question, count_question); lightOn(question_code);

} else {

digitalWrite(13, HIGH); digitalWrite(2, HIGH); delay(1000);

digitalWrite(13, LOW); digitalWrite(2, LOW); idx_question = idx-26; numberOn(idx_question); } lcd.clear(); lcd.printIn("Input:"); lcd.cursorTo(2,0); while(isAnswered==false) {


(19)

if(numberMode == false) { key = keypad.getKey(); delay(100);

if(key!=NO_KEY) { switch(key) {

case '1': if(idx_init==255) idx_init = 1; idx_curr = 1;

if(idx_curr==idx_init) { if(counter<3) {

counter++;

code = getCode(idx_init, counter); lcd.cursorTo(2,0);

lcd.print(letter); }

} break;

case '2': if(idx_init==255) idx_init = 2; idx_curr = 2;

if(idx_curr==idx_init) { if(counter<3) {

counter++;

code = getCode(idx_init, counter); lcd.cursorTo(2,0);

lcd.print(letter); }

} break;

case '3': if(idx_init==255) idx_init = 3; idx_curr = 3;

if(idx_curr==idx_init) { if(counter<3) {

counter++;

code = getCode(idx_init, counter); lcd.cursorTo(2,0);

lcd.print(letter); }

} break;

case '4': if(idx_init==255) idx_init = 4; idx_curr = 4;

if(idx_curr==idx_init) { if(counter<3) {

counter++;

code = getCode(idx_init, counter); lcd.cursorTo(2,0);

lcd.print(letter); }

} break;

case '5': if(idx_init==255) idx_init = 5; idx_curr = 5;

if(idx_curr==idx_init) { if(counter<3) {

counter++;

code = getCode(idx_init, counter); lcd.cursorTo(2,0);

lcd.print(letter); }

} break;

case '6': if(idx_init==255) idx_init = 6; idx_curr = 6;


(20)

if(counter<3) { counter++;

code = getCode(idx_init, counter); lcd.cursorTo(2,0);

lcd.print(letter); }

} break;

case '7': if(idx_init==255) idx_init = 7; idx_curr = 7;

if(idx_curr==idx_init) { if(counter<3) {

counter++;

code = getCode(idx_init, counter); lcd.cursorTo(2,0);

lcd.print(letter); }

} break;

case '8': if(idx_init==255) idx_init = 8; idx_curr = 8;

if(idx_curr==idx_init) { if(counter<3) {

counter++;

code = getCode(idx_init, counter); lcd.cursorTo(2,0);

lcd.print(letter); }

} break;

case '9': if(idx_init==255) idx_init = 9; idx_curr = 9;

if(idx_curr==idx_init) { if(counter<2) {

counter++;

code = getCode(idx_init, counter); lcd.cursorTo(2,0);

lcd.print(letter); }

} break; case '*': lcd.clear();

lcd.printIn("Input:"); lcd.cursorTo(2,0); idx_init = 255; idx_curr = 255; counter = 0; break;

case '#': if(idx_init!=255 && counter>0) { code = getCode(idx_init, counter); if(code==question_code) {

lcd.clear();

lcd.printIn("Correct!"); delay(1000);

isAnswered=true; } else {

lcd.clear(); lcd.printIn("Wrong!"); delay(1000); if(temp==3) isAnswered=true; temp++; } if(isAnswered==true) {


(21)

for(i=2; i<=8; i++) digitalWrite(i, LOW); digitalWrite(13, LOW); } lcd.clear(); lcd.printIn("Input:"); lcd.cursorTo(2,0); idx_init = 255; idx_curr = 255; counter = 0; }

break;

case '0': if(idx_init==255) idx_init = 0; idx_curr = 0;

if(idx_curr==idx_init) { numberMode = true; lcd.clear(); idx_init = 255; idx_curr = 255; counter = 0;

lcd.printIn("Number Mode"); delay(1000); lcd.clear(); lcd.printIn("Input:"); lcd.cursorTo(2,0); } break; default: break; }

}

} else if(numberMode==true) { key = keypad.getKey(); delay(100);

if(key!=NO_KEY) { switch(key) {

case '1': if(num_counter<1) { num_counter++; num_idx_curr = 1; num_code = 1; lcd.print(key); }

break;

case '2': if(num_counter<1) { num_counter++; num_idx_curr = 2; num_code = 2; lcd.print(key); }

break;

case '3': if(num_counter<1) { num_counter++; num_idx_curr = 3; num_code = 3; lcd.print(key); }

break;

case '4': if(num_counter<1) { num_counter++; num_idx_curr = 4; num_code = 4; lcd.print(key); }

break;


(22)

num_counter++; num_idx_curr = 5; num_code = 5; lcd.print(key); }

break;

case '6': if(num_counter<1) { num_counter++; num_idx_curr = 6; num_code = 6; lcd.print(key); }

break;

case '7': if(num_counter<1) { num_counter++; num_idx_curr = 7; num_code = 7; lcd.print(key); }

break;

case '8': if(num_counter<1) { num_counter++; num_idx_curr = 8; num_code = 8; lcd.print(key); }

break;

case '9': if(num_counter<1) { num_counter++; num_idx_curr = 9; num_code = 9; lcd.print(key); }

break;

case '0': if(num_idx_curr==num_idx_init) { if(num_counter<2) {

num_counter++; if(num_counter==2) { lcd.clear();

num_idx_curr = 255; num_idx_init = 255; num_code = 0; num_counter=0; lcd.printIn("Letter Mode"); delay(1000); lcd.clear(); lcd.printIn("Input:"); lcd.cursorTo(2,0); break; }

num_code = 9 + num_counter; lcd.print(key);

} } break; case '*': lcd.clear();

lcd.printIn("Input:"); lcd.cursorTo(2,0); num_idx_curr = 255; num_idx_init = 255; num_code = 0; num_counter=0; break;


(23)

case '#': if(num_counter>0){ if(num_code!=0) { if(num_code==idx_question) { lcd.clear(); lcd.printIn("Correct!"); delay(1000); isAnswered=true; } else {

lcd.clear(); lcd.printIn("Wrong!"); delay(1000); if(temp==3) isAnswered=true; temp++; } if(isAnswered==true) {

for(i=2; i<=8; i++) digitalWrite(i, LOW); digitalWrite(13, LOW);

}

lcd.clear();

lcd.printIn("Input:"); lcd.cursorTo(2,0); num_idx_curr = 255; num_idx_init = 255; num_code = 0; num_counter=0; }

} break; default: break; }

} } };

temp = 1;

isAnswered = false; numberMode = false; };

}

void examMode() {

int code, question_code, idx, idx_question, count_question; boolean isAnswered = false;

boolean numberMode = false; char key;

int i = 0; int no = 0; int correct = 0; int wrong = 0; int idx_init = 255; int idx_curr = 255; int num_idx_init = 255; int num_idx_curr = 255; int counter = 0;

int num_counter = 0; int num_code = 0; lcd.clear(); lcd.cursorTo(1,1); lcd.printIn("Answer 10"); lcd.cursorTo(2,3); lcd.printIn("Questions!"); delay(1000); while(no<10) {


(24)

if(idx<=26) {

if((idx%3) != 0) {

idx_question = idx/3 + 1; count_question = idx%3; } else {

idx_question = idx/3 + 1; count_question = idx%3 + 3; }

question_code = getCode(idx_question, count_question); lightOn(question_code);

} else {

digitalWrite(13, HIGH); digitalWrite(2, HIGH); delay(1000);

digitalWrite(13, LOW); digitalWrite(2, LOW); idx_question = idx-26; numberOn(idx_question); } lcd.clear(); lcd.printIn("Input:"); lcd.cursorTo(2,0); while(isAnswered==false) { if(numberMode == false) { key = keypad.getKey(); delay(100);

if(key!=NO_KEY) { switch(key) {

case '1': if(idx_init==255) idx_init = 1; idx_curr = 1;

if(idx_curr==idx_init) { if(counter<3) {

counter++;

code = getCode(idx_init, counter); lcd.cursorTo(2,0);

lcd.print(letter); }

} break;

case '2': if(idx_init==255) idx_init = 2; idx_curr = 2;

if(idx_curr==idx_init) { if(counter<3) {

counter++;

code = getCode(idx_init, counter); lcd.cursorTo(2,0);

lcd.print(letter); }

} break;

case '3': if(idx_init==255) idx_init = 3; idx_curr = 3;

if(idx_curr==idx_init) { if(counter<3) {

counter++;

code = getCode(idx_init, counter); lcd.cursorTo(2,0);

lcd.print(letter); }

} break;

case '4': if(idx_init==255) idx_init = 4; idx_curr = 4;


(25)

if(idx_curr==idx_init) { if(counter<3) {

counter++;

code = getCode(idx_init, counter); lcd.cursorTo(2,0);

lcd.print(letter); }

} break;

case '5': if(idx_init==255) idx_init = 5; idx_curr = 5;

if(idx_curr==idx_init) { if(counter<3) {

counter++;

code = getCode(idx_init, counter); lcd.cursorTo(2,0);

lcd.print(letter); }

} break;

case '6': if(idx_init==255) idx_init = 6; idx_curr = 6;

if(idx_curr==idx_init) { if(counter<3) {

counter++;

code = getCode(idx_init, counter); lcd.cursorTo(2,0);

lcd.print(letter); }

} break;

case '7': if(idx_init==255) idx_init = 7; idx_curr = 7;

if(idx_curr==idx_init) { if(counter<3) {

counter++;

code = getCode(idx_init, counter); lcd.cursorTo(2,0);

lcd.print(letter); }

} break;

case '8': if(idx_init==255) idx_init = 8; idx_curr = 8;

if(idx_curr==idx_init) { if(counter<3) {

counter++;

code = getCode(idx_init, counter); lcd.cursorTo(2,0);

lcd.print(letter); }

} break;

case '9': if(idx_init==255) idx_init = 9; idx_curr = 9;

if(idx_curr==idx_init) { if(counter<2) {

counter++;

code = getCode(idx_init, counter); lcd.cursorTo(2,0);

lcd.print(letter); }


(26)

break; case '*': lcd.clear();

lcd.printIn("Input:"); lcd.cursorTo(2,0); idx_init = 255; idx_curr = 255; counter = 0; break;

case '#': if(idx_init!=255 && counter>0) { isAnswered=true;

code = getCode(idx_init, counter); if(code==question_code) {

correct++; lcd.clear();

lcd.printIn("Correct!"); delay(1000);

} else { wrong++; lcd.clear();

lcd.printIn("Wrong!"); delay(1000);

}

for(i=2; i<=8; i++) digitalWrite(i, LOW); digitalWrite(13, LOW); lcd.clear(); if(no<9) { lcd.printIn("Input:"); lcd.cursorTo(2,0); }

idx_init = 255; idx_curr = 255; counter = 0; }

break;

case '0': if(idx_init==255) idx_init = 0; idx_curr = 0;

if(idx_curr==idx_init) { numberMode = true; lcd.clear(); idx_init = 255; idx_curr = 255; counter = 0;

lcd.printIn("Number Mode"); delay(1000); lcd.clear(); lcd.printIn("Input:"); lcd.cursorTo(2,0); } break; default: break; }

}

} else if(numberMode==true) { key = keypad.getKey(); delay(100);

if(key!=NO_KEY) { switch(key) {

case '1': if(num_counter<1) { num_counter++; num_idx_curr = 1; num_code = 1; lcd.print(key); }


(27)

break;

case '2': if(num_counter<1) { num_counter++; num_idx_curr = 2; num_code = 2; lcd.print(key); }

break;

case '3': if(num_counter<1) { num_counter++; num_idx_curr = 3; num_code = 3; lcd.print(key); }

break;

case '4': if(num_counter<1) { num_counter++; num_idx_curr = 4; num_code = 4; lcd.print(key); }

break;

case '5': if(num_counter<1) { num_counter++; num_idx_curr = 5; num_code = 5; lcd.print(key); }

break;

case '6': if(num_counter<1) { num_counter++; num_idx_curr = 6; num_code = 6; lcd.print(key); }

break;

case '7': if(num_counter<1) { num_counter++; num_idx_curr = 7; num_code = 7; lcd.print(key); }

break;

case '8': if(num_counter<1) { num_counter++; num_idx_curr = 8; num_code = 8; lcd.print(key); }

break;

case '9': if(num_counter<1) { num_counter++; num_idx_curr = 9; num_code = 9; lcd.print(key); }

break;

case '0': if(num_idx_curr==num_idx_init) { if(num_counter<2) {

num_counter++; if(num_counter==2) { numberMode = false; lcd.clear();


(28)

num_idx_curr = 255; num_idx_init = 255; num_code = 0; num_counter=0; lcd.printIn("Letter Mode"); delay(1000); lcd.clear(); lcd.printIn("Input:"); lcd.cursorTo(2,0); break; }

num_code = 9 + num_counter; lcd.print(key);

} } break; case '*': lcd.clear();

lcd.printIn("Input:"); lcd.cursorTo(2,0); num_idx_curr = 255; num_idx_init = 255; num_code = 0; num_counter=0; break;

case '#': if(num_counter>0){ if(num_code!=0) { isAnswered = true;

if(num_code==idx_question) { correct++;

lcd.clear();

lcd.printIn("Correct!"); delay(1000);

} else { wrong++; lcd.clear();

lcd.printIn("Wrong!"); delay(1000);

}

for(i=2; i<=8; i++) digitalWrite(i, LOW); digitalWrite(13, LOW); lcd.clear(); if(no<9) { lcd.printIn("Input:"); lcd.cursorTo(2,0); }

num_idx_curr = 255; num_idx_init = 255; num_code = 0; num_counter=0; }

} break; default: break; }

} } };

isAnswered = false; numberMode = false; no++;

};

lcd.clear(); lcd.cursorTo(1,6);


(29)

lcd.printIn("DONE"); delay(2000);

while(keypad.getKey() == NO_KEY) { lcd.clear();

lcd.cursorTo(1,0);

lcd.printIn("Correct: "); lcd.cursorTo(2,0);

for(i=0; i<correct; i++) { lcd.print('o');

delay(100); }

if(keypad.getKey() != NO_KEY) break; delay(3000);

if(keypad.getKey() != NO_KEY) break; lcd.clear();

lcd.cursorTo(1,0); lcd.printIn("Wrong: "); lcd.cursorTo(2,0); for(i=0; i<wrong; i++) { lcd.print('x');

delay(100); }

if(keypad.getKey() != NO_KEY) break; delay(3000);

}; }


(30)

LAMPIRAN B

DIAGRAM ALIR


(31)

B

-

1

U

n

iv

e

rs

itas

K

ri

st

e

n

M

ar

an

ath

a

Gambar Diagram Alir Start, Setup, Loop, dan getMode Sumber: pribadi


(32)

B

-

2

U

n

iv

e

rs

itas

K

ri

st

e

n

M

ar

an

ath

a

Gambar Diagram Alir getCode 1 Sumber: pribadi


(33)

B

-

3

U

n

iv

e

rs

itas

K

ri

st

e

n

M

ar

an

ath

a

Gambar Diagram Alir getCode 2 Sumber: pribadi


(34)

B

-

4

U

n

iv

e

rs

itas

K

ri

st

e

n

M

ar

an

ath

a

Gambar Diagram Alir lightOn 1 Sumber: pribadi


(35)

B

-

5

U

n

iv

e

rs

itas

K

ri

st

e

n

M

ar

an

ath

a

Gambar Diagram Alir lightOn 2 Sumber: pribadi


(36)

B

-

6

U

n

iv

e

rs

itas

K

ri

st

e

n

M

ar

an

ath

a

Gambar Diagram Alir numberOn Sumber: pribadi


(37)

B

-

7

U

n

iv

e

rs

itas

K

ri

st

e

n

M

ar

an

ath

a

Gambar Diagram Alir practiceMode 1 Sumber: pribadi


(38)

B

-

8

U

n

iv

e

rs

itas

K

ri

st

e

n

M

ar

an

ath

a

Gambar Diagram Alir practiceMode 2 Sumber: pribadi


(39)

B

-

9

U

n

iv

e

rs

itas

K

ri

st

e

n

M

ar

an

ath

a

Gambar Diagram Alir practiceMode 3 Sumber: pribadi


(40)

B

-

1

0

U

n

iv

e

rs

itas

K

ri

st

e

n

M

ar

an

ath

a

Gambar Diagram Alir practiceMode 4 Sumber: pribadi


(41)

B

-

1

1

U

n

iv

e

rs

itas

K

ri

st

e

n

M

ar

an

ath

a

Gambar Diagram Alir practiceMode 5 Sumber: pribadi


(42)

testMode

int code, question_code, idx, idx_question,

count_question; boolean isAnswered =

false; boolean numberMode =

false; char key; int temp = 1; int idx_init = 255; int idx_curr = 255; int num_idx_init = 255; int num_idx_curr = 255;

int counter = 0; int num_counter = 0;

int num_code = 0;

Idx = random(36)+1;

idx<=26 ?

(idx%3) != 0 ? Y

idx_question=idx/3 + 1; count_question=idx%3;

Y

idx_question=idx/3 + 1; count_question =

idx%3 + 3; N question_code = getCode(idx_question, count_question); getCode(idx, code) lightOn(question_code) lightOn(code)

LED 13 on; LED 2 on; Delay 1000ms;

LED 13 off; LED 2 off; idx_question = idx-26; numberOn(idx_question); N

Clear LCD;

LCD display Input: X3

Ans

temp = 1; isAnswered = false; numberMode=false;

numberOn(code)

Ga mbar Diagra m A lir testMode 1 Sumber: pribadi


(43)

B

-

1

3

U

n

iv

e

rs

itas

K

ri

st

e

n

M

ar

an

ath

a

Gambar Diagram Alir testMode 2 Sumber: pribadi


(44)

B

-

1

4

U

n

iv

e

rs

itas

K

ri

st

e

n

M

ar

an

ath

a

Gambar Diagram Alir testMode 3 Sumber: pribadi


(45)

B

-

1

5

U

n

iv

e

rs

itas

K

ri

st

e

n

M

ar

an

ath

a

Gambar Diagram Alir testMode 4 Sumber: pribadi


(46)

B

-

1

6

U

n

iv

e

rs

itas

K

ri

st

e

n

M

ar

an

ath

a

Gambar Diagram Alir testMode 5 Sumber: pribadi


(47)

B

-

1

7

U

n

iv

e

rs

itas

K

ri

st

e

n

M

ar

an

ath

a

Gambar Diagram Alir testMode 6 Sumber: pribadi


(48)

examMode

int code, question_code, idx, idx_question, count_question, no,

correct, wrong; boolean isAnswered =

false; boolean numberMode =

false; char key; int temp = 1; int idx_init = 255; int idx_curr = 255; int num_idx_init = 255; int num_idx_curr = 255;

int counter = 0; int num_counter = 0;

int num_code = 0;

Idx = random(36)+1;

idx<=26 ?

(idx%3) != 0 ? Y

idx_question=idx/3 + 1; count_question=idx%3;

Y

idx_question=idx/3 + 1; count_question =

idx%3 + 3; N question_code = getCode(idx_question, count_question); getCode(idx, code) lightOn(question_code) lightOn(code)

LED 13 on; LED 2 on; Delay 1000ms;

LED 13 off; LED 2 off; idx_question = idx-26; numberOn(idx_question); N

Clear LCD;

LCD display Input:

X6

Ans2

no++; isAnswered = false; numberMode=false;

numberOn(code) no < 10 ?

Y

Calc N

Calc

Clear LCD;

LCD display DONE

Delay 2000ms; Input keypad keypad = NO_KEY ? Clear LCD; Lcd.print(correct); Lcd.print(wrong); Delay 3000ms; Y Key = keypad; Delay 100ms;

Return N

Ga mbar Diagra m A lir e xa mMode 1 Sumber: pribadi


(49)

B

-

1

9

U

n

iv

e

rs

itas

K

ri

st

e

n

M

ar

an

ath

a

Gambar Diagram Alir examMode 2 Sumber: pribadi


(50)

B

-

2

0

U

n

iv

e

rs

itas

K

ri

st

e

n

M

ar

an

ath

a

Gambar Diagram Alir examMode 3 Sumber: pribadi


(51)

B

-

2

1

U

n

iv

e

rs

itas

K

ri

st

e

n

M

ar

an

ath

a

Gambar Diagram Alir examMode 4 Sumber: pribadi


(52)

B

-

2

2

U

n

iv

e

rs

itas

K

ri

st

e

n

M

ar

an

ath

a

Gambar Diagram Alir examMode 5 Sumber: pribadi


(53)

B

-

2

3

U

n

iv

e

rs

itas

K

ri

st

e

n

M

ar

an

ath

a

Gambar Diagram Alir examMode 6 Sumber: pribadi


(54)

LAMPIRAN C


(55)

G

a

m

b

a

r

S

k

e

m

a

ti

k

S

u

m

b

e

r:

p

ri

b

a

d


(56)

Ga mbar A lat Sumber: pribadi


(57)

BAB I

PENDAHULUAN

1.1

Latar Belakang

Seiring dengan berkembangnya teknologi di jaman modern, teknik

berkomunikasi pun berkembang dengan pesat. Teknologi infra-red, RFID

(Radio Frequency Identification), bluetooth, wi-fi, sudah tidak asing lagi

terdengar di masyarakat umum. Dengan teknologi-teknologi tersebut,

kemudahan dalam berkomunikasi jarak jauh bukanlah hal yang mustahil.

Namun dalam cara berkomunikasi, pada bidang kelautan atau pra muka

masih digunakan teknik berkomunikasi dengan bahasa Semaphore

bendera. Semaphore bendera adalah sebuah sistem untuk mengirim

informasi jarak jauh berupa sinyal visual dengan menggunakan bendera

kecil,

tongkat,

atau

tangan.

Informasi- informasi

kemudian

diinterpretasikan dalam posisi bendera.

Melihat Semaphore bendera yang masih digunakan hingga saat ini, maka

pembuatan perangkat keras pelatihan bahasa Semaphore bendera dirasa

perlu untuk membantu melatih pembelajaran kode-kode yang digunakan

dalam bahasa Semaphore bendera.

1.2

Identifikasi Masalah

Adapun masalah yang akan dibahas pada Tugas Akhir ini adalah

bagaimana cara membuat perangkat keras pelatihan bahasa Semaphore

bendera?


(58)

1.3

Tujuan

Tujuan dari Tugas Akhir ini adalah membuat perangkat keras pelatihan

bahasa bendera Semaphore.

1.4

Pembatasan Masalah

Batasan masalah pada Tugas Akhir ini antara lain:

1.

Bahasa Semaphore yang digunakan dalam perancangan alat dan

tipe-tipe latihan adalah bahasa Semaphore bendera.

2.

Alat ditujukan untuk pelatihan kode-kode Semaphore bendera berupa

informasi huruf atau angka, bukan pelatihan pengiriman kode

Semaphore bendera.

3.

Modul yang digunakan adalah Arduino module Severino Duemilanove

dengan ATMega 328.

4.

LCD yang digunakan adalah LCD 16x2.

5.

Keypad yang digunakan adalah keypad 3x4.

6.

Perangkat lunak yang digunakan adalah Arduino IDE0022.

1.5

Sistematika Penulisan

BAB 1: PENDAHULUAN

Berisi pembahasan singkat mengenai bahasa Semaphore bendera

dan garis besar laporan Tugas Akhir.

BAB 2: LANDASAN TEORI

Berisi penjelasan tentang bahasa Semaphore bendera, perangkat

keras, dan perangkat lunak yang digunakan dalam perancangan

dan pembuatan alat.

BAB 3: PERANCANGAN

Berisi tentang perancangan perangkat keras dan perangkat lunak

yang digunakan dalam pembuatan alat.


(59)

BAB 4: PENGAMATAN

Berisi tentang hasil pengamatan dari perangkat keras pelatihan

bahasa Semaphore bendera.

BAB 5: KESIMPULAN DAN SARAN

Berisi tentang kesimpulan dan saran yang diperoleh dari

perangkat keras pelatihan bahasa Semaphore bendera.


(60)

BAB V

KESIMPULAN DAN SARAN

5.1

Kesimpulan

Kesimpulan dari Tugas Akhir yang telah dilakukan adalah:

1.

Perangkat keras pelatihan bahasa Semaphore bendera telah berhasil

dibuat.

2.

Dengan adanya tiga jenis latihan, pembelajaran bahasa Semaphore

bendera dapat dilakukan dengan lebih bervariasi.

5.2

Saran

Untuk pelatihan bahasa Semaphore bendera dengan tingkat kesulitan yang

lebih tinggi, disarankan agar alat dapat menerima input / memberikan soal

berupa kalimat. Akan tetapi, untuk memungkinkan hal ini maka diperlukan

LCD dengan jumlah kolom dan baris yang lebih banyak.


(61)

Jurnal Tugas Akhir

Perangkat Keras Pelatihan Bahasa Semaphore Bendera

Flag Semaphore Language Training Hardware

Daniel Yerimi (0927051)

Abstrak

Dala m cara berko munikasi, pada bidang kelautan atau pramu ka masih digunakan teknik berko munikasi dengan bahasa Semaphore bendera. Se maphore bendera adalah sebuah sistem untuk mengirim informasi ja rak jauh berupa sinyal visual dengan menggunakan bendera kecil, tongkat, atau tangan. Informasi-informasi ke mud ian diinterpretasikan dala m posisi bendera.

Melihat Se maphore bendera yang masih d igunakan hingga saat ini, ma ka pe mbuatan perangkat keras pelatihan bahasa Semaphore bendera dirasa perlu untuk me mbantu me latih pe mb ela jaran kode-kode yang digunakan dala m bahasa Semaphore bendera.

Dala m perancangan dan pembuatan alat, digunakan modul Arduino Due milanove dengan ATMega328 sebagai

microcontroller yang mengendalikanLED untuk mengga mbarkan de lapan arah yang digunakan dalam bahasa

Se maphore bendera, dan LCD untuk mena mp ilkan input. Sela in itu, dala m perancangan program dibuat tiga jenis mode, yaitu: Practice Mode, Test Mode, dan Exa m Mode.

Dengan adanya tiga jenis mode, pembela jaran bahasa Se maphore benderadapat dilaku kan dengan lebih bervariasi.

Kata kunci: Se maphore bendera, mikrokontroler ATMega328, modul Arduino Due milanove

I. Pendahuluan

Seiring dengan berkembangnya teknologi di ja man modern, teknik berko mun ikasi pun berke mbang dengan pesat.Teknologi infra-red, RFID (RadioFrequencyIdentification), bluetooth, wi-fi, sudah tidak asing lagi terdengar di masyarakat umu m.Dengan teknologi-teknologi tersebut, kemudahan dalam berko munikasi ja rak jauh bukanlah hal yang mustahil.

Na mun dala m cara berko munikasi, pada bidang ke lautan atau pramu ka masih digunakan tekn ik berko mun ikasi dengan bahasa Semaphore bendera. Semaphore bendera adalah sebuah sistem untuk mengirim info rmasi ja rak jauh berupa sinyal visual dengan menggunakan bendera kecil, tongkat, atau tangan. Informasi-informasi ke mudian diinterpretasikan dala m posisi bendera.

Melihat Se maphore bendera yang masih d igunakan hingga saat ini, ma ka pe mbuatan perangkat keras pelatihan bahasa Semaphore bendera dirasa perlu untuk me mbantu me latih pe mbela jaran kode -kode yang digunakan dala m bahasa Semaphore bendera.

Batasan masalah pada Tugas Akhir in i antara lain :

1. Bahasa Semaphore yang digunakan dalam perancangan alat dan tipe -tipe latihan adalah bahasa Semaphore bendera.

2. Alat ditujukan untuk pelatihan kode-kode Semaphore bendera berupa informasi huruf atau angka, bukan pelatihan pengiriman kode Se maphore bendera.

3. Modul yang digunakan adalah Arduino module Severino Due milanove dengan ATMega 328.

4. LCD yang digunakan adalah LC D 16x2.

5. Keypad yang digunakan adalah k eypad 3x4.

6. Perangkat lunak yang digunakan adalah Arduino IDE0022.

II. Landasan Teori

2.1 Semaphore Bendera

Se maphore secara umu m ada lah suatu cara untuk mengirim dan menerima informasi berupa kode dengan menggunakan bendera, dayung, tongkat, atau tangan. Akan tetapi, istilah yang tepat untuk menggambarkan cara ini adalah flag Se maphore atau Semaphore bendera. Hal in i dikarenakan istilah Se maphore digunakan untuk beberapa cara pengiriman informasi bukan hanya terbatas pada penggunaan bendera saja, na mun istilah Se maphore digunakan juga dala m pe mrogra man, sinyal pada jalur re l kereta, dan Se maphore line. Sistem Se maphore bendera menggunakan dua tongkat pendek dengan bendera persegi, di mana orang yang me la kukan Se maphore mengirim dan menerima pesan dalam bentuk huruf atau angka.Satu tangan masing -masing me megang sebuah bendera, kemudian direntangkan dalam delapan arah.Bendera yang digunakan


(62)

Jurnal Tugas Akhir

berukuran 45c m x 45cm yang ditempel pada tongkat pendek.Warna pada bendera dibedakan berdasarkan tempat sinyal dikirim (laut atau daratan).Di laut, bendera berwarna merah dan kuning, sedangkan di darat, bendera berwarna putih dan biru.

Ga mbar 1 Kode Se maphore Bendera Sumber: www.bra ingle.co m

Untuk membuat kode angka, sebelum memulai kode harus diawali dengan kode “Numbers”, dan jika ingin

ke mbali me mbuat kode huruf, ma ka harus me mbuat kode “Letters” (lihat Gambar 1).

2.2 Perangkat Keras

Dala m pembuatan perangkat keras pelatihan bahasa Semaphore bendera, digunakan beberapa komponen dala m perancangannya.

2.2.1 Module Ar duino Due milanove dengan ATMeg a328

Ga mbar 2 Arduino Due milanove dengan ATMega328 Sumber: arduino.cc

Arduino Duemilanove (lihat Ga mba r 2) adalah sebuah modul yang menggunakan microcontroller AVR ATMega328. Modul in i me miliki 14 pin input/output digital (6 d iantaranya dapat digunakan sebagai Pulse Width Modulation atau PWM), 6 input analog, sebuah kristal osilator 16MHz, koneksi serial RS232, dan tombol re set (lihat Tabel 1).


(63)

Jurnal Tugas Akhir

Tabel 1 Spesifikasi modul Arduino Due milanove denganATMega328

Microcontroller ATMega 328

Tegangan Operasi 5V

Tegangan Input (reko mendasi) 7-12V

Tegangan Input (batas) 6-20V

Pin Digital I/O 14 (6 pin dapat digunakan sebagai PWM output)

Pin Input Analog 6 (A 0-A5)

Arus DC per Pin I/O 40mA

Arus DC untuk Pin 3.3V 50mA

Flash Memory 32KB (2KB untuk bootloader)

SRAM 2KB

EEPROM 1KB

Clock Speed 16MHz

Sumber: http://arduino.cc/en/Main/arduinoBoardDuemilanove

2.2.2 LCD 16x2

Liquid Crystal Display atau disebut LCD (lihat Ga mbar 3) adalah sebuah alat display yang

menggunakan elekt roda dan filter terpolarisasi untuk me milih pixel mana yang akan dita mpilkan dan tidak dita mpilkan.

Ga mbar 3 LCD 16x2 JHD162A Sumber: pribadi

2.2.3 IC HEF4094

HEF4094 (lihat Ga mbar 4) adalah sebuah Integrated Circuit (IC) yang berfungsi sebagai 8-stage

serial shift register.IC ini dapat menerima input data serial dan menjadikannya output data

paralel.

Ga mbar 4 IC HEF4094 Sumber: pribadi

2.2.4 Keypad 3x4

Keypad (lihat Ga mbar 5) me rupakan sekumpulan to mbol-to mbol yang tersusun dalam sebuah

blok dan dapat ditemukan pada hamp ir se mua k eyboard komputer dan me mungkinkan untuk meng-input informasi nu merik maupun huruf.

Ga mbar 5 Keypad 3x4 Sumber: pribadi

2.2.5 Resistor

Resistor (lihat Ga mbar 6) digunakan sebagai penahan arus listrik dan merupakan salah satu

ko mponen yang paling sering digunakan.Besar tahanan dalam sebuah resistor ditentukan dari ju mlah ge lang dan warna gelang tersebut.


(64)

Jurnal Tugas Akhir

2.2.6 LED

Light Emitting Diode atau LED (lihat Ga mbar 7) adalah sumber cahaya semikonduktor dan

banyak digunakan pada berbagai peralatan ele ktronik.

Ga mbar 7 Red LED Sumber: pribadi

2.2.7 Pote nsiome ter

Potensiometer (lihat Ga mbar 8) adalah resistor tiga terminal dengan sambungan geser yang me mbentuk pe mbagi tegangan yang dapat diatur. Dala m penggunaannya, potensiometer dapat digambarkan sebagai dua buah resistor yang disusun secara seri dengan tegangan output diambil di antara dua resistor tersebut. Dalam perancangan alat, digunakan potensiometer dengan besaran 10K ohm.

Ga mbar 8 Potensiometer 10K ohm Sumber: pribadi

Potensiometer digunakan sebagai pengatur tingkat keta ja man ga mbar (contrast) pada LCD dengan tegangan maksimu m 5V.

2.3 Perangkat Lunak

Dala m pe mbuatan perangkat keras pelatihan bahasa Semaphore, digunakan perangkat lunak Arduino IDE0022 (lihat Ga mbar 9) yang berfungsi sebagai pengunggah source code dari PC ke modul Arduino.

Ga mbar 9 Ta mp ilan Arduino IDE0022 Sumber: pribadi


(65)

Jurnal Tugas Akhir

III. Pe rancangan

3.1 Perancangan Perangkat Keras

Dala m pe mbuatan perangkat keras pelatihan bahasa Semaphore bendera, terdapat beberapa rancangan ko mponen.

3.1.1 Diagram Blok

LCD 16x2 JHD162A

Keypad 3x4 HEF4094

Module Arduino LED

Ga mbar 10 Diagra m Blok Sumber: pribadi

Secara garis besar, diagra m blo k (lihat Ga mbar 10) mengga mbarkan k eypad yang digunakan sebagai penerima input yang kemudian diproses oleh modul Arduino. Hasil eksekusi akan ditamp ilkan pada LCD dala m bentuk huruf / angka. Pada mode “Practice”, huruf/angka yang diinputkan akan ditampilkan pada LED. Pada mode “Test” dan “Exam”, alat akan mengha-silkan soal random yang dita mpilkan pada LED.

3.1.2 Skematik

Dala m perancangan alat, ske matik yang digunakan tampak seperti pada Ga mba r 11.LC D yang digunakan berukuran 16 kolo m dan 2 baris.LCD d igunakan untuk mena mpilkan panduan latihan,

input, dan teks.IC HEF4094 digunakan untuk mengurangi ju mlah pin yang dibutuhkan LCD dari 7 pin (RS, R/W, Enable, D4-D7) men jadi 3 pin pada Arduino.

Ga mbar 11 Ske mat ik Sumber: pribadi

3.2 Perancangan Perangkat Lunak

Dala m pe mbuatan perangkat keras pelatihan bahasa Semaphore bendera, terdapat tiga mode, yaitu: 1. Practice Mode

Dala m mode ini, input berupa huruf / angka akan dita mpilkan kode Se maphore benderanya pada LED. 2. Test Mode

Dala m mode in i, a lat akan me mberikan soal random. Jika soal dija wab dengan benar, ma ka pada LCD

akan tampil “Correct!”, jika salah maka akan tampil “Wrong!”. Tiga kesempatan akan diberikan jika

jawaban salah, ke mudian alat a kan me mbe rikan soal random berikutnya. 3. Exa m Mode

Dala m mode ini, alat akan me mbe rikan sepuluh soal random berupa huruf / angka yang ditampilkan pada LED. Pada akhir mode, ju mlah jawaban benar dan salah akan dihitung, lalu ditampi lkan pada

LCD.


(66)

Jurnal Tugas Akhir

Start

Include library; Create lcd object;

Create keypad object; Char letter;

Setup

Loop

Stop

Ga mbar 12Startup Flowchart Sumber: pribadi

Ketika program dimu lai (lihat Ga mba r 12), library Keypad dan LCD3Wires akan dipanggil, dan konfigurasi pin akan dilaku kan sebagai output / input (lihat Ga mbar 13).

Setup

Initialize lcd; randomSeed(analog

Read(A0))); Set pin mode;

Return

Ga mbar 13Sub Function Setup Sumber: pribadi

Setelah in isialisasi k eypad dan LCD, pilihan modeakan dita mpilkan, dan program akan menunggu input dari pilihan tersebut (lihat Ga mbar 14).

getMode

Clear LCD; LCD display mode;

Char init_key;

Input keypad

Init_key = keypad; Delay 100ms;

init_key = 1 || init_key = 2 || init_key = 3 ?

N

Return init_key Y


(67)

Jurnal Tugas Akhir

Loop

Clear LCD; LCD display startup

text; Char mode =

getMode();

getMode

mode = 1 ? N mode = 2 ? N mode = 3 ?

Clear LCD; LCD display Practice Mode; Delay 2000ms; practiceMode();

Y

practiceMode

Clear LCD; LCD displa Test

Mode; Delay 2000ms;

testMode();

testMode

Clear LCD; LCD displa E am

Mode; Delay 2000ms; examMode(); examMode Y Y N

Ga mbar 15Sub Function Loop Sumber: pribadi

Setelah mode dip ilih, maka sub functionmodeakan dipanggil sesuai dengan pilihan (lihat Ga mbar 15). Mode 1 adalah Practice Mode, mode 2 ada lah Test Mode, dan mode 3 adalah Test Mode.

Pada Practice Mode dan Test Mode, programakan mengulang latihan terus -menerus hingga tombol reset pada Arduino ditekan. Pada Exa m Mode, ju mlah soal dibatasi sebanyak sepuluh buah.

IV. Pengamatan

Dari hasil percobaan yang dilakukan terhadap perangkat keras pelatihan bahasa Semaphore, didapatkan hasil pengamatan sebagai berikut:

Tabel 2 Percobaan 1 Startup Text

Test Case Hasil yang Diharapkan Status

Ketika a lat menyala, mena mpilkan startuptext pada LCD (Ga mbar 16).

Alat mena mpil-kan startup text pada LCD. Berhasil Sumber: Pribadi

Ganbar 16Startup Text Sumber: pribadi

Tabel 3 Percobaan 2 InputMode Latihan

Test Case Hasil yang Diharapkan Status

Program tidak akan lanjut jika pengguna

belum me masukkan mode (Ga mbar 17).

Program akan menunggu input yang tepat dari

pengguna.

Berhasil Sumber: Pribadi


(68)

Jurnal Tugas Akhir

Ga mbar 17Input Mode Latihan Sumber: pribadi

Tabel 4 Percobaan 3 Mode Angka

Test Case Hasil yang Diharapkan Status

Dala m mode huruf, pengguna dapat mengganti ke mode angka dengan menekan

tombol „0‟ (Gambar 18).

Mode angka dapat digunakan setelah menekan

„0‟. Berhasil

Sumber: Pribadi

Ganbar 18Mode Angka Sumber: pribadi

Tabel 5 Percobaan 4 Mode Huruf

Test Case Hasil yang Diharapkan Status

Dala m mode angka, pengguna dapat mengganti ke mode huruf dengan menekan

tombol „0‟ dua kali (Gambar 19).

Mode huruf dapat digunakan setelah menekan

„0‟ dua kali. Berhasil

Sumber: Pribadi

Ganbar 19Mode huruf Sumber: pribadi


(69)

Jurnal Tugas Akhir

Tabel 6 Percobaan 5 Input Huruf dan Angka

Test Case Hasil yang Diharapkan Status

Dala m setiap mode, pengguna dapat

menginput satu huruf/angka saja (Ga mbar 20).

Dala m setiap mode, hanya dapat menginput satu huruf / angka saja.

Berhasil Sumber: Pribadi

Ganbar 20Input Huruf dan Angka Sumber: pribadi

Tabel 7 Percobaan 6 Pract ice Mode

Test Case Hasil yang Diharapkan Status

Dala m Practice Mode, jika pengguna telah me mbe rikan input dan menekan to mbol

„exe.‟, maka hasilnya akan ditampilkan pada

LED (Ga mbar 21).

LED mena mpilkan hasil yang sesuai dengan input pengguna.

Berhasil

Sumber: Pribadi

Ganbar 21 Practice Mode Sumber: pribadi

Tabel 8 Percobaan 7 Test Mode dan Exa m Mode Soa l Random

Test Case Hasil yang Diharapkan Status

Dala m Test Mode dan Exa m Mode, alat me mbe rikan soal random (Ga mbar 22).

Alat me mberikan soal random. Berhasil Sumber: Pribadi

Ganbar 22 Test Mode dan Exa m Mode Soal Random Sumber: pribadi


(70)

Jurnal Tugas Akhir

Tabel 9 Percobaan 8 Exa m Mode Ke mba li ke Menu Uta ma

Test Case Hasil yang Diharapkan Status

Dala m Exa m Mode, setelah LCD mena mp ilkan ju mlah ja waban benar dan salah, alat akan menunggu input apapun untuk ke mbali ke menu utama (Ga mba r 23).

Alat menunggu input apapun untuk ke mba li ke menu uta ma.

Berhasil

Sumber: Pribadi

Ganbar 23 Exa m Mode Ke mbali ke Menu Uta ma Sumber: pribadi

Tabel 10 Percobaan 9 Practice dan Test Mode Kembali ke Menu Uta ma

Test Case Hasil yang Diharapkan Status

Dala m Practice Mode dan Test Mode, jika tombol reset d itekan a kan ke mba li ke menu utama (Ga mbar 24).

Ke mbali ke menu uta ma jika to mbol reset ditekan.

Berhasil

Sumber: Pribadi

Ganbar 24 Practice dan Test Mode Kembali ke Menu Uta ma Sumber: pribadi

V. Kesimpulan dan Saran

5.1 Kesimpulan

Kesimpulan dari Tugas Akhir yang telah dilaku kan adalah:

1. Perangkat ke ras pelatihan bahasa Semaphore bendera telah berhasil dibuat.

2. Dengan adanya tiga jenis latihan, pembelaja ran bahasa Semaphore bendera dapat dilakukan dengan lebih bervariasi.

5.2 Saran

Untuk pelatihan bahasa Semaphore bendera dengan tingkat kesulitan yang lebih tinggi, d isarankan agar alat dapat menerima input / me mberikan soal berupa ka limat. Akan tetapi, untuk me mungkinkan ha l ini ma ka diperlukan LCD dengan jumlah kolo m dan baris yang lebih banyak.


(71)

Jurnal Tugas Akhir

Daftar Pustaka

1. Arduino Severino Manual. 2008. Arduino.

2. Darma wan, Aan. Work shop Arduino. 2012. Te knik Ele ktro Maranatha.

3. Halliday, Resnick, Walke r. Fundamentals of Physics. 2001. John Wiley & Sons, Inc. 4. HEF4094 Product Data Sheet. 2010. NXP B.P.

5. JHD162A Series. 2000. Sunro m. 6. http://arduino.cc.29 Juli 2012.

7. http://arduino.cc/en/Tutorial/ Liquid Crystal.29 Juli 2012. 8. http://arduino.cc/playground/Code/LCD3wires.29 Ju li 2012. 9. http://en.wikipedia.org/wiki/Flag_semaphore.29 Juli 2012. 10. http://en.wikipedia.org/wiki/Se maphore.29 Juli 2012.

11. http://www.co mputerhope.com/jargon/k/keypad.htm.29 Ju li 2012. 12. http://www.kpsec.freeuk.co m/co mponents/led.htm.29 Juli 2012. 13. http://www.mob ileburn.co m/defin ition.jsp?term=LCD.29 Ju li 2012.

14. http://www.radio-e lectronics.com/in fo/data/semicond/leds -light-e mitting-diodes/characteristics.php.29 Juli 2012.


(72)

DAFTAR PUSTAKA

1. Arduino Severino Manual. 2008. Arduino.

2. Darmawan, Aan. Workshop Arduino. 2012. Teknik Elektro Maranatha.

3. Halliday, Resnick, Walker. Fundamentals of Physics. 2001. John Wiley &

Sons, Inc.

4. HEF4094 Product Data Sheet. 2010. NXP B.P.

5. JHD162A Series. 2000. Sunrom.

6. http://arduino.cc. 29 Juli 2012.

7. http://arduino.cc/en/Tutorial/LiquidCrystal. 29 Juli 2012.

8. http://arduino.cc/playground/Code/LCD3wires. 29 Juli 2012.

9. http://en.wikipedia.org/wiki/Flag_semaphore. 29 Juli 2012.

10.http://en.wikipedia.org/wiki/Semaphore. 29 Juli 2012.

11.http://www.computerhope.com/jargon/k/keypad.htm. 29 Juli 2012.

12.http://www.kpsec.freeuk.com/components/led.htm. 29 Juli 2012.

13.http://www.mobileburn.com/definition.jsp?term=LCD. 29 Juli 2012.

14.http://www.radio-electronics.com/info/data/semicond/leds-


(1)

Loop

Clear LCD; LCD display startup

text; Char mode =

getMode();

getMode

mode = 1 ? N mode = 2 ? N mode = 3 ?

Clear LCD; LCD display Practice Mode; Delay 2000ms; practiceMode();

Y

practiceMode

Clear LCD; LCD displa Test

Mode; Delay 2000ms;

testMode();

testMode

Clear LCD; LCD displa E am

Mode; Delay 2000ms; examMode(); examMode Y Y N

Ga mbar 15Sub Function Loop Sumber: pribadi

Setelah mode dip ilih, maka sub functionmodeakan dipanggil sesuai dengan pilihan (lihat Ga mbar 15). Mode 1 adalah Practice Mode, mode 2 ada lah Test Mode, dan mode 3 adalah Test Mode.

Pada Practice Mode dan Test Mode, programakan mengulang latihan terus -menerus hingga tombol reset pada Arduino ditekan. Pada Exa m Mode, ju mlah soal dibatasi sebanyak sepuluh buah.

IV. Pengamatan

Dari hasil percobaan yang dilakukan terhadap perangkat keras pelatihan bahasa Semaphore, didapatkan hasil pengamatan sebagai berikut:

Tabel 2 Percobaan 1 Startup Text

Test Case Hasil yang Diharapkan Status Ketika a lat menyala, mena mpilkan startuptext

pada LCD (Ga mbar 16).

Alat mena mpil-kan startup text pada LCD. Berhasil

Sumber: Pribadi

Ganbar 16Startup Text Sumber: pribadi


(2)

Ga mbar 17Input Mode Latihan Sumber: pribadi

Tabel 4 Percobaan 3 Mode Angka

Test Case Hasil yang Diharapkan Status Dala m mode huruf, pengguna dapat

mengganti ke mode angka dengan menekan

tombol „0‟ (Gambar 18).

Mode angka dapat digunakan setelah menekan

„0‟. Berhasil

Sumber: Pribadi

Ganbar 18Mode Angka Sumber: pribadi

Tabel 5 Percobaan 4 Mode Huruf

Test Case Hasil yang Diharapkan Status Dala m mode angka, pengguna dapat

mengganti ke mode huruf dengan menekan

tombol „0‟ dua kali (Gambar 19).

Mode huruf dapat digunakan setelah menekan

„0‟ dua kali. Berhasil

Sumber: Pribadi

Ganbar 19Mode huruf Sumber: pribadi


(3)

Tabel 6 Percobaan 5 Input Huruf dan Angka

Test Case Hasil yang Diharapkan Status Dala m setiap mode, pengguna dapat

menginput satu huruf/angka saja (Ga mbar 20).

Dala m setiap mode, hanya dapat menginput satu huruf / angka saja.

Berhasil Sumber: Pribadi

Ganbar 20Input Huruf dan Angka Sumber: pribadi

Tabel 7 Percobaan 6 Pract ice Mode

Test Case Hasil yang Diharapkan Status Dala m Practice Mode, jika pengguna telah

me mbe rikan input dan menekan to mbol

„exe.‟, maka hasilnya akan ditampilkan pada

LED (Ga mbar 21).

LED mena mpilkan hasil yang sesuai dengan input pengguna.

Berhasil

Sumber: Pribadi

Ganbar 21 Practice Mode Sumber: pribadi

Tabel 8 Percobaan 7 Test Mode dan Exa m Mode Soa l Random

Test Case Hasil yang Diharapkan Status Dala m Test Mode dan Exa m Mode, alat

me mbe rikan soal random (Ga mbar 22).

Alat me mberikan soal random. Berhasil


(4)

Tabel 9 Percobaan 8 Exa m Mode Ke mba li ke Menu Uta ma

Test Case Hasil yang Diharapkan Status Dala m Exa m Mode, setelah LCD

mena mp ilkan ju mlah ja waban benar dan salah, alat akan menunggu input apapun untuk ke mbali ke menu utama (Ga mba r 23).

Alat menunggu input apapun untuk ke mba li ke menu uta ma.

Berhasil

Sumber: Pribadi

Ganbar 23 Exa m Mode Ke mbali ke Menu Uta ma Sumber: pribadi

Tabel 10 Percobaan 9 Practice dan Test Mode Kembali ke Menu Uta ma

Test Case Hasil yang Diharapkan Status Dala m Practice Mode dan Test Mode, jika

tombol reset d itekan a kan ke mba li ke menu utama (Ga mbar 24).

Ke mbali ke menu uta ma jika to mbol reset ditekan.

Berhasil

Sumber: Pribadi

Ganbar 24 Practice dan Test Mode Kembali ke Menu Uta ma Sumber: pribadi

V. Kesimpulan dan Saran

5.1 Kesimpulan

Kesimpulan dari Tugas Akhir yang telah dilaku kan adalah:

1. Perangkat ke ras pelatihan bahasa Semaphore bendera telah berhasil dibuat.

2. Dengan adanya tiga jenis latihan, pembelaja ran bahasa Semaphore bendera dapat dilakukan dengan

lebih bervariasi.

5.2 Saran

Untuk pelatihan bahasa Semaphore bendera dengan tingkat kesulitan yang lebih tinggi, d isarankan agar alat dapat menerima input / me mberikan soal berupa ka limat. Akan tetapi, untuk me mungkinkan ha l ini ma ka diperlukan LCD dengan jumlah kolo m dan baris yang lebih banyak.


(5)

Daftar Pustaka

1. Arduino Severino Manual. 2008. Arduino.

2. Darma wan, Aan. Work shop Arduino. 2012. Te knik Ele ktro Maranatha.

3. Halliday, Resnick, Walke r. Fundamentals of Physics. 2001. John Wiley & Sons, Inc. 4. HEF4094 Product Data Sheet. 2010. NXP B.P.

5. JHD162A Series. 2000. Sunro m. 6. http://arduino.cc.29 Juli 2012.

7. http://arduino.cc/en/Tutorial/ Liquid Crystal.29 Juli 2012. 8. http://arduino.cc/playground/Code/LCD3wires.29 Ju li 2012. 9. http://en.wikipedia.org/wiki/Flag_semaphore.29 Juli 2012. 10. http://en.wikipedia.org/wiki/Se maphore.29 Juli 2012.

11. http://www.co mputerhope.com/jargon/k/keypad.htm.29 Ju li 2012. 12. http://www.kpsec.freeuk.co m/co mponents/led.htm.29 Juli 2012. 13. http://www.mob ileburn.co m/defin ition.jsp?term=LCD.29 Ju li 2012.

14. http://www.radio-e lectronics.com/in fo/data/semicond/leds -light-e mitting-diodes/characteristics.php.29 Juli


(6)

DAFTAR PUSTAKA

1. Arduino Severino Manual. 2008. Arduino.

2. Darmawan, Aan. Workshop Arduino. 2012. Teknik Elektro Maranatha.

3. Halliday, Resnick, Walker. Fundamentals of Physics. 2001. John Wiley &

Sons, Inc.

4. HEF4094 Product Data Sheet. 2010. NXP B.P.

5. JHD162A Series. 2000. Sunrom.

6. http://arduino.cc. 29 Juli 2012.

7. http://arduino.cc/en/Tutorial/LiquidCrystal. 29 Juli 2012.

8. http://arduino.cc/playground/Code/LCD3wires. 29 Juli 2012.

9. http://en.wikipedia.org/wiki/Flag_semaphore. 29 Juli 2012.

10.http://en.wikipedia.org/wiki/Semaphore. 29 Juli 2012.

11.http://www.computerhope.com/jargon/k/keypad.htm. 29 Juli 2012.

12.http://www.kpsec.freeuk.com/components/led.htm. 29 Juli 2012.

13.http://www.mobileburn.com/definition.jsp?term=LCD. 29 Juli 2012.

14.http://www.radio-electronics.com/info/data/semicond/leds-