Monday, 5 December 2016

Mengakses LCD 16x2 dengan Arduino

    Pada postingan sebelumnya kita sudah membahas tentang mengakses lcd 16x2 dengan atmega16. Kali ini saya akan berbagi tutorial cara mengakses lcd 16x2 dengan Arduino UNO. Arduino UNO adalah papan sirkuit dengan mikrokontroller atmega328 yang memiliki 14 pin I/O yang dimana 6 pin sebagai output PWM dan 2 pin untuk koneksi serial, 6 pin analog yang biasa dihubungkan ke sensor, clock speed 16MHz, koneksi USB, jack DC, tombol reset dan pinheader.
    Secara umum, arduino terdiri dari dua bagian, yaitu :
1. HARDWARE berupa papan PCB input output (I/O) yang open source
2. SOFTWARE berupa aplikasi Arduino IDE. Dapat di unduh disini


Spesifikasi Arduino UNO


Gambar Arduino UNO

Gambar rangkaian

Program:
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //konigurasi pin
void setup() {
  lcd.begin(16, 2);
}
void loop() {
lcd.setCursor(3,0);         //mengatur kursor pada kolom 3, baris 0
lcd.print("LCD ARDUINO");   //menampilkan karakter "LCD ARDUINO"
lcd.setCursor(1,1);         //mengatur kursor pada kolom 1, baris 1
lcd.print("TEKNIK ELEKTRO");//menampilkan karakter "TEKNIK ELEKTRO"
}


Gambar hasil


Mengakses LCD 16x2 menggunakan ATMega16

    Pada tutorial kali ini saya akan berbagi ilmu tentang cara mengakses lcd 16x2 dengan atmega16. LCD (Liquid Cristal Display) adalah salah satu jenis display elektronik yang dibuat dengan teknologi CMOS logic yang bekerja dengan tidak menghasilkan cahaya tetapi memantulkan cahaya yang ada di sekelilingnya terhadap front-lit atau mentransmisikan cahaya dari back-lit. Fungsi LCD sebagai penampil data baik dalam bentuk karakter, huruf, angka maupun grafik.

Konfigurasi Pin LCD 16x2
No
Kaki
Deskripsi
1
Vss
0V (GND)
2
Vcc
+5V
3
VLC
LCD Contrast Voltage
4
RS
Register Select; H: Data Input; L: Instruction Input
5
RD
H:Read; L: Write
6
EN
Enable Signal
7
D0
Data Bus 0
8
D1
Data Bus 1
9
D2
Data Bus 2
10
D3
Data Bus 3
11
D4
Data Bus 4
12
D5
Data Bus 5
13
D6
Data Bus 6
14
D7
Data Bus 7
15
V+BL
Positive Backlight Voltage
16
V-BL
Negative Backlight Voltage

*      DDRAM
DDRAM adalah merupakan memori tempat karakter yang ditampilkan berada. Contoh, untuk karakter ‘A’ atau 41H yang ditulis pada alamat 00, maka karakter tersebut akan tampil pada baris pertama dan kolom pertama dari LCD. Apabila karakter tersebut ditulis di alamat 40, maka karakter tersebut akan tampil pada baris kedua kolom pertama dari LCD. Posisi ini ditunjukkan dalam Gambar 5.2.

*      CGRAM
CGRAM adalah merupakan memori untuk menggambarkan pola sebuah karakter di mana bentuk dari karakter dapat diubah-ubah sesuai keinginan. Namun memori ini akan hilang saat power supply tidak aktif, sehingga pola karakter akan hilang.

*      CGROM
CGROM adalah merupakan memori untuk menggambarkan pola sebuah karakter di mana pola tersebut sudah ditentukan secara permanen dari HD44780 sehingga pengguna tidak dapat mengubah lagi. Namun karena ROM bersifat permanen, maka pola karakter tersebut tidak akan hilang walaupun power supply tidak aktif. Pada Gambar 6.3, tampak terlihat pola-pola karakter yang tersimpan dalam lokasi-lokasi tertentu dalam CGROM. Pada saat HD44780 akan menampilkan data 41H ke DDRAM, maka HD44780 akan mengambil data di alamat 41H (0100 0001) yang ada pada CGROM yaitu pola karakter A.

Gambar bentuk LCD

Gambar rangkaian

    Pada rangkaian diatas, menggunakan Proteus Professional 7 sebagai software simulasi (dapat di unduh disini).  Chip atmega16, lcd 16x2 terhubung pada port C. Dibawah ini adalah contoh programn bahasa C menggunakan compilier CodeVisionAVR.

#include <mega16.h>
#include <delay.h>
#include <alcd.h>

void main(void)
{
// Alphanumeric LCD initialization
// Connections are specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS - PORTC Bit 0
// RD - PORTC Bit 1
// EN - PORTC Bit 2
// D4 - PORTC Bit 4
// D5 - PORTC Bit 5
// D6 - PORTC Bit 6
// D7 - PORTC Bit 7
// Characters/line: 16
lcd_init(16);
lcd_gotoxy(0,0);                                  //menempatkan kursor pada kolom 0, baris 0
lcd_putsf("DISPLAY LCD 16X2");         //menampilkan karakter "DISPLAY LCD 16x2"
lcd_gotoxy(1,1);                                  //menempatkan kursor pada kolom 1, baris 1
lcd_putsf("TEKNIK ELEKTRO");          //menampilkan karakter "TEKNIK ELEKTRO"
delay_ms(100);                                   //tunda waktu 100 mili detik

while (1)
      {
      
      }
}

Gambar hasil

    Sekian tutorial tentang cara mengakses LCD 16x2 menggunakan atmega16. Kunjungi tutorial sebelumnya dan nantikan tutorial selanjutnya. . . 



Daftar referensi :
  1. http://elektronika-dasar.web.id/lcd-liquid-cristal-display/
  2. Modul Praktikum Mikroprosesor S1 Pendidikan Teknik Elektro, Universitas Negeri Malang







Wednesday, 30 November 2016

Robot Pengikut Dinding Berbasis ATmega16


Assalammu'alaikum...
Hai teman elektro. gimana kabarnya hari ini ? sehat ? alhamdulillah...

    Kali ini saya akan post informasi tentang robot pengikut dinding dengan atmega16. Robot pengikut atau wall follower adalah sebuah robot yang telah diprogram untuk menelusuri dinding atau labirin. Biasanya robot ini digunakan pada konter robot indonesia (KRI) pada divisi pemadam api beroda (KRPAI Beroda) untuk mencari titik api pada suatu labirin. 
    Untuk mendeteksi jarak antara robot dan dinding, digunakan sensor ultrasonik. Banyak tipe sensor ultasonik dipasaran. Tapi disini saya menggunakan sensor ultrasonik HC-SR04 sebagai sistem navigas robot. Karena ini hanya prototype, maka saya gunakan satu sensor yang terletak pada sisi kanan robot. Baiklah langsung saja dibawah ini adalah blok diagram dari robot yang saya buat.

BLOK DIAGRAM & PENJELASAN


Keterangan
   ·         Input dari robot ini berupa sensor ultrasonik HC-SR04 dengan range jarak >= 3m. Sensor ini terletak pada bagian sisi kanan robot.
   ·         Mikrokontroller ATmega16 sebagai device pemroses I/O.
   ·         Driver motor digunakan untuk mendriver atau memberi sinyal dari mikrokontroller ke motor DC Driver motor yang digunakan sudah dalam bentuk IC yaitu L293D.
   ·         Outputnya menggunakan motor DC 12V 12000 RPM dengan system gearbox.
   ·         Baterai 12V digunakan untuk mensuplai kerja system robot.
   ·         IC 7805 digunakan untuk menkonversi tegangan 12V dari baterai menjadi 5V yang kemudian di arahkan ke mikrokontroller dan I/O.

Prinsip kerja Robot Wall Follower
Algoritma jalan robot:
   ·         Jika robot berjarak  sama dengan 30 cm atau lebih kecil atau sam dengan 25 cm, maka motor kanan akan berputar searah jarum jam dan motor kiri berputar berlawanan arah jarum jam dengan kecepatan yang sama. Dalam kondisi ini robot bergerak maju.
   ·         Jika tidak terdapat objek atau halangan lebih dari 30 cm, maka motor kiri akan berputar berlawan arah jarum jam dengan pwm 190 dan motor kanan berhenti. Dalam kondisi ini robot belok kanan.


RANGKAIAN MINSIS





Penjelasan rangkaian minsis:
   1.      PORTA sebagai port input yang dihubungkan pada sensor ultrasonic HC-SR05.
   2.      PORTB sebagai port untuk downloader dan fungsi lainnya untuk lcd 16x2.
   3.      PORTD sebagai port output yang dihubungkan pada driver motor.
   4.      Kemudian terdapat juga rangkaian regulator 5V yang berfungsi untuk menurunkan tegangan 12V dari baterai menjadi 5V yang dibutuhkan untuk mengaktifkan mikrokontroller. Rangkaian terdapat beberapa komponen yaitu, switch on/off, diode 1N4002, elco 100uf/16v, IC 7805, resistor 220 Ohm, dan led.
   5.      Pada bagian reset terdapat beberapa komponen yaitu, push button, resistor 1k, dan elco 100uf/16.


RANGKAIAN DRIVER MOTOR L293D

Penjelasan rangkaian driver motor L293D:
   1.      Komponen yang digunakan sebagai driver motor adalah L293D. Komponen ini dalam bentuk IC yang lebih mudah dalam instalasinya. Di IC ini terdapat 1A, 2A, 3A, 4A,  1-2EN, 3-4EN. 1A, 2A, 3A, 4A dihubungkan ke PORTD.1, PORTD.2, PORTD.3, PORTD.4 ATmega16 sebagai output dan 1-2EN, 3-4EN dihubungkan ke PORTD.5, PORTD.6 yang digunakan untuk mengatur kecepatan putaran motor.
   2.      Diode 1N4004 digunakan untuk pengaman untuk mikrokontroller jika ada ada tegangan balik dari motor.


FLOWCHART

Keterangan:
   1.      Void kanan(){…} berisi script program untuk mendeteksi jarak.
   2.      Void maju(){…} berisi script program untuk gerak robot maju.
   3.      Void nganan(){…} berisi program untuk robot belok kanan

Penjelasan:
   1.      Memulai program robot wall follower
   2.      Scanning data (dalam bentuk jarak), keadaan awal robot maju.
   3.      Jika sensor ultrasonik mendeteksi ada dinding pada jarak sama dengan 30cm dan lebih kecil atau sama dengan 25cm, maka robot akan bergerak maju mengikuti dindig.
   4.      Jika sensor ultrasonik tidak mendeteksi adanya dinding lebih dari 30cm, maka robot akan belok kanan dengan ketentuan (motor kanan berhenti dan motor kiri berputar berlawanan arah jarum jam).
   5.      Selesai.

Video :





untuk listing program dapat diunduh disini



Sunday, 18 September 2016

Robot Omni Wheel Arduino

Robot Omni Arduino :









Dan ini videonya saat masih menggunakan 1 sensor ultrasonik dibagian depan




Mengakses Seven Segment dengan Atmega16

Assalammualaikum wr. wb . .
Baiklah pada kesempatan kali ini kita akan belajar membuat program seven segment yang nantinya terdapat counter up dan counter down 1 digit sampai 2 digit dengan menggunkan mikrokontroller ATmega16.

untuk skematiknya seperti dibawah ini :


Pada skematik diatas dapat kita tentukan bahwa PORTB.6 dan PORTB.7 sebagai selector yang nantinya digunakan untuk menghidupkan seven segment, kaki kolektor dari kedua transistor BD140 dihubungkan ke pin COM pada seven segment . Kemudian PORTD digunakan untuk  pin LED pada seven segment yang terdiri dari 8 pin yaitu a, b, c, d, e, f, g, dan dp. Namun pada skema diatas hanya 7 pin yang terhubung pada mikrokontroller.

Saatnya kita membuat program, program dibawah ini untuk menampikan angka 3 pada seven segment digit pertama, sementara digit kedua off.

//---------------------------------------------------------------------------------------------//
// Program menampilkan angka 3 pada digit pertama seven segment
//---------------------------------------------------------------------------------------------//
#include <mega16.h>
#include <delay.h>
void main(void){
PORTB=0xc0  //mengatur portb sebagai output, 0b11000000, nilai awal 1
DDRB=0xc0   //mengatur portb sebagai output, 
PORTD=0xff  //mengatur portd sebagai output, 0b11111111 keadaan awal seven segment padam
DDRD=0xff  //mengatur portd sebagai output,
while(1){
        PORTB.6=1;   //aktifkan seven segment kanan (digit pertama)
        PORTB.7=0;   //menonaktifkan seven segment kiri (digit kedua)
        PORTD=0xb0 //menampilkan angka 3, 0b10110000. (common katoda)
        delay_ms(10); //tunda waktu 10milliSecond
}
}


Selanjutnya kita akan membuat program couter up 1 digit seven segment :

//---------------------------------------------------------------------------------------------//
// program couter up 1 digit seven segment
//---------------------------------------------------------------------------------------------//
#include <mega16.h>
#include <delay.h>
unsigned char angka[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98}
void main(void){
PORTB=0xc0  //mengatur portb sebagai output, 0b11000000, nilai awal 1
DDRB=0xc0   //mengatur portb sebagai output, 
PORTD=0xff  //mengatur portd sebagai output, 0b11111111 keadaan awal seven segment padam
DDRD=0xff  //mengatur portd sebagai output,
while(1){
        int naik; // menambahkan variabel naik
        for(naik=0;naik<10;naik++){ 
        PORTB.6=1;
        PORTB.7=0;
        PORTD=angka[geser];
        delay_ms(10); //tunda waktu 10milliSecond
}
}
}




Selanjutnya kita membuat program couter up 2 digit seven segment :

//---------------------------------------------------------------------------------------------//
// program couter up 1 digit seven segment
//---------------------------------------------------------------------------------------------//
#include <mega16.h>
#include <delay.h>
unsigned char angka[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; 
int satuan,puluhan,data,data_temp,x;
void rumus()
{
data_temp = data ;
satuan = data_temp%10;             //rumus untuk satuan
puluhan = (data_temp/10)%10;  //rumus untuk puluhan
}

void tampil ()
{
//nilai satuan
PORTB.6 = 1;
PORTB.7 = 0 ;
PORTD = angka[satuan];
delay_ms(10);

//nilai puluhan 
PORTB.6 = 0;
PORTB.7 = 1 ;
PORTD = angka[puluhan];
delay_ms(10);
}

void main(void){
PORTB=0xc0  //mengatur portb sebagai output, 0b11000000, nilai awal 1
DDRB=0xc0   //mengatur portb sebagai output, 
PORTD=0xff  //mengatur portd sebagai output, 0b11111111 keadaan awal seven segment padam
DDRD=0xff  //mengatur portd sebagai output,
while (1){
int x;
for(x=0;x<100;x++) {
        rumus();
        tampil(); } 
 }
 }


Sampai disini materi tentang seven segment, bila ada kurangnya dipost dikotak komentar dan bila ini bermanfaat dishare aja ;) .. oke makasih sudah berkunjung ..






Tuesday, 9 August 2016

Body Robot Omni Wheel

Assalamu'alaikum Warahmatulahi Wabarakatuh...
Selamat siang para pembaca setia. Bagaimana kabarnya hari ini ?
Alhamdulillah dapat menulis blog lagi setelah beberapa waktu lalu ada pekerjaan sehingga harus fokus ke pekerjaan tsb. 

Yaaa... kali ini saya akan berbagi sedikit pengalaman saya membuat robot yang menggunakan roda Omni Wheel. 
Robot Omni Wheel, sebuah robot yang menggunaka beberapa roda Omni Wheel dan dilengkapi dengan beberapa sensor untuk pergerakannya seperti sensor pendeteksi garis, sensor ultrasonik, dll.
Robot ini mampu bergerak dan manufer ke berbagai arah tanpa harus memutar arah dari badan robot tersebut. Robot ini mampu melakukan hal tersebut karena penggunaan roda Omni Wheel pada robot tersebut. Roda Omni Wheel ini didesain bentuk lingkaran seperti roda biasa namun diberikan tambahan sub-sub roda pada bagian luarnya, sehingga sistem mekanik tersebut memungkinkan robot untuk bermanufer tanpa harus mengubah posisi badan robot.

Contoh roda Omni Wheell yang saya gunakan pada riset ini adalah Omni Wheel-3 seperti pada gambar berikut :



Dan untuk body robot sendiri seperti dibawah ini :

Disini saya menggunaka aplikasi SketchUp Pro sebagai aplikasi desain, sebenarnya aplikasi ini tidak direcomendasikan sebagai aplikasi desain mekanik, namun karena saya sudah terbiasa dengan aplikasi ini jadi ya nyaman2 gitu :D
Dan hasilnya seperti pada gambar berikut :



Nah sekian sedikit info tentang Robot Omni Wheel dari saya, ini hanya info body dan insyaallah akan saya lanjutkan pada pemasangan elektriknya atau pengontrolnya dilain waktu. terimakasih sudah berkunjung. Wassalamu'alaikum Warahmatulahi Wabarakatuh...

Kritik & saran sangat membantu untuk kemajuan blog ini ;) :D

Saturday, 25 June 2016

Antarmuka Mikrokontroller dengan Toggle Switch

     Saklar toggle adalah salah satu saklar elektrik yang digerakkan secara manual oleh batang mekanik. Saklar toggle tersedia dalam berbagai bentuk dan ukuran, serta digunakan dalam berbagai aplikasi. Gambar dibawah memperlihatkan bentuk fisik dan symbol saklar toggle.


     Rangkaian I/O yang dipakai dalam praktikum, dibutuhkan komponen input yaitu saklar toggle dan LED sebagai komponen output serta Atmega16 sebagai IC pemrosesnya. Untuk rangkaian seperti dibawah ini :

     Seperti pada rangkaian diatas, pada PORTC kita gunakan sebagai INPUT (saklar) dan PORTA sebagai OUTPUT (LED). Soal pertama adalah meng-ON-kan dan meng-OFF-kan seluruh led pada PORTA dengan saklar satu (PINC.0). Maka programnya seperti dibawah ini :

#include <mega16.h>
void main(){
    PORTA=0x00;
    DDRA=0xff; //PORTA sebagai output, 0b11111111, nilai awal 0
    PORTC=0xff;
    DDRC=0x00; //PORTC sebagai input, 0b00000000, pull up     
while(1){
   if(PINC.0==1){  //jika saklar 1 berlogika HIGH, LED nyala
   PORTA=0xff;
   }
   else{          //jika saklar 1 diluar kondisi (selain HIGH), LED mati
   PORTA=0x00;
   }
}
}

dan hasilnya :

Tugas :
1.      Buat program untuk masing–masing algoritma berikut dengan menggunakan if :
a)      Jika switch bit 0 berlogika 1 maka LED bit 4 menyala.
b)      Jika switch bit 1 berlogika 1 maka LED bit 7 menyala.
2.      Buat satu program untuk masing–masing algoritma berikut dengan menggu­na­kan if-else.
a)      Jika switch bit 0 berlogika 1 maka LED bit 4 menyala.
b)      Jika switch bit 1 berlogika 1 maka LED bit 7 menyala.
c)       Jika switch bit 2 berlogika 1 maka LED menyala dengan konfigurasi
ON-OFF-ON-OFF-ON-OFF-ON-OFF (bit7-bit0).
d)      Jika switch bit 3 berlogika 1 maka LED menyala dengan konfigurasi
OFF-ON-OFF-ON-OFF-ON-OFF-ON (bit7-bit0).
e)      Jika switch bit 4 berlogika 1 maka LED menyala semua.
f)        JIka switch bit 5 berlogika 1 maka LED mati semua.

g)      Jika switch bit 6 berlogika 1 maka LED menyala berurutan mulai dari bit0 ke bit7 lalu kembali lagi ke bit0 dengan delay 1 detik

     Nah cukup sekian penjelasan Interface Atmega16 dengan Saklar. Ditunggu kritik dan sarannya dari pengunjung agar menjadi lebih baik lagi untuk kedepannya.
Perbanyaknya uji coba dirumah dengan programmu sendiri dan cari troubleshooting dalam memprogram, karena semua itu adalah pelajaran bagi kita.





Dasar Pemrograman C++ Pada Arduino

Dasar Pemrograman C++ Pada Arduino
Pembahasan:
● Struktur Dasar Pemrograman pada Arduino
● Komentar
● Identifier
● Konstanta
● Variabel
○ Tipe Data
○ Variabel Global
○ Variabel Lokal
● Operator
● Percabangan
● Pengulangan

Dasar Pemrograman C++  Pada Arduino
Target:
● Memahami dasar-dasar pemrograman pada Arduino
● Memahami dasar-dasar pemrograman C++
● Dapat menggunakan percabangan, pengulangan pada bahasa pemrograman C++

Pendahuluan
● Pada bagian ini akan dijelaskan mengenai dasar-dasar pemrograman
Arduino (C++)
● Untuk mempelajari bahasa pemogramaan C++ dapat mengunjungi
link berikut 
http://www.cplusplus.com/files/tutorial.pdf

Struktur Dasar
● Pemrograman pada Arduino selalu dilakukan dengan menyertakan
dua fungsi utama yaitu void setup() dan void loop()
fungsi utama pada pemrograman Arduino
void setup() {
}
void loop() {
}

Struktur Dasar (cont’d)
● Kedua fungsi yang disebutkan sebelumnya harus disertakan pada
saat pemrograman, meskipun di dalam fungsi tidak terdapat kode
program untuk dieksekusi
● Apabila tidak disertakan, maka akan terjadi error pada saat proses
compile (penerjemahan kode program ke bahasa mesin) program

Komentar
● Fitur bahasa pemograman yang dapat digunakan untuk membuat
dokumentasi pada kode program yang dibuat
Contoh penulisan komentar
Cara 1
//Kalimat ini adalah komentar
Cara 2
/*
Kalimat ini
adalah
komentar
*/

Identifier
● Identifier digunakan sebagai pengenal/identitas dari variabel,
konstanta, fungsi, structure, maupun class agar compiler dapat
membedakan antara satu dengan yang lainnya
Contoh penggunaan identifier
#define A 5
long 
B = 2;
void 
setup() {
Serial.begin(9600);
}
void 
loop() {
}

Identifier (cont’d)
● Pada contoh sebelumnya, dua buah identifier yaitu setup dan loop
digunakan sebagai nama fungsi, sedangkan dua buah identifier
lainnya digunakan sebagai nama konstanta (A) dan nama variabel (B)
● Aturan penulisan identifier pada bahasa C/C++ adalah sebagai
berikut:
○ Bersifat case sensitive, A dan a dianggap berbeda
○ Tidak dapat diawali dengan karakter angka
○ Tidak dapat menggunakan karakter space
○ Tidak dapat menggunakan karakter simbol (#, @, ?, !, $, %, &, *, dll.)
○ Tidak dapat mengguakan kata kunci yang telah digunakan oleh C/C++
ataupun oleh Arduino IDE
○ Hindari penggunaan nama identifier yang sama dengan nama identifier
yang sebelumnya telah digunakan

Konstanta
● Konstanta digunakan untuk menyimpan nilai tetap yang nantinya tidak
dapat diubah pada saat program dieksekusi
● Salah satu kegunaannya adalah untuk menentukan nilai yang bersifat
tetapan seperti nilai pi (Ṑ), kecepatan suara, batas pembacaan nilai
sensor (sebagai contoh panas didefinisikan dengan nilai 55), batas
pengulangan, dll.
● Konstanta dapat dibuat dengan dua cara, yaitu menggunakan
preprocessor directive #define ataupun menggunakan kata kunci
const

Konstanta (cont’d)
Contoh penggunaan preprocessor directive #define
#define MOTOR 5
void setup() {
pinMode(MOTOR, OUTPUT);
}
void loop() {
digitalWrite(MOTOR, HIGH);
}

● Contoh penggunaan #define adalah seperti di bawah
Apabila terdapat revisi pada rangkaian hardware, yaitu pin yang digunakan untuk
menggendalikan motor bukan lagi pin 5, kita hanya perlu mengubah nilai dari baris
konstanta MOTOR.
Konstanta (cont’d)
● Contoh penggunaan const adalah seperti di bawah
Contoh penggunaan kata kunci const
const byte MAX = 5 ;
void setup() {
Serial.begin(9600);
}
void loop() {
for(unsigned char i = MAX; i > 0; i--)
Serial.print("hello");
}

Apabila terdapat revisi pada program, yaitu jumlah pengulangan yang dilakukan bukan
lagi 5 kali, kita hanya perlu mengubah nilai dari baris konstanta MAX.

Variabel
● Variabel merupakan sebuah lokasi pada memori yang digunakan
untuk penyimpanan data/nilai yang dapat diubah
● Variabel dibedakan berdasarkan ruang lingkupnya, yaitu global atau
lokal
Contoh proses deklarasi variabel
//cara 1
tipe_data identifier;
//cara 2
tipe_data identifier = nilai;
//cara 3
tipe_data identifier1, identifier2;
//cara 4
tipe_data identifier1 = nilai1, identifier2 = nilai2;

Variabel Global
● Sebuah variabel global akan dikenali oleh semua bagian program
● Variabel global dapat dibuat dengan mendeklarasikannya di luar
semua fungsi yang ada
Contoh deklarasi variabel global
byte readSensor;
void setup() {
}
void loop() {
}

Variabel Global (cont’d)
● Keleluasaan pengaksesan oleh semua fungsi yang ada pada program
merupakan kelebihan kelebihan dari variabel global, namun hal
tersebut juga sekaligus menjadi kekurangan
● Apabila kode program menjadi sangat panjang dan kompleks, maka
keleluasaan pengaksesan tersebut akan menjadi salah satu sumber
error/bug, dimana proses pelacakan error akan sulit dilakukan apabila
seluruh bagian kode program dapat mengakses variabel tersebut
● Berdasarkan alasan tersebut maka hendaknya penggunaan variabel
global harus dibatasi dan jika memang benar-benar diperlukan

Variabel Lokal
● Seperti namanya, variabel lokal merupakan variabel yang hanya
dapat diakses pada lingkup lokal, yaitu di dalam sebuah fungsi
tertentu saja
Contoh deklarasi variabel lokal
void setup() {
byte angka1;
}
void loop() {
byte angka2;
}
Variabel angka1 hanya akan dikenali pada fungsi void setup(), sedangkan variabel
angka2 hanya akan dikenali pada fungsi void loop(). Pengaksesan variabel angka1
pada fungsi void loop() akan mengakibatkan error, demikian juga sebaliknya.

Tipe Data
● Variabel memiliki tipe data yang akan digunakan oleh compiler untuk
mengetahui jenis data yang disimpan
Tipe Data Ukuran Memori Rentang Nilai
boolean 8-bit true/false
byte 8-bit 0 - 255
char 8-bit -128 - 127
unsigned char 8-bit 0 - 255
word 16-bit 0 - 65,535
int 16-bit -32,768 - 32,767
unsigned int 16-bit 0 - 65,535
long 32-bit -2,147,483,648 - 2,147,483,647
unsigned long 32-bit 0 - 4,294,967,295
float 32-bit -3.4028235E+30 - 3.4028235E+38

Operator
● Simbol atau karakter pada program yang digunakan untuk melakukan
suatu operasi atau manipulasi
● Pada program, seringkali kita membutuhkan sebuah solusi dimana
solusi tersebut dihasilkan dari operasi dari satu atau beberapa
variabel/operand
● Bahasa C++ memiliki beberapa jenis operator yaitu:
○ Assignment
○ Arithmetic
○ Increase dan decrease
○ Relational dan equality
○ Logical
● Masing-masing operator memiliki tingkat eksekusi yang berbedabeda, sebagai contoh operator * (perkalian) akan didahulukan dari
operator + (penjumlahan)

Assignment
● Operator yang digunakan untuk menentukan nilai sebuah variabel
Contoh penggunaan operator assignment
//nilai 5 diisikan ke variabel a
a = 5;
//nilai variabel b diisikan ke variabel a
a = b;
//hasil penjumlahan nilai variabel a dan angka 7 diisikan ke
//variabel b
b = a + 7;
//nilai 5 diisikan ke variabel c, kemudian nilai variabel c
//diisikan ke variabel b, kemudian nilai variabel b diisikan ke
//variabel a
a = b = c = 5
Pembacaan operator assignment dilakukan dari kanan ke kiri

Arithmetic
● Operator yang digunakan untuk membuat ekspresi matematis pada
kode program

Simbol Keterangan
+ Penjumlahan
- Pengurangan
* Perkalian
/ Pembagian
% Modulo (hasil bagi dari 2 bilangan)


Increase dan Decrease
● Operator penambah atau pengurang nilai pada variabel
● Operator increase dilambangkan dengan ++, sedangkan operator
decrease dilambangkan dengan --
increase dan decrease
//kesamaan operator increase
a = a + 1;
a++;
//kesamaan operator decrease
a = a - 1;
a--;

Increase dan Decrease (cont’d)
● Operator increase dan decrease dapat dituliskan sebagai prefix atau
suffix sebuah variabel

Prefix dan suffix untuk operator increase dan decrease
b = 3;
a = b++;
//nilai a = 3, nilai b = 4
b = 3;
a = ++b;
//nilai a = 4, nilai b = 4
Suffix: nilai variabel akan ditambah setelah menemui operator increase
Prefix: nilai variabel akan ditambah sebelum menemui operator increase


Relational dan Equality
● Operator yang digunakan untuk membandingkan nilai dari dua
ekspresi pemrograman
● Hasil dari operator relational dan equality adalah nilai boolean yaitu
true atau false

Simbol Keterangan
==           Sama dengan
!=            Tidak sama dengan
>             Lebih dari
<             Kurang dari
>=           Lebih dari atau sama dengan
<=           Kurang dari atau sama dengan

Relational dan Equality (cont’d)
● Contoh penggunaan dari operator relational dan equality adalah
seperti di bawah
Contoh penggunaan operator relational dan equality
(7 == 5) //false
(5 > 4) //true
(13 < 2) //false
(2 < 2) //false
//anggap nilai a = 4, b = 5, c = 6
(a == 5) //4 tidak sama dengan 5, false
(a * b > 7) //20 lebih dari 7, true
(b - 3 < 5) //2 kurang dari 5, true

Logical
● Operator yang digunakan untuk melakukan operasi logika pada
program
Simbol Keterangan
! NOT
&& AND
|| OR

Logical (cont’d)
● Contoh penggunaan operator logical adalah seperti di bawahtoh penggunaan operator logical
!(17 < 6) //!false, memberikan hasil true
!(12 >= 12) //!true, memberikan hasil false
((5 == 5) && (7 < 5)) //(true && false) memberikan hasil false
((7 < 5) || (13 > 6)) //(false || true) memberikan hasil true

Percabangan
● Pada pemrograman pasti akan dijumpai keadaan dimana program
harus memilih kode program mana yang akan dieksekusi sesuai
dengan kondisi yang didapatkan
● Pada pemrograman C/C++ percabangan dapat dilakukan
menggunakan dua buah struktur sintaks yaitu if...else dan
switch...case
Contoh kebutuhan pemilihan tindakan berdasarkan sebuah kondisi
jika suhu ruangan panas
- maka kipas angin dinyalakan
jika suhu ruangan dingin
- maka kipas angin dimatikan
if...else
Contoh struktur penulisan if...else
if(kondisiLogika1) {
...
}
else if(kondisiLogika2) {
...
}
else {
...
}

else if dan else bersifat opsional. else if diletakkan setelah if, sedangkan else
diletakkan setelah if atau else if (jika ada).
Penulisan kondisi logika dilakukan dengan memanfaatkan operator relational dan
equality. Sebagai contoh adalah A * 5 < 18. Apabila tidak digunakan operator
relational dan equality, maka secara default kodisi tersebut dibandingkan dengan nilai
true (== true).

else if dan else bersifat opsional. else if diletakkan setelah if, sedangkan else
diletakkan setelah if atau else if (jika ada).
Penulisan kondisi logika dilakukan dengan memanfaatkan operator relational dan
equality. Sebagai contoh adalah A * 5 < 18. Apabila tidak digunakan operator
relational dan equality, maka secara default kodisi tersebut dibandingkan dengan nilai
true (== true).

If...else (cont’d)Co
ntoh penggunaan if...else
int angka = 0;
void setup(){
Serial.begin(9600);
if(angka > 0) {
Serial.println ("bilangan positif");
}
else if(angka < 0) {
Serial.println ("bilangan negatif");
}
else {
Serial.println ("angka 0");
}
}
void loop(){
}

switch...case
Contoh struktur penulisan switch...case
switch(kondisi) {
case nilai1:
...
break;
case nilai2:
...
break;
default:
...
break;
}

Program akan mengeksekusi ekspresi, yaitu kondisi yang ada pada switch. Nilai dari
eksekusi kondisi akan dibandingkan dengan nilai konstanta pada case pertama, yaitu
nilai1. Jika nilai kondisi sama degan nilai1, maka kode program yang ada dalam
case pertama akan dieksekusi. Jika tidak, maka pemeriksaan akan dilanjutkan ke case
berikutnya. Apabila nilai pada case tidak ada yang sesuai dengan nilai hasil eksekusi
kondisi, maka kode program yang ada pada bagian default akan dieksekusi.

switch...case (cont’d)ntoh struktur penulisan switch...case
int hari = 2;
void setup(){
Serial.begin(9600);
switch(hari) {
case 1:
Serial.println("hari senin");
break;
case 2:
Serial.println("hari selasa");
break;
default:
Serial.println("hari rabu");
break;
}
}
void loop(){
}

Pengulangan
● Kode program secara umum bersifat sekuensial, yaitu dieksekusi dari
atas ke bawah
● Ada kalanya pada program kita menghendaki suatu bagian kode
program dieksekusi berulang dengan batasan yang kita tentukan
Contoh penulisan kode program yang tidak efisien
int a;
void setup() {
a = a + 7;
a = a + 7;
a = a + 7;
a = a + 7;
a = a + 7;
a = a + 7;
a = a + 7;
}

Pengulangan (cont’d)oh penulisan kode program menggunakan pengulangan for
int a;
void setup() {
for(byte i = 0; i < 7; i++){
a = a + 7;
}
}
Nilai a akan ditambah dengan angka 7 sebanyak 7 kali. Jika dibandingkan dengan contoh
sebelumnya, penulisan ini terlihat lebih rapi dan terstruktur.

forontoh struktur penulisan for
word a;
void setup() {
//struktur for memiliki 3 parameter yang dapat diisi
//parameter pertama , deklarasi variabel pembatas pengulangan
//parameter kedua , kondisi yang akan diperiksa sebelum
//pengulangan dilakukan
//parameter ketiga , bagian increment atau decrement untuk
//variabel pembatas
for(int i = 0; i < 7; i++) {
a = a + 7;
}
}



Mengakses LCD 16x2 dengan Arduino

    Pada postingan sebelumnya kita sudah membahas tentang mengakses lcd 16x2 dengan atmega16. Kali ini saya akan berbagi tutorial cara menga...