Stap 7: De Android app
Voor de volgende stap ga ik om te veronderstellen dat u vertrouwd bent met het schrijven van een Android app. Als dat niet het geval is, kunt u opnieuw de links de stap 2. De broncode is hieronder.OPMERKINGEN:
* Worden ervoor dat u de waarde van DEVICE_ADDRESS wijzigen. Dit kan worden gevonden op de sticker op uw BlueSMiRF. Het kan ook worden gevonden tijdens het instellen van de baud-rate in stap 4 (#9). De tekenreeks van letters en cijfers is na "BTA", dat een waarde boven de "BAUDRT".
* Worden Wijzig de pakket naam (eerste lijn van MyRemote.java) aan uw project directory-structuur
MyRemote.java
pakket edu.mit.media.amarino.myremote;
importeren van android.app.Activity;
importeren van android.os.Bundle;
importeren van android.text.Editable;
importeren van android.text.TextWatcher;
importeren van android.view.MotionEvent;
importeren van android.view.View;
importeren van android.widget.Button;
importeren van android.widget.EditText;
importeren van at.abraxas.amarino.Amarino;
openbare klasse MyRemote breidt activiteit {}
openbare TextView resultaat;
public int a, b;
openbare EditText inputField;
/ * het adres wijzigen naar het adres van uw Bluetooth-module
* en zorgen dat uw apparaat wordt toegevoegd aan Amarino * /
privé statisch definitief koord DEVICE_ADDRESS = "00:06:66:07:AD:FE";
definitieve int vertraging = 150;
/ ** Aangeroepen wanneer de activiteit voor het eerst wordt gemaakt. */
openbare nietige onCreate (bundel savedInstanceState) {}
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Amarino.Connect (, DEVICE_ADDRESS);
laatste knop lClick = (knop) findViewById(R.id.leftClick);
lClick.setOnClickListener (nieuwe View.OnClickListener() {}
openbare nietige onClick (View v) {}
Actie bij klikken op uitvoeren
onLeftClick();
}
});
laatste knop rClick = (knop) findViewById(R.id.rightClick);
rClick.setOnClickListener (nieuwe View.OnClickListener() {}
openbare nietige onClick (View v) {}
Actie bij klikken op uitvoeren
onRightClick();
}
});
de laatste knop plus = (knop) findViewById(R.id.plusBtn);
plus.setOnClickListener (nieuwe View.OnClickListener() {}
openbare nietige onClick (View v) {}
Actie bij klikken op uitvoeren
onPlus();
}
});
de laatste knop minus = (knop) findViewById(R.id.minusBtn);
minus.setOnClickListener (nieuwe View.OnClickListener() {}
openbare nietige onClick (View v) {}
Actie bij klikken op uitvoeren
onMinus();
}
});
inputField = (EditText)findViewById(R.id.input);
TextWatcher fieldValidatorTextWatcher = nieuwe TextWatcher() {}
openbare nietige beforeTextChanged (CharSequence s, int begin, int count, int na) {}
}
public void onTextChanged (int begin, CharSequence s, int vóór, int count) {}
Koord str = inputField.getText().toString();
int len = str.length();
char c;
backspaced
Als (len < = start) {}
onDelete();
}
Swyped
anders als (len > (start + 1)) {}
Tekenreeks temp = "";
for (int i = start; ik < len; i ++) {}
c = str.charAt(i);
Temp += Character.toString(c);
}
onSend(temp);
}
normaal getypt
else {}
c = str.charAt(len-1);
Str = Character.toString(c);
onSend(str);
}
}
openbare nietige afterTextChanged (bewerkbare arg0) {}
}
};
inputField.addTextChangedListener(fieldValidatorTextWatcher);
}
beschermd nietig onStart() {}
super.onStart();
}
beschermd nietig onStop() {}
super.onStop();
Houd de dienst van de achtergrond van de Amarino, we hoeven het niet meer
Amarino.Disconnect (, DEVICE_ADDRESS);
}
openbare Booleaanse onTouchEvent (MotionEvent evenement) {}
int x = (int)event.getX();
int y = (int)event.getY();
int diffX;
int diffY;
Boolean isUp, isDown, isLeft, isRight;
schakelaar (event.getAction()) {}
Case MotionEvent.ACTION_DOWN:
een = x;
b = y;
breken;
Case MotionEvent.ACTION_MOVE:
bepalen van links of rechts
if(a > x) {}
isLeft = true;
isRight = false;
} else {}
isRight = true;
isLeft = false;
}
bepalen omhoog of omlaag
if(b > y) {}
isUp = true;
isDown = false;
} else {}
isDown = true;
isUp = false;
}
verschil berekenen
diffX = a - x;
Als (diffX < 0) diffX * = -1;
diffY = b - y;
Als (diffY < 0) diffY * = -1;
groter verschil bepalen
Als (isLeft & & isUp) {}
if(diffX > diffY) onLeft();
anders onUp();
}
anders als (isLeft & & isDown) {}
if(diffX > diffY) onLeft();
anders onDown();
}
anders als (isRight & & isDown) {}
if(diffX > diffY) onRight();
anders onDown();
}
anders als (isRight & & isUp) {}
if(diffX > diffY) onRight();
anders onUp();
}
breken;
Case MotionEvent.ACTION_UP:
breken;
}
return false;
}
private void onUp() {}
Amarino.sendDataToArduino (dit, DEVICE_ADDRESS, ' ~', "U");
}
private void onLeft() {}
Amarino.sendDataToArduino (dit, DEVICE_ADDRESS, ' ~', 'L');
}
private void onRight() {}
Amarino.sendDataToArduino (dit, DEVICE_ADDRESS, ' ~', 'R');
}
private void onDown() {}
Amarino.sendDataToArduino (dit, DEVICE_ADDRESS, ' ~', "D");
}
private void onLeftClick() {}
Amarino.sendDataToArduino (dit, DEVICE_ADDRESS, ' ~', 'Z');
}
private void onRightClick() {}
Amarino.sendDataToArduino (dit, DEVICE_ADDRESS, ' ~', 'X');
}
private void onPlus() {}
Amarino.sendDataToArduino (dit, DEVICE_ADDRESS, ' ~', 'P');
}
private void onMinus() {}
Amarino.sendDataToArduino (dit, DEVICE_ADDRESS, ' ~', "M");
}
private void onSend (String str) {}
Amarino.sendDataToArduino (dit, DEVICE_ADDRESS, ' ^', str);
}
private void onDelete() {}
Amarino.sendDataToArduino (dit, DEVICE_ADDRESS, ''', 'B');
}
}
===============================
Main.XML
<? xml version = "1.0" encoding = "utf-8"? >
< LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android" android: richting = "verticale"
Android: layout_width = "fill_parent" android: layout_height = "fill_parent" >
< LinearLayout android: layout_width = "400px" android: layout_height = "100px" android: layout_gravity = "center_horizontal"
Android: layout_marginTop = "20px" >
< button android: id = "
Android: tekst = "android: textSize ="32px"
Android: layout_width = "200px" android: layout_height = "100px" >< / Button >
< button android: id = "
Android: tekst = "android: textSize ="32px"
Android: layout_width = "200px" android: layout_height = "100px" >< / Button >
< / LinearLayout >
< LinearLayout android: layout_width = "200px" android: layout_height = "100px" android: layout_gravity = "center_horizontal"
Android: layout_marginTop = "20px" >
< button android: id = "
Android: tekst = "android: textSize ="48px"
Android: layout_width = "100px" android: layout_height = "100px" >< / Button >
< button android: id = "
Android: tekst = "android: textSize ="48px"
Android: layout_width = "100px" android: layout_height = "100px" >< / Button >
< / LinearLayout >
< LinearLayout android: layout_width = "450px" android: layout_height = "100px" android: layout_gravity = "center_horizontal"
Android: layout_marginTop = "20px" >
< EditText android: id = "android: textSize ="32px"
Android: layout_width = "fill_parent" android: layout_height = "100px" / >
< / LinearLayout >
< / LinearLayout >
===============================
strings.XML
<? xml version = "1.0" encoding = "utf-8"? >
< resources >
< naam = "app_name" > MyRemote < / string >
< naam = "clickLeft" > Klik met de linkermuisknop < / string >
< naam = "clickRight" > Klik met de rechtermuisknop < / string >
< naam = "plus" > + < / string >
< naam = "minus" > – < / string >
< naam = "Verzend" > verzenden < / string >
< / middelen >
===============================
Ik wil iets zeggen over de verschillende functies aan de onderkant van de "MyRemote.java". Ze noemen de zelfde methode met vergelijkbare parameters:
Amarino.sendDataToArduino (dit, DEVICE_ADDRESS, ' ~', 'Z');
Deze methode doet de werkelijke commucation met de BlueSMiRF aangesloten op de Arduino. Het weet welk apparaat te sturen door de variabele DEVICE_ADDRESS, die de unieke id voor de BlueSMiRF. Vrij regelrecht voorwaarts. Maar de volgende parameters wellicht een beetje meer uitleg, de ~ en de Z. De 3e parameter (~) vertelt de Processing Schets, die we schrijven in de volgende stap, welke modus we in:
~ = muis gevoeligheid, muisbeweging en muisklik
↑ = invoer van het toetsenbord
' = backspace
Ik koos deze willekeurige tekens doelbewust voor een paar redenen. Voornamelijk, moest ik een paar gereserveerde tekens ter aanduiding van de "mode", dus ik koos die tekens overlapt die ik nooit gebruiken zou terwijl het runnen van dit project. Dit lijkt misschien verwarrend, maar hopelijk zal dit duidelijk omhoog: de vierde parameter ("Z" in het bovenstaande fragment) een ding kan doen als verzenden met een ~ of het kan iets heel anders doen als ik stuur het met een ^. Dit groeit de mogelijkheden exponentieel.
Let op het gebruik van deze tekens op de volgende stap, onze Processing schets.