Professional Documents
Culture Documents
Muchamad
Malik S.Kom
2011
Kelebihan dari arduino adalah Arduino mempunya bahasa pemroraman sendiri, mirip bahasa C
namun memiliki library sendiri. Di dalam mikrokontrolernya sudah terdapat boot loader yang
digunakan sebagai penjembatan antara mikrokontroler dengan software compilernya. Arduino
membuka semua sourcenya mulai dari diagram rangkain, jalur pcb, software compiler.
A. ARDUINO PROGRAMMING
Diskripsi
Operasi ini memberikan hasil penambahan, pengurangan, pembagian dan perkalian dari dua
operan. Operasi adalah pengaturan menggunakan dua tipe data dalam operan seperti 9/4 adalah 2
dimana 9 dan 4 adalah intejer. Selain itu bisa juga diartikan operasi tersebut merupakan dapat
menangani hasil yang mempunyai range dalam sebuah tipe data ( 1 intejer mempunyai nilai
32,767 sampai -32,768). Jika beberapa operan mempunyai perbedaa tipe data yang “besar” yang
digunakan untuk perhitungan. Salah satu operan yang digunaka adalah tipe float atau tipe double,
Contoh
y = y + 3;
x = x - 7;
i = j * 6;
r = r / 5;
parameter
Tips pemrograman :
Ketahui bahwa integer constan default untuk int sehingga beberapa konstanta
Pilih besaran variable yang besarnya cukup untuk menangani hasil dari penghitungan
Anda
Ketahui bahwa tanda operasi bilangan yang akan Anda gunakan harus langsung sesuai
Untuk pemrograman yang memerlukan pecahan, gunakanlah vaiabel float, tapi perlu
disadari hal ini mempunyai kelemahan dalam memiliki ukuran yang besar dan kecepatan
Single equal sign dalam pemrograman C adalah pemanggilan operator tugas (assignment
operator). Hal ini berbeda dengan kelas aljabar yang mengindikasikan persamaan atau
apapun atau ekspresi yang berada di sebelah kanan dan menyimpannya ke dalam variable
sebelah kiri.
Contoh
tips pemrograman
variable yang ada di sebelah kiri dari assignment operation (= sign) dibutuhkan untuk digunakan
menjaga nilai yang sudah tersimpan di dalamnya. Jika hal itu tidak cukup besar untuk menangani
sebuah nilai, nilai yang sudah tersimpan di variable tersebut akan menjadi salah.
Jangan terkecoh dengan assignment operator [=] (sama dengan) dengan operator komparasi [==]
2.1 Int
Intejer merupakan tipe data yang utama dari macam penyimpanan dan terdiri dari 2 nilai byte.
Mempunyai range dari -32,768 sampai 32,762 (nilai minimal adalah -2^15 dan nilai maksimal
(2615)-1 ).
Contoh
Syntax
Tips Coding
Saat beberapa variable dibuat untuk melebihi kapasitas maksimal, maka nilai tersebut akan
int x
x = -32,768;
x = x - 1; // x sekarang menjadi 32,767 – berbalik ke arah neg.
x = 32,767;
x = x + 1; // x sekarang menjadi -32,768 – berbalik kea rah positif
Unsign int sama seperti int, namun dalam pemberian angka negative tidak diperkenankan,
sebagai gantinya nilai negative digantikan nilai positif sehingga mempunyai range 0 sampai
65,535 (2^16)-1).
Contoh
Syntax
Tips Coding
Ketika membuat variable yang melebihi kapasitas, maka akan membalik ke kapasitas minimum
unsigned int x
x = 0;
x = x - 1; // x sekarang 65535
x = x + 1; // x sekarang 0
sebuah word menyimpan 16 bit angka dari 0 sampai 65535 sama seperti unsigned int
contoh
word w = 10000;
2.4 byte
contoh
2.5 float
tipe data untuk angka floating point, sebuah angka yang mempunyai titik decimal. Floating-point
sering dugunakan pada nilai yang mendekati analog dan nilai yang berkesinambungan karena
mempunyai resolusi yang lebih tinggi dari pada intejer. Floating-point mempunyai besar
Float hanya mempunyai kepresisian 6 – 7 dijit decimal. Yang maksudnya total angka dari
dijitnya bukan angka dari titik kanan setelah decimal. Tidak seperti platform, dimana Anda dapat
mendapatkan akurasi dari penggunaan tipe data double (sampai 15 dijit) dalam arduino, double
komparasi. Seperti misalkan 6.0 / 3.0 hasilnya mungkin bukan 2.0 Anda harus mengganti dan
mengecek nya karena nilai absolute berbeda dengan angka yang memiliki ketelitian.
Contoh
float myfloat;
Syntax
Contoh Kode
int x;
int y;
float z;
x = 1;
y = x / 2; // y sekarang 0, ints tidak dapat mengani nya
z = (float)x / 2.0; // z sekarang .5 (Anda memiliki hasil 2.0, bukan 2)
2.6 double
Dalam Arduino, Double sama seperti float namun memiliki kepresisian yang sedikit berbeda.
Pengguna yang membawa kode dari source code dari luar yang didalamnya terdapat variable
double lebih baik diuji terlebih dahulu untuk mengetahui perbedaan ketepatan yang terdapat pada
Arduino.
2.7 Long
Variable long adalah variable yang mempunyai penyimpanan angka yang lebar yaitu 32 bit
Contoh
Syntax
Undigned Long adalah variable yang mempunyai lebar 32bit dan tidak seperti long, unsigned
long tidak dapat menyimpan angka negative, mempunyai range antara 0 sampai 4,294,967,295
(2^32 – 1)
void setup()
{
Serial.begin(9600);
}
void loop()
{
Serial.print("Time: ");
time = millis();
//mencetak waktu saat program dijalankan
Serial.println(time);
// besaran waktu tunggu saat tidak mengirim sejumlah data
delay(1000);
}
Syntax
2.9 Boolean
Boolean menangani dua nilai yaitu true atau false sedangkan variable menempati satu byte dari
memori.
Contoh
void setup()
{
pinMode(LEDpin, OUTPUT);
pinMode(switchPin, INPUT);
digitalWrite(switchPin, HIGH); // menghidupkan pullup resistor
}
void loop()
{
if (digitalRead(switchPin) == LOW)
{ // switch ditekan - pullup membiarkan pin high normally
delay(100); // delay untuk switch
running = !running; // toggle variable running
digitalWrite(LEDpin, running) // indikasi via LED
}
}
Sebuah tipe data yang mengambil 1 byte memori untuk menyimpan nilai karakter. Karakter
huruf tertulis dalam tanda kutip satu seperti „A‟ (untuk karakter yang banyak, menggunakan
Anda dapat melihat encoding yang lebih spesifik dalan ASCII CHART. Ini dimaksudkan dapat
memungkinkan untuk menjalankan aritmatika dalam nilai ASCII yang menggunakan karakter
misalkan „A‟ +1 memiliki nilai 66, karena nilai ASCII dari huruf A adalah 65.
Tipe dara char adalah angka encoding dari -128 sampi 127
Contoh
Tipe data yang membutuhkan 1 byte dari memori. Sepeti pada tipe data byte, unsigned char
Contoh
Array adalah kumpulan dari beberapa variable yang saling berkaitan dengan sebuah nomer
indeks.
int myInts[6];
int myPins[] = {2, 4, 8, 3, 6};
int mySensVals[6] = {2, 4, -8, 3, 2};
char message[6] = "hello";
anda dapat mendeklarasikan aray tanpa menginisialisasikan nya seperti dalam myInts.
Array merupakan zero indexed yang menunjuk pada array yang telah diinisialisasi sebelumnya,
int myArray[10]={9,3,2,4,3,2,7,8,9,11};
// myArray[9] contains 11
// myArray[10] is invalid and contains random information (other
memory address)
Tidak seperti BASIC atau JAVA, dalam compiler C tidak mengecek untuk mengetahui jika akses
array sudah sesuai batas besaran array yang Anda deklarasikan sebelumnya.
mySensVals[0] = 10;
x = mySensVals[4];
Array dapat dimanipulasikan dalam perulangan for, dimana penghitungan perulangan digunakan
sebagai indeks pada beberapa elemen array. Seperti contoh untuk mencetak beberapa elemen
sebuah array pada serial port, Anda dapat melakukan sesuatu seperti berikut :
int i;
for (i = 0; i < 5; i = i + 1) {
Serial.println(myPins[i]);
}
2.13 Void
Kata kunci void hanya digunakan dalam mendelarasikan fungsi. Hal ini untuk mendandakan
bahwa fungsi itu diharapkan untuk memberi informasi dari fungsi yang telah dipanggil.
contoh
void loop()
{
// ...
}
2.14 string
text string dapat dituliskan ke dalam dua cara, Anda dapat menggunakan tipe data String yang
merupakan bagian dari dasar versi 0019, atau Anda dapat menggunakan sebuah string luar dari
Contoh
char Str1[15];
char Str2[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o'};
char Str3[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o', '\0'};
char Str4[ ] = "arduino";
char Str5[8] = "arduino";
char Str6[15] = "arduino";
deklarasi sebuah array dari chars tanpa inisialisasi seperti dalam Str1
inisial dengan sebuah konstanta string dalam tanda kutipan, compiler akan menghitung
lebar konstanta array untuk panjang kontanta string dan sebuah pengahiran karakter null,
Str4
inisial array, memberi ruang ekstra untuk string yang lebih besar, Str6
Biasanya, banyak string yang diahiri dengan sebuah karakter null (kode ASCII 0). Hal ini
membolehkan fungsi (seperti Serial.print() ) untuk memanggil diahir string. Selain itu, meraka
akan melanjutkan pembacaan byte subskuen dari memori yang bukan merupakan bagian dari
string.
Hal ini dimaksud saat Anda membutuhkan string yang memiliki ruang untuk karakter yang lebih
banyak dari teks yang anda inginkan. Ini kenapa Str2 dan Str5 membutuhkan 8 karakter
sedangkan “arduino” hanya 7, posisi yang terahir secara otomatis akan ditempai oleh karakter
null.Str4 akan otomatis sebesar 8 karakter, satu dari external null. Dalam Str3, kami mempinyai
Bagaimana bekerja dengan teks yang berjumah besar, seperti dalam poyek LCD display untuk
membentuk array dari string. Karena string merupakan array, hal ini sebenarnya sebuah contoh
Dalam kode ini, tanda bintang setelah tipe data char “char*”, merupakan sebuah array dari
“pointer”. Semua nama array merupakan pointer, jadi ini merupakan array di dalam array.
Contoh
void setup(){
Serial.begin(9600);
}
void loop(){
for (int i = 0; i < 6; i++){
Serial.println(myStrings[i]);
delay(500);
}
Kelas String, bagian dari dasar versi 0019, membolehkan kita memanipulasi string dari teks lebih
komplek dari cara array karakter yang digunakan. Anda dapat menggabungkan String,
menambahkannya mencari dan megganti substring dan sebagainya. Hal itu lebih banyak
4 Penghitungan
4.1 abs(x)
parameter
x : cacah
perhatian
karena tentang abs() berfungsi untuk penerapan, hindari penggunaan fungsi yang terdapat tanda
parameter
kembalian
contoh
Memetakan ulang sebuah angka dari sebuah range ke yang lainnya. Ini adalah sebuah nilai dari
fromLow yang sudah dipetakan ke toLow, sebuah nilai dari fromHigh pada toHigh.
Contoh
contoh
void loop()
{
int val = analogRead(0);
val = map(val, 0, 1023, 0, 255);
analogWrite(9, val);
}
Catatan tambahan
long map(long x, long in_min, long in_max, long out_min, long out_max)
{
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
4.3 min(x,y)
5.1 setup()
fungsi setup() untuk memulai sketsa pemrograman, inisilaisasi variable, pin mode, memulai
menggunakan library dan lainnya. Fungsi setup akan dijalankan sekali setelah arduino
Contoh
int buttonPin = 3;
void setup()
{
Serial.begin(9600);
pinMode(buttonPin, INPUT);
}
void loop()
{
// ...
}
5.2 loop()
setelah membuat fungsi setup (), yang harus dilakukan adalah menginisialisasi dan mengeset
nilai inisial dari fungsi loop() dengan tepat apa nama yang akan diberikan. Gunakan ini untuk
int buttonPin = 3;
delay(1000);
}
6 Control Sructure
Format untuk if :
if (x > 120)
digitalWrite(LEDpin, HIGH);
if (x > 120){
digitalWrite(LEDpin1, HIGH);
digitalWrite(LEDpin2, HIGH);
} // semua dianggap benar
x == y (x sama dengan y)
Struktur if/else membeikan kita control yang lebih besar untuk menangani berbagai statement
dibandingkan dengan statemen dasar if. Jadi struktur if else merupakan gabungan pernyataan if
bersaang yang membolehkan logika ya atau tidak. Untuk contoh, sebuaah input analog dapat
mengerjakan sebuah aksi yang mempunyai inputan kurang dari 500 dan yang lain beraksi jika
inputan tersebut > 500, maka kodenya dapat dituliskan sebagai berikut
Else juga dapat digunakan secara bertingkat sampai dengan tak terhingga selama proses yang
kita inginkan belum menyatakan sebuah kebenaran atau berlogika true, berikut contoh kodenya
Seperti halnya if statemen, switch…case megontrol alir dari program yang membolehkan
beberapa parameter yang berbeda untuk dieksekusi dalam kondisi yang bervariasi.
Contoh
switch (var) {
case 1:
//do something when var equals 1
break;
case 2:
//do something when var equals 2
break;
default:
// if nothing else matches, do the default
// default is optional
}
Syntax
switch (var) {
case label:
// statements
break;
case label:
// statements
break;
default:
break selalu ada dalam statemen case, dan digunakan untuk ahiran dari bermacam macam case,
tanpa statemen break, statemen swich akan terus dijalankan sesuai ekpresi tanpa henti (“falling-
through”) sampai menemukan statemen break atau sampai satemen swich ditutup.
6.5 For
Pernyataan for digunakan untuk mengulang sebuah blok statemen yang terus berputar. Biasanya,
pernyataan for digunakan untuk mengkombinasikan sebuah array dalam menyatakan sebuah pin
atau data.
//statement(s);
Inisialisasi dilakukan pertama dan sekali saja. Condition adalah berapa kali kita akan melakukan
looping, increment adalah menunjukan bahawa looping akan dijalankan secara bertingkat.
Contoh :
void setup()
{
void loop()
{
for (int i=0; i <= 255; i++){
analogWrite(PWMpin, i);
delay(10);
}
}
Tips
Dalam C, statemen for sangat fleksibel disbanding dengan for yang ada pada BASIC. Beberapa
diantaranya dalah elemen header bisa saja dihilangkan, namun tanda titik koma harus tetap
disertakan.
menghasilkan: 2,3,4,6,9,13,19,28,42,63,94
Contoh lain
void loop()
{
int x = 1;
for (int i = 0; i > -1; i = i + x){
analogWrite(PWMpin, i);
if (i = 255) x = -1; // switch direction at peak
delay(10);
6.6 while
while akan melakukan perulangan secara kontinyu dan tidak terbatas samapi ekspresi tersebut
sebuah sensor karena perulangan ini tak akan berahir sampai adanya kondisi eksternal yang
meutupnya
Syntax
while(expression){
// statement(s)
Parameters
contoh
var = 0;
while(var < 200){ //mengulang sesuatu sampai 200 kali
var++;
}
6.7 do-while
do
{
// statement block
} while (test condition);
contoh
do
{
delay(50); // wait for sensors to stabilize
x = readSensors(); // check the sensors
6.8 break
break digunakan untuk mengahiri perulangan dari do, for atau while. Dan juga digunakan untuk
Contoh
6.9 goto
untuk melompati alur program ke program yang sudah kita beri label.
Syntax
label:
tips
Dalam menggunakan goto, adalah tidak lazim dalam pemrograman C. beberapa buku
memberikan gambaran bahwa statemen goto justru akan mengganggu jalannya alur program,
karena tidak bisa stemen yang ada didalam goto tidak dapat dikenali dan tidak dapat di debug,
sehingga hasilnya pun tidak bisa kita ketahui. Berikut contoh programnya :
mengahiri sebuah fungsi dan mengembalikan sebuah nilai dari sebuah fungsi tersebut untuk
Syntax:
return;
return value;
contoh
sebuah fungsi untuk membandingkan inputan sebuah sensor kepada sebuah threshold
int checkSensor(){
if (analogRead(0) > 400) {
return 1;
else{
return 0;
}
}
6.11 continue
statemen countinue membiarkan atau melanjutkan penghentian perulangan (do, for atau while).
Digunakan untuk melanjutkan pada pengecekan sebuak ekspresi kondisi dari loop dan
Contoh
digitalWrite(PWMpin, x);
delay(50);
}
7 FUNCTION
7.1 pinMode()
digunakan untuk mengkonfigurasi pin secara spesifik sebagai sebuah intputan atauoutputan.
Syntax
pinMode(pin, mode)
Parameters
contoh
void setup()
void loop()
{
digitalWrite(ledPin, HIGH); // set LED on
delay(1000); // waktu tunggu dalam second
digitalWrite(ledPin, LOW); // set LED off
delay(1000); // waktu tunggu dalam second
}
7.2 digitalWrite()
menulisakan logika HIGH atau LOW pada pin dijital. Jika pin telah dikonfigurasi sebagai
OUTPUT dengan pinMode(), itu berarti arus akan diset dengan nilai 5V(atau 3.3V dalam board)
Jika pin dikonfigurasi sebagai INPUT, maka penulisan logika HIGH dengan digitalWrite() akan
membutuhkan sebuah resistor pullup internal 20K .penulisan LOW akan mendisable pullup nya.
Pullup resistor cukup untuk menyalakan LED dengan redup, jadi jika LED bekerja namun samar,
Syntax
digitalWrite(pin, value)
contoh
void setup()
{
pinMode(ledPin, OUTPUT); // sets the digital pin as output
}
void loop()
{
digitalWrite(ledPin, HIGH); // sets the LED on
delay(1000); // waits for a second
digitalWrite(ledPin, LOW); // sets the LED off
delay(1000); // waits for a second
}
7.3 digitalRead()
membaca nilai dari spesifikasi digital pin yang bernilai HIGH atau LOW
Syntax
digitalRead(pin)
contoh
void setup()
{
pinMode(ledPin, OUTPUT); // set digital pin 13 sebagai output
pinMode(inPin, INPUT); // set digital pin 7 sebagai input
}
void loop()
{
val = digitalRead(inPin); // baca input pin
digitalWrite(ledPin, val); // set LED untuk nilai pada button
}
Jika pin tidak terkoneksi pada digitalRead() maka dapat dikembalikan pada HIGH atau LOW
Input pin alanalog dapat digunakan sebagai digital pin, tertunjuk sebagai A0, A1, dsb.
8.1 analogReference(type)
Fungsi ini digunakan untuk mengkonfigurasi voltase acuan yang digunakan untuk input analog,
sebagai pilihannya :
DEFAULT : default acuan analog sebesar 5V (dalam 5V Arduino board) atau 3.3 V
INTERNAL : sebuah acuan built-inn sama dengan 1.1V dalam ATmega168 atau
ATmega328 dan 2.56V pada ATmefa8 (tidak terdapat pada Arduino Mega)
Parameters
EXTERNAL).
Setelah mengganti acuan analog, pembacaan pertama pada analogRead() mungkin idak bisa
akurat.
Jika Anda menggunakan acuan voltase external (digunakan untuk pin AREF), Anda harus
mennyeting acuan analog pada EXTERNAL sebelum memanggil analogRead(). selain itu, Anda
bisa mengaktifkan acuan voltase bersamaan (internally generated) dan pada pin AREF, dapat
membaca nilai dari pin analog. Board arduino menampung 6 chanel (8 chanel pada Mini dan
Nano, 16 pada Mega), 10-bit ADC. Ini berarti akan memetakan voltase antara 0 sampai 5 volt
dalam nilai integer antara 0 dan 1023. Sehingga menghasilkan resolusi pembacaa dai 5volt/1024
unti atau 0.0049volt (4.9mV) per unit. Panjang input dan resilusi dapat digantkan dengan
alalogReference().
Hal ini membutujkan 100milisecond (0.0001s) untuk membaca input analog, jadi maksimum
Syntax
analogRead(pin)
parameter
pin : nomer dari pin input aalog untuk dibaca dari (0 sampai 5 pada umumnya, 0 sampai 7 pada
contoh
void setup()
{
void loop()
{
val = analogRead(analogPin); // read the input pin
Serial.println(val); // debug value
}
8.3 analogWrite()
analogWrite() dapat digunakan untuk menulis nilai analog (gelombang PWM) untuk sebuah pin.
Dapat juga digunakan menyalakan LED dengan cahaya yang bervariasi atau mengontrol motor
dengan kecepatan yang bervariasi. Frekuensi sinyal PWM bisa mencapai 490 Hz. Di dalam
board Arduino ATmega168 atau ATmega328, pin yang berfungsi adalah 3,5,6,9,10 sdan 11. Di
dalam Arduino Mega bekerja pada pin 2 bersama 13, dalam Arduino ATmega8 hanya
mendukung analogWrite() pada pin 9,10 dan 11. Anda tidak dapat memanggil pinMode() untuk
Fungsi dari analogWrite tidak bisa bekerja tanpa pin analog atau fungsi analogRead.
Syntax
analogWrite(pin, value)
parameter
value : putaran penugasan : antara 0 (selalu off) dan 255 (selalu on)
lebih tinggi. Hal ini dikarenakan interaksi dengan fungsi millis() dan delay() yang membagi
Contoh
Set output pada LED dengan nilai yang disesuaikan dari nilai potensiometer
void setup()
{
pinMode(ledPin, OUTPUT); // sets the pin as output
}
void loop()
{
val = analogRead(analogPin); // read the input pin
analogWrite(ledPin, val / 4); // analogRead values go from 0 to 1023,
analogWrite values from 0 to 255
}
9 Advance I/O
9.1 pilseIn()
Fungsi ini digunakan untuk membaca sebuah pulsa (HIGH atau LOW) pada sebuah pin
pulseIn(pin,value)
parameter
timeout (optional) : angka dalam mikrosekon waktu tunggu pulsa untuk memualai, sefaulnya
contoh
int pin = 7;
unsigned long duration;
void setup()
{
pinMode(pin, INPUT);
}
void loop()
{
duration = pulseIn(pin, HIGH);
}
shift out adalah sebuah byte dari data dalam satu bit per satuan waktu.
Syntax
parameter
bitOrder : bit yang akan diberikan untuk shift out berupa MSBFIRS atau LSBFIRST (Most
dataPin dan clockPin harus selalu dikonfigurasi sebagai output untuk memanggil pinMode()
contoh
9.3 tone()
Dapat menghasilkan gelombang kotak dengan spesifikisai frekuensi (50% siklus kerja) dalam
sebuah pin.biasanya pin ini dikoneksikan pada buzzer atau speaker untuk memutar bunyi. Bunyi
ini akan diputar terus menerus sebulum ada pemanggilan noTone(). Jika tone() sedang bekerja
pada sebuah pin, maka pin yang lain tidak akan mempunyai efek apapun, jadi bila kita akan
membunyikan suara pada beberapa pin, maka kita harus menyertakan fungsi noTone() pada
Syntax
tone(pin, frequency)
9.4 noTone()
Begitujuga sebaliknya, noTone() digunakan untuk mengahiri gelombang trigger dari tone()
syntax
noTone(pin)
10.1 Serial
Untuk berkomunikasi dengan computer atau device lain, semua board arduino mempunyai serial
port (UART atau USART). Untuk berkomunikasi mengunakan digital pin 0 (RX) dan 1 (TX)
seperti computer dengan USB. Dalam Arduino Mega, mempunyai tambahan 3 serial port : serial
1 pada pin 19 (RX) dan 18 (TX), serial 2 pada pin 17 (RX) dan 16 (TX), serial 13 pada pin
15(RX) dan 14 (TX), untuk berkomuniksai dengan PC, Anda membutuhkan USB to Serial
pin pada RS232 secara langsung, karena mempunyai +/-12v yang bisa merusak board Arduino.
10.2 INTERUPT
10.2.1 interrupt()
program lain yang lebih penting untuk berjalan terlebih dahulu. Beberapa fungsi tidak akan dapat
bekerja jika interupsi tersebut diable, dan berkomunikasi kembali ketika diabaikan.
Contoh
void setup() {}
void loop()
{
noInterrupts();
// critical, time-sensitive code here
interrupts();
// other code here
}
R2G | Robot Research Group
10.2.2 noInterupts()
mematika interupsi (Anda dapat mengaktifkan kembali dengan interups()).fungsi ini adalah
Contoh
void setup() {}
void loop()
{
noInterrupts();
// critical, time-sensitive code here
interrupts();
// other code here
}
fungsi yang lebih spesifik untuk memanggil external interrupt. Mengganti beberapa funsi
sebelumnya yang telah disertakan. Kebanyakan board Arduino mempunyai 2 external interup.
Nomer 0 (dalan digital pin 2) dan 1 (dalam digital pin 3). Arduino Mega mempunyai 4 tambahan
: nomer 2 (pin 21), 3 (pin 20), 4 (pin 19) dan 5 (pin 18)
parameter
function : fungsi untuk memanggil interupsi yang terjadi, menjadi acuan bagi interrupt servicer
routine
nilainya :
RISING untuk trigger saat pin berpindah dari low menjadi high
Interupsi digunakan untuk membantu menangani masalah penjadualan waktu pada program
mikrokontroler.
Contoh
void setup()
{
pinMode(pin, OUTPUT);
attachInterrupt(0, blink, CHANGE);
}
void loop()
{
digitalWrite(pin, state);
}
void blink()
{
state = !state;
}
11.1 delay()
syntax
delay(ms)
parameter
contoh
void setup()
{
pinMode(ledPin, OUTPUT); // sets the digital pin as output
}
void loop()
{
digitalWrite(ledPin, HIGH); // sets the LED on
delay(1000); // waits for a second
digitalWrite(ledPin, LOW); // sets the LED off
delay(1000); // waits for a second
}
11.2 delayMicroseconds()
member jeda program dalam beberapa waktu (mikrodetik), 1000 microsecond adalah 1
delayMicroseconds(us)
parameter
contoh
void setup()
{
pinMode(outPin, OUTPUT); // sets the digital pin as output
}
void loop()
{
digitalWrite(outPin, HIGH); // sets the pin on
delayMicroseconds(50); // pauses for 50 microseconds
digitalWrite(outPin, LOW); // sets the pin off
delayMicroseconds(50); // pauses for 50 microseconds
}
Mengkonfigurasi pin nomer 8 sebagai pin output, memberikan pulsa dengan waktu 100
Manual ini menggunakan Operating System (OS) Windows XP. Sesaat setelah USB
dihubungkan ke Komputer, maka akan muncul Window baru yang bertujuan untuk instalasi
Driver USB Device (Pilih > Install from a list or specific location (Advanced) kemudian klik
tombol Next> )
Selanjutnya adalah masuk ke Software Arduino, versi Arduino pada saat manual ini dibuat yang
terbaru adalah Arduino – 0017, silahkan cek update terbarunya pada
http://arduino.cc/en/Main/Software. Klik ICON Arduino.exe, kita akan masuk ke tampilan
software Arduino – 0017
4. Trial Program :
A. Percobaan kontrol Lampu LED
> Lampu LED bisa dikontrol menggunakan akses pada port no.13
> Lampu LED kedip-kedip : hubungkan kabel USB download ke modul, open software arduino
(IDE) dengan versi diatas 0012, pada software terdapat hardware selection (Tools > Board),
pilih Arduino Nano.
> Modul dilengkapi dengan 2 buah Push Button (S6 dan S7)
> Terdapat jumper untuk mengatur konfigurasi daripada penggunaan push button. Ketika jumper
pin digunakan, maka push button dapat digunakan, ketika jumper pin dicabut, maka push button
tidak bisa digunakan dan jalurnya menjadi dapat digunakan (S6 = pin 2 dan S7 = pin 3).
if(val==2)
{
val=0;
digitalWrite(ledPin, LOW); // Set Low untuk port LED, LED mati
}
}
> Percobaan berikut adalah menggunakan push button (S6 dan S7) untuk mengontrol lampu
LED.
Pada IDE Arduino versi 0012, hadir dengan library file yang salah satunya mensupport untuk
kontrol motor servo (yaitu pin 9 dan pin 10). Pada percobaan ini digunakan pin 9.
> Berikut ini adalah penjelasan koneksi Jumper PWR_Sel dalam kaitannya penambahan catu
daya dari luar untuk motor servo
R2G | Robot Research Group Page 60
Jumper PWR_Sel dicabut saat modul menggunakan catu daya tambahan dari luar, USB kabel
terhubung ke Komputer, dan port DC Jack terhubung ke adaptor suply; Kondisi ini membuat
catu daya antara mikroprosesor dengan catu daya ke motor servo dipisahkan sekaligus mencegah
terjadinya arus besar masuk ke dalam mikroprosesor (untuk penggunaan normal, posisikan
Jumper dalam kondisi dicabut). Jumper PWR_Sel dipasang berarti semua catu daya (Vcc) pada
modul terhubung ke catu daya tambahan. Penggunaan Vcc sebagai supply tegangan keluar
modul (misal ke sensor, motor servo, dll) tidak diijinkan, karena kestabilan catu daya ke
mikroprosesor dapat terganggu.
> Berikut ini listing kode programnya:
#include <Servo.h>
Servo myservo;
int pos = 0;
void setup()
{
myservo.attach(9);
}
void loop()
{
for(pos = 0; pos < 180; pos += 1)
{
myservo.write(pos);
delay(15);
}
for(pos = 180; pos>=1; pos-=1)
{
myservo.write(pos);
delay(15);
}}
Berikut listing program untuk menggunakan port mana saja untuk mengontrol motor servo:
#include <Servo.h>
Servo servo1;
Servo servo2;
Servo servo3;
void setup()
{
servo1.attach(5);
servo1.setMaximumPulse(2200);
servo2.attach(11);
servo2.setMaximumPulse(2200);
servo3.attach(12);
servo3.setMaximumPulse(2200);
Serial.begin(19200);
Serial.print("Ready");
}
void loop()
{
static int v = 0;
if ( Serial.available()) {
char ch = Serial.read();
switch(ch) {
case '0'...'9':
v = v * 10
break;
case 'a':
servo1.write(v);
v = 0;
break;
case 'b':
servo2.write(v);
v = 0;
break;
> Pada modul juga tersedia jumper pin untuk memastikan modul motor driver digunakan, jika
pin jumper dicabut, maka modul motor driver tidak bisa digunakan.
R2G | Robot Research Group
Pada gambar sebelumnya, terlihat bahwa modul motor driver menggunakan port pin No. 4, 5, 6,
dan 7. Pin 5 dan 6 adalah untuk kontrol PWM Motor, dimana Pin 5 digunakan untuk membuat
ON (Enable 1/ E1) Motor 1, sedangkan Pin 6 membuat ON (Enable 2/ E2) Motor 2. Pin 4 untuk
control arah putaran Motor 1 (Clock Wise-CW/ Counter Clock Wise-CCW) dan Pin 7 untuk
kontrol arah putaran (Clock Wise-CW/ Counter Clock Wise-CCW) Motor 2.
void stop(void)
{
digitalWrite(E1,LOW);
digitalWrite(E2,LOW);
}
void advance(char a,char b)
{
analogWrite (E1,a); // PWM Speed Control
digitalWrite(M1,HIGH);
analogWrite (E2,b);
digitalWrite(M2,HIGH);
}
void back_off (char a,char b)
{
analogWrite (E1,a);
digitalWrite(M1,LOW);
analogWrite (E2,b);
digitalWrite(M2,LOW);
}
Lakukan pemilihan port serial dimana modul terhubung dengan Komputer (untuk OS Windows,
nomor port serial yang terhubung dengan modul bisa dilihat pada My Computer (Right Click) >
Properties > Hardware > Device Manager > Serial Port.
> Kemudian terdapat menu Serial Monitor, digunakan untuk memilih baud rate (Click Send
button) yang digunakan gar komunikasi antara modul dengan Komputer berjalan dengan
sempurna.
Modul memiliki komunikasi level serial TTL secara full-duplex, pin/ port serial terdapat pada
pin 0 (Rx) dan pin 1 (Tx), dimana pada modul terdapat chip yang akan menkonversi data dari
USB menjadi interface yang menggunakan TTL.
Untuk membangun komunikasi serial menggunakan modul ini, pada umumnya menggunakan
syntax : Serial.begin(), Serial.read(), Serial.print(), Serial.println(), dsbnya.
Berikut contoh kode program dimana menggunakan port serial untuk mengirimkan data huruf
“L” dari IDE (Komputer) ke modul dengan ditandai dengan kedipan lampu LED (L) pada board
modul jika data berhasil diterima:
delay(500);
digitalWrite(ledPin, LOW);
R2G | Robot Research Group
}
}
}
Berikut ini contoh kode program untuk pengujian output dari port serial modul, dimana
modulakan mengirimkan data berupa karakter & string (“Hello!HI, I AM ROBOT”):
void setup()
{ Serial.begin(9600);
}
void loop() {
Serial.print("Hello!");
Serial.println("HI, I AM ROBOT");
Modul
delay(1000);
}
Modul
delay(1000);
}
Modul ini kompatibel (bersesuaian) dengan modul komunikasi wireless APC220 dan
modulbluetooth (DF-Bluetooth V.2).
Pada percobaan keluaran (output) Port Serial sebelumnya, telah ditunjukkan bahwa modul dapat
mengirimkan data serial dari modul ke komputer menggunakan kabel USB. Dengan adanya
APC220 ini, maka data dikirimkan dengan menggunakan media udara. Lakukan setting koneksi
antara komputer dengan APC220 terlebih dahulu, menggunakan software debugger yaitu COM
PORT Debugger V2.0. Masukkan informasi COM Bluetooth yang digunakan, baud rate, data bit,
parity, dan flow control, kemudian klik OK, akan terlihat hasil nya pada program (lihat gambar
dibawah);
Modul Bluetooth DF-BluetoothV2 dipasang pada modul mikrokontroler dan dongle/ USB
Klik kanan pada icon bola dengan tanda tanya→ search service, secara otomatis akan dijalin
koneksi antara modul dengan USB Bluetooth. Klik kanan kembali pada icon bola dengan tanda
Tanya → akan terdeteksi koneksi dari port serial Bluetooth (misalnya : COM30), ini adalah port
COM yang baru. Setelah sukses melakukan koneksi, maka logo tanda tanya berwarna biru
berubah menjadi hijau. Terakhir, ganti nilai baud rate pada port serial USB bluetooth menjadi
115200 bps, karena Bluetooth V2 memiliki baud rate pada 115200 bps.
Module BluetoothV2 menggunakan serial port daripada modul, ketika hendak melakukan
Untuk penggunaan sensor Infrared GP2D12, pada modul tersedia 8 buah pin analog (pin 0 – 7),
Infrared GP2D12 didesain dari SHARP Jepang, digunakan untuk mengukur jarak berdasarkan
pantulan sinar inframerah dengan jarak kerja antara 10cm ~ 80 cm.
Untuk mempertahankan output signal yang lebih stabil, pada bagian belakang sensor dapat
ditambahkan kapasitor dengan nilai 10uF (lingkaran merah menunjukkan kutub ositif dari kaki
kapasitor).
Buka tools untuk membaca data serial dari IDE, untuk melihat hasil pembacaan daripada
sinyal(pilih baud rate 19200), jarak halangan pada depan sensor akan mempengaruhi nilai
(berupa dataserial) yang dikirimkan dari modul ke komputer.
Sensor jarak ultrasonik PING dari Parallax merupakan sensor yang paling banyak digunakan
pada berbagai proyek riset dan robotika, kelebihannya antara lain selain dapat mengukur jarak
3cm – 3m, juga hanya menggunakan 1 jalur data. Pastikan Anda tidak salah pasang rangkaian
PING. Contoh rangkaian berikut merupakan aplikasi pengukuran jarak menggunakan Arduino:
PING.pde:
// Program Demo PING untuk mengukur Jarak
const int pingPin = 7;
void setup() {
// initialize serial communication:
Serial.begin(9600);
}
// The same pin is used to read the signal from the PING))): a HIGH
pinMode(pingPin, INPUT);
duration = pulseIn(pingPin, HIGH);
Serial.print(inches);
Serial.print("in, ");
Serial.print(cm);
Serial.print("cm");
Serial.println();
delay(100);
}
Sensor Suhu
LM35 adalah sensor suhu dari National Semiconductor yang mempunyai akurasi tinggi.
Outputnya berupa tegangan analog dan memiliki jangkauan pengukuran -55ºC hingga +150ºC
dengan akurasi ±0.5ºC. Tegangan output adalah 10mV/ºC. Output dapat langsung dihubungkan
port mikrokontroler yang memiliki ADC atau dengan Arduino, karena Arduino memiliki port
ADC (analog input) sebanyak 6 buah.
Analog input pada Arduino memiliki resolusi 10-bit, yang dapat memberikan keluaran 2^10 =
1024 nilai diskrit. Bila digunakan catu 5V, resolusi yang dihasilkan adalah 5000mV/1024 =
4.8mV. Karena LM35 memiliki resolusi output 10mV/ºC, maka resolusi termometer yang dibuat
dengan Arduino adalah 10mV/4.8mV ~ 0.5ºC.
Mari kita membuat sensor suhu sederhana dengan Arduino dan LM35. Pertama-tama siapkan
rangkaian seperti ini:
// deklarasi variable
int tempPin = 0;
void setup(){
}void loop()
tempC = analogRead(tempPin);
Serial.println((int)tempC,DEC);
delay(1000); }
Kontes Robot Cerdan Indonesia divisi beroda tingkat regional III STMIK AMIKOM menerjukan
tim berodanya dengan nama 4T-V Wheel. Robot ini terdiri dari 8 sensor ultrasound yang
digunakan untuk menghindari tembok agar robot tersebut tidak menabrak dinding, sebuah sensor
suhu sebagai pendeteksi panas api, digital compas sebagai menentu arah.
Tugas dari robot ini adalah untuk memadamkan api yang disediakan oleh dewan juri di suatu
ruangan secara acak, sehingga robot harus menemukan sumber api dan harus
memadamkannya.Setelah robot tersebut berhasil memadamkan, tugas robot ini adalah kembali
ketempat semula (home base) dengan maksimal waktu 2 menit.
STMIK AMIKOM menunjuk tim AMIKOM ROBOTIC untuk membuat robot ini. Dari personel
AMIKOM ROBOTIC tersebut sebagian besar adalah anggota dari R2G yang bergerak dibidang
desain elektronika dan software engineering. Untuk itu, hasil kreasi robot ini adalah hasil kerja
keras tim AMIKOM ROBOTIC dan tim dari R2G.
Untuk membuat robot ini kita memerlukan sebuah Arduino Mega dengan jenis mikrokontroler
ATMega128 karena memiliki input output yang lebih banyak dibanding mikrokontroler jenis
lain.
Pengendalian motor kanan dan motor kiri memanfaatkan motor driver berbasis LM293 / LM298.
Untuk mengendalikan kecepatannya dapat dikontrol dengan memanfaatkan PWM (pulse Width
Modulation) dengan range antara 0 - 254
Sensor ultrasound
Sensor yang digunakan untuk memadamkan api menggunakan Thermophil Array Sensor (TPA)
seri 81. Cara kerja sensor ini adalah mendeteksi perubahan suhu dilingkungan dan membedakan
profil-profil warna yang biasanya dikeluarkan oleh api.
Untuk mendeteksi garis yang ada di dalam pintu ruangan, menggunakan sensor garis dengan
memanfaatkan photodiode dan led.
#include <Wire.h>
#include <Servo.h>
#include <SoftwareSerial.h>
#include <LiquidCrystal.h>
int pos; //
#define limitKanan 35
#define limitKiri 36
int mati=0;
void setup()
// set LCD 16 X 2
lcd.begin(16, 2);
//lcd.setCursor(0,0);
//lcd.setCursor(0,1);
//delay(3000);
pinMode(limitKanan,INPUT);
pinMode(limitKiri,INPUT);
pinMode(leftDir1, OUTPUT);
pinMode(leftDir2, OUTPUT);
pinMode(rightDir1, OUTPUT);
pinMode(rightDir2, OUTPUT);
myservo.attach(8);
pinMode(rxPin, INPUT);
Wire.begin();
//Serial.print(clrScrn, BYTE);
//Serial.print(hideCsr, BYTE);
//Serial.print(software);
Serial.begin(9600);
void loop()
ultrasoundValue = ping(i);
//Serial.print(us[i]);
//Serial.print(ultrasoundValue);
//Serial.print("in, ");
//Serial.print(ping(0));
//Serial.print(" ");
//Serial.print(ping(1));
//Serial.print(" ");
//Serial.println(ping(2));
delay(50);
lside=((ping(0))+(ping(2)/4))/2;
rside=((ping(4))+(ping(3)/4))/2;
int haluan_ki;
if (jrk>=20)
if ((haluan_ki>=-5)&&(haluan_ki<=0))
{ forward(150,160);}
if (haluan_ki==0)
{ forward(150,150);}
if ((haluan_ki>11)&&(haluan_ki<=15))
{ forward(160,150);}
if ((haluan_ki>15)&&(haluan_ki<=22))
{ forward(170,150);}
//=================================
if (ping(2)<=20) {
if (rside>lside){
if(lside>rside){
leftTurn(200,200);
else
if (ping(2)<=15) {
if (rside>lside){
rightTurn(200,200);
if(lside>rside){
leftTurn(200,200);
else{ rightTurn(130,130);}
lcd.setCursor(0,0);
lcd.print(haluan_ki);
lcd.setCursor(0,1);
lcd.print(jrk);
R2G | Robot Research Group
Serial.print(haluan_ki);
// delay(50);
void scanKiri()
long jrkUS1,jrkUS2,jrkUS3,jrkUS4,jrkUS5,jrkUS6,jrkUS7;
//jrkUS1 = US1();
jrkUS2 = US2();
jrkUS3 = US3();
jrkUS4 = US4();
jrkUS5 = US5();
jrkUS6 = US6();
jrkUS7 = US7();
jarak=(jrkUS3+jrkUS6+jrkUS7)/3;
if ((haluan_ki>=-5)&&(haluan_ki<=5))
{forward(150,150);}
if ((haluan_ki>5)&&(haluan_ki<=10))
{forward(140,150);}
if ((haluan_ki>10)&&(haluan_ki<=15))
{forward(130,150);}
if ((haluan_ki>15)&&(haluan_ki<=18))
{forward(120,150);}
if (haluan_ki>18)
{rightTurn(130,130);}
if ((haluan_ki<-5)&&(haluan_ki>=-10))
{forward(150,140);}
if ((haluan_ki<-10)&&(haluan_ki>=-15))
{forward(150,130);}
if (haluan_ki<-15)
{forward(160,100);}
//=================================
if (us4>40) { forward(160,140);}
if (us6<=15) { rightTurn(130,130);}
if (us3<=12) { rightTurn(130,130);}
else {
if (us4>40) { forward(160,140);}
if (us6<=15) { rightTurn(130,130);}
if (us3<=12) { rightTurn(130,130);}
R2G | Robot Research Group
else{ rightTurn(130,130);}
Serial.println(haluan_ki);
lcd.setCursor(0,0);
lcd.print(haluan_ki);
lcd.setCursor(0,1);
lcd.print(jarak);
lcd.setCursor(5,1);
lcd.print(jrkUS2);
lcd.setCursor(8,1);
lcd.print(jrkUS5);
lcd.setCursor(11,1);
lcd.print(jrkUS7);*
////////////////////////////
void kipastpa()
temperature[i] = getData(i+2);
digitalWrite(13,HIGH);
delay(1500);
digitalWrite(13,LOW);
mati=1;
if(mati==0){
for(pos = 160;pos>=1;pos-=1) {
temperature[i] = getData(i+2);
if (temperature[3]>50 || temperature[4]>50 ||
temperature[5]>50){
digitalWrite(13,HIGH);
delay(1500);
digitalWrite(13,LOW);
mati=1;
temperature[i] = getData(i+2);
if (temperature[3]>50 || temperature[4]>50 ||
temperature[5]>50){
digitalWrite(13,HIGH);
delay(1500);
digitalWrite(13,LOW);
mati=1;
analogWrite(2, a);
analogWrite(5, b);
digitalWrite(leftDir2, HIGH);
digitalWrite(rightDir2, HIGH);
void backward()
//pwmMundur(100,100);
digitalWrite(leftDir2, LOW);
digitalWrite(rightDir2, LOW);
analogWrite(2, a);
analogWrite(5, b);
digitalWrite(leftDir2, LOW);
digitalWrite(rightDir2, HIGH);
analogWrite(2, a);
analogWrite(5, b);
digitalWrite(leftDir2, HIGH);
digitalWrite(rightDir2, LOW);
Wire.endTransmission();
digitalWrite(ultraSoundSignalPins[index], LOW);
delayMicroseconds(2);
digitalWrite(ultraSoundSignalPins[index], HIGH);
delayMicroseconds(5);
digitalWrite(ultraSoundSignalPins[index], LOW);
pinMode(ultraSoundSignalPins[index], INPUT);
digitalWrite(ultraSoundSignalPins[index], HIGH);
cm = microsecondsToCentimeters(echo);
return (cm);
// The ping travels out and back, so to find the distance of the
return microseconds / 29 / 2;
///////////////////////////////////////////////////