Stap 4: Verwerking en Android
Voor het grootste deel, moet u de wiki om alles ingesteld, maar ik heb ook mijn eigen instructies hieronder opgenomen. Ik heb vereenvoudigd delen dat ik denk dat de wiki heeft een goede baan dat uit te leggen en hebben uitgebreid over andere delen. Ik heb ook toegevoegd extra tips die ik gebruikt om mijn ertoe om te werken. Niet alles werkte perfect elke stap van de weg, dus wees geduldig. Ik heb geprobeerd om alles wat die ik deed om dingen werken wanneer ik raakte een blok weg te krijgen. Opmerking: als u een Mac gebruikt, niet alle mijn instructies aan jou toegepast zal en ik stel voor dat je meer volgen de wikipagina.
Hier is de link naar de wikipagina op verwerking met de Android:
http://wiki.processing.org/w/Android
USB-foutopsporing
Zodra u hebt geïnstalleerd Processing, de Android SDK en alle nodige platformen en pakketten, zal u wilt inschakelen USB debugging op uw apparaat.
Op mijn Samsung Galaxy S III ging ik naar de instellingen dan ontwikkelaar opties ingeschakeld dan USB Debugging. Op een Nexus tablet, ga naar Settings dan over tablet Klik Build-nummer zeven keer te activeren USB debugging.
USB-stuurprogramma 's
Als u niet reeds hebt, sluit uw telefoon aan op uw computer en installeren USB-stuurprogramma's voor uw apparaat. Ik kon alles voor mijn telefoon te downloaden vanaf deze site:
http://Developer.Samsung.com/Android/tools-SDKs/Samsung-Andorid-USB-driver-for-Windows
Dit is alleen nodig als u een PC gebruikt.
Uitvoeren van een schets (eerste poging)
Open processing en overschakelen van de standaardmodus naar Android modus door te klikken op de drop-down menu in de rechterbovenhoek van het venster en Android. Als u wilt overschakelen naar Android-modus, moet u wellicht te verwerking starten nadat u dit hebt gedaan.
Kopieer en plak de volgende code in uw Processing schets. Dit is een schets die worden het scherm groen zal als het Android apparaat is kundig voor vondst het Seeed Bluetooth en dan paarse draait zodra deze is aangesloten op het Seeed schild. De Android stuurt ook de letter "a" tot de Arduino de seriële.
Hebben van de Arduino seriële monitor openen tijdens het uitvoeren van de Android App zodat u worden ervoor zorgen dat de twee met elkaar communiceren (seriële communicatie is hoe we de verlichting veranderen later zullen krijgen). Wanneer u het programma uitvoert, zorg ervoor dat u klik "Run op apparaat." Ik overgeslagen op een virtueel apparaat uitgevoerd omdat altijd had ik toegang tot mijn telefoon en ik dat het was meer moeite besloot dan het waard was om het virtuele apparaat werkend te krijgen. De eerste keer u het programma uitvoert, waarschijnlijk zal het niet werken correct. Maak je niet druk. Dat is de volgende stap.
/* 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(); }
Android Manifest.xml bewerken
De Android manifesteren alleen verschijnt nadat u hebt geprobeerd om het programma eenmaal uitgevoerd. Het kan worden gevonden in de map met het bestand .pde voor uw code. Android Manifest.xml bewerken door toevoeging van de volgende twee regels tussen de tweede en derde regel in het oorspronkelijke manifest:
< gebruik-machtiging android:name="android.permission.BLUETOOTH"/ >
< gebruik-machtiging android:name="android.permission.BLUETOOTH_ADMIN"/ >
Verwijst naar de screenshot hierboven om te controleren of u het juiste.
Verbinding maken
Nu lopen de schets weer. Alles zou nu moet werken. Openen van de Arduino seriële monitor om ervoor te zorgen dat het krijgt de letter "a" wanneer het bluetooth is aangesloten. Als dit niet het geval is, zijn hier een paar dingen die je proberen kunt te krijgen om te functioneren:
1. Zorg ervoor dat de Bluetooth-schild correct is ingesteld en de rode en groene lichten knipperen wanneer u de Android programma uitvoert.
2. Start de App weer op uw apparaat
3. Herstart uw Androïde apparaat
4. Herstart uw computer
Ik heb de mijne om te werken met behulp van een combinatie van de volgende aanvullende stappen uit.
Belangrijke tip: telkens wanneer u opnieuw verbinding maakt met de bluetooth, je moet resetten of macht cyclus van de Arduino en uw App sluiten en opnieuw openen.