package com.example.md3848.Project2;
import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Spinner;
import android.widget.Toast;
import android.widget.ToggleButton;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.lang.ref.WeakReference;
import java.util.UUID;
public class ledControl extends Activity {
static ToggleButton Tbtn_LED1, Tbtn_LED2, Tbtn_LED3, Tbtn_LED4, Tbtn_LED5, Tbtn_LEDx;
String NumberLED = "0";
Spinner sp_SelectFlasherEffect;
String address = null;
BluetoothAdapter bAdapter = null;
BluetoothDevice bDevice = null;
BluetoothSocket bSocket = null;
static final UUID myUUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); //SPP UUID. Look for it
ConnectedThread cThread;
private static BluetoothResponseHandler brHandler;
private final static int DataIsReady = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_led_control);
sp_SelectFlasherEffect = (Spinner) findViewById(R.id.sp_SelectFlasherEffect);
sp_SelectFlasherEffect.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
switch (position)
{
case 1 : SendData( "EF" + Integer.toString(position) + "\n" ); break;
case 2 : SendData( "EF" + Integer.toString(position) + "\n" ); break;
case 3 : SendData( "EF" + Integer.toString(position) + "\n" ); break;
case 4 : SendData( "EF" + Integer.toString(position) + "\n" ); break;
case 5 : SendData( "EF" + Integer.toString(position) + "\n" ); break;
}
}
@Override
public void onNothingSelected(AdapterView<?> parentView) {}
});
Tbtn_LED1 = (ToggleButton)findViewById(R.id.Tbtn_LED1);
Tbtn_LED2 = (ToggleButton)findViewById(R.id.Tbtn_LED2);
Tbtn_LED3 = (ToggleButton)findViewById(R.id.Tbtn_LED3);
Tbtn_LED4 = (ToggleButton)findViewById(R.id.Tbtn_LED4);
Tbtn_LED5 = (ToggleButton)findViewById(R.id.Tbtn_LED5);
Tbtn_LED1.setChecked(false);
Tbtn_LED2.setChecked(false);
Tbtn_LED3.setChecked(false);
Tbtn_LED4.setChecked(false);
Tbtn_LED5.setChecked(false);
Tbtn_LED1.setText("LED1 ????");
Tbtn_LED2.setText("LED2 ????");
Tbtn_LED3.setText("LED3 ????");
Tbtn_LED4.setText("LED4 ????");
Tbtn_LED5.setText("LED5 ????");
address = getIntent().getStringExtra( "device_address" );
bAdapter = BluetoothAdapter.getDefaultAdapter();
try {
Toast.makeText(getApplicationContext(), "Connecting...", Toast.LENGTH_SHORT).show();
if( bSocket == null ) {
bDevice = bAdapter.getRemoteDevice(address);//connects to the device's address and checks if it's available
bSocket = bDevice.createInsecureRfcommSocketToServiceRecord(myUUID);//create a RFCOMM (SPP) connection
bAdapter.cancelDiscovery();
bSocket.connect();
}
Toast.makeText(getApplicationContext(), "Connected", Toast.LENGTH_SHORT).show();
}
catch (Exception e) {
Toast.makeText(getApplicationContext(), "Connection Failed. Is it a SPP Bluetooth? Try again.", Toast.LENGTH_SHORT).show();
finish();
}
cThread = new ConnectedThread(bSocket);
cThread.start();
if (brHandler == null) brHandler = new BluetoothResponseHandler(this);
else brHandler.setTarget(this);
}
public void onClick_Tbtn_LED( View v ) {
switch( v.getId() )
{
case R.id.Tbtn_LED1 : Tbtn_LEDx = Tbtn_LED1; NumberLED = "1"; break;
case R.id.Tbtn_LED2 : Tbtn_LEDx = Tbtn_LED2; NumberLED = "2"; break;
case R.id.Tbtn_LED3 : Tbtn_LEDx = Tbtn_LED3; NumberLED = "3"; break;
case R.id.Tbtn_LED4 : Tbtn_LEDx = Tbtn_LED4; NumberLED = "4"; break;
case R.id.Tbtn_LED5 : Tbtn_LEDx = Tbtn_LED5; NumberLED = "5"; break;
default: return;
}
if( Tbtn_LEDx.isChecked() ) {
SendData( "TO" + NumberLED + "\n" );
Tbtn_LEDx.setText("LED " + NumberLED + "Turned ON");
}
else {
SendData( "TF" + NumberLED + "\n" );
Tbtn_LEDx.setText("LED " + NumberLED + "Turned OFF");
}
}
public void SendData(String Data) {
if( bSocket != null ) {
try {
bSocket.getOutputStream().write(Data.getBytes());
}
catch (Exception e) {
Toast.makeText(getApplicationContext(), "Error in Send Data", Toast.LENGTH_LONG).show();
}
}
else {
Toast.makeText(getApplicationContext(), "Bluetooth in Not Connected", Toast.LENGTH_LONG).show();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
if( bSocket == null ) return;
if( bSocket.isConnected() ) {
Disconnect();
}
}
public void onClick_Bluetooth_btn_Disconnect( View v ) {
Disconnect();
}
public void Disconnect() {
if ( bSocket != null && bSocket.isConnected() ) {
try {
bSocket.close();
Toast.makeText(getApplicationContext(), "Disconnected", Toast.LENGTH_SHORT).show();
}
catch( IOException e ) {
Toast.makeText(getApplicationContext(), "Error in Disconnecting ", Toast.LENGTH_SHORT).show();
}
}
finish();
}
public static class ConnectedThread extends Thread {
private BluetoothSocket mmSocket;
private InputStream mmInStream;
private OutputStream mmOutStream;
public ConnectedThread(BluetoothSocket socket) {
mmSocket = socket;
InputStream tmpIn = null;
OutputStream tmpOut = null;
// Get the input and output streams, using temp objects because member streams are final
try {
tmpIn = socket.getInputStream();
tmpOut = socket.getOutputStream();
} catch (IOException e) {
e.printStackTrace();
}
mmInStream = tmpIn;
mmOutStream = tmpOut;
//Tell other phone that we have connected
write("connected".getBytes());
}
public void run() {
byte[] buffer = new byte[512];
int bytes;
StringBuilder readMessage = new StringBuilder();
while( !this.isInterrupted() ) {
try {
bytes = mmInStream.read(buffer);
String readed = new String(buffer, 0, bytes);
readMessage.append(readed);
if (readed.contains("\n")) {
//brHandler.obtainMessage(ledControl.DataIsReady, bytes, -1, readMessage.toString()).sendToTarget();
readMessage.setLength(0);
}
} catch (Exception e) {
//Message msg = brHandler.obtainMessage( ledControl.Error, "" ).sendToTarget();
break;
}
}
}
// Call this from the main activity to send data to the remote device
public void write(byte[] bytes) {
try {
mmOutStream.write(bytes);
} catch (IOException e) {
e.printStackTrace();
}
}
// Call this from the main activity to shutdown the connection
public void cancel() {
if (mmInStream != null) {
try {mmInStream.close();} catch (Exception e) {}
mmInStream = null;
}
if (mmOutStream != null) {
try {mmOutStream.close();} catch (Exception e) {}
mmOutStream = null;
}
if (mmSocket != null) {
try {mmSocket.close();} catch (Exception e) {}
mmSocket = null;
}
this.interrupt();
}
}
private static class BluetoothResponseHandler extends Handler {
private WeakReference<ledControl> mActivity;
public BluetoothResponseHandler(ledControl activity) {
mActivity = new WeakReference<ledControl>(activity);
}
public void setTarget(ledControl target) {
mActivity.clear();
mActivity = new WeakReference<ledControl>(target);
}
@Override
public void handleMessage(Message msg) {
ledControl activity = mActivity.get();
String Data = (String)msg.obj;
if (activity != null) {
switch (msg.what) {
case DataIsReady :
if( Data == null ) return;
break;
}
}
}
}
}
مهمان
سلام خیلی ممنونم از این پروژت ولی یک مشکلی هست : موقع تایید کردن برنامت ارور میداد دراین خط از برنامه :
while (Serial1.available() > 0 لطفا بررسی کنید. ممنون میشم.
خط 19
نویسنده این مطلب
سلام – از منو آردوینو – نوع برد رو به آردوینو مگا تغییر بدید – احتمالا پروژه شما رو آردوینو UNO تنظیم شده ( چون آردوینو یونو SERIAL1 نداره فلذا خطا میده )
آردوینو مگا 4 واحد UART داره ولی آردوینو یونو فقط یک واحد UART داره.
مهمان
سلام .چطوری میشه این پروژه رو برد اردینوuno اجرا کرد
نویسنده این مطلب
سلام
خب ماژول بلوتوث hc05 با سریال ( uart ) کار میکنه – شما پایه های تغذیه ماژولو وصل کن – پایه های tx و rx رو هم به سریال uno وصل کن – led ها رو هم هر جا دوست داشتی وصل کن فقط تو پروژه بگو که کجا وصل کردی –
مهمان
سلام ,برای طراحی قسمت اندروید میتونین از B4A هم استفاده کنید.هم راحت هم سساده است یادگیریش مشکل یاد گیری جاوا هم ندارید
.باتشکر
نویسنده این مطلب
سلام = کسی که کارش با میکرو باشه – یعنی c بلده – کسی هم که C بلد باشه – یعنی java تا حدود زیادی بلده – به نظرم جاوا بهتر باید باشه.
مهمان
سلام اقای دمرچیلو
بخوام اندروید استدیو یاد بگیریم از کجا بگیریم کتاب میشناسید دانلود کنم
در ضمن بخوای از سنسور های گوشی استفاده کنی sdk میخواد
این sdk های چجوری باید به کار ببری
مثلا سنسور زاویه سنج
جای هست برای آموزش
ممنون میشم
نویسنده این مطلب
سلام
تو نت چند تا فیلم آموزش رایگان اندریود استدیو هستش – بگردی پیدا میکنی.
سایت developer.android.com هم هستش – مرجع
مهمان
سلام اقا مهدی اقا عالی کارت حرف نداره انشالله موفق بشی این برنامه اندرویید غوغا کرد ها
دوستان واقعا هیج جا نمی تونی اینجور مطالب ناب پیدا کنید.
مهمان
سلام،
بعضی اوقات وقتی چیزی به hc-05 میفرستم مثل حالت آماده به کار از خودش واکنش نشون نمیده باید چند بار بفرستم، ماژول بلوتوث حالت آماده به کار داره؟
نویسنده این مطلب
سلام
منم تا جایی که خاطرمه به همچین مشکلی بر خرودم – بعضا باید ۱-۲ بار دیتا رو ارسال میکردم تا میکرو بگیره – ولی زیاد پیگیرش نشدم حقیقتا ببینم علت چیه !
حالا فعلا یه کاری دارم – دوباره برمیگرم رو hc05 و دیتاشیتش.