Jumat, 15 Januari 2016

Teknik Pemrograman Part VI - Fungsi - Fungsi Matematika

 

Apa Saja Fungsi Matematika Yang Akan Kita Bahas?


   Pada tutorial sebelumnya telah dibahas basic perhitungan dalam mengolah bilangan matematika dan beberapa fungsi yang disediakan oleh library Arduino terkait dengan trigonometri. Dalam tutorial kali ini, berikut adalah beberapa fungsi yang akan kita bahas berkaitan dengan pengolahan bilangan matematika yang disediakan oleh Arduino : sqrt( ), pow( ), abs( ), max( ), min( ), floor( ), ceil( ), exp( ), log( ), random(maks), dan fungsi random(min,maks) untuk mendapatkan bilangan acak.




A. Mencari Akar Bilangan dan Bilangan Berpangkat


Pada dasarnya Arduino tidak memiliki operator yang digunakan untuk menghitung akar kuadrat. Walaupun bagitu kita dapat menggunakan fungsi bernama sqrt( ) untuk menghitung akar kuadrat. Berikut sketch pengunaan fungsi  sqrt( ) untuk mencari akar kuadrat suatu bilangan.


void setup() {
  
  Serial.begin(9600);
  int nilai=81;
  float akar;

  akar=sqrt(nilai);
  Serial.print("akar dari ");
  Serial.print(nilai);
  Serial.print(" adalah ");
  Serial.println(akar);

}

void loop() {
  // put your main code here, to run repeatedly:

}

Silahkan coba dan lihat hasilnya pada serial monitor.

Sekarang mari mencoba fungsi untuk mencari bilangan berpangkat. Bentuk umum penggunaan fungsi mencari bilangan berpangkat adalah pow (bilangan,pangkat). Berikut sketch-nya.

void setup() {
  
  int x=10;
  Serial.begin(9600);


  Serial.print("2^x= ");
  Serial.println(pow(2,x));

  Serial.print("x^2= ");
  Serial.println(pow(x,2));

  Serial.print("x^0.5= ");
  Serial.println(pow(x,0.5));

  Serial.print("x^(1/3.0)= ");
  Serial.println(pow(x,(1/3.0)));

}

void loop() {
  // put your main code here, to run repeatedly:

}


Untuk sketch yang terakhir penulisan harus seperti diatas 1/3.0 bukan 1/3 karena akan memiliki hasil yang berbeda. Untuk memahaminya lihat penjelasannya pada tutorial sebelumnya disini.




B. Mencari Nilai Logaritma (Log) dan Nilai Exponensial (Exp)

Saya pernah menggunakan kedua fungsi ini ketika membantu teman, untuk keperluan pembaca warna dari kertas plastik yang memiliki warna yang berbeda-beda. Teman saya kuliah dengan jurusan fisika sehingga memiliki analisa dan perhitungan yang menurut saya cukup rumit meskipun dalam aplikasi yang sederhana. Dengan adanya materi ini saya harap  bisa membantu mereka yang membutuhkan perhitungan logaritma dan exponensial pada aplikasi yang dibuat. Bentuk umum dari kedua fungsi tersebut adalah

 log (bilangan)
 exp (bilangan) 

 Contoh sketch yang menggunakan kedua fungsi tersebut dapat dilihat berikut ini :


void setup() {
  
 Serial.begin(9600);
 Serial.print("exp(10)= ");
 Serial.println(exp(10));

 Serial.print("log(10)= ");
 Serial.println(log(10));
}

void loop() {
  // put your main code here, to run repeatedly:

}

 Saya yakin anda sudah mengerti cara menggunakan kedua fungsi diatas. Silahkan coba sendiri.




C. Mendapatkan Bilangan Acak dengan fungsi Random( )

Untuk mendapatkan nilai random dari Arduino kita harus mengetahui dengan baik sifat dari fungsi tersebut dan trik yang digunakan untuk mendapatkan nilai acak yang benar-benar acak. Berikut bentuk umum dari fungsi random( )


 random(maks)
 random(min,maks)
 randomseed(bilangan) 

  Pada bentuk pertama bilangan yang didapat adalah antara 0 sampai nilai maks-1 (nilai maks dikurangi satu). Pada bentuk yang kedua nilai yang didapat adalah antara nilai min sampai nilai maks-1. Lalau apa itu randomseed( ) ? Fungsi randomseed( ) berguna untuk memberikan nilai awal (inisialisai nilai awal) sebagai generator bilangan acak. Perhatikan dua point dibawah agar anda dapat memahami dengan baik cara pembangkitan bilangan acak dengan fungsi random( ) dan randomseed( ).

  • Untuk mendapatkan bilangan acak yang benar-benar acak maka bilangan yang diisikan pada randomseed( ) adalah nilai pembacaan dari pin analog Arduino. Pin ini sendiri sebenarnya tidak dihubungan kemana-mana. Namun justru karena itulah kita akan mendapatkan bilangan yang benar-benar acak. Ketika kita taruh fungsi randomseed( ) dengan pembacaan pin analog Arduino pada fungsi loop maka nilai pembacaan pin analog akan terus berubah-ubah ketika dieksekusi sehingga bilangan yang digenerated juga akan terus berubah ubah.
  • Sebaliknya, untuk mendapatkan bilangan acak namun bilangan acak tersebut dapat mengulang persis maka dilakukan dengan memberikan bilangan randomSeed ( ) dengan nomor tetap. Fungsi randomseed( ) dimulai terlebih dahulu baru kemudian digenerated bilangan acaknya.

Mungkin ada yang bingung untuk pernyataan point kedua. Untuk memahami point kedua secara lebih baik maka silahkan tiru sketch dibawah ini. Fungsi randomseed( ) akan dideklarasi terlebih dahulu baru kemudian bilangan acak akan ditampilkan sebanyak 3 buah.

int minimum=10,maximum=90;

void setup() {
  
  Serial.begin(9600); 
}

void loop() {
  
  Serial.print("Fungsi Random( ) Tanpa Fungsi RandomSeed( )");
  Serial.println(random(minimum,maximum));
  Serial.println(random(minimum,maximum));
  Serial.println(random(minimum,maximum));
  Serial.println("");

  Serial.print("Fungsi Random( ) dgn Fungsi RandomSeed(67)");
  randomSeed(67);
  Serial.println(random(minimum,maximum));
  Serial.println(random(minimum,maximum));
  Serial.println(random(minimum,maximum));
  Serial.println("");

  Serial.print("Fungsi Random( ) dgn Fungsi RandomSeed(analogRead(0))");
  randomSeed(analogRead(0));
  Serial.println(random(minimum,maximum));
  Serial.println(random(minimum,maximum));
  Serial.println(random(minimum,maximum));
  Serial.println("");

  delay(3000);
  
}


Bagaimana? Setelah melihat nilai acak yang dibangkitkan pada serial monitor saya yakin anda telah faham sepenuhnya...




D. Cara Mendapatkan Bilangan Absolut x atau |x|

Untuk mendapatkan nilai absolut suatu bilangan maka dapat digunakan fungsi abs( ). Berikut contoh sketchnya


void setup() {
  int nilai1=9;
  int nilai2=-5;

  Serial.begin(9600);
  Serial.print("nilai1-nilai2= ");
  Serial.println(abs(nilai1-nilai2));
  Serial.println("");

  Serial.print("nilai1*nilai2= ");
  Serial.println(abs(nilai1*nilai2));
  Serial.println("");

}

void loop() {
  // put your main code here, to run repeatedly:

}





E. Fungsi Untuk Mendapatkan Nilai Terkecil atau Terbesar dari Dua Nilai


   Fungsi max( ) berguna untuk mendapatkan nilai terbesar di antara dua nilai argumennya, sedangkan fungsi min( ) berguna untuk mendapatkan nilai terkecil di antara dua nilai argumennya. bentuk umum dari kedua fungsi tersebut adalah sebagai berikut

 max(nilai 1, nilai 2) 
 min(nilai 1, nilai 2)

Berikut contoh sketchnya :

void setup() {
  int nilai1=9,nilai2=10;

  Serial.begin(9600);
  Serial.print("fungsi max()");
  Serial.println(max(9,10));
  Serial.println(max(10,9));
  Serial.println("");

  Serial.print("fungsi min");
  Serial.println(min(9,10));
  Serial.println(min(10,9));

}

void loop() {
  // put your main code here, to run repeatedly:

}






F. Fungsi Untuk Membulatkan Bilangan

  Fungsi yang terkait dengan pembulatan bilangan adalah floor( ) dan ceil( ). Kita akan membahasnya satu-persatu :
  1. Fungsi Floor( )
    Fungsi ini memberikan nilai balik berupa bilangan bulat terdekat yang nilainya lebih kecil atau sama dengan argumennya. contohnya sebagai berikut :
    floor(-6.7) → -7
    floor(6.7) → 6
    floor(4.6) → 4
  2.  
  3. Fungsi Ceil( )
    Fungsi ini memberikan nilai balik berupa bilangan bulat terdekat yang nilainya lebih besar atau sama dengan argumennya.
    contonya sebagai berikut :
    ceil(-6.7) → -6
    ceil(6.7) → 7
    ceil(4.6) → 5
  4.  
  5. Cara ketiga untuk mendapatkan pembulatan bilangan adalah dengan melakukan konversi. Dari situs resmi Arduino hal ini dikenal dengan cast. Klik disini jika ingin lihat penjelasan dari Arduino.  Berikut contoh penggunaannya :

    int i;
    float f;

    f = 3.6;
    i = (int) f; //  i sekarang adalah 3

    Namun dari ketiga cara diatas pembulatan tidak bisa secara otomatis mengenali angka dibelakang koma untuk menentukan pembulatan, apakah pembulatan menjadi nilai lebih besar atau lebih kecil dari argumen. Untuk mendapatkannya anda dapat membaca pada forum Arduino disini. Pada Forum tersebut seseorang memberikan contoh sketch agar pembulatan dapat mengenali nilai angka dibelakang koma sehingga secara otomatis bilangan dapat dibulatkan lebih besar atau lebih kecil dari argumennya.
Berikut ini sketch untuk ketiga contoh diatas :

void setup() {
   
  Serial.begin(9600);
  
  Serial.print("Fungsi floor");
  Serial.println(floor(-6.7));
  Serial.println(floor(6.7));
  Serial.println(floor(4.6));

  Serial.print("Fungsi ceil");
  Serial.println(ceil(-6.7));
  Serial.println(ceil(6.7));
  Serial.println(ceil(4.6));

}

void loop() {
  // put your main code here, to run repeatedly:

}



Atok harap semua meteri diatas dapat difahami dengan baik oleh pembaca. Silahkan mencoba dan jangan menyerah, sukses selalu.


Rabu, 13 Januari 2016

Teknik Pemrograman Part V - Matematika-ria Fungsi Trigonometri

 

 

Fungsi Trigonometri


   Arduino hadir dengan fungsi - fungsi yang mendukung dalam pengolahan bilangan matematika yang berhubungan dengan trigonometri. Berikut beberapa fungsi pada Arduino yang dapat digunakan untuk mengolah bilangan trigonometri



FungsiKeterangan
acos(bilangan)Memberikan nilai balik berupa arc cosinus, bilangan dengan satuan radian
asin(bilangan)Memberikan nilai balik berupa arc sinus,
bilangan dengan satuan radian
atan(bilangan)Memberikan nilai balik berupa arc tangen, bilangan dengan satuan radian
atan2(x,y)Identik dengan atan(x/y)
cos(bilangan)Memberikan nilai balik berupa cosinus,
bilangan dengan satuan radian
sin(bilangan)Memberikan nilai balik berupa sinus,
bilangan dengan satuan radian
tan(bilangan)Memberikan nilai balik berupa tangen,
bilangan dengan satuan radian


Berikut atok berikan contoh penggunaan fungsi tan( ) dalam menghitung nilai tinggi dari segitiga berikut :





   Sesuai dengan rumusnya maka diketahui

tinggi = tan(α)*nilai_samping

   Yang harus diperhatikan bahwa dalam menggunakan fungsi tan( ) ini, nilai yang dimasukkan harus berupa nilai sudut dalam satuan radian bukan dalam satuan derajat, begitu pula untuk fungsi trigonometri yang lainnya. Berikut sedikit atok jelaskan apa itu bilangan radian agar tidak salah dalam memasukkan nilai pada fungsi trigonometri. Penjelasannya ini berdasarkan yang atok ketahui dan informasi dari sini , dari sini, sini, sini dan berikut ini. Jadi kalau salah silahkan salahkan sumber diatas. Hhh

   Selama ini kita sering menggunakan derajat ( ⁰ ) sebagai satuan sudut untuk bidang datar. Tetapi sebenarnya ada dua satuan yang dapat digunakan untuk mengukur suatu sudut, yaitu derajat dan radian. Radian adalah satuan sudut dalam bidang datar yang dilambangkan dengan "rad". Satuan sudut ini pernah masuk dalam kategori satuan tambahan SI, yang kemudian sejak tahun 1995 tidak lagi masuk dalam kategori satuan SI  dan untuk saat ini radian dianggap sebagai satuan turunan dalam SI. Ukuran sudut radian banyak digunakan dalam matematika terapan. Satu radian adalah sudut yang dibentuk oleh dua buah jari-jari lingkaran dimana panjang busur di depan sudut tersebut sama dengan panjang jari-jari lingkaran. Atau dalam gambar di bawah

 jari-jari (r) = busur lingkaran AB (s) 

   Panjang busur suatu lingkaran dapat dihitung dengan mengalikan besarnya sudut dengan jari-jari lingkaran, dengan terlebih dahulu mendapatkan besarnya sudut dalam satuan radian.


  Besarnya sudut sebuah lingkaran apabila kita tuliskan dalam derajat adalah sebesar 360 derajat, tetapi dalam radian adalah 2 phi radian. Sehingga 2 phi setara dengan 360 derajat, atau 1phi = 180 derajat.

 2Π = 360°
 1Π = 180° 

  Perbandingan diatas kemudian dijadikan dasar dalam konfersi derajat ke radian. Perhatiakan hasil coretan Atok berikut :



   Pada gambar n° (n derajat) adalah sudut yang akan dikonfersi ke radian. Sebenarnya rumus diatas masih bisa disederhanakan, tapi Atok sengaja tidak menyederhanakan karena hanya ingin menunjukkan bagaimana rumus diatas terbentuk. Pembaca mungkin lebih pandai dari Atok dalam hal seperti ini, jadi silahkan untuk menyederhanakan rumus diatas sendiri Heee... Semoga dengan ini para pembaca sudah faham apa itu radian dan cara mengkonversi dari satuan derajat ke radian.

   Kembali kesoal diatas, mari kita menghitung tinggi dari segitiga diatas dan menampilkan hasil perhitungan dari Arduino pada serial monitor. Berikut contoh sketch pada Arduino IDE yang digunakan untuk menghitung nilai tinggi berdasarkan rumus diatas


void setup() {
 Serial.begin(9600);

 float jarak=60;
 float alpha=65;

 // Hitung nilai radian
    float radian= ((float)2*3.14)*alpha/360;
    
 // Hitung nilai tinggi
    float tinggi= tan(radian)* jarak;

 // Tampilkan nilai
    Serial.print("tinggi =");
    Serial.println(tinggi); 
}

void loop() {

}



   Penggunaan fungsi yang lain Atok serahkan kepada pembaca, karena belajar tanpa praktek akan terasa kurang di dalam ingatan, jadi silahkan mencoba dan sukses.



Tutorial Selanjutnya :  Teknik Pemrograman Part VI - Fungsi - Fungsi Matematika

Sabtu, 26 Desember 2015

Teknik Pemrograman Part IV - Matematika-ria Basic Perhitungan

 

 

 

Apa Yang Akan Dibahas


   Banyak hal berhubungan dengan bilangan atau matematika yang berguna untuk membuat aplikasi berbasis mikrokontroler. Banyak hal menarik yang melibatkan bilangan dan matematika. Sambil jalan, anda akan menemukan banyak hal yang perlu kita akrabi tentang bilangan dan cara memanipulasinya. Pada tutorial ini akan dibahas operasi metematika yang mencakup penggunaan operator matematika kali bagi kurang tambah, prioritas operator dan konversi nilai int (bilangan bulat) menjadi nilai float (bilangan desimal), sedangkan penggunaan fungsi-fungsi yang berhubungan dengan trigonometri dan matematika serta pembangkitan bilangan acak akan dibahas pada tutorial selanjutnya.



"KALBAGIKURTAMBA"


  Wah apa maksud judul diatas? mungkin atok salah ketik? hee. Tenang-tenang, maksud judul diatas tidak lain adalah operasi perkalian, pembagian, pengurangan dan penambahan. Operasi seperti yang disebutkan diatas biasa dinamakan operator aritmetika. Berikut operator-operator aritmetika yang dapat digunakan



OperatorKeterangan
+Operator Penjumlahan

Contoh : 1 + 2 = 3
              1 + 2.5 = 3.5
-Operator Pengurangan

Contoh : 5 - 1 = 4
              10 - 9 = 1
*Operator Perkalian

Contoh : 2*5 = 10
              6*7 = 42
/Operator Pembagian

Contoh : 14/2 = 7
              6/3 = 2
%Operator Modulus atau sisa pembagian

Contoh : 8%2 = 0
              8%3 = 2
              9%5 = 4


   Bentuk seperti 14 / 2 dinamakan ekspresi atau ungkapan. Ekspresi akan menghasilkan nilai. Ekspresi 14 / 2 menghasilkan nilai berupa 7. Pada konteks ekspresi seperti 14 / 2, nilai 14 dan 2 dinamakan operand dan / dinamakan operator. Baik silahkan tiru sketch berikut dan tampilkan hasilnya melalui serial monitor

//-----------------------------------------------
//  Contoh Sketch Operasi Aritmetika Menggunakan 
//  Operator * / - +
//----------------------------------------------- 


void setup() 
{
    Serial.begin(9600);

    // Operasi Penjumlahan
    Serial.print("3+4 = ");
    Serial.println(3+4);

    // Operasi Pengurangan
    Serial.print("9-5 = ");
    Serial.println(9-5);

    // Operasi Perkalian
    Serial.print("3*2 = ");
    Serial.println(3*2);

    // Operasi Pembagian
    Serial.print("7/2 = ");
    Serial.println(7/2);

    Serial.print("7/2.0 = ");
    Serial.println(7/2.0);

    // Operasi Modulus
    Serial.print("7%2 = ");
    Serial.println(7%2);
    
}

void loop() 
{


}


Perhatikan perbedaan hasil pada ekspresi 7 / 2 dengan 7/ 2.0 hal ini akan dibahas pada bagian selanjutnya.



Memangnya Operator Modulus Berguna dalam Pemrograman ?


   Bagi yang pernah belajar bahasa pemrograman, penggunaan operator modulus pastinya hal yang sudah biasa. Untuk yang sudah pernah tetapi lupa atau yang belum pernah sama sekali mungkin belum terfikirkan aplikasi seperti apa yang membutuhkan penggunaan operator modulus. Sehingga saya merasa perlu sedikit melakukan review tentang operator modulus. Salah satu aplikasi operator modulus adalah untuk menentukan suatu bilangan apakah termasuk bilangan genap atau bilangan ganjil. Hal ini dapat ditentukan dengan menggunakan aturan "bilangan genap jika dibagi 2 akan mendapati sisa bagi bernilai 0 dan bilangan ganjil jika dibagi 2 akan mendapati sisa bagi bernilai 1". Kita akan bisa membuatnya setelah mempelajari pernyataan if dan operasi pengambilan keputusan yang lain. Contoh aplikasi lain yang pernah saya gunakan dengan menggunakan operator modulus adalah membuat jam digital dengan menggunakan 7 segment. Dengan menggunakan operator modulus maka dapat ditentukan nilai detik menit dan jam.



Prioritas Operator


Jika kita akan menghitung 4+5*3 maka hasilnya adalah 19 bukan 12. Hal ini dikarenakan operator * memiliki prioritas yang lebih tinggi dari operator + sehingga operasi perkalian akan dilakukan terlabih dahulu. Di Arduino prioritas operator seperti ini juga ada. Perhatikan tabel dibawah yang menyatakan prioritas untuk masing-masing operator


OperatorPrioritas
++ dan --1
+ dan - (bersifat unary)2
*, /, dan %3
+ dan - (yang bersifat binary)4


Lalu apa yang dimaksud unary dan binary yang ada pada baris 2 dan 4 pada tabel prioritas operator diatas. Suatu operator dinamakan unary jika melibatkan satu operand (lihat diatas kalau lupa apa itu operand), sedangkan operator binary adalah operator yang melibatkan dua operand.

contoh operator binary :  2 + 3 (melibatkan dua operand yaitu 2 dan 3)
                                      4 + 8 (melibatkan dua operand yaitu 4 dan 8)

contoh operator unary :  +7 (melibatkan satu operand yaitu 7)
                                      -23 (melibatkan satu operand yaitu 23)
Operator unary digunakan untuk menyatakan nilai plus atau minus suatu bilangan.

contoh lain : a + (-b)  atau a - (+b)

   tanda - dan + pada (-b dan +b) merupakan operator unary karena melibatkan satu operand, sedangkan tanda + dan - pada bagian tengah adalah operator binary karena memiliki dua operand yaitu a dan b. Atok rasa sudah cukup jelas apa itu operator unary dan binary. Mari lanjutkan !



Bagaimana Kalau Ingin Menjumlahkan Dahulu Baru Melakukan Perkalian ?


Pertanyaan ini mungkin merujuk bagaimana kalau ingin melakukan terlebih dahulu operasi dengan operator yang memiliki prioritas rendah padahal terdapat operator dengan prioritas yang lebih tinggi. Untuk kasus seperti ini maka gunakan pasangan ( ) pada bagian yang ingin dihitung terlebih dahulu. Silahkan coba sketch berikut dan tampilkan hasilnya pada serial monitor

/* -------------------------------------------
 * Contoh Sketch memperlihatkan perbedaan 
 * operasi tanpa tanda kurung dan dengan 
 * menggunakan tanda kurung
 * -------------------------------------------*/

void setup() 
{
     Serial.begin(9600);

     Serial.print("3+4*2");
     Serial.println(3+4*2);

     Serial.print("(3+4)*2");
     Serial.println((3+4)*2);
}

void loop()  
{ 
 
}


Dengan begini saya rasa anda sudah faham perbedaan hasil operasi dengan menggunakan pasangan ( ) untuk melakukan operasi dengan operator yang memiliki prioritas yang lebih rendah terlebih dahulu.


Mengkonversi nilai int (bilangan bulat) Menjadi nilai float (bilangan desimal)


   Jika anda tidak mengetahui cara ini maka berdasarkan pengalaman yang saya lihat dari teman-teman saya, maka penulisan program akan menjadi satu persatu atau baris demi baris. Misalnya pembagian sederhana 5/4*5 , saya yakin bagi yang tidak tahu cara penulisan program yang benar akan menghasilkan nilai yang tidak sesuai dengan yang seharusnya. Sehingga biasanya melakukan alternatif dengan menulis programnya menjadi satu-persatu, yakni baris pertama 5/4 kemudian pada baris kedua hasil pembagian baru dikalikan dengan 5. Perhatikan sketch berikut ini, tulis pada Arduino IDE anda dan tampilkan hasinya di serial monitor

// -------------------------------------
// contoh pembagian bilangan bulat
// -------------------------------------
void setup() 
{
    Serial.begin(9600);

    Serial.print("4/5 = ");
    Serial.println(4/5);

    Serial.print("4.0/5 = ");
    Serial.print(4.0/5);

}

void loop() 
{

}


   Terlihat hasil yang berbeda pada operasi pembagian sketch diatas. Yang pertama menghasilkan nilai 0 dan yang kedua 0.8. Hal yang harus anda ingat adalah "pembagian dua bilangan bulat pasti akan menghasilkan bilangan bulat". Dengan mengubah cara penulisan salah satu atau kedua operand menjadi bilangan desimal (memiliki angka dibelakang koma)  maka hasil pembagian berubah menjadi bilangan desimal. Itulah sebabnya hasil operasi pada sketch yang kedua menjadi 0.8 karena penulisan nilai 4 menjadi 4.0


   Lalu Bagaimana Kalau Operasi Pembagian dengan Operand-nya berupa Variabel ? misalnya int total / int cacah. Bagaimana cara menuliskannya?

Silahkan tiru sketch berikut dan tampilkan hasilnya pada serial monitor

// ----------------------------------
// Konversi Nilai int ke Nilai float
// ----------------------------------

void setup() 
{
    Serial.begin(9600);
    int total=25;
    int cacah=10;

    Serial.print("toal/cacah");
    Serial.println(total/cacah);

    Serial.print("float(total)/cacah");
    Serial.println(float(total)/cacah);
}

void loop() 
{

}


   Pada baris program total /cacah maka hasil yang didapat adalah 2, hal ini dikarenakan kedua variabel adalah bilangan bulat sehingga hasil bagi yang didapat juga berupa bilangan bulat. Sedangkan pada baris program float (total) /cacah hasil yang didapatkan adalah 2.5 karena nilai total yang bertipe bilangan bulat di konversi terlebih dahulu menjadi bilangan bertipe float atau desimal. Sesuai aturan jika salah satu atau kedua operand merupakan sebuah bilangan desimal maka hasil yang didapat juga berupa bilangan desimal. Untuk kepentingan konversi data, anda bisa menggunakan pengkonversi data (type cast) sebagai berikut


Type CastKeterangan
char( )Mengkonversi ke char
byte( )Mengkonversi ke byte
int( )Mengkonversi ke int
word( )Mengkonversi ke word
long( )Mengkonversi ke long
float( )Mengkonversi ke float

Silahkan anda coba sendiri kegunaan masing-masing type cast diatas, atok rasa tidak terlalu sulit karena memiliki cara yang sama dengan contoh type cast float( ) pada sketch diatas. Selamat bereksplorasi




Tutorial Selanjutnya : Teknik Pemrograman Part V - Matematika-ria Fungsi Trigonometri








Kamis, 24 Desember 2015

Teknik Pemrograman Part III - Variabel Global dan Variabel Lokal


Pendahuluan

   Pada tutorial ini kita akan membahas lebih dalam mengenai variabel berkenaan dengan ruang lingkup variabel. Jika anda belum membaca tutorial mengenai apa itu variabel dan konstanta silahkan klik disini.



Variabel Global


   Variable global adalah sebuah variabel yang dapat dikenali diseluruh fungsi. Variable global dideklarasikan di luar "fungsi setup (void setup(){})" dan "fungsi loop (void loop(){})". Perhatikan sketch berikut:

int x; // variabel global
float z; // variabel global

void setup() {

}

void loop() {

}

Variable x dan z akan dikenali penggunaanya di seluruh fungsi. Bagaimana, Masih bingung?? Tinggalkan dulu rasa bingung anda dan kita lanjutkan ke variabel lokal.




Variabel Lokal


   Variabel lokal merupakan sebuah variabel yang hanya dikenali didalam sebuah fungsi dimana variabel tersebut dideklarasikan. Sebelum itu saya akan jelaskan sedikit tentang fungsi karena ini akan mempermudah anda untuk memahami penggunaan variabel lokal dan variabel global. Perhatikan sketch berikut ini


void rumah()
{
  int a=20; // variabel lokal
  float b=9.9; // variabel lokal
  Serial.println(a);
  Serial.print(b);
}

void setup() {
Serial.begin(9600);
}

void loop() {
rumah(); // melakukan pemanggilan fungsi rumah
delay(2000);
}


void rumah(){} merupakan sebuah fungsi. Salah satu bentuk fungsi yang umum digunakan adalah sebagai berikut


void rumah()
{
   // letakkan program disini
}


   Hal ini sama saja dengan "fungsi void setup" dan "fungsi void loop". Saya rasa dengan ini anda sudah mulai mengerti apa itu sebuah fungsi. Kembali pada pembahasan tentang variabel lokal, pada contoh sketch diatas sebuah fungsi dengan nama rumah dideklarasikan. Didalam fungsi rumah terdapat variabel a dan variabel b. Kedua variabel tersebut dinamakan dengan variabel lokal karena hanya akan dikenali di dalam fungsi rumah. Ikuti sketch berikut, lakukan verify dan perhatikan apa yang akan terjadi?


void rumah()
{
  int a=20; // variabel lokal
  float b=9.9; // variabel lokal
  
}

void setup() {
  Serial.begin(9600);
}

void loop() {
              rumah(); // pemanggilan fungsi rumah
              Serial.println(a);
              Serial.print(b);
}


   Jika dilakukan verify maka akan muncul sebuah pesan error "a was not declated in this scope". Error terjadi karena variabel a tidak dikenali, variabel a hanya akan dikenali penggunaannya di dalam fungsi void rumah. Pada sketch sebelumnya pernyataan "Serial.println(a)" dan "Serial.print(b)" ditaruh di dalam fungsi rumah, jika dilakukan verify maka tidak akan muncul pesan error karena pemanggilan nilai a dan b pada pernytaan "Serial.println(a)" dan "Serial.print(b)" masih berada di dalam fungsi rumah. Perhatikan sketch berikut yang menunjukkan variabel a dan variabel b di deklarasikan sebagai variabel global.

int a=20; // variabel global
float b=9.9; // variabel global

void rumah()
{
    //program sengaja dibiarkan kosong  
}

void setup() 
{
    Serial.begin(9600);
}

void loop() 
{
       rumah(); // pemanggilan fungsi rumah

       Serial.println(a);
       Serial.print(b);
       delay(2000);
}



Jika dilakukan verify dan ditampilkan di Serial monitor maka akan muncul angka 20 dan 9.9 secara berkelanjutan. Dengan begini saya harap anda dapat memahami apa itu variabel global dan variabel lokal.


Variabel Statis


   Variabel Statis adalah variabel yang dideklarasikan didalam suatu fungsi dengan kata kunci static. Dengan menggunakan variabel statis maka nilai variabel akan tetap dipertahankan walaupun pemanggilan fungsi telah berakhir. Berikut akan di bandingkan sketch yang menggunakan variabel non-statis dan yang menggunakan variabel statis.


                      // Variabel non-statis 
void coba()
{
   int a=2;
   a++; // nilai a ditambah 1
   Serial.println(a); // tampilkan nilai a
}

void setup() 
{
   Serial.begin(9600);
}

void loop() 
{
   coba(); // pemanggilan fungsi coba 
   delay(2000);
}


   Pada void loop pemanggilan fungsi coba pada eksekusi yang pertama akan menampilkan nilai 3 pada serial monitor berdasarkan eksekusi pernyataan "Serial.println(a);Karena tidak menggunakan variabel statis maka pada eksekusi selanjutnya pun akan tetap bernilai 3. Pada prinsipnya, setelah fungsi coba selesai dieksekusi dan beralih ke eksekusi pernyataan delay(2000) maka nilai a akan direset kembali ke nilai 0. Ketika fungsi coba dieksekusi kembali maka baris perintah int a=2 memberikan a nilai 2. Silahkan coba sendiri pada Serial monitor untuk melihat hasil sketch diatas. Sekarang ikuti program berikut dan perhatikan apa yang terjadi.



void coba()
{
   static int a=2; // deklarasikan variabel statis
   a++; // nilai a ditambah 1
   Serial.print(a); // tampilkan nilai a
}

void setup() 
{
   Serial.begin(9600);
}

void loop() 
{
   coba(); // pemanggilan fungsi coba
   delay(2000);
}


Lakukan verify dan tampilkan hasilnya pada serial monitor. Dengan menggunakan kata kunci static maka nilai a tetap dipertahankan meskipun fungsi coba telah selesai dieksekusi, sehingga nilai a yang ditampilkan pada serial monitor akan terus bertambah.


Tutorial Selanjutnya : Teknik Pemrograman Part IV - Matematika-ria Basic Perhitungan








Rabu, 23 Desember 2015

Teknik Pemrograman Part II - Pengenal, Variabel dan Konstanta


Pengenal


Pengenal (identifier) digunakan untuk memberikan nama untuk elemen-elemen pemrograman yang memerlukan nama, seperti fungsi, variabel, dan konstanta. Aturan penulisan pengenal adalah sebagai berikut :
  1. Nama pengenal harus diawali huruf atau garis bawah
  2. Karakter kedua dan seterusnya dalam nama pengenal boleh menggunakan huruf, angka, ataupun sebuah garis bawah (_)
  3. Pemisah kata pertama dan kedua tidak boleh menggunakan spasi
  4. Tidak boleh mengandung karakter khusus seperti koma, titik dan karakter khusus lainnya
  5. Huruf kecil dan besar adalah berbeda

Berdasarkan keterangan diatas maka pengenal berikut adalah benar
  1. _data
  2. data_matematika
  3. d4t4_m4tem4tik4
  4. D4t4M4tem4tiK4

Berikut kesalahan dalam menuliskan pengenal
  1. 4ata // tidak boleh menggunakan angka sebagai awal pengenal
  2. data matematika //tidak boleh menggunakan spasi sebagai pemisah dua kata
  3. data.matematika. //tidak boleh mengandung karakter khusus seperti titik

Bagi yang masih bertanya-tanya apa gunanya pengenal maka tinggalkan dulu kebingungan anda, yang penting anda faham cara membuat pengenal yang benar. Karena pengenal sangat erat kaitannya dengan variabel, konstanta dan sebuah fungsi.



Variabel



   Variabel digunakan untuk menyimpan data. Baik data yang berupa bilangan maupun huruf. Nilai variabel dapat berubah-ubah sesuai dengan hasil eksekusi program yang sedang dijalankan. Variabel terdiri dari tipe data dan pengenal. Contohnya adalah sebagai berikut:

int kompak;
int atau integer adalah sebuah tipe data, dan kompak adalah sebuah pengenal.

   Dalam pemrograman, variabel akan kita gunakan misalnya untuk menyimpan nilai hasil penambahan atau pengurangan. Sehingga hasil tersebut dapat kita tampilkan ke dalam serial monitor atau kita gunakan untuk proses perhitungan selanjutnya. Yang perlu diketahui kebanayakan orang tidak akan menyebutkan variabel diatas dengan "variabel int kompak", namun hanya menyebutnya dengan "variabel kompak". Yang sebenarnya adalah int kompak adalah satu kesatuan yang disebut dengan variabel. Karena Variabel tidak bisa hanya terdiri atas tipe data saja atau pengenal saja. Suatu variabel ditetapkan untuk menyimpan suatu jenis data saja. Jika bilangan maka hanya dapat menyimpan bilangan saja begitupun dengan String atau huruf. Sebelum digunakan variabel perlu dideklarasikan atau diinisialisasikan terlebih dahulu. Deklarasi variabel adalah kita memesan tempat di memory dengan alamat tertentu dan tipe data tertentu. Bentuk deklarasi variabel adalah sebagai berikut.

tipe data (spasi) pengenal;

untuk satu buah variabel saja atau bentuk berikut untuk lebih dari satu variabel

tipe data (spasi) pengenal, tipe data (spasi) pengenal, tipe data (spasi) pengenal;


Berikut contoh untuk satu variabel saja:
int angka;
char kata;

Atau berikut deklarasi untuk lebih dari satu variabel:
int angka, char kata, float pecahan;
Setelah dideklarasikan  maka variabel diatas dapat diberikan nilai dengan menggunakan operator penugasan (=). Contohnya sebagai berikut;

int angka; //inisialisasi
angka = 50;

Dengan begitu isi variabel int angka adalah menjadi 50. Jika tidak diisi setelah dideklarasikan secara default variabel int angka adalah bernilai 0.




Selain int Tipe Data Apa Saja yang Disediakan?


Berikut ini bermacam tipe data yang dapat digunakan di Arduino

    Tipe DataKeteranganJumlah Byte
    intmenyimpan bilangan bulat antara -32768 dan 327672
    shortidentik dengan int2
    unsigned intbilangan bulat yang berkisar antara 0 sampai 655352
    wordidentik dengan unsigned int2
    longbilangan bulat yang berkisar antara -2147483648 dan 21474836474
    unsigned longbilangan bulat yang berkisar antara 0 sampai 42949672954
    floatbilangan pecahan antara 3.4028235E+38 dan -3.4028235E+384
    doublesama dengan float4
    booleanmenyatakan benar (true) atau salah (false)1
    charmenyatakan sebuah karakter1
    bytemenyatakan sebuah byte yang dapat menampung bilangan bulat antara 0 sampai 2551
    stringmenyatakan deretan karakter-


    Untuk memahami penggunaan sejumlah variabel dengan berbagai tipe, anda bisa mencoba sketch berikut dan melihat hasilnya di serial monitor:

     
    void setup() {
      
      Serial.begin(9600);
    
      // Deklarasi variabel
      char ch;
      int angka;
      float angka_pecahan;
    
      //Pemberian nilai
      ch='A';
      angka=23;
      angka_pecahan=2.45;
    
      Serial.print("Isi ch = ");
      Serial.println(ch);
    
      Serial.print("Isi angka = ");
      Serial.println(angka);
      
      Serial.print("Isi angka_pecahan = ");
      Serial.println(angka_pecahan);
    }
    
    void loop() {
      // put your main code here, to run repeatedly:
    
    }

    Hal yang perlu diperhatikan adalah nilai yang diisi harus sesuai dengan tipe data yang digunakan. Contoh sederhana, tipe data yang digunakan int maka jangan digunakan untuk menyimpan bilangan berkoma atau desimal. Angka dibelakang koma tidak akan disimpan karena int (integer) memang dikhususkan untuk menyimpan data dengan tipe bulangan bulat.


    Konstanta


       Pengertian konstanta pada dasarnya adalah sama dengan variabel, namun konstanta menyatakan nilai yang tetap dan tidak berubah selama program dieksekusi. Di Arduino konstanta sering digunakan untuk mendifinisikan pin Arduino. Sebagai contoh sketch berikut adalah untuk memanipulasi LED agar blinking, namun bukan hal tersebut yang akan kita bahas namun penggunaan konstanta untuk mendefinisikan pin Arduino.


    // the setup function runs once when you press reset or power the board
    void setup() {
      // menginisilisasikan pin 13 sebagai output.
      pinMode(13, OUTPUT);
    }
    
    // the loop function runs over and over again forever
    void loop() {
      digitalWrite(13, HIGH);   // turn the LED on
      delay(1000);              // wait for a second
      digitalWrite(13, LOW);    // turn the LED off
      delay(1000);              // wait for a second
    }


    Sketch menjadi seperti berikut setelah menggunakan konstanta untuk mendefinisikan pin 13 Arduino


    const int PIN_13 = 13; // Definisikan konstanta 13 sebagai PIN_13 
    void setup() {
      // initialize digital pin 13 as an output.
      pinMode(PIN_13, OUTPUT);
    }
    
    // the loop function runs over and over again forever
    void loop() {
      digitalWrite(PIN_13, HIGH);// bandingkan dengan sketch sebelumnya 
      delay(1000);              
      digitalWrite(PIN13, LOW); // bandingkan dengan sketch sebelumnya
      delay(1000);              
    }

    Nilai 13 tersebut merupakan sebuah konstanta yang tidak akan berubah nilainya dengan asumsi sebagai pin 13 milik Arduino. Semoga dapat difahami dengan baik, mungkin perlu mengulang untuk membacanya agar lebih faham. Selain cara diatas untuk membuat konstanta dapat juga dengan menggunakan #define Formatnya adalah sebagai berikut:

    define (spasi) Nama Konstanta (spasi) nilai

    contoh :  #define PIN_13 13

       Sebagai tambahan HIGH, LOW, dan OUTPUT adalah nama-nama konstanta yang disediakan oleh Arduino. HIGH dan LOW biasa digunakan untuk pin-pin digital di Arduino. HIGH menyatakan tegangan 5V dan LOW menyatakan tegangan 0V.  true dan false juga merupakan konstanta., namun ditulis dalam huruf kecil. true menyatakan nilai selain nol. namun, secara internal  true dinyatakan dengan 1. false menyatakan nilai nol.


    Kapan Menggunakan Konstanta Dari Pada Menggunakan Variabel ?


       Gunakan konstanta jika nilai yang didefinisikan tersebut tidak dimaksudkan untuk diubah setelah di deklarasikan. Jika ada kemungkinan bahwa nilainya perlu diubah ketika program dijalankan maka pilihan yang tepat adalah variabel. Hal yang menarik adalah konstanta tidak memakan tempat di memori. Sehingga anda perlu bijak untuk memilih antara menggunakan variabel atau konstanta dalam hal efisiensi penggunaan memori.



    Tutorial Selanjutnya : Teknik Pemrograman Part III - Variabel Global dan Variabel Lokal