Paso 4: Procesamiento y Android
En su mayor parte, usted debe seguir la wiki para definir todo, pero también he incluido mis propias instrucciones. Me han simplificado las piezas que creo que la wiki hace un buen trabajo de explicar y se han expandido a otras partes. También he añadido consejos adicionales que solía conseguir mina a trabajar. No todo funcionó a la perfección cada paso del camino, asi que tengan paciencia. He tratado de todo lo que hice para conseguir cosas de trabajo cada vez que golpee un bloque del camino incluir. Nota: Si utilizas un Mac, no todas mis instrucciones se aplicarán a usted y le sugiero que más de cerca siguen la página wiki.
Aquí está el enlace de la página wiki de procesamiento con el Android:
http://wiki.Processing.org/w/Android
Depuración USB
Una vez haya instalado procesamiento, el SDK de Android y todos los paquetes y plataformas necesarias, tendrá que habilitar la depuración USB en el dispositivo.
En mi Samsung Galaxy S III, fui a ajustes Opciones de desarrollador entonces comprobado Depuración USB. Una tablet Nexus, vaya a configuración y luego sobre tablet haga clic en número de compilación siete veces para activar depuración USB.
Controladores USB
Si no lo has hecho ya, enchufe su teléfono en el ordenador e instalar controladores USB para su dispositivo. Pude descargar todo para mi celular desde este sitio:
http://developer.Samsung.com/Android/Tools-SDKs/Samsung-Andorid-USB-driver-for-Windows
Esto sólo es necesario si usted está usando un PC.
Ejecutando un esquema (primer intento)
Abrir proceso y cambiar del modo estándar al modo Android haciendo clic en el menú en la esquina superior derecha de la ventana desplegable y seleccionando Android. Para cambiar al modo de Android, puede que necesite reiniciar el tratamiento después de haber hecho esto.
Copie y pegue el siguiente código en su bosquejo de procesamiento. Esto es un bosquejo que se vuelve la pantalla verde si el dispositivo Android es capaz de encontrar el Seeed Bluetooth y luego se vuelve púrpura una vez ha conectado con el escudo de Seeed. El androide también enviará la letra "a" a la Arduino de serie.
Tener monitor serie de Arduino abierto cuando se ejecuta la aplicación para Android, así que ser asegurarse de que los dos se comunican (comunicación Serial es cómo obtenemos la luz a cambiar más tarde). Cuando se ejecuta el programa, asegúrese de hacer clic en "Ejecutar en dispositivo". Desviaran corriendo en un dispositivo virtual ya que siempre tuve acceso a mi teléfono y decidí que era más apuro que valió la pena conseguir el dispositivo virtual de trabajo. La primera vez que ejecutas el programa, probablemente no funcionará correctamente. No te preocupes. Es el siguiente paso.
/* Bluetooth Connect and Send Bytes by Nicole Grimwood Based upon: SendReceiveBytes Created March 25 2013 by ScottC This code is in the public domain */ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.widget.Toast; import android.view.Gravity; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import java.util.UUID; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import android.os.Handler; import android.os.Message; import android.util.Log; import android.bluetooth.BluetoothServerSocket; import android.bluetooth.BluetoothSocket; public BluetoothSocket scSocket; boolean foundDevice=false; //When true, the screen turns green. boolean BTisConnected=false; //When true, the screen turns purple. // Message types used by the Handler public static final int MESSAGE_WRITE = 1; public static final int MESSAGE_READ = 2; String readMessage=""; //Get the default Bluetooth adapter BluetoothAdapter bluetooth = BluetoothAdapter.getDefaultAdapter(); /*The startActivityForResult() within setup() launches an Activity which is used to request the user to turn Bluetooth on. The following onActivityResult() method is called when this Activity exits. */ protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode==0) { if (resultCode == RESULT_OK) { ToastMaster("Bluetooth has been switched ON"); } else { ToastMaster("You need to turn Bluetooth ON !!!"); } } } /* Create a BroadcastReceiver that will later be used to receive the names of Bluetooth devices in range. */ BroadcastReceiver myDiscoverer = new myOwnBroadcastReceiver(); /* Create a BroadcastReceiver that will later be used to identify if the Bluetooth device is connected */ BroadcastReceiver checkIsConnected = new myOwnBroadcastReceiver(); // The Handler that gets information back from the Socket private final Handler mHandler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) { case MESSAGE_WRITE: //Do something when writing break; case MESSAGE_READ: //Get the bytes from the msg.obj byte[] readBuf = (byte[]) msg.obj; // construct a string from the valid bytes in the buffer readMessage = new String(readBuf, 0, msg.arg1); break; } } }; void setup() { orientation(LANDSCAPE); /*IF Bluetooth is NOT enabled, then ask user permission to enable it */ if (!bluetooth.isEnabled()) { Intent requestBluetooth = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(requestBluetooth, 0); } /*If Bluetooth is now enabled, then register a broadcastReceiver to report any discovered Bluetooth devices, and then start discovering */ if (bluetooth.isEnabled()) { registerReceiver(myDiscoverer, new IntentFilter(BluetoothDevice.ACTION_FOUND)); registerReceiver(checkIsConnected, new IntentFilter(BluetoothDevice.ACTION_ACL_CONNECTED)); //Start bluetooth discovery if it is not doing so already if (!bluetooth.isDiscovering()) { bluetooth.startDiscovery(); } } } void draw() { //Display a green screen if a device has been found, //Display a purple screen when a connection is made to the device if (foundDevice) { if (BTisConnected) { background(170, 50, 255); // purple screen } else { background(10, 255, 10); // green screen } } //Display anything received from Arduino text(readMessage, 10, 10); } /* This BroadcastReceiver will display discovered Bluetooth devices */ public class myOwnBroadcastReceiver extends BroadcastReceiver { ConnectToBluetooth connectBT; public void onReceive(Context context, Intent intent) { String action=intent.getAction(); ToastMaster("ACTION:" + action); //Notification that BluetoothDevice is FOUND if (BluetoothDevice.ACTION_FOUND.equals(action)) { //Display the name of the discovered device String discoveredDeviceName = intent.getStringExtra(BluetoothDevice.EXTRA_NAME); ToastMaster("Discovered: " + discoveredDeviceName); //Display more information about the discovered device BluetoothDevice discoveredDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); ToastMaster("getAddress() = " + discoveredDevice.getAddress()); ToastMaster("getName() = " + discoveredDevice.getName()); int bondyState=discoveredDevice.getBondState(); ToastMaster("getBondState() = " + bondyState); String mybondState; switch(bondyState) { case 10: mybondState="BOND_NONE"; break; case 11: mybondState="BOND_BONDING"; break; case 12: mybondState="BOND_BONDED"; break; default: mybondState="INVALID BOND STATE"; break; } ToastMaster("getBondState() = " + mybondState); //Change foundDevice to true which will make the screen turn green foundDevice=true; //Connect to the discovered bluetooth device (SeeedBTSlave) if (discoveredDeviceName.equals("SeeedBTSlave")) { ToastMaster("Connecting you Now !!"); unregisterReceiver(myDiscoverer); connectBT = new ConnectToBluetooth(discoveredDevice); //Connect to the the device in a new thread new Thread(connectBT).start(); } } //Notification if bluetooth device is connected if (BluetoothDevice.ACTION_ACL_CONNECTED.equals(action)) { ToastMaster("CONNECTED _ YAY"); while (scSocket==null) { //do nothing } ToastMaster("scSocket" + scSocket); BTisConnected=true; //turn screen purple if (scSocket!=null) { SendReceiveBytes sendReceiveBT = new SendReceiveBytes(scSocket); new Thread(sendReceiveBT).start(); String testLetter = "a"; byte[] myByte = stringToBytesUTFCustom(testLetter); sendReceiveBT.write(myByte); } } } } public static byte[] stringToBytesUTFCustom(String str) { char[] buffer = str.toCharArray(); byte[] b = new byte[buffer.length << 1]; for (int i = 0; i < buffer.length; i++) { int bpos = i << 1; b[bpos] = (byte) ((buffer[i]&0xFF00)>>8); b[bpos + 1] = (byte) (buffer[i]&0x00FF); } return b; } public class ConnectToBluetooth implements Runnable { private BluetoothDevice btShield; private BluetoothSocket mySocket = null; private UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); public ConnectToBluetooth(BluetoothDevice bluetoothShield) { btShield = bluetoothShield; try { mySocket = btShield.createRfcommSocketToServiceRecord(uuid); } catch(IOException createSocketException) { //Problem with creating a socket Log.e("ConnectToBluetooth", "Error with Socket"); } } public void run() { /* Cancel discovery on Bluetooth Adapter to prevent slow connection */ bluetooth.cancelDiscovery(); try { /*Connect to the bluetoothShield through the Socket. This will block until it succeeds or throws an IOException */ mySocket.connect(); scSocket=mySocket; } catch (IOException connectException) { Log.e("ConnectToBluetooth", "Error with Socket Connection"); try { mySocket.close(); //try to close the socket } catch(IOException closeException) { } return; } } /* Will cancel an in-progress connection, and close the socket */ public void cancel() { try { mySocket.close(); } catch (IOException e) { } } } private class SendReceiveBytes implements Runnable { private BluetoothSocket btSocket; private InputStream btInputStream = null; private OutputStream btOutputStream = null; String TAG = "SendReceiveBytes"; public SendReceiveBytes(BluetoothSocket socket) { btSocket = socket; try { btInputStream = btSocket.getInputStream(); btOutputStream = btSocket.getOutputStream(); } catch (IOException streamError) { Log.e(TAG, "Error when getting input or output Stream"); } } public void run() { byte[] buffer = new byte[1024]; // buffer store for the stream int bytes; // bytes returned from read() // Keep listening to the InputStream until an exception occurs while (true) { try { // Read from the InputStream bytes = btInputStream.read(buffer); // Send the obtained bytes to the UI activity mHandler.obtainMessage(MESSAGE_READ, bytes, -1, buffer) .sendToTarget(); } catch (IOException e) { Log.e(TAG, "Error reading from btInputStream"); break; } } } /* Call this from the main activity to send data to the remote device */ public void write(byte[] bytes) { try { btOutputStream.write(bytes); } catch (IOException e) { Log.e(TAG, "Error when writing to btOutputStream"); } } /* Call this from the main activity to shutdown the connection */ public void cancel() { try { btSocket.close(); } catch (IOException e) { Log.e(TAG, "Error when closing the btSocket"); } } } /* My ToastMaster function to display a messageBox on the screen */ void ToastMaster(String textToDisplay) { Toast myMessage = Toast.makeText(getApplicationContext(), textToDisplay, Toast.LENGTH_SHORT); myMessage.setGravity(Gravity.CENTER, 0, 0); myMessage.show(); }
Editar Manifest.xml Android
El manifiesto de Android sólo demuestra para arriba después de que han intentado ejecutar el programa una vez. Se puede encontrar en la carpeta que contiene el archivo .pde su código. Editar Manifest.xml Android agregando las siguientes dos líneas entre la segunda y tercera líneas del manifiesto original de:
< android:name="android.permission.BLUETOOTH"/ permiso de usos >
< android:name="android.permission.BLUETOOTH_ADMIN"/ permiso de usos >
Referencia a la captura de pantalla que se muestra arriba para asegurarse de que usted tiene derecho.
Conectar
Ahora ejecutar el sketch. Todo debería funcionar ahora. Abra el monitor serie del Arduino para asegurarse de que recibe la letra "a" cuando el bluetooth está conectado. Si no es así, aquí hay algunas cosas que usted puede tratar de hacer que funcione correctamente:
1. Asegúrese de que el escudo de Bluetooth está configurado correctamente y las luces roja y verdes parpadean cuando se ejecuta el programa de Android.
2. Vuelva a ejecutar la aplicación en su dispositivo
3. Reinicie su dispositivo Android
4. Reinicie el equipo
Yo tengo la mía a trabajar utilizando una combinación de estos pasos adicionales.
Consejo importante: cada vez que vuelva a conectar el bluetooth, debe restablecer o poder ciclo Arduino y cerrar la aplicación y vuelve a abrir.