Modul Sistem Terbenam Rev. 02
Modul Sistem Terbenam Rev. 02
Tujuan :
1. Mahasiswa mampu memahami board mikrokontroler Arduino
2. Mahasiswa mampu memprogram mikrokontroler Arduino
3. Mahasiswa mampu membuat aplikasi dengan mikrokontroler Arduino
Teori :
Arduino Uno R3 adalah papan pengembangan (development board) mikrokontroler yang
berbasis chip ATmega328P. Disebut sebagai papan pengembangan karena board ini
memang berfungsi sebagai arena prototyping sirkuit mikrokontroller. Dengan
menggunakan papan pengembangan, anda akan lebih mudah merangkai rangkaian
elektronika mikrokontroller dibanding jika anda memulai merakit ATMega328 dari awal
di breadboard.
Arduino Uno R3 dengan ATmega328P mempunyai 14 digital input/output (6 di
antaranya dapat digunakan untuk PWM output), 6 analog input, 16 Mhz crystal oscillator,
USB connection, power jack, ICSP header, dan reset button. Skema Arduino Uno R3
didasarkan pada blog diagram dari mikrokontroler jenis AVR ATmega328. Komponen
utama di dalam papan Arduino adalah sebuah mikrokontroler 8 bit dengan merek ATmega
yang dibuat oleh perusahaan Atmel Corporation. Skema Arduino Uno R3 dapat dilihat
pada gambar 1.2 dan untuk melihat inti dari pembentuk Arduino bisa dilihat skema dari
ATMega328 pada gambar 1.1
Buka contoh program LED Blink: File > Examples > 1.Basics > Blink.
Detail Info
ATmega328P
5V
7V - 12V
6V - 20V
14 buah, 6 diantaranya menyediakan
PWM
6 buah
20 mA
50 mA
32 KB, 0.5 KB telah digunakan untuk
bootloader
2 KB
EEPROM
Clock speed
Dimensi
Berat
1 KB
16 Mhz
68.6 mm x 53.4 mm
25 g
Proteksi
Development board Arduino Uno R3 telah dilengkapi dengan polyfuse yang dapat direset
untuk melindungi port USB komputer/laptop anda dari korsleting atau arus berlebih.
Meskipun kebanyakan komputer telah memiliki perlindungan port tersebut didalamnya
namun sikring pelindung pada Arduino Uno memberikan lapisan perlindungan tambahan
yang membuat anda bisa dengan tenang menghubungkan Arduino ke komputer anda. Jika
lebih dari 500mA ditarik pada port USB tersebut, sirkuit proteksi akan secara otomatis
memutuskan hubungan, dan akan menyambung kembali ketika batasan aman telah
kembali.
Power Supply
Board Arduino Uno dapat ditenagai dengan power yang diperoleh dari koneksi kabel
USB, atau via power supply eksternal. Pilihan power yang digunakan akan dilakukan
secara otomatis
External power supply dapat diperoleh dari adaptor AC-DC atau bahkan baterai, melalui
jack DC yang tersedia, atau menghubungkan langsung GND dan pin Vin yang ada di
board. Board dapat beroperasi dengan power dari external power supply yang memiliki
tegangan antara 6V hingga 20V. Namun ada beberapa hal yang harus anda perhatikan
dalam rentang tegangan ini. Jika diberi tegangan kurang dari 7V, pin 5V tidak akan
memberikan nilai murni 5V, yang mungkin akan membuat rangkaian bekerja dengan tidak
sempurna. Jika diberi tegangan lebih dari 12V, regulator tegangan bisa over heat yang
pada akhirnya bisa merusak pcb. Dengan demikian, tegangan yang di rekomendasikan
adalah 7V hingga 12V
Beberapa pin power pada Arduino Uno :
GND. Ini adalah ground atau negatif.
Vin. Ini adalah pin yang digunakan jika anda ingin memberikan power langsung
ke board Arduino dengan rentang tegangan yang disarankan 7V - 12V
Pin 5V. Ini adalah pin output dimana pada pin tersebut mengalir tegangan 5V
yang telah melalui regulator
3V3. Ini adalah pin output dimana pada pin tersebut disediakan tegangan 3.3V
yang telah melalui regulator
IOREF. Ini adalah pin yang menyediakan referensi tegangan mikrokontroller.
Biasanya digunakan pada board shield untuk memperoleh tegangan yang sesuai,
apakah 5V atau 3.3V
Memori
Chip ATmega328 pada Arduino Uno R3 memiliki memori 32 KB, dengan 0.5 KB dari
memori tersebut telah digunakan untuk bootloader. Jumlah SRAM 2 KB, dan EEPROM 1
KB, yang dapat di baca-tulis dengan menggunakan EEPROM library saat melakukan
pemrograman.
mengset
pin
13
sebagai
Loop ()
Setelah melakukan fungsi setup() maka secara langsung akan melakukan fungsi loop()
secara berurutan dan melakukan instruksi-instruksi yang ada dalam fungsi loop().
void loop()
{
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(1000);
}
Function
Function (fungsi) adalah blok pemrograman yang mempunyai nama dan mempunyai
statement yang akan di eksekusi ketika function di panggil. Fungsi void setup() dan void
loop() telah di bahas di atas dan pembuatan fungsi yang lain akan di bahas selanjutnya.
Cara pendeklarasian function
type functionName(parameters)
{
// Statement;
}
Contoh:
int delayVal()
{
int v;
//Mendefinisikan variabel
v =analogRead(pot); //konversi 0-1023 ke 0-255
v/=4;
//Menjalankan
fungsi
aritmetik
return v;
//return nilai v
}
{ } curly braces
Curly brace mendefinisikan awal dan akhir dari sebuah blok fungsi. Apabila ketika
memprogram dan progremer lupa memberi curly brace tutup maka ketika di compile akan
terdapat laporan error.
; Semicolon
Semicolon harus di berikan pada setiap statement program yang kita buat ini merupakan
pembatas setiap statement program yang di buat.
/*...*/ blok comment
Semua statement yang di tulis dalam block comments tidak akan di eksekusi dan tidak
akan di compile sehingga tidak mempengaruhi besar program yang di buat untuk di
masukan dalam board arduino.
// Line Comments
Sama halnya dengan block comments, line coments pun sama hanya saja yang di jadikan
komen adalh perbaris.
Variable
Variable adalah sebuah penyimpan nilai yang dapat di gunakan dalam program.Variable
dapat di rubah sesuai dengan instruksi yang kita buat.Ketika mendeklarisikan variable
harus di ikut sertakan type variable serta nilai awal variable.
Type variableName
Contoh
Int inputVariable
//mendefinisikan
dengan nilai awal
= 0;
= 0;
sebuah
0
variable
bernama
inputVariable
inputVariable = analogRead(2);
// menyimpan nilai yang ada di analog pin 2 ke inputVariable
Variable scope
Sebuah variable dapat di deklarasikan pada awal program sebelum void setup(), secara
local di dalam sebuah function, dan terkadang di dalam sebuah block statement
pengulangan. Sebuah variable global hanya satu dan dapat di gunakan pada semua block
function dan statement di dalam program. Variable global di deklarasikan pada awal
program sebelum function setup(). Sebuah variable local di deklarasikan di setiap block
function atau di setiap block statement pengulangan dan hanya dapat di gunakan pada
block yang bersangkutan saja.
Contoh penggunaan:
int value; //valueadalah variable global dan dapat
di gunakan pada semua block function
void setup()
{
// no setup needed
}
void loop()
{
for (int i=0; i<20;)
// 'i' hanya dapat di gunakan dalam pengulangan
saja
{
i++;
}
float f; // 'f' sebagai variable local
}
Tipe Data
Byte
type byte dapat menyimpan 8-bit nilai angka bilangan asli tanapa koma. Byte memiliki
range 0 255.
Byte byteVariable = 180; // mendeklarasikan biteVariable sebagai type byte
Integer
Integer adalah tipe data yang utama untuk menyimpan nilai bilangan bulat tanpa
koma.Penyimpanan integer sebesar 16- bit dengan range 32.767 sampai -32.768.
Int
integerVariable
=
1600;//mendeklarasikan
integerVariable sebagai type integer
Long Integer
Perluasan ukuran untuk long integer, penyimpanan long integer sebesar 32-bit dengan
range 2.147.483.647 sampai - 2.147.483.648 Long longVariable = 500000; //
mendeklarasikan longVariable sebagai type long .
Float
Float adalah tipe data yang dapat menampung nilai decimal, float merupakan penyimpan
yang lebih besar dari integer dan dapat menyimpan sebesar 32-bit dengan range
3.4028235E+38 sampai -3.4028235E+38
Float
floatVariable
=
3.14;
//
floatVariable sebagai type float
mendeklarasikan
Array
Array adalah kumpulan nilai yang dapat di akses dengan index number, nilai yang
terdapat dalam array dapat di panggil
dengan cara menuliskan nama array dan index number. Array dengan index 0 merupakan
nilai pertama dari array.Array
perlu di deklarasikan dan kalau perlu di beri nilai sebelum di gunakan.
Int arraysName[] = {nilai0, nilai1, nilai2 . . . }
Contoh penggunaan array:
Int arraySaya[] = {2,4,6,8,10}
x = arraySaya[5]; // x sekarang sama dengan 10
Operator Aritmatika
Operator aritmatik terdiri dari penjumlahan, pengurangan, pengkalian, dan pembagian.
a
b
e
g
=
=
=
=
a
c
f
p
*
/
b
d
x
v
dalam menggunakan operan aritmatik harus hati-hati dalam menentukan tipe data yang
digunakan jangan sampai terjadi overflow range data.
Compound Assignments
Compound assignments merupakan kombinasi dari aritmatic dengan sebuah variable.Ini
biasanya dipakai pada pengulangan.
x++; // melakukan operasi x = x + 1
x--; // melakukan operasi x = x - 1
x+=y; // melakukan operasi x = x + y
x = x y
x = x * y
x = x / y
Comparison
Statement ini membadingkan dua variable dan apabila terpenuhi akan bernilai 1 atau true.
Statement ini banyak digunakan dalam operator bersyarat.
x
x
x
x
x
x
== y; // x sama dengan y
!= y; // x tidak sama dengan y
> y; // x lebih besar y
< y; // x lebih kecil y
>= y; // x lebih besar atau sama dengan y
<= y; // x lebih kecil atau sama dengan y
Logic Operator
operator logical digunakan untuk membandingkan 2 expresi dan mengembalikan nilai
balik benar atau salah tergantung dari operator yang di gunakan. Terdapat 3 operator
logical AND,OR, dan NOT, yang biasanya di gunakan pada if statement.
Contoh penggunaan:
a. Logical AND
If ( x> 0 && x < 5) // bernilai benar apabila kedua
operator pembanding terpenuhi
b. Logical OR
If ( x> 0 || y > 0)// bernilai benar apabila salah
satu dari operator pembanding
terpenuhi
c. Logical NOT
If ( !x > 0
operator salah
)//
benilai
benar
apabila
ekspresi
Konstanta
Arduino mempunyai beberapa variable yang sudah di kenal yang kita sebut konstanta.Ini
membuat memprogram lebih mudah untuk di baca.Konstanta di kelasifikasi berdasarkan
group.
True/False
Merupakan konstanta Boolean yang mendifinisikan logic level.False mendifinisikan 0 dan
True mendifinisikan 1.
If ( b == TRUE )
{
//doSomething
}
HIGH / LOW
Konstanta ini mendifinisikan aktifitas pin HIGH atau LOW dan di gunakan ketika
membaca dan menulis ke digital pin. HIGH di definisikan sebagai 1 sedangkan LOW
sebagai 0.
digitalWrite( 13, HIGH );
Input/Output
Konstanta ini digunakan dengan fungsi pinMode() untuk mendifinisikam mode pin digital,
sebagai input atau output
pinMode( 13, OUTPUT );
Flow Control
a. If
If Operator if menguji sebuah kondisi seperti nilai analog sudah berada di bawah nilai
yang kita kehendaki atau belum, apabila terpenuhi maka akan mengeksekusi baris
program yang ada dalam brackets kalau tidak terpenuhi maka akan mengabaikan baris
program yang ada dalam brackets.
If ( someVariable ?? value )
{
//DoSomething;
}
b. If...Else
Operator if...else mengtest sebuah kondisi apabila tidak sesuai dengan kondisi yang
pertama maka akan mengeksekusi baris
program yang ada di else.
If ( inputPin == HIGH )
{
//Laksanakan rencana A;
}
Else
{
//Laksanakan rencana B;
}
For
Operator for digunakan dalam blok pengulangan tertutup.
For ( initialization; condition; expression )
{
//doSomethig;
}
While
Operator while akan terus mengulang baris perintah yang ada dalam bracket sampai
ekspresi sebagai kondisi pengulangan benilai salah.
While ( someVariable ?? value )
{
//doSomething;
}
Do...While
Sama halnya dengan while() hanya saja pada operator Do...while tidak melakukan
pengecekan pada awal tapi di akhir, sehingga otomatis akan melakukan satu kali baris
perintah walaupun pada awalnya sudah terpenuhi.
Do
{
//doSomething;
}
While ( someVariable ?? value );
Digital I/O
Input / Output Digital pada breadboard arduino ada 14, pengalamatnya 0 - 13, ada saat
tertentu I/O 0 dan 1 tidak bisa di gunakan karena di pakai untuk komunikasi serial,
sehingga harus hati-hati dalam pengalokasian I/O.
PinMode(pin,Mode)
Digunakan dalam void setup() untuk mengkonfigurasi pin apakah sebagai Input atau
Output. Arduino digital pins secara default di konfigurasi sebagai input sehingga untuk
merubahnya harus menggunakan operator pinMode(pin, mode).
pinMode (pin, OUTPUT); // mengset pin sebagai output
digitalWrite(pin, HIGH); // pin sebagai source voltage
digitalRead(pin)
membaca nilai dari pin yang kita kehendaki dengan hasil HIGH atau LOW .
Value = digitalRead(pin);// mengset value sama dengan pin
digitalWrite(pin, value)
digunakan untuk mengset pin digital. Pin digital arduino mempunyai 14 ( 0 13 ).
digitalWrite ( pin, HIGH ); // set pin to HIGH
Analog I/O
Input / Ouput analog pada breadboard arduino ada 6 pengalamatnya 0 5
analogRead(pin) Membaca nilai pin analog yang memiliki resolusi 10-bit. Fungsi ini
hanya dapat bekerja pada analog pin (0-5). Hasil dari pembacaan berupa nilai integer
dengan range 0 sampai 1023.
Value = analogRead(pin);
dengan nilai analog pin
analogWrite(pin,value)
mengirimkan nilai analog pada pin analog.
//
mengset
value
sama
lebih panjang dari kaki katoda pada saat masih baru, kemudian kaki katoda pada LED
(Light Emitting Dioda) ditandai dengan bagian body LED yang di papas rata. Kaki anoda
dan kaki katoda pada LED (Light Emitting Dioda) disimbolkan seperti pada gambar
diatas. Pemasangan LED (Light Emitting Dioda) agar dapat menyala adalah dengan
memberikan tegangan bias maju yaitu dengan memberikan tegangan positif ke kaki anoda
dan tegangan negatif ke kaki katoda. Konsep pembatas arus pada dioda adalah dengan
memasangkan resistor secara seri pada salah satu kaki LED (Light Emitting Dioda).
Rangkaian dasar untuk menyalakan LED (Light Emitting Dioda) membutuhkan sumber
tegangan LED dan resistor sebgai pembatas arus seperti pada rangkaian berikut.
Penejlasan Kode :
Kode program tersebut akan membuat LED hidup dan mati secara bergantian, dan akan
diberi waktu jeda dengan memanggil fungsi delay() setelah pengeksekusian.
Mendeklarasikan variabel LED dengan nilai 2:
int LED = 2;
Pada fungsi setup() kita set output arduino sesuai dengan nilai yang ada pada variabel
LED.
void setup() {
pinMode(LED, OUTPUT);
}
pada fungsi loop(), secara berkelanjutan menyalakan LED, tunggu 200 mili detik dan
matikan LED, tunggu 200 mili detik.
void loop(){
// LED ON and wait 200 miliseconds
digitalWrite(LED, HIGH);
delay(200);
// LED OFF and wait 200 miliseconds
digitalWrite(LED, LOW);
delay(200);
}
NEXT JOB : MULTI LED
Untuk membuat multi LED untuk dikendalikan secara bergantian.
Langkah :
1.
2.
3.
4.
5.
6.
Kode Program :
// Declare the LED pin with PWM
int LED = 3;
void setup() {
// Declare the pin for the LED as Output
pinMode(LED, OUTPUT);
}
void loop(){
// Here we will fade the LED from 0 to maximum, 255
for (int i = 0; i < 256; i++){
analogWrite(LED, i);
delay(5);
}
// Fade the LED from maximum to 0
for (int i = 255; i >= 0; i--){
analogWrite(LED, i);
delay(5);
}
}
Konsep PWM
Dengan membuat switching antara LOW dan HIGH dengan kecepatan tinggi, pergantian
tegangan akan nampak jelas pada diagram dibawah.
...
// Here we will fade the LED from 0 to maximum, 255
for (int i = 0; i < 256; i++){
analogWrite(LED, i);
delay(5);
}
...
Kode diatas akan membuat perubahan tegangan yang dikirimkan pada pin PWM, dengan
merubah variabel dari nilai terendah(0) ke nilai maksimum(255). Sehingga efek yang
ditampilkan oleh LED akan dihasilkan cahaya yang semakin terang beriringan dengan
tegangan yang semakin tinggi.
...
// Here we will fade the LED from 0 to maximum, 255
for (int i = 255; i >= 0; i--){
analogWrite(LED, i);
delay(5);
}
int
int
int
int
void setup() {
// Declare the pins as Outputs
pinMode(pinUP, OUTPUT);
pinMode(pinUPR, OUTPUT);
pinMode(pinDWR, OUTPUT);
pinMode(pinDW, OUTPUT);
pinMode(pinDWL, OUTPUT);
pinMode(pinUPL, OUTPUT);
pinMode(pinCT, OUTPUT);
}
void writeNumber(int value){
// First we erase the previous value
digitalWrite(pinUP, HIGH);
digitalWrite(pinUPR, HIGH);
digitalWrite(pinDWR, HIGH);
digitalWrite(pinDW, HIGH);
digitalWrite(pinDWL, HIGH);
digitalWrite(pinUPL, HIGH);
digitalWrite(pinCT, HIGH);
// If we want to write 0
if (value == 0){
digitalWrite(pinUP, HIGH);
digitalWrite(pinUPR, HIGH);
digitalWrite(pinDWR, HIGH);
digitalWrite(pinDW, HIGH);
digitalWrite(pinDWL, HIGH);
digitalWrite(pinUPL, HIGH);
digitalWrite(pinCT, LOW);
}
// If we want to write 1
if (value == 1){
digitalWrite(pinUPR, LOW);
digitalWrite(pinUP, LOW);
digitalWrite(pinCT, LOW);
digitalWrite(pinDWR, LOW);
digitalWrite(pinDW, LOW);
}
// If we want to write 2
if (value == 2){
digitalWrite(pinUPL, LOW);
//digitalWrite(pinCT, LOW);
//digitalWrite(pin, LOW);
digitalWrite(pinDWR, LOW);
//digitalWrite(pinDW, LOW);
}
// If we want to write 3
if (value == 3){
//digitalWrite(pinUP, LOW);
digitalWrite(pinUPL, LOW);
//digitalWrite(pinCT, LOW);
digitalWrite(pinDWL, LOW);
//digitalWrite(pinDW, LOW);
}
}
void loop(){
// A resetting count-down
writeNumber(3);
delay(1000);
/* writeNumber(2);
delay(1000);
writeNumber(1);
delay(1000);
writeNumber(0);
delay(1000);*/
}
Berikut merupakan contoh dari konfigurasi common-anode, dengan asumsi untuk
konfigurasi katode akan berlaku kebalikan, jika dalam anode memiliki nilai LOW dalam
konfigurasi common-anode dirubah menjadi HIGH dan nilai HIGH jadi LOW dalam kode
programnya.
Penjelasan kode :
1. Mendeklarasikan pin untuk setiap kaki pada 7-segment
int
int
int
int
int
int
int
2. Mengkonfigurasikan pemakaian pin pada arduino sesui dengan nilai variabel yang
diberikan.
void setup() {
// Declare the pins as Outputs
pinMode(pinUP, OUTPUT);
pinMode(pinUPR, OUTPUT);
pinMode(pinDWR, OUTPUT);
pinMode(pinDW, OUTPUT);
pinMode(pinDWL, OUTPUT);
pinMode(pinUPL, OUTPUT);
pinMode(pinCT, OUTPUT);
}
if (value == 1){
digitalWrite(pinUPR, LOW);
digitalWrite(pinDWR, LOW);
}
...
4. Dalam fungsi loop() akan mengeksekusi fungsi write dengan parameter yang akan
digunakan untuk konfigurasi LED pada 7-segment.
void loop(){
writeNumber(2);
delay(1000);
writeNumber(1);
delay(1000);
writeNumber(0);
delay(1000);
}
Tampilan akan bertahan dengan memanggil fungsi delay() dengan parameter
1000 yang berarti 1000ms atau 1 detik.
MULTI-SEVEN SEGMENT
TUJUAN :
1. Mahasiswa memahami rangkaian interface mikrokontroller dengan 7 segmen
2. Mahasiswa dapat memahami program Arduino untuk menampilkan data ke 7
segment
3. Mahasiswa memahami beberapa instruksi Arduino dasar, array data dan bitRead.
PERALATAN :
1. Arduino board connected to the computer via USB
2. Breadboard dan kabel jumper
3. 4 x 7-segment
4. Resistors 2201,000 ohm
TEORI :
Percobaan kali ini akan menggunakan 7-segment seri 4 buah atau sering dituliskan 4 x 7segment. Penggunaan multi display ini sama aturannya dengan menggunakan single
display, yaitu seven segment akan menganut common anode da common cathode
tergantung pemberian daya pada konfigurasi pinnya. Untuk konfigurasi Pin untuk tiap
segment harus digunakan mode digit untuk mengatur pengaktifan tiap segment nya.
Dengan mengendalikan digit yang ditampilkan kita bisa kendalikan display meskipun nilai
sudah diberikan. Misal kita sudah definisikan nilai untuk segment ke-2 dengan nilai
desimal 5, tapi ketika kita tidak set segment ke-2 tersebut aktif maka tidak akan
ditampilkan nilai desimal 5 tersebut. Pada penggunaan multi segment hanya akan ada 1
digit yang aktif pada satu waktu, sehingga pengkonfigurasian untuk 4 digit membutuhkan
4 step pemindahan digit dan pemberian nilai.
10
11
(A)
7
(B)
4
(C)
2
(D)
1
(E)
10
(F)
5
(G)
3
(P)
12
(D1)
9
(D2)
A : Pin ArduinoUNO
B : Pin Display
note : Untuk tiap Digit diberikan resistor 1K Ohm
KODE PROGRAM
11
12
8
6
(D3) (D4)
Kode program berikut untuk common anode, yang akan menjalankan penambahan
desimal secara increment dengan menggunakan fungsi millis() yang build in di arduino
IDE.
int
int
int
int
digit1
digit2
digit3
digit4
=
=
=
=
int
int
int
int
int
int
int
segA
segB
segC
segD
segE
segF
segG
1;
2;
3;
4;
5;
6;
7;
=
=
=
=
=
=
=
9; //Display pin 12
10; //Display pin 9
11; //Display pin 8
12; //Display pin 6
//Display
//Display
//Display
//Display
//Display
//Display
//Display
void setup() {
pinMode(segA,
pinMode(segB,
pinMode(segC,
pinMode(segD,
pinMode(segE,
pinMode(segF,
pinMode(segG,
11
7
4
2
1
10
5
OUTPUT);
OUTPUT);
OUTPUT);
OUTPUT);
OUTPUT);
OUTPUT);
OUTPUT);
pinMode(digit1,
pinMode(digit2,
pinMode(digit3,
pinMode(digit4,
}
pin
pin
pin
pin
pin
pin
pin
OUTPUT);
OUTPUT);
OUTPUT);
OUTPUT);
pinMode(13, OUTPUT);
void loop() {
displayNumber(millis()/1000);
}
void displayNumber(int toDisplay) {
#define DISPLAY_BRIGHTNESS 1000
#define DIGIT_ON HIGH
#define DIGIT_OFF LOW
long beginTime = millis();
for(int digit = 4 ; digit > 0 ; digit--) {
//Turn on a digit for a short amount of time
switch(digit) {
case 1:
digitalWrite(digit1,
break;
case 2:
digitalWrite(digit2,
break;
case 3:
digitalWrite(digit3,
break;
case 4:
digitalWrite(digit4,
break;
}
DIGIT_ON);
DIGIT_ON);
DIGIT_ON);
DIGIT_ON);
digitalWrite(segC,
digitalWrite(segD,
digitalWrite(segE,
digitalWrite(segF,
digitalWrite(segG,
break;
SEGMENT_ON);
SEGMENT_ON);
SEGMENT_ON);
SEGMENT_ON);
SEGMENT_OFF);
case 1:
digitalWrite(segA,
digitalWrite(segB,
digitalWrite(segC,
digitalWrite(segD,
digitalWrite(segE,
digitalWrite(segF,
digitalWrite(segG,
break;
SEGMENT_OFF);
SEGMENT_ON);
SEGMENT_ON);
SEGMENT_OFF);
SEGMENT_OFF);
SEGMENT_OFF);
SEGMENT_OFF);
case 2:
digitalWrite(segA,
digitalWrite(segB,
digitalWrite(segC,
digitalWrite(segD,
digitalWrite(segE,
digitalWrite(segF,
digitalWrite(segG,
break;
SEGMENT_ON);
SEGMENT_ON);
SEGMENT_OFF);
SEGMENT_ON);
SEGMENT_ON);
SEGMENT_OFF);
SEGMENT_ON);
case 3:
digitalWrite(segA,
digitalWrite(segB,
digitalWrite(segC,
digitalWrite(segD,
digitalWrite(segE,
digitalWrite(segF,
digitalWrite(segG,
break;
SEGMENT_ON);
SEGMENT_ON);
SEGMENT_ON);
SEGMENT_ON);
SEGMENT_OFF);
SEGMENT_OFF);
SEGMENT_ON);
case 4:
digitalWrite(segA,
digitalWrite(segB,
digitalWrite(segC,
digitalWrite(segD,
digitalWrite(segE,
digitalWrite(segF,
digitalWrite(segG,
break;
SEGMENT_OFF);
SEGMENT_ON);
SEGMENT_ON);
SEGMENT_OFF);
SEGMENT_OFF);
SEGMENT_ON);
SEGMENT_ON);
case 5:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_OFF);
digitalWrite(segC,
digitalWrite(segD,
digitalWrite(segE,
digitalWrite(segF,
digitalWrite(segG,
break;
SEGMENT_ON);
SEGMENT_ON);
SEGMENT_OFF);
SEGMENT_ON);
SEGMENT_ON);
case 6:
digitalWrite(segA,
digitalWrite(segB,
digitalWrite(segC,
digitalWrite(segD,
digitalWrite(segE,
digitalWrite(segF,
digitalWrite(segG,
break;
SEGMENT_ON);
SEGMENT_OFF);
SEGMENT_ON);
SEGMENT_ON);
SEGMENT_ON);
SEGMENT_ON);
SEGMENT_ON);
case 7:
digitalWrite(segA,
digitalWrite(segB,
digitalWrite(segC,
digitalWrite(segD,
digitalWrite(segE,
digitalWrite(segF,
digitalWrite(segG,
break;
SEGMENT_ON);
SEGMENT_ON);
SEGMENT_ON);
SEGMENT_OFF);
SEGMENT_OFF);
SEGMENT_OFF);
SEGMENT_OFF);
case 8:
digitalWrite(segA,
digitalWrite(segB,
digitalWrite(segC,
digitalWrite(segD,
digitalWrite(segE,
digitalWrite(segF,
digitalWrite(segG,
break;
SEGMENT_ON);
SEGMENT_ON);
SEGMENT_ON);
SEGMENT_ON);
SEGMENT_ON);
SEGMENT_ON);
SEGMENT_ON);
case 9:
digitalWrite(segA,
digitalWrite(segB,
digitalWrite(segC,
digitalWrite(segD,
digitalWrite(segE,
digitalWrite(segF,
digitalWrite(segG,
break;
SEGMENT_ON);
SEGMENT_ON);
SEGMENT_ON);
SEGMENT_ON);
SEGMENT_OFF);
SEGMENT_ON);
SEGMENT_ON);
case 10:
digitalWrite(segA, SEGMENT_OFF);
digitalWrite(segB, SEGMENT_OFF);
digitalWrite(segC,
digitalWrite(segD,
digitalWrite(segE,
digitalWrite(segF,
digitalWrite(segG,
break;
}
SEGMENT_OFF);
SEGMENT_OFF);
SEGMENT_OFF);
SEGMENT_OFF);
SEGMENT_OFF);
digit1
digit2
digit3
digit4
=
=
=
=
int
int
int
int
int
int
int
segA
segB
segC
segD
segE
segF
segG
1;
2;
3;
4;
5;
6;
7;
=
=
=
=
=
=
=
9; //Display pin 12
10; //Display pin 9
11; //Display pin 8
12; //Display pin 6
//Display
//Display
//Display
//Display
//Display
//Display
//Display
pin
pin
pin
pin
pin
pin
pin
11
7
4
2
1
10
5
OUTPUT);
OUTPUT);
OUTPUT);
OUTPUT);
OUTPUT);
OUTPUT);
OUTPUT);
pinMode(digit1,
pinMode(digit2,
pinMode(digit3,
pinMode(digit4,
OUTPUT);
OUTPUT);
OUTPUT);
OUTPUT);
}
3. Memulai loop() dengan memanggil fungsi millis() yang akan digunakan sebagai
timer dengan nilai perubahan per miliseconds.
void loop() {
displayNumber(millis()/1000);
}
Dengan script di dalam loop tersebut akan mengkonversi nilai hasil eksekusi fungsi
millis() dibagi 1000 sehingga dihasilkan 1, yang dimanfaatkan sebagai increment
desimal. Karena fungsi millis akan mengembalikan nilai dalam millisecond
dihitung sejak arduino board menyala. Penapungnya harus long integer.
Fungsi displayNumber() akan mengkonfigurasikan nilai sesuai dengan digit yang
harus dihidupkan sesuai dengan nilai desimal yang harus ditampilkan.
Dalam pencahayaan / brightness pada 7-segment
DISPLAY_BRIGHTNESS pada setiap segment nya.
#define DISPLAY_BRIGHTNESS
dengan
mendefinisikan
1000
Nilai yang dapat diberikan dari 1 sampai 5000 dengan status kenyamanan dan konsumsi
daya :
5000 blindingly bright (15.7mA current draw per digit)
2000 shockingly bright (11.4mA current draw per digit)
1000 pretty bright (5.9mA)
500 normal (3mA)
200 dim but readable (1.4mA)
50 dim but readable (0.56mA)
5 dim but readable (0.31mA)
1 dim but readable in dark (0.28mA)
LATIHAN :
Buat konfigurasi yang dibutuhkan untuk menampilkan kode program berikut dalam 4 x 7segment.
//segments
int a = 1;//a
int b = 2;//b
int c = 3;//c
int d = 4;//d
int e = 5;//e
int f = 6;//f
int g = 7;//g
int p = 8;//dot
//digits
int d4 = 9;
int d3 = 10;
int d2 = 11;
int d1 = 12;
//other
int del = 100;
int buttoncount = 0;
int loopcount = 0;
void setup()
{
pinMode(d1, OUTPUT);
pinMode(d2, OUTPUT);
pinMode(d3, OUTPUT);
pinMode(d4, OUTPUT);
pinMode(a, OUTPUT);
pinMode(b, OUTPUT);
pinMode(c, OUTPUT);
pinMode(d, OUTPUT);
pinMode(e, OUTPUT);
pinMode(f, OUTPUT);
pinMode(g, OUTPUT);
pinMode(p, OUTPUT);
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
digitalWrite(p, HIGH);
}
void loop()
{
roulette(2);
delay(500);
zigzag(2);
delay(500);
circles(2);
delay(500);
flash();
delay(1000);
}
void pickDigit(int
{
digitalWrite(d1,
digitalWrite(d2,
digitalWrite(d3,
digitalWrite(d4,
switch(x)
x)
LOW);
LOW);
LOW);
LOW);
{
case 1:
digitalWrite(d1,
break;
case 2:
digitalWrite(d2,
break;
case 3:
digitalWrite(d3,
break;
default:
digitalWrite(d4,
break;
}
HIGH);
HIGH);
HIGH);
HIGH);
}
void clearLEDs()
{
digitalWrite(a,
digitalWrite(b,
digitalWrite(c,
digitalWrite(d,
digitalWrite(e,
digitalWrite(f,
digitalWrite(g,
digitalWrite(p,
}
HIGH);
HIGH);
HIGH);
HIGH);
HIGH);
HIGH);
HIGH);
HIGH);
void roulette(int x)
{
loopcount = 0;
while (loopcount < x)
{
clearLEDs();
digitalWrite(a, LOW);
//digitalWrite(p, LOW);
pickDigit(1);
delay(del);
pickDigit(2);
delay(del);
pickDigit(3);
delay(del);
pickDigit(4);
delay(del);
digitalWrite(a, HIGH);
digitalWrite(f, LOW);
delay(del);
digitalWrite(f, HIGH);
digitalWrite(e, LOW);
delay(del);
digitalWrite(e,
digitalWrite(d,
delay(del);
pickDigit(3);
delay(del);
pickDigit(2);
delay(del);
pickDigit(1);
delay(del);
digitalWrite(d,
digitalWrite(c,
delay(del);
digitalWrite(c,
digitalWrite(b,
delay(del);
digitalWrite(b,
//delay(del);
}
HIGH);
LOW);
HIGH);
LOW);
HIGH);
LOW);
HIGH);
loopcount++;
}
void zigzag(int x)
{
loopcount = 0;
while(loopcount <
{
digitalWrite(a,
pickDigit(1);
delay(del);
pickDigit(2);
delay(del);
pickDigit(3);
delay(del);
pickDigit(4);
delay(del);
digitalWrite(a,
digitalWrite(f,
delay(del);
digitalWrite(f,
digitalWrite(g,
delay(del);
pickDigit(3);
delay(del);
pickDigit(2);
delay(del);
pickDigit(1);
delay(del);
digitalWrite(g,
digitalWrite(c,
x)
LOW);
HIGH);
LOW);
HIGH);
LOW);
HIGH);
LOW);
delay(del);
digitalWrite(c,
digitalWrite(d,
delay(del);
pickDigit(2);
delay(del);
pickDigit(3);
delay(del);
pickDigit(4);
delay(del);
digitalWrite(d,
digitalWrite(e,
delay(del);
digitalWrite(e,
digitalWrite(g,
delay(del);
pickDigit(3);
delay(del);
pickDigit(2);
delay(del);
pickDigit(1);
delay(del);
digitalWrite(g,
digitalWrite(b,
HIGH);
LOW);
HIGH);
LOW);
HIGH);
LOW);
HIGH);
LOW);
delay(del);
clearLEDs();
loopcount++;
}
void circles(int x)
{
loopcount = 0;
while (loopcount < x)
{
digitalWrite(a, LOW);
digitalWrite(b, LOW);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
pickDigit(1);
delay(250);
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(f, HIGH);
digitalWrite(c, LOW);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
pickDigit(2);
delay(250);
digitalWrite(a,
digitalWrite(b,
digitalWrite(f,
digitalWrite(c,
digitalWrite(d,
digitalWrite(e,
pickDigit(3);
delay(250);
digitalWrite(a,
digitalWrite(b,
digitalWrite(f,
digitalWrite(c,
digitalWrite(d,
digitalWrite(e,
pickDigit(4);
delay(250);
clearLEDs();
loopcount++;
LOW);
LOW);
LOW);
HIGH);
HIGH);
HIGH);
HIGH);
HIGH);
HIGH);
LOW);
LOW);
LOW);
}
//tampilan 0000 untuk semua segmen
void nyala()
{
digitalWrite(a, LOW);
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(d1,
digitalWrite(d2,
digitalWrite(d3,
digitalWrite(d4,
HIGH);
HIGH);
HIGH);
HIGH);
}
void flash()
{
int i;
for(i=0;i<5;i++){
nyala();delay(250);
clearLEDs();delay(500);
}
}
nyala();
i++;
PUSH BUTTON
TUJUAN:
1. Mahasiswa memahami rangkaian mikrokontroller dengan interface ke saklar.
2. Mahasiswa dapat memahami program Arduino untuk mengambil data saklar dan
mengeluarkan data ke LED.
3. Mahasiswa memahami beberapa instruksi Arduino dasar, digitalRead, if, dan for.
PERALATAN
1. Sebuah Komputer /Laptop
2. Arduino board dan konektor dengan USB
3. Breadboard dan kabel jumper
4. Saklar push button
5. Resistor antara 1K100K ohm
TEORI
Sebuah lampu adalah perangkat sederhana dengan dua posisi, menghidupkan dan
mematikan. Ketika di dua kawat yang terhubung di dalam, yang memungkinkan arus
mengalir. Ketika off, dua kabel terputus dan berarti arus terputus.
Push Button adalah saklar tekan yang berfungsi untuk menghubungkan atau memisahkan
bagian bagian dari suatu instalasi listrik satu sama lain (suatu sistem saklar tekan push
button terdiri dari saklar tekan start. Pada dasarnya, terdapat 2 jenis Push-Button di
pasaran: Push-On dan Push- Off . Tetapi yang kita gunakan pada tutorial ini adalah yang
berjenis Push-On, yaitu komponen yang terdiri atas dua kutub yang saling terpisah / tidak
terhubung, dan sebuah tombol yang ketika ditekan akan menghubungkan kedua kutub
tersebut sehingga akan mengalirkan arus listrik dari satu sisi kutub ke sisi kutub
berikutnya.
Tugas :
1. Buat auto increment dengan menggunakan gabungan dari push button dan multi
sevensegment, jika push button ditekan maka sevensegment akan menampilkan
angka increment.
2. Buat konfigurasi push button dengan Led, ketika push button ditekan akan
menyala sampai tombol ditekan kembali akan membuat led mati ( Debounce).
Pada percobaan dalam modul ini akan menggunakan modul Inter-Integrated Circuit
(I2C) sebagai perantara menangani perintah yang ada pada LCD. Sehingga posisi
I2C ini diantara LCD dan Arduino, dengan konsep menghemat pin yang digunakan
arduino untuk mengendalikan LCD. Pada umumnya LCD dikendalikan dengan
menggunakan 6 jalur yang ada pada LCD : RS, EN, D7, D6, D5, dan D4. Jika
diinginkan lebih simplekita bisa menggunakan LCD shield yang bisa langsung
integrated pada board. Tapi ketika kita ingin menggunakan yang lebih simple dari
segi ukuran I2C mungkin salah satu jawabannya.
if(error==0)
{
Serial.print("I2Cdevicefoundataddress0x");
if(address<16)
Serial.print("0");
Serial.print(address,HEX);
Serial.println("!");
nDevices++;
}
elseif(error==4)
{
Serial.print("Unknowerrorataddress0x");
if(address<16)
Serial.print("0");
Serial.println(address,HEX);
}
}
if(nDevices==0)
Serial.println("NoI2Cdevicesfound\n");
else
Serial.println("done\n");
delay(5000);//wait5secondsfornextscan
}
Hasil bisa dilihat dengan menggunakan menu Serial Monitor yang beradapada kanan atas
Arduino IDE.
//settheLCDaddressto0x27fora16chars2linedisplay
//AFEWuseaddress0x3F
//SetthepinsontheI2CchipusedforLCDconnections:
//addr,en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2Clcd(0x3F,2,1,0,4,5,6,7,3,POSITIVE);//
SettheLCDI2Caddress
/*(DeclareVariables)*/
//NONE
voidsetup()/*(SETUP:RUNSONCE)*/
{
Serial.begin(9600);//Usedtotypeincharacters
lcd.begin(16,2);//initializethelcdfor16chars2lines,
turnonbacklight
//Quick3blinksofbacklight
for(inti=0;i<3;i++)
{
lcd.backlight();
delay(250);
lcd.noBacklight();
delay(250);
}
lcd.backlight();//finishwithbacklighton
//Writecharactersonthedisplay
//NOTE:CursorPosition:(CHAR,LINE)startat0
lcd.setCursor(0,0);//Startatcharacter4online0
lcd.print("Hello,world!");
delay(1000);
lcd.setCursor(0,1);
lcd.print("Hi,POLINES");
delay(8000);
//WaitandthentellusertheycanstarttheSerialMonitorand
typeincharactersto
//Display.(SetSerialMonitoroptionto"NoLineEnding")
lcd.clear();
lcd.setCursor(0,0);//Startatcharacter0online0
lcd.print("D3TIINFORMATIKA");
lcd.setCursor(0,1);
lcd.print("Typetodisplay");
}/*(endsetup)*/
voidloop()/*(LOOP:RUNSCONSTANTLY)*/
{
{
//whencharactersarriveovertheserialport...
if(Serial.available()){
//waitabitfortheentiremessagetoarrive
delay(100);
//clearthescreen
lcd.clear();
//readalltheavailablecharacters
while(Serial.available()>0){
//displayeachcharactertotheLCD
lcd.write(Serial.read());
}
}
}
}/*(endmainloop)*/
/*(THEEND)*/
2. Inisialisasi class yang ada pada header library yang nantinya object yang
dihasilkan dariproses inisialisasi digunakan untuk pemrograman selanjutnya.
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3,
POSITIVE);//SettheLCDI2Caddress
Konfigurasi pin I2C terhadap LCD
addr
en
rw
rs
d4
d5
d6
d7
bl
blpol
0x3F
POSITIVE
yang
berarti
lcd.print("D3TEKNIKINFORMATIKA");
lcd.setCursor(0,1);
lcd.print("POLINES");
}/*(endsetup)*/
Pin
Fungsi
Analog 0
Digital 4
DB4
Digital 5
DB5
Digital 6
DB6
Digital 7
DB7
Digital 8
Digital 9
Enable
Digital 10
Backlit Control
#definebtnRIGHT0
#definebtnUP1
#definebtnDOWN2
#definebtnLEFT3
#definebtnSELECT4
#definebtnNONE5
//readthebuttons
intread_LCD_buttons()
{
adc_key_in = analogRead(0); // read the value from the
sensor
// my buttons when read are centered at these valies: 0, 144,
329,504,741
//weaddapprox50tothosevaluesandchecktoseeifweare
close
if(adc_key_in>1000)returnbtnNONE;//Wemakethisthe1st
optionforspeedreasonssinceitwillbethemostlikelyresult
//ForV1.1usthisthreshold
if(adc_key_in<50)returnbtnRIGHT;
if(adc_key_in<250)returnbtnUP;
if(adc_key_in<450)returnbtnDOWN;
if(adc_key_in<650)returnbtnLEFT;
if(adc_key_in<850)returnbtnSELECT;
returnbtnNONE;//whenallothersfail,returnthis...
}
voidsetup()
{
lcd.begin(16,2);//startthelibrary
lcd.setCursor(0,0);
lcd.print("Pushthebuttons");//printasimplemessage
}
voidloop()
{
lcd.setCursor(9,1); // move cursor to second line "1" and 9
spacesover
lcd.print(millis()/1000);//displaysecondselapsedsincepower
up
lcd.setCursor(0,1);//movetothebeginingofthesecondline
lcd_key=read_LCD_buttons();//readthebuttons
switch (lcd_key) // depending on which button was pushed, we
performanaction
{
casebtnRIGHT:
{
lcd.print("RIGHT");
break;
}
casebtnLEFT:
{
lcd.print("LEFT");
break;
}
casebtnUP:
{
lcd.print("UP");
break;
}
casebtnDOWN:
{
lcd.print("DOWN");
break;
}
casebtnSELECT:
{
lcd.print("SELECT");
break;
}
casebtnNONE:
{
lcd.print("NONE");
break;
}
}
}
Tugas :
1. Buat running text geser kekiri pada LCD dengan I2C dan LCD Shield
Karakter:[NIM][NAMA]D3TIPOLINES
2. Gunakan fungsi untuk meletakkan karakter pada barispertama dan kedua sehingga
posisi karakter yang ditampilkan berada ditengah. Jika karakter lebih dari 16 akan
digeser kekiri.
BarisPertama:[NIM]
BarisKedua:[NAMA]
3. Gunakan Arduino dengan LCD Shield. Manfaatkan keypad pada LCD Shield
untuk memasukkan password jika pasword benar akan tertampil Selamat
Datang dan Lampu Led Hijau akan menyala, jika inputan kombinasi salah Led
Merah menyala tampilan LCD Password Salah.