Aplikasi Serial










1. Tujuan
kembali 
Memahami prinsip kerja aplikasi serial
2. Alat dan Bahan
  • Arduino Mega 2560
  • Jumper
  • Power
  • Ground

3. Landasan Teori
kembali 

Untuk mengirim data dari arduino ke PC dan menerima data dari PC  kita bisa menggunakan berbagai cara salah satunya yg paling sederhana adalah komunikasi Serial yg terdapat pada setiap board Arduino.

Perlu kita ketahuai  pemrograman sketch arduino menggunakan gaya bahasa C tapi pada pembuatan  librarynya menggunakan C++  yg   menerapkan pemrograman Objek (Class). Untuk itu sy sarankan anda sebaiknya mengetahuai  sedikit dasar-dasar pemrograman berorientasi objek.
Pemrograman code  arduino (sketch) untuk komunikasi serial menjadi  mudah karena fungsi fungsi sudah tersedia  dlm class yg tersedia untuk komunikasi Serial . Instance  dari class  untuk komunikasi serial  (objek)  sudah dibuatkan namanya Serial . Untuk arduino yg mempunyai lebih dari 1 port serial misal arduino  mega256 nama objek untuk komunikasi serialnya  adalah  Serial1, Serial2, Serial3.

Penulisan objek  dan fungsi  pada library arduino adalah  :   namaobjek.namafungsi
contoh :  Serial.read()  , artinya  kita memanggil fungsi read() dari  objek bernama Serial .
Data yg dikirim  ke serial port  akan dikirim ke buffer pengirim (Tx buffer)  begitupun data yg diterima  adalah data yg diambil  dari  buffer penerima (RX buffer).
https://pccontrol.files.wordpress.com/2014/06/serial-buffer.jpg 
Data yang dikirm dan diterima arduino  dalam bentuk ASCII. Misalnya  program arduino  mengirim huruf  A maka akan dikirim sebenarnya adalah 1 byte code ascii yaitu 65 .  Jika kita mengirim angka 123 maka sebetulnya yg dikirm adalah 3 byte data ascii yaitu 49, 48, dan 50 . Selengkapnya anda bisa lihat tabel ASCII berikut :
https://pccontrol.files.wordpress.com/2014/06/ascii.jpg
Karena data yg diterima arduino  juga  dlm bentuk ASCII (char)  maka kita tdk bisa langsung melakukan operasi matematika dari data ASCIIpada program sketch arduino.  Data ASCII dari buffer serial harus dirubah dulu ke bentuk numerik/bilangan (int).  misalkan kita menerima  data  ‘4’ dan ‘3’ maka jika kita langsung  jumlahkan   ‘3’ + ‘4’ = 103 ,  karena sebenarnya kita menjumlahkan code ascii  ‘3’ = 51  dancode ascii  ‘4’  =52    (lihat tabel ASCII).
Untuk merubah data ascii  ke data  numerik  dengan cara yg cukup sederhana yaitu :
-untuk  mendapatkan angka 0 dari ascii ‘0’  dgn cara   ‘0’- 48=0   (atau bisa juga ditulis  ‘0’-‘0’=0)
-untuk  mendapatkan angka 1 dari ascii  ‘1’  dgn cara   ‘1’- 48=1  (atau bisa juga ditulis  ‘1’-‘0’=1)
-dan seterusnya.
jadi kalau mau menjumlahkan data ascii  ‘3’ dan ‘4’  yg kita terima dari RX Bufer  maka code program seharusnya adalah    :
int hasil = (‘3’ – ‘0’) + (‘4’ – ‘0’)   atau
int hasil = (‘3’- 48) + (‘4’-48)   maka hasil berupa bilangan integer  7.

Fungsi fungsi  yg tersedia untuk komunikasi serial Arduino

  • if (Serial) : Untuk mengecek apakah Port sudah siap
  • Serial.available() : Untuk mengecek apakah data sudah ada di buffer penerima
  • Serial.begin() : untuk mengeset kecepatan transmisi data
  • serial.end() : Untuk menon-aktifkan pin rx dan tx sbg fungsi serial dan kembali sbg pin I/O
  • Serial.find() : mencari string dlm buffer data
  • Serial.findUntil(): mencari buffer data sampai data dgn panjang/terminator nya yg diberikan ditemukan
  • Serial.flush(): menunggu data terkirim semua
  • Serial.parseFloat(): mengambil data float pertama dari data di buffer serial.
  • serial.parseInt(): mengambil data integer pertama dari data di buffer serial.
  • Serial.peek(): mengambil data berikutnya di bufer penerima
  • Serial.print() : mengirim data ASCII
  • Serial.println() : mengirimdata ASCII + CR,LF (kode enter)
  • Serial.read(): membaca data yg diterima
  • Serial.readBytes(): membaca data byte yg diterima
  • Serial.readBytesUntil()
  • Serial.setTimeout(): mengeset batas maksimum waktu  tunggu(timeout)  transmisi data.
  • Serial.write() : mengirim data byte (numerik)
  • Serial.serialEvent(): fungsi ini akan dipanggil jika data datang/diterima.berlaku spt interupsi serial.


4. Rangkaian


 


5. Listing Program
kembali 
Berikut merupakan listing program dari aplikasi kontrol robot :
   int led1 = 2;
int led2=3;
int led3=4;
int led4=5; // select the pin for the LED
int val = 0; // variable to store the data from the serial port
void setup() {
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
Serial.begin(9600); // connect to the serial port
}
void loop () {
val = Serial.read(); // read the serial port
if (val =='1' ) {
val = val - '0'; // convert from character to number
{
Serial.println("Hijau");
digitalWrite(led1,HIGH);
int delayTime = 500;
}
}
if (val =='2' ) {
val = val - '0'; // convert from character to number
{
Serial.println("Biru");
digitalWrite(led2,HIGH);
}
}
if (val =='3' ) {
val = val - '0'; // convert from character to number
{
Serial.println("Merah");
digitalWrite(led3,HIGH);
int delayTime = 500;
}
}
if (val =='4' ) {
val = val - '0'; // convert from character to number
{
Serial.println("Kuning");
digitalWrite(led4,HIGH);
int delayTime = 500;
}
}
if (val =='0' ) {
val = val - '0'; // convert from character to number
{
Serial.println("Matisemua LED");
digitalWrite(led4,LOW);
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
int delayTime = 500;
}
}
val=val-'0';
switch(val){
case 9 :
digitalWrite(led1,LOW);
Serial.println("Mati led1");
break;
case 8 :
digitalWrite(led2,LOW);
break;
case 7 :
digitalWrite(led3,LOW);
break;
case 6 :
digitalWrite(led4,LOW);
break;
}
}


  
6. Flowchart


7. link Download

klik dibawah ini untuk mendownload
download rangkaian 
download program arduino

Tidak ada komentar:

Posting Komentar