Hi,
hoffe die Überschrift ist nicht zu verwirrend gewählt.
Also ich habe in einer Android App ein Joystick Control, welches bei einer Bewegung mir eine Methode aufruft und die aktuellen x und y Koordinaten übergibt. Diese Werte werden dann an eine weitere Methode übergeben, welche diese Verarbeitet und das Ergebnis per Bluetooth versendet.
Die Werte werden von einem Arduino empfangen. Das Problem ist, das wenn ich den Joystick kurz hin und her Bewege, ca. 200 das Ereignis für die Joystickbewegungsänderung aufgerufen wird, der Arduino so schnell die Daten aber nicht empfangen / verarbeiten kann. Ich möchte daher die Methode zum Verarbeiten maximal zwei mal pro Sekunde aufrufen. Wie setze ich das am besten um?
Wäre es eine gute Idee, sich beim Aufrufen des Joystickspositionsänderungsereignises (schön kurzes Wort
) die aktuelle Zeit zu merken und nur dann die Bluetooth Methode aufzurufen, wenn mindestens 500 Milisekunden vergangen sind? Das Problem ist allerdings, dass ich am liebsten auch bei keiner Positionsänderung die alten Werte im selben Intervall versenden würde. Für die Berechnung brauche ich allerdings Daten aus mehreren globalen Variablen. Wäre ein Thread dann eine Möglichkeit, oder kann es Probleme geben, wenn das Joystickspositionsänderungsereignises "gleichzeitig" mit dem Thread auf die globalen Variablen zugreifen will und diese verändern? Wie könnte ich das geschickter umsetzen, Android würde ja noch ein paar Thread Alternativen liefern...
Edit: Es ist etwas viel Text geworden, vielleicht ist es in Codefassung schneller ersichtlich.
|
Quellcode
|
1
2
3
4
5
6
7
8
|
//Globale Variablen, z.B.
int joystickX, joystickY, messageId,...
//Wird teilweise öfter als alle 500 Millisekunden aufgerufen, bei keiner Benutzerinteraktion gar nicht
public void joystickPositionChange(int x, int y) {//Verändert globale Variablen}
//Soll alle 500 Millisekunden aufgerufen werden
public void sendToAruino() {//Benötigt globale Variablen zur Berechnung}
|
Danke schon mal für eure Hilfe.
Gruß,
MitgliedXYZ