roboardgod 發表於 2013-7-5 13:00:34

[RoBoME] Smartphone Controller

原文網址: http://roboardgod.blogspot.tw/2013/07/robome-smartphone-controller.html

最近進擊巨人很夯

所以機器人也要進擊一下這樣
http://4.bp.blogspot.com/-7Qd6zOnBP-Q/UdUV6UvPfpI/AAAAAAAAA2g/muQHMgyioSc/s320/img1.png
以下影片演示給大家看:

GmoSVw-jYsM







這次本魔開發的是RoBoME的控制器喔~

只要將你用RoBoME編寫的動作丟到智慧手機裡就可以做控制了!!

聽起來相當的容易吧~

以下教學

首先智慧手機上的程式我有打包apk供各位下載安裝囉~   LINK

然後RoBoard上必須要有接收端程式   LINK

附註:   接收端程式我預設是接到COM8 所以藍芽設定請設定到COM8

接著   只要在智慧手機根目錄下建置一個資料夾為RoBoME (如下圖)
http://1.bp.blogspot.com/-cpt7_TohXFc/UdURGNed7PI/AAAAAAAAA2I/FIVjkFZx74w/s320/01.png

然後將檔案放入即可喔!

無feedback的機器人記得要放入homeframe文件

或有聲音也要放入喔
http://1.bp.blogspot.com/-aE23xgevugI/UdURGVgtItI/AAAAAAAAA18/A30BOaIPLbQ/s320/02.png

開啟應用程式後   會看到兩個欄位

第一個欄位用來選rbm檔案

第二個欄位為選擇藍芽通道
http://1.bp.blogspot.com/-DAXiS_A7iI4/UdURGIcuTII/AAAAAAAAA14/xLHOcjnvJOI/s320/Screenshot_2013-07-04-11-46-59.png
完成後按下Start
http://4.bp.blogspot.com/-NigtHNZ0FIA/UdURHKZzjlI/AAAAAAAAA2Q/Bggh7VY2rWY/s320/Screenshot_2013-07-04-11-47-21.png
出現此介面後

先按下Start   再開啟Power   它就會給馬達電了

下面中文字的部分是我們已經編輯好的動作   它會自動生成按鈕來做整套的動作

相信眼睛很利的大家都有看到voice的按鈕

沒錯   這按鈕就是用來做聲控的

你只要念出下面按鈕的名稱   它就會做對應的動作囉!!

P.S.介面相當的陽春   不過別太介意啦=D   有時間的話再來認真的設計界面吧

goldpower 發表於 2013-7-27 21:24:09

please source code apk !!!!

goldpower 發表於 2013-7-30 12:21:49

help help help

please source code apk !!!!

roboardgod 發表於 2013-7-30 17:37:10

can you let me know what you want to do?
like bluetooth, servo control or something else?

goldpower 發表於 2013-7-31 12:19:45

can you let me know what you want to do?
like bluetooth, servo control or something else?
roboardgod 發表於 2013-7-30 17:37 http://www.robofun.net/forum/images/common/back.gif


    I want my bluetooth to connect and control the servo.

roboardgod 發表於 2013-7-31 16:41:41

Then...? what's the problem?
Here is my process:
(Android) read file -> create buttons -> button onclick event -> send motion data
(Robot) waiting data -> get data -> servo control

Are you using RoBoard on your robot?

goldpower 發表於 2013-7-31 21:34:44

本帖最後由 goldpower 於 2013-7-31 21:58 編輯

Then...? what's the problem?
Here is my process:
(Android) read file -> create buttons -> button o ...
roboardgod 發表於 2013-7-31 16:41 http://www.robofun.net/forum/images/common/back.gif

I'm using the rb110 .
I'm using the mono android in visual studio 2012:   http://xamarin.com/

How do I send astring from android phone to computer?

I need source code for Rb110 and Android phone ( sony xperia tipo).

roboardgod 發表於 2013-8-1 11:37:36

本帖最後由 roboardgod 於 2013-8-1 11:42 編輯

回復 7# goldpower

okay..first, you need to install bluetooth driver on roboard
then, pair your devices
then, set com port for your device




Here's a simple sample code:
roboard (VC2008):
#include <windows.h>
#include <stdio.h>
#include <conio.h>
int main () {
      int i;
      DWORD dwBytesRead = 0;
    unsigned char Read_Packet1 = {0};
      HANDLE Serial = CreateFile(TEXT("\\\\.\\COM10"), GENERIC_READ, 0, 0, OPEN_EXISTING, 0, NULL);//to COM10
      if (Serial == INVALID_HANDLE_VALUE){
                printf("serial error");
                getchar();
                return 1;
      }
      DCB dcbSerialParams = {0};
      dcbSerialParams.BaudRate=115200;
      dcbSerialParams.ByteSize=8;
      dcbSerialParams.StopBits=ONESTOPBIT;
      dcbSerialParams.Parity=NOPARITY;
      if(!SetCommState(Serial, &dcbSerialParams)){
                printf("com setting error!!\n");
                goto End;
      }

      COMMTIMEOUTS timeouts={0};      
      timeouts.ReadIntervalTimeout = MAXDWORD;
      timeouts.ReadTotalTimeoutConstant = 500;
      timeouts.ReadTotalTimeoutMultiplier = 20;
      timeouts.WriteTotalTimeoutConstant = 20;
      timeouts.WriteTotalTimeoutMultiplier = 20;

      if (!SetCommTimeouts(Serial, &timeouts)){
                printf("timeout error!\n");
                goto End;
      }
      while(!kbhit()){   //loop until keyboard click
                ReadFile(Serial, Read_Packet1, 1, &dwBytesRead, NULL);
                Read_Packet1 = '\0';
                if(Read_Packet1)
                        printf("%s", Read_Packet1);
                Read_Packet1 = 0;
      }
End:
      CloseHandle(Serial);
      getchar();
      return 0;
}
   


Android phone(eclipse):
layout: one Button and one EditText

package com.example.bluetooth_client;

import java.io.IOException;
import java.io.OutputStream;
import java.util.Set;
import java.util.UUID;

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import android.app.Activity;
import android.bluetooth.*;
import android.content.Intent;

public class MainActivity extends Activity {
         private static final String TAG = "DEBUG";
         private static final boolean D = true;
         private BluetoothAdapter mBluetoothAdapter = null;
         private BluetoothSocket btSocket = null;
         private OutputStream outStream = null;
         private static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
         private static String address = "00:00:00:00:00:00";      //roboard's bluetooth device address
   
   @Override
   public void onCreate(Bundle savedInstanceState) {
               super.onCreate(savedInstanceState);
               setContentView(R.layout.activity_main);
               Button sendButton = (Button) findViewById(R.id.button);
               sendButton.setOnClickListener(new Button.OnClickListener(){
                  public void onClick(View arg0){
                     TextView enteredText = (TextView)findViewById(R.id.entertext);
                                 String message = enteredText.getText().toString();
                                 byte[] msgBuffer = message.getBytes();
                                 try {
                                    outStream.write(msgBuffer);
                                 } catch (IOException e) {
                                    Log.e(TAG, "ON RESUME: Exception during write.", e);
                           }
                  }
                });
               if (D)
                  Log.e(TAG, "+++ ON CREATE +++");
                     mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
            
               if (mBluetoothAdapter == null) {
                  Toast.makeText(this,"Bluetooth is not available.", Toast.LENGTH_LONG).show();
                  finish();
                  return;
               }
               if (!mBluetoothAdapter.isEnabled()) {
                   Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
                   startActivityForResult(enableBtIntent, 1);
               }
               if (!mBluetoothAdapter.isEnabled()) {
                  Toast.makeText(this, "Please enable your BT and re-run this program.", Toast.LENGTH_LONG).show();
                  finish();
                  return;
               }
               Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();
                  if (pairedDevices.size() > 0) {
                        for (BluetoothDevice device : pairedDevices) {
                              Log.e(TAG,device.getName() + "\n" + device.getAddress());
                        }
                  }
          }
          @Override
          public void onResume() {
               super.onResume();
               BluetoothDevice device = null;
               if (D) {
                  Log.e(TAG, "+ ON RESUME +");
                  Log.e(TAG, "+ ABOUT TO ATTEMPT CLIENT CONNECT +");
                   }
               if(BluetoothAdapter.checkBluetoothAddress(address))
                     device = mBluetoothAdapter.getRemoteDevice(address);
               else{
                     Log.e(TAG, "+++ address fail +++");
               }
                  
                   try {
                        btSocket = device.createRfcommSocketToServiceRecord(MY_UUID);
                   } catch (IOException e) {
                        Log.e(TAG, "ON RESUME: Socket creation failed.", e);
                   }
               
                   mBluetoothAdapter.cancelDiscovery();
                   try {
                        btSocket.connect();
                        Log.e(TAG, "ON RESUME: BT connection established, data transfer link open.");
                   } catch (IOException e) {
                        try {
                           btSocket.close();
                        } catch (IOException e2) {
                           Log.e(TAG,"ON RESUME: Unable to close socket during connection failure", e2);
                        }
                   }
               
                   if (D)
                        Log.e(TAG, "+ ABOUT TO SAY SOMETHING TO SERVER +");
               
                   try {
                        outStream = btSocket.getOutputStream();
                   } catch (IOException e) {
                        Log.e(TAG, "ON RESUME: Output stream creation failed.", e);
                   }
               
                  
          }
      
          @Override
          public void onPause() {
               super.onPause();
      
               if (D)
                  Log.e(TAG, "- ON PAUSE -");
      
                   if (outStream != null) {
                        try {
                           outStream.flush();
                        } catch (IOException e) {
                           Log.e(TAG, "ON PAUSE: Couldn't flush output stream.", e);
                        }
                   }
                   try{
                        btSocket.close();
                   } catch (IOException e2) {
                Log.e(TAG, "ON PAUSE: Unable to close socket.", e2);
               }
          }
}



and don't forget permission:
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />      
<uses-permission android:name="android.permission.BLUETOOTH" />

goldpower 發表於 2013-8-1 17:34:28

Hi
Please attach the project eclipse.

roboardgod 發表於 2013-8-2 14:13:00

I'm already gave you a sample code
please try it yourself, thx

goldpower 發表於 2013-8-2 15:06:18

cannot import android.os.   ????

http://upload7.ir/images/52792033876233888998.png

roboardgod 發表於 2013-8-2 15:43:17

本帖最後由 roboardgod 於 2013-8-2 16:03 編輯

Have you installed android SDK?

goldpower 發表於 2013-8-2 19:05:19

本帖最後由 goldpower 於 2013-8-6 00:00 編輯

All problems were solved.

Thank you

http://www.robofun.net/forum/images/smilies/default/biggrin.gifhttp://www.robofun.net/forum/images/smilies/default/biggrin.gifhttp://www.robofun.net/forum/images/smilies/default/biggrin.gifhttp://www.robofun.net/forum/images/smilies/default/biggrin.gifhttp://www.robofun.net/forum/images/smilies/default/biggrin.gifhttp://www.robofun.net/forum/images/smilies/default/biggrin.gifhttp://www.robofun.net/forum/images/smilies/default/biggrin.gifhttp://www.robofun.net/forum/images/smilies/default/biggrin.gifhttp://www.robofun.net/forum/images/smilies/default/biggrin.gifhttp://www.robofun.net/forum/images/smilies/default/biggrin.gifhttp://www.robofun.net/forum/images/smilies/default/biggrin.gif
頁: [1]
查看完整版本: [RoBoME] Smartphone Controller