Perancangan Viskometer Digital Berbasis Arduino Uno Untuk Mengukur Viskositas Cairan Dan Smartphone Android Sebagai Display
38
LAMPIRAN 1
Tampilan Alat
Gambar 1. Sistem Sensor didalam Kotak Hitam
Gambar 2. LASER
Universitas Sumatera Utara
39
Gambar 3. Tabung Volumetri dan Bola Besi didalam Sampel
Universitas Sumatera Utara
40
LAMPIRAN 2
Tampilan aplikasi pada Android
Gambar 1. Tampilan awal
aplikasi
Gambar 2. Tampilan menu
Gambar 3. Tampilan menu
setting
Gambar 4. Tampilan edit
jarak sensor
Universitas Sumatera Utara
41
Gambar 5. Tampilan setelah
jarak sensor diatur
Gambar 6. Perhitungan
viskositas gliserin
Gambar 7. Perhitungan
viskositas Oli Shell Advance
Gambar 8. Perhitungan
viskositas Minyak Goreng
LAMPIRAN 3
Universitas Sumatera Utara
42
1
Program Untuk Modul Arduino
#include
#include
//jenis paket yang akan dikirim
#define perintah 0x1
#define targetTerima 0x2
#define comAtur 0x3
#define tarAtur 0x4
#define koma 0x5
AndroidAccessory acc("ajirdoank",
"Vizcouz",
"Vizcouz",
"1.0",
"http://www.brainhover.blogspot.co.vu",
"123456789");
//pin analog yang digunakan
#define ldr1 2
#define ldr2 0
byte msg[6];
int xAmbang = 10;
int yAmbang = 100;
int valLdr1;
int valAkhirLdr1;
int valLdr1Kirim;
boolean valLdr1Picu;
int valLdr2;
int valAkhirLdr2;
int valLdr2Kirim;
boolean valLdr2Picu;
Universitas Sumatera Utara
43
float ubah1 = 0;
float ubah2 = 0;
int waktuMulai = 0;
int val;
void setup()
{
reset();
Serial.begin(9600);
acc.powerOn();
msg[0] = perintah;
msg[1] = targetTerima;
}
void reset()
{
valLdr1 = 0;
valAkhirLdr1 = 0;
valLdr1Kirim = 0;
valLdr1Picu = false;
valLdr2 = 0;
valAkhirLdr2 = 0;
valLdr2Kirim = 0;
valLdr2Picu = false;
waktuMulai = 0;
val = 0;
kirimData();
}
void cekLdr1()
{
if(valLdr1Picu)
{
return;
}
Universitas Sumatera Utara
44
//baca nilai ldr1;
valLdr1 = analogRead(ldr1);
//jika selisih prubahan ldr1 lebih besar dari nilai yAmbang;
if(abs(valAkhirLdr1 - valLdr1) >= yAmbang)
{
//Serial.print("ldr1 = ");
//Serial.print(valLdr1);
valAkhirLdr1 = valLdr1;
}
//jika nilai ldr1 yg skrang besar dari nilai awal ldr1;
if(valAkhirLdr1 > valLdr1)
{
//hitung persentase perubahan nilai;
ubah1 = ((float)(valAkhirLdr1 - valLdr1) / (float)valLdr1)
* 1000;
//nah jika nilai presentase perubahan tersebut lebih besar
dari nilai xAmbang;
if(ubah1 > xAmbang)
{
//Serial.print(" | ubah1 = ");
//Serial.print(ubah1);
//mulai picu ldr1 dan mulai waktu timer;
valLdr1Picu = true;
waktuMulai = millis();
}
}
//nilai ldr1 yg sekarang dikembalikan dengan nilai ldr1 yg
terbaca;
valAkhirLdr1 = valLdr1;
}
void cekLdr2()
{
if(valLdr2Picu)
{
return;
Universitas Sumatera Utara
45
}
//baca nilai ldr2;
valLdr2 = analogRead(ldr2);
//jika selisih prubahan ldr2 lebih besar dari nilai yAmbang;
if(abs(valAkhirLdr2 - valLdr2) >= yAmbang)
{
//Serial.print("
ldr2 = ");
//Serial.print(valLdr2);
valAkhirLdr2 = valLdr2;
}
//cek ldr2 hanya jika ldr1 udah terpicu;
if(valLdr1Picu && valAkhirLdr2 > valLdr2)
{
//hitung persentase perubahan dari ldr2;
ubah2 = ((float)(valAkhirLdr2 - valLdr2) / (float)valLdr2)
* 2000;
//jika nilai ubah2 lebih besar daripada nilai xAmbang;
if(ubah2 > xAmbang)
{
valLdr2Picu = true;
//Serial.print(" | ubah2 = ");
//Serial.print(ubah2);
//Serial.print(" | ");
//Serial.print("waktu = ");
val = millis() - waktuMulai;
kirimData();
//Serial.print(val);
}
}
valAkhirLdr2 = valLdr2;
}
void kirimData(){
if (acc.isConnected()){
msg[0] = perintah;
msg[1] = targetTerima;
Universitas Sumatera Utara
46
msg[2] = (byte) (val >> 24);
msg[3] = (byte) (val >> 16);
msg[4] = (byte) (val >> 8);
msg[5] = (byte) (val);
acc.write(msg, 6);
delay(2);
}
}
void atur(){
if (acc.isConnected()){
int len = acc.read(msg, sizeof(msg), 1);
if(len > 0){
if(msg[0] == comAtur){
if(msg[1] == tarAtur){
byte titik = msg[2];
if(titik == koma){
reset();
}
}
}
}
}
delay(2);
}
void loop()
{
if(acc.isConnected());
cekLdr1();
cekLdr2();
atur();
delay(1);
}
2
2.1
Program Untuk Aplikasi Android
Untuk Tampilan Aplikasi dan menu pilihan
Universitas Sumatera Utara
47
2.1.1 main.xml
2.1.2 veloz.xml
Universitas Sumatera Utara
51
2.2
Untuk Java Source Code
2.2.1
Ajirdoank/src/Veloz.java
package com.ajirdoank.velozity;
//script untuk menerima dan mengirimkan byte ke Arduino
//ditulis oleh achmad muhajir
//@ajirdoank
import java.io.IOException;
import java.io.FileDescriptor;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.text.DecimalFormat;
import com.ajirdoank.velozity.Prefs;
import android.os.Bundle;
import android.os.ParcelFileDescriptor;
import android.preference.PreferenceManager;
import android.app.Activity;
Universitas Sumatera Utara
52
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.Context;
import android.content.SharedPreferences;
import android.util.Log;
import android.widget.Button;
import android.widget.TextView;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import com.android.future.usb.UsbAccessory;
import com.android.future.usb.UsbManager;
public class Veloz extends Activity {
private static final String tag =
Veloz.class.getSimpleName();
private PendingIntent mPermissionIntent;
private static final String ACTION_USB_PERMISSION =
"com.android.example.USB_PERMISSION";
private boolean mPermissionRequestPending;
private UsbManager mUsbManager;
private UsbAccessory mAccessory;
private ParcelFileDescriptor mFileDescriptor;
private FileInputStream mInputStream;
private FileOutputStream mOutputStream;
private static final byte perintah = 0x1;
private static final byte targetTerima = 0x2;
private static final byte comAtur = 0x3;
private static final byte tarAtur = 0x4;
private static final byte koma = 0x5;
public TextView SenSD, time, vizcouz;
Universitas Sumatera Utara
53
public double
waktux, var1, BDy, BMy, LDy, SDy, TDy, GRy,
visc, DB, CF;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mUsbManager = UsbManager.getInstance(this);
mPermissionIntent = PendingIntent.getBroadcast(this,
0, new Intent(
ACTION_USB_PERMISSION), 0);
IntentFilter filter = new
IntentFilter(ACTION_USB_PERMISSION);
filter.addAction(UsbManager.ACTION_USB_ACCESSORY_DETACHED);
registerReceiver(mUsbReceiver, filter);
setContentView(R.layout.main);
SharedPreferences pengaturan =
PreferenceManager.getDefaultSharedPreferences(getBaseContext());
//ini bagian untuk setting variable
//bagian di preference yg uda dibuat dan dishare ke
mainActivity
String BDx = pengaturan.getString("BD", "0");
String BMx = pengaturan.getString("BM", "0");
String LDx = pengaturan.getString("LD", "0");
String SDx = pengaturan.getString("SD", "0");
String TDx = pengaturan.getString("TD", "0");
String GRx = pengaturan.getString("GRV", "0");
//konversi
BDy = Double.valueOf(BDx);
BMy = Double.valueOf(BMx);
LDy = Double.valueOf(LDx);
SDy = Double.valueOf(SDx);
TDy = Double.valueOf(TDx);
GRy = Double.valueOf(GRx);
//massa jenis bola atau Density of Ball
Universitas Sumatera Utara
54
DB = BMy/( (4.0 / 3.0 )*Math.PI*Math.pow(BDy/2.0, 3));
//variable tetap sebelum perhitungan viskositas
var1 = ( 2.0 / 9.0 )* GRy * Math.pow(BDy/2.0, 2)*(DB LDy)/SDy;
//untuk faktor koreksi
CF = 1.0 - (2.104 * (BDy/TDy)) + (2.09 *
(Math.pow(BDy/TDy, 3))) - (0.95 * (Math.pow(BDy/TDy, 5)));
//pengaturan teks yang muncul pada mainActivity
SenSD = (TextView)findViewById(R.id.SensSD);
SenSD.setText(String.valueOf(SDy));
vizcouz = (TextView)findViewById(R.id.viscText);
time = (TextView)findViewById(R.id.timeVal);
Button reset = (Button)findViewById(R.id.button1);
reset.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
time.setText("0");
vizcouz.setText("0");
byte[] buffer = new byte[3];
buffer[0] = comAtur;
buffer[1] = tarAtur;
buffer[2] = koma;
try{
mOutputStream.write(buffer);
}catch(IOException e){
Log.e(tag, "pesan tidak dikenal", e);
}
}
});
}
Universitas Sumatera Utara
55
//cek broadcast data streaming yang masuk
private final BroadcastReceiver mUsbReceiver = new
BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (ACTION_USB_PERMISSION.equals(action)) {
synchronized (this) {
//sinkron dan baca apa usb tersamsubung atau tidak
UsbAccessory accessory = UsbManager.getAccessory(intent);
if
(intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED,
false)) {
openAccessory(accessory);
} else {
Log.d(tag, "sambungan ditolak" + accessory);
}
mPermissionRequestPending = false;
}
} else if
(UsbManager.ACTION_USB_ACCESSORY_DETACHED.equals(action)) {
//jika sambungan Usb dicabut
UsbAccessory accessory = UsbManager.getAccessory(intent);
if (accessory != null && accessory.equals(mAccessory)) {
closeAccessory();
}
}
}
};
//ketika meresume aplikasi
@Override
public void onResume(){
super.onResume();
if (mInputStream != null && mOutputStream != null) {
return;
}
UsbAccessory[] accessories = mUsbManager.getAccessoryList();
Universitas Sumatera Utara
56
UsbAccessory accessory = (accessories == null ? null :
accessories[0]);
if (accessory != null) {
if (mUsbManager.hasPermission(accessory)) {
openAccessory(accessory);
} else {
synchronized (mUsbReceiver) {
if (!mPermissionRequestPending) {
mUsbManager.requestPermission(accessory, mPermissionIntent);
mPermissionRequestPending = true;
}
}
}
} else {
Log.d(tag, "android tak tersambung");
}
}
//ketika aplikasi dipause
@Override
public void onPause(){
super.onPause();
closeAccessory();
}
//ketika data streaming tidak ada
@Override
public void onDestroy(){
super.onDestroy();
unregisterReceiver(mUsbReceiver);
}
//untuk menutup aplikasi
private void closeAccessory() {
// TODO Auto-generated method stub
try{
if(mFileDescriptor != null){
mFileDescriptor.close();
}
Universitas Sumatera Utara
57
}catch(IOException e){
}finally{
mFileDescriptor = null;
mAccessory = null;
}
}
//inisialisasi ketika USB di insert
private void openAccessory(UsbAccessory accessory) {
// TODO Auto-generated method stub
mFileDescriptor = mUsbManager.openAccessory(accessory);
if (mFileDescriptor != null){
mAccessory = accessory;
FileDescriptor fd = mFileDescriptor.getFileDescriptor();
mInputStream = new FileInputStream(fd);
mOutputStream = new FileOutputStream(fd);
Thread thread = new Thread(null, jalankan, tag);
thread.start();
Log.d(tag, "handphone tersambung");
}else{
Log.d(tag, "sambungan gagal");
}
}
//proses penerimaan data straming via USB
Runnable jalankan = new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
int ret = 0;
final byte buffer[] = new byte[6];
while (ret >= 0){
try{
ret = mInputStream.read(buffer);
}catch(IOException e){
break;
}
switch(buffer[0]){
Universitas Sumatera Utara
58
case perintah:
if(buffer[1] == targetTerima){
final int waktu = ((buffer[2] & 0xFF)
LAMPIRAN 1
Tampilan Alat
Gambar 1. Sistem Sensor didalam Kotak Hitam
Gambar 2. LASER
Universitas Sumatera Utara
39
Gambar 3. Tabung Volumetri dan Bola Besi didalam Sampel
Universitas Sumatera Utara
40
LAMPIRAN 2
Tampilan aplikasi pada Android
Gambar 1. Tampilan awal
aplikasi
Gambar 2. Tampilan menu
Gambar 3. Tampilan menu
setting
Gambar 4. Tampilan edit
jarak sensor
Universitas Sumatera Utara
41
Gambar 5. Tampilan setelah
jarak sensor diatur
Gambar 6. Perhitungan
viskositas gliserin
Gambar 7. Perhitungan
viskositas Oli Shell Advance
Gambar 8. Perhitungan
viskositas Minyak Goreng
LAMPIRAN 3
Universitas Sumatera Utara
42
1
Program Untuk Modul Arduino
#include
#include
//jenis paket yang akan dikirim
#define perintah 0x1
#define targetTerima 0x2
#define comAtur 0x3
#define tarAtur 0x4
#define koma 0x5
AndroidAccessory acc("ajirdoank",
"Vizcouz",
"Vizcouz",
"1.0",
"http://www.brainhover.blogspot.co.vu",
"123456789");
//pin analog yang digunakan
#define ldr1 2
#define ldr2 0
byte msg[6];
int xAmbang = 10;
int yAmbang = 100;
int valLdr1;
int valAkhirLdr1;
int valLdr1Kirim;
boolean valLdr1Picu;
int valLdr2;
int valAkhirLdr2;
int valLdr2Kirim;
boolean valLdr2Picu;
Universitas Sumatera Utara
43
float ubah1 = 0;
float ubah2 = 0;
int waktuMulai = 0;
int val;
void setup()
{
reset();
Serial.begin(9600);
acc.powerOn();
msg[0] = perintah;
msg[1] = targetTerima;
}
void reset()
{
valLdr1 = 0;
valAkhirLdr1 = 0;
valLdr1Kirim = 0;
valLdr1Picu = false;
valLdr2 = 0;
valAkhirLdr2 = 0;
valLdr2Kirim = 0;
valLdr2Picu = false;
waktuMulai = 0;
val = 0;
kirimData();
}
void cekLdr1()
{
if(valLdr1Picu)
{
return;
}
Universitas Sumatera Utara
44
//baca nilai ldr1;
valLdr1 = analogRead(ldr1);
//jika selisih prubahan ldr1 lebih besar dari nilai yAmbang;
if(abs(valAkhirLdr1 - valLdr1) >= yAmbang)
{
//Serial.print("ldr1 = ");
//Serial.print(valLdr1);
valAkhirLdr1 = valLdr1;
}
//jika nilai ldr1 yg skrang besar dari nilai awal ldr1;
if(valAkhirLdr1 > valLdr1)
{
//hitung persentase perubahan nilai;
ubah1 = ((float)(valAkhirLdr1 - valLdr1) / (float)valLdr1)
* 1000;
//nah jika nilai presentase perubahan tersebut lebih besar
dari nilai xAmbang;
if(ubah1 > xAmbang)
{
//Serial.print(" | ubah1 = ");
//Serial.print(ubah1);
//mulai picu ldr1 dan mulai waktu timer;
valLdr1Picu = true;
waktuMulai = millis();
}
}
//nilai ldr1 yg sekarang dikembalikan dengan nilai ldr1 yg
terbaca;
valAkhirLdr1 = valLdr1;
}
void cekLdr2()
{
if(valLdr2Picu)
{
return;
Universitas Sumatera Utara
45
}
//baca nilai ldr2;
valLdr2 = analogRead(ldr2);
//jika selisih prubahan ldr2 lebih besar dari nilai yAmbang;
if(abs(valAkhirLdr2 - valLdr2) >= yAmbang)
{
//Serial.print("
ldr2 = ");
//Serial.print(valLdr2);
valAkhirLdr2 = valLdr2;
}
//cek ldr2 hanya jika ldr1 udah terpicu;
if(valLdr1Picu && valAkhirLdr2 > valLdr2)
{
//hitung persentase perubahan dari ldr2;
ubah2 = ((float)(valAkhirLdr2 - valLdr2) / (float)valLdr2)
* 2000;
//jika nilai ubah2 lebih besar daripada nilai xAmbang;
if(ubah2 > xAmbang)
{
valLdr2Picu = true;
//Serial.print(" | ubah2 = ");
//Serial.print(ubah2);
//Serial.print(" | ");
//Serial.print("waktu = ");
val = millis() - waktuMulai;
kirimData();
//Serial.print(val);
}
}
valAkhirLdr2 = valLdr2;
}
void kirimData(){
if (acc.isConnected()){
msg[0] = perintah;
msg[1] = targetTerima;
Universitas Sumatera Utara
46
msg[2] = (byte) (val >> 24);
msg[3] = (byte) (val >> 16);
msg[4] = (byte) (val >> 8);
msg[5] = (byte) (val);
acc.write(msg, 6);
delay(2);
}
}
void atur(){
if (acc.isConnected()){
int len = acc.read(msg, sizeof(msg), 1);
if(len > 0){
if(msg[0] == comAtur){
if(msg[1] == tarAtur){
byte titik = msg[2];
if(titik == koma){
reset();
}
}
}
}
}
delay(2);
}
void loop()
{
if(acc.isConnected());
cekLdr1();
cekLdr2();
atur();
delay(1);
}
2
2.1
Program Untuk Aplikasi Android
Untuk Tampilan Aplikasi dan menu pilihan
Universitas Sumatera Utara
47
2.1.1 main.xml
2.1.2 veloz.xml
Universitas Sumatera Utara
51
2.2
Untuk Java Source Code
2.2.1
Ajirdoank/src/Veloz.java
package com.ajirdoank.velozity;
//script untuk menerima dan mengirimkan byte ke Arduino
//ditulis oleh achmad muhajir
//@ajirdoank
import java.io.IOException;
import java.io.FileDescriptor;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.text.DecimalFormat;
import com.ajirdoank.velozity.Prefs;
import android.os.Bundle;
import android.os.ParcelFileDescriptor;
import android.preference.PreferenceManager;
import android.app.Activity;
Universitas Sumatera Utara
52
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.Context;
import android.content.SharedPreferences;
import android.util.Log;
import android.widget.Button;
import android.widget.TextView;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import com.android.future.usb.UsbAccessory;
import com.android.future.usb.UsbManager;
public class Veloz extends Activity {
private static final String tag =
Veloz.class.getSimpleName();
private PendingIntent mPermissionIntent;
private static final String ACTION_USB_PERMISSION =
"com.android.example.USB_PERMISSION";
private boolean mPermissionRequestPending;
private UsbManager mUsbManager;
private UsbAccessory mAccessory;
private ParcelFileDescriptor mFileDescriptor;
private FileInputStream mInputStream;
private FileOutputStream mOutputStream;
private static final byte perintah = 0x1;
private static final byte targetTerima = 0x2;
private static final byte comAtur = 0x3;
private static final byte tarAtur = 0x4;
private static final byte koma = 0x5;
public TextView SenSD, time, vizcouz;
Universitas Sumatera Utara
53
public double
waktux, var1, BDy, BMy, LDy, SDy, TDy, GRy,
visc, DB, CF;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mUsbManager = UsbManager.getInstance(this);
mPermissionIntent = PendingIntent.getBroadcast(this,
0, new Intent(
ACTION_USB_PERMISSION), 0);
IntentFilter filter = new
IntentFilter(ACTION_USB_PERMISSION);
filter.addAction(UsbManager.ACTION_USB_ACCESSORY_DETACHED);
registerReceiver(mUsbReceiver, filter);
setContentView(R.layout.main);
SharedPreferences pengaturan =
PreferenceManager.getDefaultSharedPreferences(getBaseContext());
//ini bagian untuk setting variable
//bagian di preference yg uda dibuat dan dishare ke
mainActivity
String BDx = pengaturan.getString("BD", "0");
String BMx = pengaturan.getString("BM", "0");
String LDx = pengaturan.getString("LD", "0");
String SDx = pengaturan.getString("SD", "0");
String TDx = pengaturan.getString("TD", "0");
String GRx = pengaturan.getString("GRV", "0");
//konversi
BDy = Double.valueOf(BDx);
BMy = Double.valueOf(BMx);
LDy = Double.valueOf(LDx);
SDy = Double.valueOf(SDx);
TDy = Double.valueOf(TDx);
GRy = Double.valueOf(GRx);
//massa jenis bola atau Density of Ball
Universitas Sumatera Utara
54
DB = BMy/( (4.0 / 3.0 )*Math.PI*Math.pow(BDy/2.0, 3));
//variable tetap sebelum perhitungan viskositas
var1 = ( 2.0 / 9.0 )* GRy * Math.pow(BDy/2.0, 2)*(DB LDy)/SDy;
//untuk faktor koreksi
CF = 1.0 - (2.104 * (BDy/TDy)) + (2.09 *
(Math.pow(BDy/TDy, 3))) - (0.95 * (Math.pow(BDy/TDy, 5)));
//pengaturan teks yang muncul pada mainActivity
SenSD = (TextView)findViewById(R.id.SensSD);
SenSD.setText(String.valueOf(SDy));
vizcouz = (TextView)findViewById(R.id.viscText);
time = (TextView)findViewById(R.id.timeVal);
Button reset = (Button)findViewById(R.id.button1);
reset.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
time.setText("0");
vizcouz.setText("0");
byte[] buffer = new byte[3];
buffer[0] = comAtur;
buffer[1] = tarAtur;
buffer[2] = koma;
try{
mOutputStream.write(buffer);
}catch(IOException e){
Log.e(tag, "pesan tidak dikenal", e);
}
}
});
}
Universitas Sumatera Utara
55
//cek broadcast data streaming yang masuk
private final BroadcastReceiver mUsbReceiver = new
BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (ACTION_USB_PERMISSION.equals(action)) {
synchronized (this) {
//sinkron dan baca apa usb tersamsubung atau tidak
UsbAccessory accessory = UsbManager.getAccessory(intent);
if
(intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED,
false)) {
openAccessory(accessory);
} else {
Log.d(tag, "sambungan ditolak" + accessory);
}
mPermissionRequestPending = false;
}
} else if
(UsbManager.ACTION_USB_ACCESSORY_DETACHED.equals(action)) {
//jika sambungan Usb dicabut
UsbAccessory accessory = UsbManager.getAccessory(intent);
if (accessory != null && accessory.equals(mAccessory)) {
closeAccessory();
}
}
}
};
//ketika meresume aplikasi
@Override
public void onResume(){
super.onResume();
if (mInputStream != null && mOutputStream != null) {
return;
}
UsbAccessory[] accessories = mUsbManager.getAccessoryList();
Universitas Sumatera Utara
56
UsbAccessory accessory = (accessories == null ? null :
accessories[0]);
if (accessory != null) {
if (mUsbManager.hasPermission(accessory)) {
openAccessory(accessory);
} else {
synchronized (mUsbReceiver) {
if (!mPermissionRequestPending) {
mUsbManager.requestPermission(accessory, mPermissionIntent);
mPermissionRequestPending = true;
}
}
}
} else {
Log.d(tag, "android tak tersambung");
}
}
//ketika aplikasi dipause
@Override
public void onPause(){
super.onPause();
closeAccessory();
}
//ketika data streaming tidak ada
@Override
public void onDestroy(){
super.onDestroy();
unregisterReceiver(mUsbReceiver);
}
//untuk menutup aplikasi
private void closeAccessory() {
// TODO Auto-generated method stub
try{
if(mFileDescriptor != null){
mFileDescriptor.close();
}
Universitas Sumatera Utara
57
}catch(IOException e){
}finally{
mFileDescriptor = null;
mAccessory = null;
}
}
//inisialisasi ketika USB di insert
private void openAccessory(UsbAccessory accessory) {
// TODO Auto-generated method stub
mFileDescriptor = mUsbManager.openAccessory(accessory);
if (mFileDescriptor != null){
mAccessory = accessory;
FileDescriptor fd = mFileDescriptor.getFileDescriptor();
mInputStream = new FileInputStream(fd);
mOutputStream = new FileOutputStream(fd);
Thread thread = new Thread(null, jalankan, tag);
thread.start();
Log.d(tag, "handphone tersambung");
}else{
Log.d(tag, "sambungan gagal");
}
}
//proses penerimaan data straming via USB
Runnable jalankan = new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
int ret = 0;
final byte buffer[] = new byte[6];
while (ret >= 0){
try{
ret = mInputStream.read(buffer);
}catch(IOException e){
break;
}
switch(buffer[0]){
Universitas Sumatera Utara
58
case perintah:
if(buffer[1] == targetTerima){
final int waktu = ((buffer[2] & 0xFF)