-
Pengaturan cahaya untuk metode tanam Hidroponik menggunakan
perangkat Android dan Arduino
Novitiyono Wisnu Hadita1,a, Rizki Alandani2,b dan
Muhaqiqin3,c
1,2Teknik Elektro dan 3Ilmu Komputer, Universitas Lampung, Kota
Bandar Lampung. aEmail: [email protected],
bEmail: [email protected],
cEmail: [email protected] Abstrak-
Hidroponik merupakan suatu sistem tanam tanpa media tanah, salah
satu metode menanam hidroponik paling mudah adalah menggunakan
sistem wicks (sumbu). Pada sistem tersebut, metode tanam hidroponik
dapat dilakukan di dalam ruangan. Tanaman hidroponik tetap
membutuhkan sumber cahaya untuk melakukan proses fotosintesis.
Hanya sedikit dari energi cahaya yang dipancarkan yang digunakan
tanaman untuk fotosintesis karena gelombang cahaya yang ditangkap
setiap tanaman berbeda satu dengan yang lainnya tergantung dari
jenis tanaman. Oleh karena itu, perlu dibuat aplikasi alat
pengaturan cahaya untuk tanaman hidroponik sehingga bisa
mendapatkan hasil yang optimal. Dengan adanya alat yang dapat
mengatur cahaya menggunakan perangkat Android dan Arduino yang
terkoneksi melalui bluetooth, penyesuaian warna dan intensitas
cahaya yang dibutuhkan tanaman pada metode tanam hidroponik dapat
membantu mencapai hasil yang optimal. Keywordshidroponik, wicks,
Android, Arduino, RGB LED
I. PENDAHULUAN
A. Latar Belakang Hidroponik merupakan suatu sistem pertanian
masa depan karena dapat diusahakan di berbagai tempat[1].
Sedikitnya lahan pertanian, keterbatasan air untuk irigasi, dan
musim yang tidak menentu dapat ditanggulangi dengan sistem
hidroponik. Hidroponik dapat diusahakan sepanjang tahun tanpa
mengenal musim. Pemeliharaan tanaman hidroponik pun lebih mudah
karena tempat budidaya relatif bersih, media tanam yang steril,
tanaman terlindungi dari terpaan hujan, serangan hama dan penyakit
relatif lebih kecil, serta tanaman lebih sehat dan produktivitas
lebih tinggi[2]. Kelebihan lain metode menanam hidroponik adalah
perawatan yang praktis, pemakaian pupuk lebih hemat, tanaman yang
mati lebih mudah diganti dengan tanaman yang baru, kerja lebih
hemat dan memiliki standar[3]. Pada tanaman, diketahui bahwa energi
sinar yang digunakan tumbuhan untuk fotosintesis hanya 0,5-2% dari
jumlah energi yang tersedia. Energi yang diberikan itu tergantung
kepada kualitas (panjang gelombang), intensitas (banyaknya sinar
per 1 cm2 per detik) dan waktu[4]. Setiap tanaman menyerap cahaya
yang berbeda-beda tergantung dari membran grana yang terdapat pada
tumbuhan. Hasil tanaman yang baik diperoleh melalui perlakuan yang
tepat pada tanaman. Salah satu perlakuan bagi tumbuhan yaitu dengan
pengaturan intensitas cahaya yang didapat karena berhubungan erat
dengan aktivitas fotosintesis tanaman[5]. Pengaturan cahaya pada
tanaman hidroponik dapat dilakukan dengan mengubah-ubah intensitas
dan warna cahaya yang digunakan sehingga cahaya yang didapat
tanaman akan sesuai dengan panjang gelombang yang dapat diterima
tanaman. Pengaturan cahaya secara otomatis dapat dilakukan
menggunakan perangkat Arduino. Arduino merupakan suatu papan
elektronik yang mengandung mikrokontoller di dalamnya dan dapat
diprogram menggunakan bahasa
Processing[6]. Perangkat Arduino merupakan perangkat keras open
source, perangkat keras open source dapat dikembangkan dengan
penambahan komponen dan secara umum pengembangnya akan berbeda di
seluruh dunia. Serta software Arduino dapat diunduh, dipakai,
dikembangkan, diubah, bahkan dijual kembali[7]. Jenis Arduino yang
digunakan adalah Arduino Mega 2560, perangkat ini memiliki 54 pin
input/output yang mana 15 pin digunakan sebagai PWM keluaran, 16
masukan analog, 16 MHz osilator kristal, USB koneksi, power, ICSP,
dan tombol reset[8]. Perangkat ini pun dapat berintegrasi dengan
perangkat Android. Perangkat Android memiliki banyak kelebihan
dibandingkan dengan sistem operasi sejenis. Selain home screen yang
fleksibel, aplikasi yang dapat bekerja secara bersamaan (multi
tasking), sistem operasi Android juga dapat dimodifikasi oleh
pengguna[9]. Pada sisi pengembangan Android, kelebihan terdapat
pada mudahnya pembuatan Aplikasi pada sistem operasi Android karena
menggunakan bahasa tinggat tinggi Java, dan pengembangan layout
menggunakan Extensible Markup Language (XML)[10]. Kondisi lahan
pertanian yang semakin sempit di Indonesia, serta musim yang tidak
menentu menjadikan metode hidroponik dapat menjadi solusi bagi
pertanian Indonesia. Dengan ditambahkan pengaturan otomatis
menggunakan perangkat Arduino dan Android dapat mempermudah dalam
bercocok tanam metode hidroponik. B. Rumusan Masalah Persoalan yang
dibahas adalah cara pengaturan cahaya menggunakan perangkat Android
dengan bluetooth sebagai media untuk komunikasi. Hal ini untuk
mempermudah pengaturan cahaya pada metode tanam hidroponik.
Sehingga cahaya yang digunakan untuk menanam hidroponik dapat
diatur dan diketahui kondisinya. Sistem hidroponik dapat menjadi
solusi bagi pertanian Indonesia karena dapat dilakukan di lahan
yang sempit serta tanaman lebih aman dari serangan hama dan
penyakit. Sehingga metode tanam
-
hidroponik dengan pengaturan otomatis menggunakan aplikasi
Android dapat memudahkan petani dalam mengatur cahaya sehingga
mendapatkan hasil yang maksimal. C. Tujuan Penelitian Tujuan dari
penelitian ini adalah terciptanya alat pengaturan cahaya untuk
metode tanam hidroponik menggunakan perangkat Android dan Arduino
sehingga penggunaan alat ini dapat meningkatkan hasil
pertanian.
II. RANCANGAN ALAT
A. Diagram Blok
Gambar 1. Diagram blok alat
Urutan penggunaan alat yang akan dibuat adalah user masuk
kedalam aplikasi lalu memilih mode pengaturan LED (Light Emitting
Diode) menggunakan broadcast atau unit control. Setelah itu
perintah akan dikirimkan melalui bluetooth yang terdapat pada
ponsel kemudian akan diterima oleh bluetooth module yang tedapat
pada Arduino. Sehingga Arduino akan mengirim perintah kepada LED
RGB (Red Green Blue) sesuai dengan perintah yang dikirimkan oleh
user. Data-data yang terdapat pada Arduino dikirimkan ke aplikasi
Android agar user dapat melihat status pada LED. Terdapat juga
pengaturan waktu (Timer) untuk mengatur pencahayaan pada waktu
tertentu secara otomatis sehingga user tidak perlu merubah warna
cahaya pada setiap waktu.
B. Desain Alat Pada alat ini terdapat 3 buah LED RGB untuk
mengatur cahaya pada tanaman hidroponik. Setiap tanaman terdapat
sekat untuk memisahkan antar tanaman agar saat pengaturan cahaya
yang berbeda (unit control) pada LED tidak mempengaruhi pencahayaan
pada bagian yang lain. Metode tanam pada gambar adalah metode tanam
sistem wick (sumbu) karena metode hidroponik jenis ini paling mudah
untuk diaplikasikan dan paling baik untuk tanaman tunggal[11].
Gambar 2. Desain alat penelitian
C. Desain Aplikasi
Gambar 3. Tampilan aplikasi
D. Diagram Alir Program Arduino
Gambar 4. Diagram alir program Arduino
-
E. Diagram Alir Program Android
Gambar 5. Diagram alir program Android
Perangkat keras yang digunakan adalah sebagai berikut: 1.
Android minimum versi 4.1 (Jelly Bean) 2. Arduino Mega 2560 3.
Bluetooth Module HC-05 4. Arduino I2C RTC DS1307 AT24C32 5. LED RGB
3 Watt Multicolor 6. Power supply 12V 1.5A
Tabel 1. Spesifikasi Alat
No Nama Keterangan 1 Tegangan Input (AC/DC) 220V/50Hz / 7-12VDC
2 Mikrokontroller ATMega 2560 3 Kecepatan Clock 16 Mhz 4 SRAM 8 KB
5 EEPROM 4 KB 6 Flash Memory 256 KB 7 Perangkat komunikasi
Bluetooth Module HC-05 8 RTC (Real Time Clock) I2C RTC DS1307
AT24C32 9 Output 3 RGB LED Modules
III. HASIL SIMULASI Berikut ini adalah hasil dari simulasi yang
dilakukan pada perangkat Android dan Arduino.
Tabel 2. Uji Coba Umum
No Skenario/Input Kondisi/Output Berhasil 1 Buka aplikasi
Android Terbuka 2 Menghidupkan bluetooth Hidup 3 Mencari perangkat
Bisa 4 Pairing perangkat Terhubung 5 Terima data status Bisa 6
Memutuskan perangkat Terputus 7 Keluar aplikasi Bisa
Tabel 3. Uji Fungsional Unit Control
No Perangkat Skenario/Input Kondisi/Output Berhasil 1 LED 1
On/Off Bisa
Ubah kecerahan Bisa Kombinasi warna Bisa Atur timer Bisa
2 LED 2 On/Off Bisa Ubah kecerahan Bisa Kombinasi warna Bisa
Atur timer Bisa
3 LED 3 On/Off Bisa Ubah kecerahan Bisa Kombinasi warna Bisa
Atur timer Bisa
Tabel 4. Uji Fungsional Broadcast
No Perangkat Skenario/Input Kondisi/Output Berhasil 1 Semua
LED
(LED 1, LED 2, LED 3)
On/Off Bisa Ubah kecerahan Bisa Kombinasi warna Bisa Atur timer
Bisa
IV. ANALISIS
Pada uji coba pertama adalah melakukan tes aplikasi, yaitu buka
dan tutup aplikasi, dan komunikasi bluetooth dari aplikasi Android
terhadap modul Arduino. Pada uji coba komunikasi bluetooth,
dilakukan beberapa tahapan uji coba yaitu ketika terdapat perangkat
dan tidak ada perangkat, lalu pairing perangkat, penerimaan data
status dari Arduino, dan memutuskan pairing perangkat. Untuk
penerimaan data status ini nantinya akan diketahui kondisi pada
sistem dan dapat ditampilkan pada aplikasi Android. Setelah uji
coba komunikasi aplikasi, dilanjutkan dengan uji coba pengaturan
LED dengan 2 jenis pengaturan yaitu unit control dan broadcast.
Pada uji coba unit control, pengiriman perintah dilakukan satu per
satu LED dan mengubah kecerahan pada setiap LED. Kondisi LED mampu
berbeda warna satu dengan yang lainnya pada saat yang bersamaan dan
kecerahannya juga dapat diatur pada setiap LED. Berbeda dengan unit
control, uji coba pada mode broadcast dilakukan pengaturan warna
dan kecerahaan saat yang bersamaan dan dapat dikerjakan pada saat
yang bersamaan oleh semua LED. Selain itu terdapat fitur timer pada
setiap mode, terdapat pada mode unit control dan broadcast. Timer
digunakan untuk
-
mengatur waktu hidup dan mati serta dapat merubah warna LED pada
waktu tertentu.
V. KESIMPULAN
Kesimpulan yang didapat adalah aplikasi dimungkinkan untuk
dibuat melihat hasil uji coba dengan keberhasilan penuh pada setiap
bagian uji coba. Sehingga dengan adanya alat ini dapat memudahkan
petani yang menggunakan sistem bercocok tanam hidroponik dalam
pengaturan cahaya tanaman.
DAFTAR PUSTAKA
[1] Wibowo, Sapto dan Asriyanti, Arum, "Aplikasi Hidroponik NFT
pada Budidaya Pakcoy (Brassica rapa chinensis)," Jurnal Penelitian
Pertanian Terapan, vol. 13, pp. 159-167, 2013.
[2] Tony Hartus, Berkebun Hidroponik Secara Murah, IX ed.
Jakarta: Penerbit Penebar Swadaya, 2008.
[3] Pinus Lingga, Hidroponik: bercocok tanam tanpa tanah.
Bandung: Niaga Swadaya, 1984.
[4] Papib, Handoko dan Yunie, Fajariyanti, "Pengaruh Spektrum
Cahaya Tampak Terhadap Laju Fotosintesis Tanaman Air Hydrilla
Verticillata," in Seminar Nasional X Pendidikan Biologi, Solo,
2013, pp. 15-147.
[5] Sumeru Ashari, Hortikultura aspek budidaya. Jakarta:
Penerbit Universitas Indonesia, 1995.
[6] Abdul Kadir, Panduan Praktis Mempelajari Aplikasi
Mikrokontroller dan Pemrogramannya menggunakan Arduino. Yogyakarta:
Penerbit Andi, 2013.
[7] Brian Evans, Beginning Arduino Programming. New York: Apress
Publisher, 2011.
[8] Oktariawan I., Martinus, dan Sugiyanto, "Pembuatan Sistem
Otomasi Dispenser Menggunakan Mikrokontroller Arduino Mega 2560,"
Jurnal FEMA, vol. 1, pp. 18-24, 2013.
[9] Yuliandi Kusuma, Membedah Kehebatan Android. Jakarta:
Grasindo, 2011.
[10] Zigurd Mednieks, Laird Dornin, G. Blake Meike dan Masumi
Nakamura, Programming Android, 2nd ed. California: O'Reilly,
2012.
[11] Douglas Peckenpaugh, Hydroponic Solutions: Volume 1:
Hydroponic Growing Tips. Oregon: New Moon Publishing, 2004.
-
APPENDIX
A. Program Arduino
#include #include "RTClib.h" #include #include // import the
serial library const int PIN_RS = 34; const int PIN_E = 36; const
int PIN_DB4 = 42; const int PIN_DB5 = 44; const int PIN_DB6 = 46;
const int PIN_DB7 = 48; RTC_DS1307 rtc; DateTime now; LiquidCrystal
lcd (PIN_RS, PIN_E, PIN_DB4, PIN_DB5, PIN_DB6, PIN_DB7);
SoftwareSerial BTSerial (10, 11); // RX, TX // pins for the LEDs 1:
const int redPin = 4; const int greenPin = 3; const int bluePin =
2; // pins for the LEDs 2: const int redPin2 = 7; const int
greenPin2 = 6; const int bluePin2 = 5; // pins for the LEDs 3:
const int redPin3 = 12; const int greenPin3 = 9; const int bluePin3
= 8; // pins for the LEDs test: //const int test = 13; int x=0; int
str[6]={0,0,0,0,0,0}; //timer variable int nowHourMinute, start1,
start2, start3, end1, end2, end3; int Red1, Red2, Red3, Green1,
Green2, Green3, Blue1, Blue2, Blue3;
-
void setup() { // initialize serial: BTSerial.begin(9600);
lcd.begin(16, 2); #ifdef AVR Wire.begin(); #else Wire1.begin(); //
Shield I2C pins connect to alt I2C bus on Arduino Due #endif
rtc.begin(); if (! rtc.isrunning()) { BTSerial.println("RTC is NOT
running!"); // following line sets the RTC to the date & time
this sketch was compiled rtc.adjust(DateTime(F(__DATE__),
F(__TIME__))); // This line sets the RTC with an explicit date
& time, for example to set // January 21, 2014 at 3am you would
call: // rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0)); } // make the
pins outputs: pinMode(redPin, OUTPUT); pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT); pinMode(redPin2, OUTPUT);
pinMode(greenPin2, OUTPUT); pinMode(bluePin2, OUTPUT);
pinMode(redPin3, OUTPUT); pinMode(greenPin3, OUTPUT);
pinMode(bluePin3, OUTPUT); //pinMode(test, OUTPUT);
BTSerial.println("Arduino control RGB LEDs Connected OK ( Sent From
Arduino Board )"); lcd.clear(); lcd.print(" Bismillah");
delay(1000); lcd.clear(); lcd.print(" HydroPhonic"); delay(1000);
lcd.setCursor(6,1); lcd.print("."); delay(750); lcd.setCursor(7,1);
lcd.print("."); delay(750); lcd.setCursor(8,1); lcd.print(".");
delay(400); }
-
void loop() { now = rtc.now(); nowHourMinute = now.hour() * 100
+ now.minute(); if (BTSerial.available() > 0){
str[0]=0;str[1]=0;str[2]=0;str[3]=0;str[4]=0;str[5]=0; //return
variable to zero delay(10); while (BTSerial.available() > 0){
int byteRead = BTSerial.read(); delay(5); if (isdigit(byteRead)){
str[x]=(str[x]*10)+(byteRead-48); } else if (byteRead==':'){
//break; x++; } else if (byteRead==';'){ //str[0] =
constrain(str[0], 0, 255); //str[1] = constrain(str[1], 0, 255);
//str[2] = constrain(str[2], 0, 255); x=0; if (str[4]==0 &&
str[5]==0){ LEDCase();
start1=0;start2=0;start3=0;end1=0;end2=0;end3=0; } else { if
(str[4]>0 && str[5]==0){ str[5]=2400; } timecase(); }
BTSerial.println("executed"); } } } timer(); delay(10); } else {
fourthValue = myString.substring(thirdCommaIndex+1); LEDcase(); }
}
-
void LED1(){ // fade the red, green, and blue legs of the LED:
analogWrite(redPin, Red1); analogWrite(greenPin, Green1);
analogWrite(bluePin, Blue1); } void LED2(){ // fade the red, green,
and blue legs of the LED 2: analogWrite(redPin2, Red2);
analogWrite(greenPin2, Green2); analogWrite(bluePin2, Blue2); }
void LED3(){ // fade the red, green, and blue legs of the LED 3:
analogWrite(redPin3, Red3); analogWrite(greenPin3, Green3);
analogWrite(bluePin3, Blue3); } void LEDCase(){ if (str[3] == 11){
Red1 = str[0]; Green1 = str[1]; Blue1 = str[2]; LED1(); } else if
(str[3] == 22){ Red2 = str[0]; Green2 = str[1]; Blue2 = str[2];
LED2(); } else if (str[3] == 33){ Red3 = str[0]; Green3 = str[1];
Blue3 = str[2]; LED3(); } else if (str[3] == 99){ Red1 = str[0];
Green1 = str[1]; Blue1 = str[2]; Red2 = str[0]; Green2 = str[1];
Blue2 = str[2]; Red3 = str[0]; Green3 = str[1]; Blue3 = str[2];
LED1();LED2();LED3(); } }
-
void timer(){ lcd.clear(); if (start1>0 || end1>0){ if
(nowHourMinute >= start1 && nowHourMinute < end1){
LED1(); lcd.print(end1); } else { analogWrite(redPin, 0);
analogWrite(greenPin, 0); analogWrite(bluePin, 0);
lcd.print(start1); } } delay(10); if (start2>0 || end2>0){ if
(nowHourMinute >= start2 && nowHourMinute < end2){
LED2(); lcd.setCursor(0,1);lcd.print(end2); } else {
analogWrite(redPin2, 0); analogWrite(greenPin2, 0);
analogWrite(bluePin2, 0); lcd.setCursor(0,1);lcd.print(start2); } }
delay(10); if (start3>0 || end3>0){ if (nowHourMinute >=
start3 && nowHourMinute < end3){ LED3();
lcd.setCursor(11,0);lcd.print(end3); } else { analogWrite(redPin3,
0); analogWrite(greenPin3, 0); analogWrite(bluePin3, 0);
lcd.setCursor(11,0);lcd.print(start3); } } delay(10);
lcd.setCursor(11,1);lcd.print(nowHourMinute); delay(100); }
-
void timecase(){ //transfer variable for timer if (str[3] ==
11){ Red1 = str[0]; Green1 = str[1]; Blue1 = str[2]; start1=str[4];
end1=str[5]; } else if (str[3] == 22){ Red2 = str[0]; Green2 =
str[1]; Blue2 = str[2]; start2=str[4]; end2=str[5]; } else if
(str[3] == 33){ Red3 = str[0]; Green3 = str[1]; Blue3 = str[2];
start3=str[4]; end3=str[5]; } else if (str[3] == 99){ Red1 =
str[0]; Green1 = str[1]; Blue1 = str[2]; Red2 = str[0]; Green2 =
str[1]; Blue2 = str[2]; Red3 = str[0]; Green3 = str[1]; Blue3 =
str[2]; start1=str[4]; end1=str[5]; start2=str[4]; end2=str[5];
start3=str[4]; end3=str[5]; } }
-
B. Program Android
package com.qiqi.hydrophonicbt; import java.io.IOException;
import java.io.OutputStream; import java.util.List; import
java.util.UUID; import android.support.v7.app.ActionBarActivity;
import android.annotation.TargetApi; import
android.bluetooth.BluetoothAdapter; import
android.bluetooth.BluetoothDevice; import
android.bluetooth.BluetoothSocket; import android.content.Context;
import android.content.Intent; import
android.content.SharedPreferences; import android.database.Cursor;
import android.os.Build; import android.os.Bundle; import
android.util.Log; import android.view.Menu; import
android.view.MenuItem; import android.view.View; import
android.widget.AdapterView; import
android.widget.AdapterView.OnItemSelectedListener; import
android.widget.ArrayAdapter; import android.widget.ListView; import
android.widget.PopupMenu; import android.widget.RadioButton; import
android.widget.RadioGroup; import android.widget.Spinner; import
android.widget.Switch; import android.widget.Toast;
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) public class
MainActivity extends ActionBarActivity implements
OnItemSelectedListener { String[] kategori= {"Tanaman
Hijau","Tanaman Merah","Tanaman Ungu","Custom"}; String[][]
tHijau={{"Bayam Hijau","Kangkung","Cabai Hijau"},
{"255:0:0:0730:1730","255:0:0:0830:1630","255:0:0:0630:1630"} };
String[][] tMerah={{"Cabai Merah","Tomat","Bayam Merah"},
{"0:255:255:0730:1730","0:255:255:0830:1630","0:255:255:0630:1630"}
}; String[][] tUngu={{"Terong","Anggur","Kol Ungu"},
-
{"0:255:0:0730:1730","0:255:0:0830:1630","0:255:0:0630:1630"} };
RadioGroup rg; Spinner spinK, spinJ; RadioButton all; DBAdapter
DBA; //Member Fields private BluetoothAdapter btAdapter = null;
private BluetoothSocket btSocket = null; private OutputStream
outStream = null; // UUID service - This is the type of Bluetooth
device that the BT module is // It is very likely yours will be the
same, if not google UUID for your manufacturer private static final
UUID MY_UUID =
UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); //
MAC-address of Bluetooth module public String newAddress2 = null;
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); spinK = (Spinner)
findViewById(R.id.spinK); ArrayAdapter adapterK= new ArrayAdapter(
this, android.R.layout.simple_spinner_item, kategori);
spinK.setAdapter(adapterK); spinK.setOnItemSelectedListener(this);
spinJ = (Spinner) findViewById(R.id.spinJ); ArrayAdapter adapterJ=
new ArrayAdapter( this, android.R.layout.simple_spinner_item,
tHijau[0]); spinJ.setAdapter(adapterJ);
spinJ.setOnItemSelectedListener(this); btAdapter =
BluetoothAdapter.getDefaultAdapter(); checkBTState(); } @Override
public void onResume() {
-
super.onResume(); // connection methods are best here in case
program goes into the background etc Log.i("State : ", "On
Resume"); Intent intent = getIntent(); newAddress2 =
intent.getStringExtra("DEVICE_ADDRESS");
if(newAddress2.equals(null)){ SharedPreferences sharedPref =
MainActivity.this.getPreferences(Context.MODE_PRIVATE); newAddress2
= sharedPref.getString("BT_ADDRESS", newAddress2); }
BluetoothDevice device = btAdapter.getRemoteDevice(newAddress2);
try { btSocket = device.createRfcommSocketToServiceRecord(MY_UUID);
} catch (IOException e1) { Toast.makeText(getBaseContext(), "ERROR
- Could not create Bluetooth socket", Toast.LENGTH_SHORT).show(); }
try { btSocket.connect(); } catch (IOException e) { try {
btSocket.close(); //If IO exception occurs attempt to close socket
} catch (IOException e2) { Toast.makeText(getBaseContext(), "ERROR
- Could not close Bluetooth socket", Toast.LENGTH_SHORT).show(); }
} try { outStream = btSocket.getOutputStream(); } catch
(IOException e) { Toast.makeText(getBaseContext(), "ERROR - Could
not create bluetooth outstream", Toast.LENGTH_SHORT).show(); } }
@Override public void onPause() { super.onPause(); Intent intent =
getIntent(); newAddress2 = intent.getStringExtra("DEVICE_ADDRESS");
SharedPreferences sharedPref =
MainActivity.this.getPreferences(Context.MODE_PRIVATE);
-
SharedPreferences.Editor editor = sharedPref.edit();
editor.putString("BT_ADDRESS", newAddress2); editor.commit();
//Pausing can be the end of an app if the device kills it or the
user doesn't open it again //close all connections so resources are
not wasted Log.i("State : ", "On Pause"); //Close BT socket to
device try { btSocket.close(); } catch (IOException e2) {
Toast.makeText(getBaseContext(), "ERROR - Failed to close Bluetooth
socket", Toast.LENGTH_SHORT).show(); } } private BluetoothSocket
createBluetoothSocket(BluetoothDevice device) throws IOException {
return device.createRfcommSocketToServiceRecord(MY_UUID); } private
void checkBTState() { // Check device has Bluetooth and that it is
turned on if(btAdapter==null) { Toast.makeText(getBaseContext(),
"ERROR - Device does not support bluetooth",
Toast.LENGTH_SHORT).show(); finish(); } else { if
(btAdapter.isEnabled()) { } else { //Prompt user to turn on
Bluetooth Intent enableBtIntent = new
Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBtIntent, 1); } } } public void
showMenu(View v, String nama) { PopupMenu popup = new
PopupMenu(this, v); // final String Code = code; final String Nama
= nama; // final String Time = time; // This activity implements
OnMenuItemClickListener
-
popup.inflate(R.menu.context_menu);
popup.setOnMenuItemClickListener(new
PopupMenu.OnMenuItemClickListener() { @Override public boolean
onMenuItemClick(MenuItem menuItem) { switch (menuItem.getItemId())
{ case R.id.edit: // Edit(Nama, Code, Time); return true; case
R.id.delete: //s Delete(Nama); return true; } return false; } });
popup.show(); } public void options(View v){ spinK = (Spinner)
findViewById(R.id.spinK); String nama1 =
spinJ.getSelectedItem().toString(); if(nama1.equals("Custom")){
spinJ = (Spinner) findViewById(R.id.spinJ); String nama =
spinJ.getSelectedItem().toString(); /* String Code=""; String
Time=""; try{ DBAdapter db = new DBAdapter(this); db.open(); Cursor
d = db.getCode(nama); if(d.moveToFirst()){ do{ Code =
d.getString(2); Time = d.getString(3); }while (d.moveToNext()); }
db.close(); // Toast.makeText(this, Time,
Toast.LENGTH_LONG).show(); */ showMenu(v, nama); // } //
catch(Exception e){ // Toast.makeText(this, "Gagal",
Toast.LENGTH_LONG).show(); // }
-
} } public void Delete(String nama){ try{ DBAdapter db = new
DBAdapter(this); db.open(); db.deleteList(nama); db.close();
Toast.makeText(this, "Data berhasil dimasukkan",
Toast.LENGTH_LONG).show(); Intent intent = getIntent(); Intent
refresh = new Intent(this, MainActivity.class);
startActivity(refresh); this.finish(); }catch(Exception e){
Toast.makeText(this, e.getMessage(), 2000).show(); } } public void
Edit(String nama, String code, String time){ //
Toast.makeText(this, nama+"\n"+code+"\n"+time,
Toast.LENGTH_LONG).show(); Intent intent = getIntent(); newAddress2
= intent.getStringExtra("DEVICE_ADDRESS"); Intent i = new
Intent(this, EditProfile.class); i.putExtra("Nama", nama);
i.putExtra("Code", code); i.putExtra("Time", time);
i.putExtra("ADDRESS", newAddress2); startActivity(i); } private
void sendData(String message) { // Toast.makeText(this, message,
1000).show(); byte[] msgBuffer = message.getBytes(); try {
//attempt to place data on the outstream to the BT device
-
outStream.write(msgBuffer); // Toast.makeText(this, "Sending
Succes", 1000).show(); try { Thread.sleep(50); } catch
(InterruptedException e) { // TODO Auto-generated catch block
e.printStackTrace(); } } catch (IOException e) { //if the sending
fails this is most likely because device is no longer there
Toast.makeText(getBaseContext(), "ERROR - Device not found",
Toast.LENGTH_SHORT).show(); finish(); } } @Override public boolean
onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds
items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu); return true; }
@Override public boolean onOptionsItemSelected(MenuItem item) { //
Handle action bar item clicks here. The action bar will //
automatically handle clicks on the Home/Up button, so long // as
you specify a parent activity in AndroidManifest.xml. int id =
item.getItemId(); if (id == R.id.action_settings) { return true; }
return super.onOptionsItemSelected(item); } @Override public void
onItemSelected(AdapterView list, View v, int position, long id) {
// TODO Auto-generated method stub switch(list.getId()){ case
R.id.spinK: String namaK = (String)
list.getItemAtPosition(position); Jenis(namaK); break; case
R.id.spinJ: String namaJ =
list.getItemAtPosition(position).toString(); Add(namaJ);
-
break; } } public void Add(String add){ if(add.equals("Add")){
Intent intent = getIntent(); newAddress2 =
intent.getStringExtra("DEVICE_ADDRESS"); Intent i = new
Intent(this, Profile.class); i.putExtra("ADDRESS", newAddress2);
startActivity(i); } } public void Jenis(String jenis){
if(jenis.equals("Tanaman Hijau")){ spinJ = (Spinner)
findViewById(R.id.spinJ); ArrayAdapter adapterJ= new ArrayAdapter(
this, android.R.layout.simple_spinner_item, tHijau[0]);
spinJ.setAdapter(adapterJ); } if(jenis.equals("Tanaman Merah")){
spinJ = (Spinner) findViewById(R.id.spinJ); ArrayAdapter adapterJ=
new ArrayAdapter( this, android.R.layout.simple_spinner_item,
tMerah[0]); spinJ.setAdapter(adapterJ); } if(jenis.equals("Tanaman
Ungu")){ spinJ = (Spinner) findViewById(R.id.spinJ); ArrayAdapter
adapterJ= new ArrayAdapter( this,
android.R.layout.simple_spinner_item, tUngu[0]);
spinJ.setAdapter(adapterJ); } if(jenis.equals("Custom")){ DBA = new
DBAdapter(this); DBA.open(); spinJ = (Spinner)
findViewById(R.id.spinJ); List values = DBA.getAllPelanggan();
values.add("Add"); // Use the SimpleCursorAdapter to show the //
elements in a ListView
-
ArrayAdapter adapterJ = new ArrayAdapter(this,
android.R.layout.simple_spinner_item, values);
spinJ.setAdapter(adapterJ); } } @Override public void
onNothingSelected(AdapterView arg0) { // TODO Auto-generated method
stub } public void Reset(View v){ String led = "99"; rg =
(RadioGroup) findViewById(R.id.radioGroup1); int abc =
rg.getCheckedRadioButtonId(); switch(abc){ case R.id.rbLED1: led =
"11"; break; case R.id.rbLED2: led = "22"; break; case R.id.rbLED3:
led = "33"; break; case R.id.rbAll: led = "99"; break; }
sendData("0:0:0:"+led+";"); } public void Submit(View v){ String
led = "99"; rg = (RadioGroup) findViewById(R.id.radioGroup1); int
abc = rg.getCheckedRadioButtonId(); Switch sw = (Switch)
findViewById(R.id.switch1); switch(abc){ case R.id.rbLED1: led =
"11"; break; case R.id.rbLED2: led = "22"; break; case R.id.rbLED3:
led = "33";
-
break; case R.id.rbAll: led = "99"; break; } spinJ = (Spinner)
findViewById(R.id.spinJ); int index =
spinJ.getSelectedItemPosition(); String JenTum =
spinJ.getSelectedItem().toString(); spinK = (Spinner)
findViewById(R.id.spinK); String Jenis =
spinK.getSelectedItem().toString(); String ColorCode = "";
if(Jenis.equals("Tanaman Hijau")){ ColorCode = tHijau[1][index]; }
if(Jenis.equals("Tanaman Merah")){ ColorCode = tMerah[1][index]; }
if(Jenis.equals("Tanaman Ungu")){ ColorCode = tUngu[1][index]; }
if(Jenis.equals("Custom")){ String Code=""; String Time="";
if(!JenTum.equals("Add")){ try{ DBAdapter db = new DBAdapter(this);
db.open(); Cursor d = db.getCode(JenTum); if(d.moveToFirst()){ do{
Code = d.getString(2); Time = d.getString(3); }while
(d.moveToNext()); } db.close(); // Toast.makeText(this, Time,
Toast.LENGTH_LONG).show(); ColorCode = Code+":"+Time; }
catch(Exception e){ Toast.makeText(this, "Gagal",
Toast.LENGTH_LONG).show(); } } }
-
try{ PisahKata p = new PisahKata(); p.Pisah(ColorCode); String
code = ""+p.v.get(0)+":"+p.v.get(1)+":"+p.v.get(2); String time =
""+p.v.get(3)+":"+p.v.get(4); // Toast.makeText(this, JenTum,
1000).show(); // Toast.makeText(this, ColorCode, 1000).show(); //
Toast.makeText(this, code+":"+led+":"+time+";", 2000).show();
if(sw.isChecked()){ // sendData(code+":"+led+":"+time+";");
Toast.makeText(this, code+":"+led+":"+time+";", 2000).show(); }
if(!sw.isChecked()){ // sendData(code+":"+led+";");
Toast.makeText(this, code+":"+led+";", 2000).show(); }
}catch(Exception e){ Toast.makeText(this, e.getMessage(),
1000).show(); } } }
package com.qiqi.hydrophonicbt; import java.io.IOException;
import java.io.OutputStream; import java.util.UUID; import
android.app.Activity; import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice; import
android.bluetooth.BluetoothSocket; import android.content.Intent;
import android.os.Bundle; import android.util.Log; import
android.view.Menu; import android.view.MenuInflater; import
android.view.MenuItem; import android.view.View; import
android.widget.ArrayAdapter; import android.widget.EditText; import
android.widget.RadioGroup; import android.widget.SeekBar; import
android.widget.SeekBar.OnSeekBarChangeListener;
-
import android.widget.Spinner; import android.widget.Toast;
public class Profile extends Activity implements
OnSeekBarChangeListener { String [] jam =
{"00","01","02","03","04","05","06","07","08","09"
,"10","11","12","13","14","15","16","17","18","19","20","21","22","23"};
String [] menit =
{"00","01","02","03","04","05","06","07","08","09"
,"10","11","12","13","14","15","16","17","18","19","20","21","22","23"
,"24","25","26","27","28","29","30","31","32","33","34","35","36","37"
,"38","39","40","41","42","43","44","45","46","47","48","49","50","51"
,"52","53","54","55","56","57","58","59"}; EditText edNama;
EditText edR, edG, edB; Spinner jamMulai, menitMulai, jamSelesai,
menitSelesai; SeekBar sRedP, sGreenP, sBlueP; //Member Fields
private BluetoothAdapter btAdapter = null; private BluetoothSocket
btSocket = null; private OutputStream outStream = null; // UUID
service - This is the type of Bluetooth device that the BT module
is // It is very likely yours will be the same, if not google UUID
for your manufacturer private static final UUID MY_UUID =
UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); //
MAC-address of Bluetooth module public String newAddress = null;
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.profile); edNama = (EditText)
findViewById(R.id.edNama); edR = (EditText) findViewById(R.id.edR);
edG = (EditText) findViewById(R.id.edG); edB = (EditText)
findViewById(R.id.edB); jamMulai = (Spinner)
findViewById(R.id.JamMulai); ArrayAdapter jm= new ArrayAdapter(
this, android.R.layout.simple_spinner_item, jam);
-
jamMulai.setAdapter(jm); menitMulai = (Spinner)
findViewById(R.id.MenitMulai); ArrayAdapter mm= new ArrayAdapter(
this, android.R.layout.simple_spinner_item, menit);
menitMulai.setAdapter(mm); jamSelesai = (Spinner)
findViewById(R.id.JamSelesai); ArrayAdapter js= new ArrayAdapter(
this, android.R.layout.simple_spinner_item, jam);
jamSelesai.setAdapter(js); menitSelesai = (Spinner)
findViewById(R.id.MenitSelesai); ArrayAdapter ms= new ArrayAdapter(
this, android.R.layout.simple_spinner_item, menit);
menitSelesai.setAdapter(ms); sRedP=(SeekBar)
findViewById(R.id.seekRp); sGreenP=(SeekBar)
findViewById(R.id.seekGp); sBlueP=(SeekBar)
findViewById(R.id.seekBp); sRedP.setOnSeekBarChangeListener(this);
sGreenP.setOnSeekBarChangeListener(this);
sBlueP.setOnSeekBarChangeListener(this); //getting the bluetooth
adapter value and calling checkBTstate function btAdapter =
BluetoothAdapter.getDefaultAdapter(); checkBTState(); } @Override
public boolean onCreateOptionsMenu(Menu menu) { MenuInflater
inflater = getMenuInflater(); inflater.inflate(R.menu.save, menu);
return true; } @Override public boolean
onOptionsItemSelected(MenuItem item) { // Handle action bar item
clicks here. The action bar will // automatically handle clicks on
the Home/Up button, so long // as you specify a parent activity in
AndroidManifest.xml. int id = item.getItemId(); if (id ==
R.id.saveMenu) { Save(); Intent intent = getIntent(); newAddress =
intent.getStringExtra("ADDRESS");
-
Intent i = new Intent(this, MainActivity.class);
i.putExtra("DEVICE_ADDRESS", newAddress); startActivity(i); return
true; } if (id == R.id.cancelMenu) { Intent intent = getIntent();
newAddress = intent.getStringExtra("ADDRESS"); Intent i = new
Intent(this, MainActivity.class); i.putExtra("DEVICE_ADDRESS",
newAddress); startActivity(i); return true; } return
super.onOptionsItemSelected(item); } public void Save(){ String
nama, red, green, blue, code;
if((!edR.getText().equals(null))&&
(!edG.getText().equals(null))&&
(!edB.getText().equals(null)) ){ jamMulai = (Spinner)
findViewById(R.id.JamMulai); menitMulai = (Spinner)
findViewById(R.id.MenitMulai); jamSelesai = (Spinner)
findViewById(R.id.JamSelesai); menitSelesai = (Spinner)
findViewById(R.id.MenitSelesai); String jMulai =
jamMulai.getSelectedItem().toString(); String mMulai =
menitMulai.getSelectedItem().toString(); String jSelesai =
jamSelesai.getSelectedItem().toString(); String mSelesai =
menitSelesai.getSelectedItem().toString(); String waktu =
jMulai+""+mMulai+":"+jSelesai+""+mSelesai; nama =
edNama.getText().toString(); red = edR.getText().toString(); green
= edG.getText().toString(); blue = edB.getText().toString(); code =
red+":"+green+":"+blue; // Toast.makeText(this, "Nama : "+nama //
+"\nCode : "+red+":"+green+":"+blue, 1000).show(); try{ DBAdapter
db = new DBAdapter(this); db.open(); long id;
-
id = db.insertList(nama,code,waktu); db.close();
Toast.makeText(this, "Data berhasil dimasukkan",
Toast.LENGTH_LONG).show(); }catch(Exception e){
Toast.makeText(this, "Data tidak berhasil dimasukkan" + "\nMungkin
Nama Profile Sudah Terpakai", 2000).show(); } } } @Override public
void onResume() { super.onResume(); // connection methods are best
here in case program goes into the background etc Log.i("State : ",
"On Resume"); Intent intent = getIntent(); newAddress =
intent.getStringExtra("ADDRESS"); BluetoothDevice device =
btAdapter.getRemoteDevice(newAddress); try { btSocket =
device.createRfcommSocketToServiceRecord(MY_UUID); } catch
(IOException e1) { Toast.makeText(getBaseContext(), "ERROR - Could
not create Bluetooth socket", Toast.LENGTH_SHORT).show(); } try {
btSocket.connect(); } catch (IOException e) { try {
btSocket.close(); //If IO exception occurs attempt to close socket
} catch (IOException e2) { Toast.makeText(getBaseContext(), "ERROR
- Could not close Bluetooth socket", Toast.LENGTH_SHORT).show(); }
} try {
-
outStream = btSocket.getOutputStream(); } catch (IOException e)
{ Toast.makeText(getBaseContext(), "ERROR - Could not create
bluetooth outstream", Toast.LENGTH_SHORT).show(); } } @Override
public void onPause() { super.onPause(); //Pausing can be the end
of an app if the device kills it or the user doesn't open it again
//close all connections so resources are not wasted Log.i("State :
", "On Pause"); //Close BT socket to device try { btSocket.close();
} catch (IOException e2) { Toast.makeText(getBaseContext(), "ERROR
- Failed to close Bluetooth socket", Toast.LENGTH_SHORT).show(); }
} private BluetoothSocket createBluetoothSocket(BluetoothDevice
device) throws IOException { return
device.createRfcommSocketToServiceRecord(MY_UUID); } private void
checkBTState() { // Check device has Bluetooth and that it is
turned on if(btAdapter==null) { Toast.makeText(getBaseContext(),
"ERROR - Device does not support bluetooth",
Toast.LENGTH_SHORT).show(); finish(); } else { if
(btAdapter.isEnabled()) { } else { //Prompt user to turn on
Bluetooth Intent enableBtIntent = new
Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBtIntent, 1); } } }
-
private void sendData(String message) { // Toast.makeText(this,
message, 1000).show(); byte[] msgBuffer = message.getBytes(); try {
//attempt to place data on the outstream to the BT device
outStream.write(msgBuffer); // Toast.makeText(this, "Sending
Succes", 1000).show(); try { Thread.sleep(50); } catch
(InterruptedException e) { // TODO Auto-generated catch block
e.printStackTrace(); } } catch (IOException e) { //if the sending
fails this is most likely because device is no longer there
Toast.makeText(getBaseContext(), "ERROR - Device not found",
Toast.LENGTH_SHORT).show(); finish(); } } @Override public void
onProgressChanged(SeekBar seekbar, int progress, boolean fromUser)
{ // TODO Auto-generated method stub edR = (EditText)
findViewById(R.id.edR); edG = (EditText) findViewById(R.id.edG);
edB = (EditText) findViewById(R.id.edB); if(seekbar ==
sRedP||seekbar == sGreenP||seekbar == sBlueP){
edR.setText(""+sRedP.getProgress());
edG.setText(""+sGreenP.getProgress());
edB.setText(""+sBlueP.getProgress()); try{
sendData(sRedP.getProgress()+":"+sGreenP.getProgress()+":"
+sBlueP.getProgress()+":99;"); }catch(Exception e){
Toast.makeText(getBaseContext(), e.getMessage(),
Toast.LENGTH_SHORT).show(); }
-
} } @Override public void onStartTrackingTouch(SeekBar arg0) {
// TODO Auto-generated method stub } @Override public void
onStopTrackingTouch(SeekBar arg0) { // TODO Auto-generated method
stub } }
package com.qiqi.hydrophonicbt; import java.util.Set; import
android.app.Activity; import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice; import
android.content.BroadcastReceiver; import android.content.Context;
import android.content.Intent; import android.content.IntentFilter;
import android.os.Bundle; import android.view.View; import
android.view.View.OnClickListener; import
android.widget.AdapterView; import
android.widget.AdapterView.OnItemClickListener; import
android.widget.ArrayAdapter; import android.widget.Button; import
android.widget.ListView; import android.widget.TextView; import
android.widget.Toast; public class DeviceListActivity extends
Activity { // textview for connection status TextView
textConnectionStatus; ListView pairedListView; //An EXTRA to take
the device MAC to the next activity public static String
EXTRA_DEVICE_ADDRESS; // Member fields
-
private BluetoothAdapter mBtAdapter; private ArrayAdapter
mPairedDevicesArrayAdapter; @Override protected void
onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.device_list); textConnectionStatus =
(TextView) findViewById(R.id.connecting);
textConnectionStatus.setTextSize(40); // Initialize array adapter
for paired devices mPairedDevicesArrayAdapter = new
ArrayAdapter(this, R.layout.device_name); // Find and set up the
ListView for paired devices pairedListView = (ListView)
findViewById(R.id.paired_devices);
pairedListView.setOnItemClickListener(mDeviceClickListener);
pairedListView.setAdapter(mPairedDevicesArrayAdapter); IntentFilter
filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
registerReceiver(mReceiver, filter); // Don't forget to unregister
during onDestroy Button scan = (Button) findViewById(R.id.btScan);
scan.setOnClickListener(new View.OnClickListener(){ @Override
public void onClick(View v) { // TODO Auto-generated method stub //
Register the BroadcastReceiver mBtAdapter.startDiscovery(); } }); }
@Override public void onResume() { super.onResume(); //It is best
to check BT status at onResume in case something has changed while
app was paused etc checkBTState();
mPairedDevicesArrayAdapter.clear();// clears the array so items
aren't duplicated when
-
resuming from onPause textConnectionStatus.setText(" "); //makes
the textview blank // Get the local Bluetooth adapter mBtAdapter =
BluetoothAdapter.getDefaultAdapter(); // Get a set of currently
paired devices and append to pairedDevices list Set pairedDevices =
mBtAdapter.getBondedDevices(); // Add previously paired devices to
the array if (pairedDevices.size() > 0) {
findViewById(R.id.title_paired_devices).setVisibility(View.VISIBLE);//make
title viewable for (BluetoothDevice device : pairedDevices) {
mPairedDevicesArrayAdapter.add(device.getName() + "\n" +
device.getAddress()); } } else { mPairedDevicesArrayAdapter.add("no
devices paired"); } } //method to check if the device has Bluetooth
and if it is on. //Prompts the user to turn it on if it is off
private void checkBTState() { // Check device has Bluetooth and
that it is turned on
mBtAdapter=BluetoothAdapter.getDefaultAdapter(); // CHECK THIS OUT
THAT IT WORKS!!! if(mBtAdapter==null) {
Toast.makeText(getBaseContext(), "Device does not support
Bluetooth", Toast.LENGTH_SHORT).show(); finish(); } else { if
(!mBtAdapter.isEnabled()) { //Prompt user to turn on Bluetooth
Intent enableBtIntent = new
Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBtIntent, 1); } } } // Set up on-click
listener for the listview private OnItemClickListener
mDeviceClickListener = new OnItemClickListener() { public void
onItemClick(AdapterView av, View v, int arg2, long arg3) {
-
textConnectionStatus.setText("Connecting..."); // Get the device
MAC address, which is the last 17 chars in the View String info =
((TextView) v).getText().toString(); String address =
info.substring(info.length() - 17); // Make an intent to start next
activity while taking an extra which is the MAC address. Intent i =
new Intent(DeviceListActivity.this, MainActivity.class);
i.putExtra("DEVICE_ADDRESS", address); startActivity(i); } }; //
Create a BroadcastReceiver for ACTION_FOUND private final
BroadcastReceiver mReceiver = new BroadcastReceiver() { public void
onReceive(Context context, Intent intent) { String action =
intent.getAction(); Toast.makeText(context, "Start Discovery",
2000).show(); // When discovery finds a device if
(BluetoothDevice.ACTION_FOUND.equals(action)) { // Get the
BluetoothDevice object from the Intent BluetoothDevice device =
intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); // Add the
name and address to an array adapter to show in a ListView
mPairedDevicesArrayAdapter.add("P : "+device.getName() + "\n" +
device.getAddress()); } } }; @Override public void onDestroy(){
super.onDestroy(); unregisterReceiver(mReceiver); } }
package com.qiqi.hydrophonicbt; import java.io.IOException;
import java.io.OutputStream; import java.util.UUID; import
android.app.Activity; import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice; import
android.bluetooth.BluetoothSocket;
-
import android.content.Intent; import android.os.Bundle; import
android.util.Log; import android.view.Menu; import
android.view.MenuInflater; import android.view.MenuItem; import
android.view.View; import android.widget.ArrayAdapter; import
android.widget.EditText; import android.widget.RadioGroup; import
android.widget.SeekBar; import
android.widget.SeekBar.OnSeekBarChangeListener; import
android.widget.Spinner; import android.widget.Toast; public class
EditProfile extends Activity implements OnSeekBarChangeListener {
String [] jam = {"00","01","02","03","04","05","06","07","08","09"
,"10","11","12","13","14","15","16","17","18","19","20","21","22","23"};
String [] menit =
{"00","01","02","03","04","05","06","07","08","09"
,"10","11","12","13","14","15","16","17","18","19","20","21","22","23"
,"24","25","26","27","28","29","30","31","32","33","34","35","36","37"
,"38","39","40","41","42","43","44","45","46","47","48","49","50","51"
,"52","53","54","55","56","57","58","59"}; EditText edNama;
EditText edR, edG, edB; Spinner jamMulai, menitMulai, jamSelesai,
menitSelesai; SeekBar sRedP, sGreenP, sBlueP; //Member Fields
private BluetoothAdapter btAdapter = null; private BluetoothSocket
btSocket = null; private OutputStream outStream = null; // UUID
service - This is the type of Bluetooth device that the BT module
is // It is very likely yours will be the same, if not google UUID
for your manufacturer private static final UUID MY_UUID =
UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); //
MAC-address of Bluetooth module public String newAddress = null;
@Override
-
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.profile); edNama = (EditText)
findViewById(R.id.edNama); edR = (EditText) findViewById(R.id.edR);
edG = (EditText) findViewById(R.id.edG); edB = (EditText)
findViewById(R.id.edB); jamMulai = (Spinner)
findViewById(R.id.JamMulai); ArrayAdapter jm= new ArrayAdapter(
this, android.R.layout.simple_spinner_item, jam);
jamMulai.setAdapter(jm); menitMulai = (Spinner)
findViewById(R.id.MenitMulai); ArrayAdapter mm= new ArrayAdapter(
this, android.R.layout.simple_spinner_item, menit);
menitMulai.setAdapter(mm); jamSelesai = (Spinner)
findViewById(R.id.JamSelesai); ArrayAdapter js= new ArrayAdapter(
this, android.R.layout.simple_spinner_item, jam);
jamSelesai.setAdapter(js); menitSelesai = (Spinner)
findViewById(R.id.MenitSelesai); ArrayAdapter ms= new ArrayAdapter(
this, android.R.layout.simple_spinner_item, menit);
menitSelesai.setAdapter(ms); sRedP=(SeekBar)
findViewById(R.id.seekRp); sGreenP=(SeekBar)
findViewById(R.id.seekGp); sBlueP=(SeekBar)
findViewById(R.id.seekBp); Intent intent = getIntent(); String
Enama = intent.getStringExtra("Nama"); String Ecode =
intent.getStringExtra("Code"); PisahKata p2 = new PisahKata();
p2.Pisah(Ecode); String R = ""+p2.v.get(0); String G =
""+p2.v.get(1); String B = ""+p2.v.get(2); edNama.setText(Enama);
edR.setText(R); edG.setText(G); edB.setText(B);
-
sRedP.setOnSeekBarChangeListener(this);
sGreenP.setOnSeekBarChangeListener(this);
sBlueP.setOnSeekBarChangeListener(this); //getting the bluetooth
adapter value and calling checkBTstate function btAdapter =
BluetoothAdapter.getDefaultAdapter(); checkBTState(); } @Override
public boolean onCreateOptionsMenu(Menu menu) { MenuInflater
inflater = getMenuInflater(); inflater.inflate(R.menu.save, menu);
return true; } @Override public boolean
onOptionsItemSelected(MenuItem item) { // Handle action bar item
clicks here. The action bar will // automatically handle clicks on
the Home/Up button, so long // as you specify a parent activity in
AndroidManifest.xml. int id = item.getItemId(); if (id ==
R.id.saveMenu) { Save(); Intent intent = getIntent(); newAddress =
intent.getStringExtra("ADDRESS"); Intent i = new Intent(this,
MainActivity.class); i.putExtra("DEVICE_ADDRESS", newAddress);
startActivity(i); return true; } if (id == R.id.cancelMenu) {
Intent intent = getIntent(); newAddress =
intent.getStringExtra("ADDRESS"); Intent i = new Intent(this,
MainActivity.class); i.putExtra("DEVICE_ADDRESS", newAddress);
startActivity(i); return true; } return
super.onOptionsItemSelected(item); } public void Save(){ String
nama, red, green, blue, code;
if((!edR.getText().equals(null))&&
(!edG.getText().equals(null))&&
-
(!edB.getText().equals(null)) ){ jamMulai = (Spinner)
findViewById(R.id.JamMulai); menitMulai = (Spinner)
findViewById(R.id.MenitMulai); jamSelesai = (Spinner)
findViewById(R.id.JamSelesai); menitSelesai = (Spinner)
findViewById(R.id.MenitSelesai); String jMulai =
jamMulai.getSelectedItem().toString(); String mMulai =
menitMulai.getSelectedItem().toString(); String jSelesai =
jamSelesai.getSelectedItem().toString(); String mSelesai =
menitSelesai.getSelectedItem().toString(); String waktu =
jMulai+""+mMulai+":"+jSelesai+""+mSelesai; Intent intent =
getIntent(); String Enama = intent.getStringExtra("Nama"); nama =
edNama.getText().toString(); red = edR.getText().toString(); green
= edG.getText().toString(); blue = edB.getText().toString(); code =
red+":"+green+":"+blue; // Toast.makeText(this, "Nama : "+nama //
+"\nCode : "+red+":"+green+":"+blue, 1000).show(); try{ DBAdapter
db = new DBAdapter(this); db.open();
db.updateList(Enama,nama,code,waktu); db.close();
Toast.makeText(this, "Data berhasil dimasukkan",
Toast.LENGTH_LONG).show(); }catch(Exception e){
Toast.makeText(this, "Data tidak berhasil dimasukkan" + "\nMungkin
Nama Profile Sudah Terpakai", 2000).show(); } } }
-
@Override public void onResume() { super.onResume(); //
connection methods are best here in case program goes into the
background etc Log.i("State : ", "On Resume"); Intent intent =
getIntent(); newAddress = intent.getStringExtra("ADDRESS");
BluetoothDevice device = btAdapter.getRemoteDevice(newAddress); try
{ btSocket = device.createRfcommSocketToServiceRecord(MY_UUID); }
catch (IOException e1) { Toast.makeText(getBaseContext(), "ERROR -
Could not create Bluetooth socket", Toast.LENGTH_SHORT).show(); }
try { btSocket.connect(); } catch (IOException e) { try {
btSocket.close(); //If IO exception occurs attempt to close socket
} catch (IOException e2) { Toast.makeText(getBaseContext(), "ERROR
- Could not close Bluetooth socket", Toast.LENGTH_SHORT).show(); }
} try { outStream = btSocket.getOutputStream(); } catch
(IOException e) { Toast.makeText(getBaseContext(), "ERROR - Could
not create bluetooth outstream", Toast.LENGTH_SHORT).show(); } }
@Override public void onPause() { super.onPause(); //Pausing can be
the end of an app if the device kills it or the user doesn't open
it again //close all connections so resources are not wasted
Log.i("State : ", "On Pause"); //Close BT socket to device try {
btSocket.close();
-
} catch (IOException e2) { Toast.makeText(getBaseContext(),
"ERROR - Failed to close Bluetooth socket",
Toast.LENGTH_SHORT).show(); } } private BluetoothSocket
createBluetoothSocket(BluetoothDevice device) throws IOException {
return device.createRfcommSocketToServiceRecord(MY_UUID); } private
void checkBTState() { // Check device has Bluetooth and that it is
turned on if(btAdapter==null) { Toast.makeText(getBaseContext(),
"ERROR - Device does not support bluetooth",
Toast.LENGTH_SHORT).show(); finish(); } else { if
(btAdapter.isEnabled()) { } else { //Prompt user to turn on
Bluetooth Intent enableBtIntent = new
Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBtIntent, 1); } } } private void
sendData(String message) { // Toast.makeText(this, message,
1000).show(); byte[] msgBuffer = message.getBytes(); try {
//attempt to place data on the outstream to the BT device
outStream.write(msgBuffer); // Toast.makeText(this, "Sending
Succes", 1000).show(); try { Thread.sleep(50); } catch
(InterruptedException e) { // TODO Auto-generated catch block
e.printStackTrace(); } } catch (IOException e) { //if the sending
fails this is most likely because device is no longer there
Toast.makeText(getBaseContext(), "ERROR - Device not found",
-
Toast.LENGTH_SHORT).show(); finish(); } } @Override public void
onProgressChanged(SeekBar seekbar, int progress, boolean fromUser)
{ // TODO Auto-generated method stub edR = (EditText)
findViewById(R.id.edR); edG = (EditText) findViewById(R.id.edG);
edB = (EditText) findViewById(R.id.edB); if(seekbar ==
sRedP||seekbar == sGreenP||seekbar == sBlueP){
edR.setText(""+sRedP.getProgress());
edG.setText(""+sGreenP.getProgress());
edB.setText(""+sBlueP.getProgress()); try{
sendData(sRedP.getProgress()+":"+sGreenP.getProgress()+":"
+sBlueP.getProgress()+":99;"); }catch(Exception e){
Toast.makeText(getBaseContext(), e.getMessage(),
Toast.LENGTH_SHORT).show(); } } } @Override public void
onStartTrackingTouch(SeekBar arg0) { // TODO Auto-generated method
stub } @Override public void onStopTrackingTouch(SeekBar arg0) { //
TODO Auto-generated method stub } }
-
package com.qiqi.hydrophonicbt; import java.util.ArrayList;
import java.util.List; import android.content.ContentValues; import
android.content.Context; import android.database.Cursor; import
android.database.SQLException; import
android.database.sqlite.SQLiteDatabase; import
android.database.sqlite.SQLiteOpenHelper; import android.util.Log;
import android.widget.ListView; public class DBAdapter { public
static final String KEY_ROWID = "_id"; public static final String
KEY_Nama = "nama"; public static final String KEY_Code = "code";
public static final String KEY_Time = "time"; private static final
String TAG = "DBAdapter"; private static final String DATABASE_NAME
= "Hydrophonik"; private static final String DATABASE_TABLE =
"color_code"; private static final int DATABASE_VERSION = 1;
private static final String DATABASE_CREATE = "CREATE TABLE
color_code (_id INTEGER PRIMARY KEY AUTOINCREMENT," + " nama TEXT
NOT NULL UNIQUE," + " code TEXT NOT NULL," + " time TEXT NOT
NULL);"; private Context context; private DatabaseHelper DBHelper;
private SQLiteDatabase db; public DBAdapter(Context ctx){
this.context = ctx; DBHelper = new DatabaseHelper(context); }
private static class DatabaseHelper extends SQLiteOpenHelper{
DatabaseHelper(Context context){ super(context, DATABASE_NAME,
null, DATABASE_VERSION); } @Override
-
public void onCreate(SQLiteDatabase db) {
db.execSQL(DATABASE_CREATE); // TODO Auto-generated method stub }
@Override public void onUpgrade(SQLiteDatabase db, int oldVersion,
int newVersion) { Log.w(TAG, "Upgrading database from version " +
oldVersion + " to " + newVersion + ", which will destroy all old
data"); db.execSQL("DROP TABLE IF EXISTS color_code");
onCreate(db); // TODO Auto-generated method stub } } public
DBAdapter open() throws SQLException{ db =
DBHelper.getWritableDatabase(); return this; } public void close(){
DBHelper.close(); } public long insertList(String nama, String
code, String time){ ContentValues initialValues = new
ContentValues(); initialValues.put(KEY_Nama, nama);
initialValues.put(KEY_Code, code); initialValues.put(KEY_Time,
time); return db.insert(DATABASE_TABLE, null, initialValues); }
public boolean deleteList(String nama){ return
db.delete(DATABASE_TABLE, KEY_Nama + " = '" + nama+"'", null) >
0; } public List getAllPelanggan(){ List lp = new ArrayList();
Cursor cursor = db.query(DATABASE_TABLE, new String[]{ KEY_ROWID,
KEY_Nama,
-
KEY_Code, KEY_Time }, null, null, null, null, KEY_Nama);
cursor.moveToFirst(); while (!cursor.isAfterLast()) { ListProfile
pel = parseListProfile(cursor); lp.add(pel); cursor.moveToNext(); }
cursor.close(); return lp; } private ListProfile
parseListProfile(Cursor cursor) { ListProfile lp = new
ListProfile(); lp.setNama((cursor.getString(1)));
lp.setId(cursor.getInt(0)); return lp; } public boolean
updateList(String oldName, String nama, String code, String time){
ContentValues args = new ContentValues(); args.put(KEY_Nama, nama);
args.put(KEY_Code, code); args.put(KEY_Time, time); return
db.update(DATABASE_TABLE, args, KEY_Nama + " = '"+ oldName +"'",
null) > 0; } public Cursor getCode(String Nama) throws
SQLException{ Cursor mCursor = db.query(true, DATABASE_TABLE, new
String[]{ KEY_ROWID, KEY_Nama, KEY_Code, KEY_Time }, KEY_Nama + " =
'" + Nama + "'", null, null, null, null, null); if(mCursor !=
null){ mCursor.moveToFirst(); } return mCursor; }
-
}
package com.qiqi.hydrophonicbt; publicclass ListProfile {
private String nama; privateintid; public String getNama(){ return
(nama); } publicint getId(){ return (id); } publicvoid
setNama(String nama){ this.nama=nama; } publicvoid setId(int id){
this.id=id; } public String toString(){ return (getNama()); } }
package com.qiqi.hydrophonicbt; import
java.util.StringTokenizer; import java.util.*; public class
PisahKata { Vector v=new Vector(10); public void Pisah(String x) {
StringTokenizer token = new StringTokenizer(x, ":"); while
(token.hasMoreTokens()) { v.add(token.nextToken()); } } }
- android:layout_alignRight="@+id/linearLayout1"
android:onClick="Submit" android:layout_marginBottom="5dp"
android:text="ON"/>
-
android:layout_below="@+id/textView3"
android:layout_marginTop="10dp">
"
-
android:text="Nama Profile" android:layout_x="6dp"
android:layout_y="12dp"/>
-
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/txtMulai"
android:layout_alignParentRight="true"
android:layout_marginRight="30dp"/>