Telefon kontrollerade stämningsbelysning (4 / 12 steg)
Steg 4: Bearbetning och Android
För det mesta, du bör följa wiki om du vill konfigurera allt, men jag har också tagit med min egen instruktionerna nedan. Jag har förenklat delar som jag tycker wikin gör ett bra jobb med att förklara och har expanderat på andra delar. Jag har också lagt till ytterligare tips som jag brukade få min att fungera. Inte allt fungerade perfekt varje steg på vägen, så ha tålamod. Jag har försökt att ta med allt jag gjorde för att få saker arbetar när jag träffar en vägspärr. Obs: om du använder en Mac, inte alla av mina instruktioner gäller för dig och jag föreslår att du mer noga följa den wiki-sidan.
Här är länken för wiki-sidan på bearbetningen med Android:
http://wiki.Processing.org/w/Android
USB-felsökning
När du har installerat bearbetning, Android SDK och alla nödvändiga plattformar och paket, kommer att du behöva aktivera USB-felsökning på enheten.
På min Samsung Galaxy S III gick jag till Inställningar då utvecklaren alternativ sedan kontrolleras USB-felsökning. På en Nexus tablett, gå till Inställningar och sedan om tabletten Klicka på Build-nummer sju gånger för att aktivera USB-felsökning.
USB-drivrutiner
Om du inte redan, Anslut telefonen till datorn och installera USB-drivrutiner för din enhet. Jag kunde ladda ner allt för min telefon från denna webbplats:
http://Developer.Samsung.com/Android/tools-SDKs/Samsung-Andorid-USB-driver-for-Windows
Detta är bara nödvändigt om du använder en PC.
Kör en skiss (första försöket)
Öppna bearbetning och växla från standardläge till Android genom att klicka på nedrullningsbara menyn i det övre högra hörnet av fönstret och välja Android. Om du vill växla till Android läge, kan du behöva starta om bearbetning när du har gjort detta.
Kopiera och klistra in följande kod i din bearbetning skiss. Detta är en skiss som stänger skärmen gröna om Android-enhet kan finna Seeed Bluetooth och sedan blir lila när det har anslutit till Seeed sköld. Android kommer också att skicka bokstaven "a" till Arduino's följetong.
Har den Arduino seriell bildskärm öppna när du kör Android App så du ska se till att två kommunicerar (seriell kommunikation är hur vi kommer att få belysningen att ändra senare). När du kör programmet, måste du klicka på "Kör på enheten." Jag gick förbi körs på en virtuell enhet eftersom jag alltid haft tillgång till min telefon och jag bestämde att det var mer problem än det var värt att få virtuella enheten fungerar. Första gången du kör programmet, det sannolikt inte att fungera korrekt. Var inte orolig. Det är nästa steg.
/*
Bluetooth ansluta och skicka byte
av Nicole Grimwood
Baserat på:
SendReceiveBytes
Skapad 25 mars 2013
av ScottC
Denna kod är offentlig
*/
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;
offentliga BluetoothSocket scSocket;
booleska foundDevice = false; Sant, blir skärmen grön.
booleska BTisConnected = false; Sant, blir skärmen lila.
Meddelandetyper används av Handler
offentliga statisk sista int MESSAGE_WRITE = 1;
offentliga statisk sista int MESSAGE_READ = 2;
String readMessage = "";
Få standard Bluetooth adapter
BluetoothAdapter bluetooth = BluetoothAdapter.getDefaultAdapter();
/ * StartActivityForResult() inom setup() lanserar en
Aktivitet som används för att be användaren att aktivera Bluetooth.
Följande onActivityResult() metod kallas när detta
Aktivitet avslutas. */
skyddade void onActivityResult (int requestCode, int resultCode, uppsåt data) {
om (requestCode == 0) {
om (resultCode == RESULT_OK) {
ToastMaster ("Bluetooth har slagits på");
}
annat {
ToastMaster ("du måste slå Bluetooth!");
}
}
}
/ * Skapa en BroadcastReceiver som senare kommer att användas för att
får namn på Bluetooth-enheter inom räckhåll. */
BroadcastReceiver myDiscoverer = ny myOwnBroadcastReceiver();
/ * Skapa en BroadcastReceiver som senare kommer att användas för att
identifiera om Bluetooth-enheten är ansluten * /
BroadcastReceiver checkIsConnected = ny myOwnBroadcastReceiver();
Hundföraren som får information tillbaka från uttaget
privat slutliga Handler mHandler = ny Handler() {
public void handleMessage (meddelande msg) {
växel (msg.what) {
fall MESSAGE_WRITE:
Göra något när du skriver
bryta;
fall MESSAGE_READ:
Få byte från msg.obj
byte [] readBuf = (byte[]) msg.obj;
konstruera en sträng från de giltig byte i bufferten
readMessage = ny sträng (readBuf, 0, msg.arg1);
bryta;
}
}
};
void setup() {
Orientation(LANDSCAPE);
/ * OM Bluetooth inte är aktiverat, då frågar användaren tillåtelse att aktivera den * /
om (! bluetooth.isEnabled()) {
Uppsåt requestBluetooth = ny Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult (requestBluetooth, 0);
}
/ * Om Bluetooth är nu aktiverat, sedan registrera en broadcastReceiver för att rapportera någon
upptäckt Bluetooth-enheter och startar att upptäcka * /
om (bluetooth.isEnabled()) {
registerReceiver (myDiscoverer, nya IntentFilter(BluetoothDevice.ACTION_FOUND));
registerReceiver (checkIsConnected, nya IntentFilter(BluetoothDevice.ACTION_ACL_CONNECTED));
Starta bluetooth upptäckt om det inte gör det redan
om (! bluetooth.isDiscovering()) {
bluetooth.startDiscovery();
}
}
}
void draw() {
Visas en grön skärm om en enhet har hittats,
Visa en lila skärmen när en anslutning görs till enheten
om (foundDevice) {
om (BTisConnected) {
bakgrund (170, 50, 255); lila skärmen
}
annat {
bakgrund (10, 255, 10); grön skärm
}
}
Visa något från Arduino
text (readMessage, 10, 10);
}
/ * Denna BroadcastReceiver visas upptäckta Bluetooth-enheter * /
allmän klass myOwnBroadcastReceiver sträcker sig BroadcastReceiver {
ConnectToBluetooth connectBT;
public void onReceive (kontext sammanhang, avsikt intent) {
Sträng action=intent.getAction();
ToastMaster ("ACTION:" + åtgärder);
Anmälan som BluetoothDevice finns
om (BluetoothDevice.ACTION_FOUND.equals(action)) {
Visa namnet på upptäckta enheten
String discoveredDeviceName = intent.getStringExtra(BluetoothDevice.EXTRA_NAME);
ToastMaster ("upptäckt:" + discoveredDeviceName);
Visa mer information om upptäckta enheten
BluetoothDevice discoveredDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
ToastMaster("getAddress() ="+ discoveredDevice.getAddress());
ToastMaster("getName() ="+ discoveredDevice.getName());
int bondyState=discoveredDevice.getBondState();
ToastMaster("getBondState() ="+ bondyState);
Sträng mybondState;
Switch(bondyState) {
mål 10:
mybondState = "BOND_NONE";
bryta;
mål 11:
mybondState = "BOND_BONDING";
bryta;
ärende 12:
mybondState = "BOND_BONDED";
bryta;
standard:
mybondState = "Ogiltig BOND staten".
bryta;
}
ToastMaster("getBondState() ="+ mybondState);
Ändra foundDevice till true som gör skärmen bli grön
foundDevice = sant;
Ansluta till upptäckta bluetooth-enheten (SeeedBTSlave)
om (discoveredDeviceName.equals("SeeedBTSlave")) {
ToastMaster ("ansluter du nu!");
unregisterReceiver(myDiscoverer);
connectBT = ny ConnectToBluetooth(discoveredDevice);
Ansluta till den enheten i en ny tråd
nya Thread(connectBT).start();
}
}
Anmälan om bluetooth-enhet är ansluten
om (BluetoothDevice.ACTION_ACL_CONNECTED.equals(action)) {
ToastMaster (anslutna _ YAY");
medan (scSocket == null) {
gör ingenting
}
ToastMaster ("scSocket" + scSocket);
BTisConnected = sant; Vrid skärmen lila
om (scSocket! = null) {
SendReceiveBytes sendReceiveBT = ny SendReceiveBytes(scSocket);
nya Thread(sendReceiveBT).start();
String testLetter = "a";
byte [] myByte = stringToBytesUTFCustom(testLetter);
sendReceiveBT.write(myByte);
}
}
}
}
offentliga statisk byte [] stringToBytesUTFCustom (String str) {
char [] buffert = str.toCharArray();
byte [] b = nya byte[buffer.length << 1];
för (int jag = 0; jag < buffer.length; i ++) {
int bpos = jag << 1.
b [bpos] = (byte) ((buffert [i] & 0xFF00) >> 8);
b [bpos + 1] = (byte) (buffert [i] & 0x00FF);
}
returnera b;
}
allmän klass ConnectToBluetooth implementerar Runnable {
privat BluetoothDevice btShield;
privat BluetoothSocket mySocket = null;
privat UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
offentliga ConnectToBluetooth (BluetoothDevice bluetoothShield) {
btShield = bluetoothShield;
försök {
mySocket = btShield.createRfcommSocketToServiceRecord(uuid);
}
fånga (IOException createSocketException) {
Problem med att skapa en socket
Log.e ("ConnectToBluetooth", "Fel med Socket");
}
}
public void run() {
/ * Avbryta upptäckten på Bluetooth-kortet att förhindra långsam anslutning * /
bluetooth.cancelDiscovery();
försök {
/ * Ansluta till bluetoothShield genom uttaget. Detta kommer att blockera
tills det lyckas eller kastar en IOException * /
mySocket.connect();
scSocket = mySocket;
}
fånga (IOException connectException) {
Log.e ("ConnectToBluetooth", "Fel med socketanslutning");
försök {
mySocket.close(); Försök stänga uttaget
}
fånga (IOException closeException) {
}
hemkomst.
}
}
/ * Kommer att avbryta en pågående anslutning och stänga uttaget * /
public void cancel() {
försök {
mySocket.close();
}
fånga (IOException e) {
}
}
}
privat klass SendReceiveBytes implementerar Runnable {
privat BluetoothSocket btSocket;
privat InputStream btInputStream = null;
privat OutputStream btOutputStream = null;
Sträng TAG = "SendReceiveBytes";
offentliga SendReceiveBytes (BluetoothSocket socket) {
btSocket = socket;
försök {
btInputStream = btSocket.getInputStream();
btOutputStream = btSocket.getOutputStream();
}
fånga (IOException streamError) {
Log.e (TAG, "fel vid att få input eller output Stream");
}
}
public void run() {
byte [] buffert = nya byte [1024]; buffert butik för ström
int byte. -byte returnerade från read()
Hålla lyssna på InputStream tills ett undantag inträffar
medan (sant) {
försök {
Läsa från InputStream
byte = btInputStream.read(buffer);
Skicka de erhållna byte till UI aktiviteten
mHandler.obtainMessage (MESSAGE_READ, byte, -1, buffert)
.sendToTarget();
}
fånga (IOException e) {
Log.e (TAG, "Fel vid läsning från btInputStream");
bryta;
}
}
}
/ * Kalla detta från den huvudsakliga verksamheten att skicka data till den fjärranslutna enheten * /
public void write (byte [] byte) {
försök {
btOutputStream.write(bytes);
}
fånga (IOException e) {
Log.e (TAG, "Fel vid skrivning till btOutputStream");
}
}
/ * Kalla detta från den huvudsakliga verksamheten till stängningen anslutningen * /
public void cancel() {
försök {
btSocket.close();
}
fånga (IOException e) {
Log.e (TAG, "Fel vid stängning av btSocket");
}
}
}
/ * Min ToastMaster-funktion för att visa en meddelanderuta på skärmen * /
Annullera ToastMaster (sträng textToDisplay) {
Rosta myMessage = Toast.makeText(getApplicationContext(),
textToDisplay,
Toast.LENGTH_SHORT);
myMessage.setGravity (Gravity.CENTER, 0, 0);
myMessage.show();
}
Redigera Android Manifest.xml
I Android-manifestet visar bara efter att du har försökt att köra programmet en gång. Det finns i mappen som innehåller filen .pde för din kod. Redigera Android Manifest.xml genom att lägga till följande två rader mellan den andra och tredje raden i original manifestet:
< användningsområden-tillstånd android:name="android.permission.BLUETOOTH"/ >
< användningsområden-tillstånd android:name="android.permission.BLUETOOTH_ADMIN"/ >
Referera till skärmbilden visas ovan se till att du har det rätt.
Ansluta
Nu kör skissen igen. Nu bör allt fungera. Öppna den Arduino seriell bildskärm så att den får bokstaven "a" när bluetooth är ansluten. Om inte, är här några saker du kan försöka få det att fungera ordentligt:
1. se till att Bluetooth skölden är korrekt konfigurerad och de röda och gröna lamporna blinkar när du kör den Android programmet.
2. kör App igen på enheten
3. Starta om din Android-enhet
4. Starta om datorn
Jag fick min att arbeta med någon kombination av dessa ytterligare åtgärder.
Viktigt tips: varje gång du återansluter bluetooth, bör du återställa eller makt cykel Arduino och stänga din App och öppna den igen.