Persönlich wollte ich die Werte des 3-Achsen-Beschleunigungssensors in der CSV-Datei. Ich denke, jeder Qiita-Typ hat diese Art von Erfahrung.
Also hatte ich Xperia zur Hand, suchte sofort in Google Play und installierte den Beschleunigungssensor-Logger von einem Ende.
Dann was! Die Abtastfrequenz kann nicht beliebig eingestellt werden. .. ..
Es gab jedoch eine App, die auf iOS eingestellt werden konnte, so dass es eine Geschichte war, die ich auch auf Android nicht schaffen konnte.
(Achtung) Dieses Kapitel wird wie ein Studienprotokoll geschrieben, nicht wie ein Arbeitsprotokoll. Sehen Sie es sich also wie ein Tagebuch an.
Wie bei allen Apps (6 oder 7 Samples) konnte das Sampling-Intervall nur grob angepasst werden.
Bei der Untersuchung scheint es, dass der Beschleunigungssensor im Gegensatz zu anderen Terminalsensoren die spezifische Abtastrate nicht einstellen kann. Werfen wir einen Blick auf registerListener aus SensorManager Reference. Geben Sie dann im Grunde genommen die folgenden vier Variablen für dieses dritte Argument an: int sample PeriodUs.
Diese sind in der SensorEvent-Klasse [(SensorEvent-Referenz)] definiert (https://developer.android.com/reference/android/hardware/SensorEvent.html).
Sie fragen sich jedoch, was passiert, wenn Sie in dieses dritte Argument eine bestimmte Ganzzahl eingeben. Damit! Die folgende Seite hat es speziell überprüft ← https://akira-watson.com/android/accelerometer.html
Übrigens habe ich im eigentlichen Setup die Voruntersuchung nicht so sorgfältig durchgeführt und bin in einem Sumpf stecken geblieben, dass es nicht gut funktioniert hat, selbst wenn ich eine ganze Zahl eingegeben habe, und ich bin hier angekommen (Schweiß)
Entschuldigen Sie mich lange, aber wie ich bereits sagte, als diese Tatsache klar wurde, hatte ich bereits begonnen, sie umzusetzen. Ich werde das Abtastintervall durch Filtern oder was auch immer zwangsweise anpassen, ich bin bereit
windows 10 home Android Studio 3.6.3 Android Smartphone Xperia SO-01K API: 28 AVD :Nexus 5X API: 24
Wie Sie der Version entnehmen können, installieren Sie sie einfach und Sie werden Android Studio zum ersten Mal berühren Als Vorwissen weiß ich, dass Schaltflächen einfach herzustellen sind
Ende der Versicherungszeit, gehen Sie zum Design
Die API wurde auf 16 gesetzt, in der Hoffnung, dass sie auf jedem Gerät verwendet werden kann.
Aus dem Fazit sieht es aus wie dieser Sukusho
Es ist eine Implementierungsmethode, die ich mir ausgedacht habe.
Ich konnte so viel erwähnen
Nun, das ist der Auftrag, den ich während der Produktion angesprochen habe Infolgedessen war der dritte gut, so dass ich es nicht bei jedem Frame gemacht habe.
Erstens ist der Beispielcode bei Verwendung des Beschleunigungssensors
MainActivity.java
private SensorManager mManager;
private TextView mX,mY,mZ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Get an instance of the SensorManager
mManager = (SensorManager) getSystemService(SENSOR_SERVICE);
mX = (TextView)this.findViewById(R.id.textViewX);
mY = (TextView)this.findViewById(R.id.textViewY);
mZ = (TextView)this.findViewById(R.id.textViewZ);
}
@Override
protected void onResume() {
super.onResume();
//Hörerregistrierung
Sensor accSensor= sensorManager.getDefaultSensor(
Sensor.TYPE_ACCELEROMETER);
this.mManager.registerListener((SensorEventListener) this, this.accSensor, SensorManager.SENSOR_DELAY_FASTEST);
}
@Override
protected void onPause() {
super.onPause();
//Listener freigeben
this.mManager.unregisterListener((SensorEventListener)this, this.accSensor);
}
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
mX.setText("Beschleunigungssensor X.:" + String.valueOf(sensorEvent.values[0]));
mY.setText("Beschleunigungssensor Y.:" + String.valueOf(sensorEvent.values[1]));
mZ.setText("Beschleunigungssensor Z.:" + String.valueOf(sensorEvent.values[2]));
}
public void onAccuracyChanged(Sensor sensor, int n) {
}
}
Dies funktioniert vorerst, wenn Sie mehrere Sensoren in der Funktion onSensorChanged unterstützen möchten
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER){}
Bedingt verzweigen
Wie Sie der onSensorChanged-Methode entnehmen können, enthalten die Werte [0] bis [2] in der sensorEvent-Klasse Beschleunigungen von x, y und z [(siehe SensorEvent-Referenz)](https: // developer. android.com/reference/android/hardware/SensorEvent.html#values)
Wenn Sie also das Messdatum und die Messzeit hinzufügen und an csv ausgeben, können Sie eine csv-Datei mit der maximalen Abtastfrequenz erhalten.
Es gibt zwei Methoden zum Erfassen der Abtastfrequenz (auch im letzten Referenzmaterial beschrieben). https://qiita.com/taittide/items/2f6a70eae22117266a66 https://akihito104.hatenablog.com/entry/2013/07/22/013000
Die CSV-Ausgabe ist nicht das Herzstück dieser App, daher werde ich sie weglassen.
Der Gesamtfluss dieser App ist
① Die START-Taste wird gedrückt ↓ ② Speichern Sie die x-, y- und z-Beschleunigung in einer neuen Liste ↓ ③ Die STOP / SAVE-Taste wird gedrückt ↓ ④ Kopieren Sie die gespeicherte Beschleunigung nach CSV in die Ausgabeliste ↓ ⑤ Ausgabe an CSV aus der Liste für CSV-Ausgabe ↓ ⑥ Verwerfen Sie alle Listendaten. Warten Sie auf ①
Daher kann die Abtastfrequenz durch Ausdünnen auf eine geeignete Größe in Schritt (4) eingestellt werden.
Erstens ist der Beispielcode
MainActivity.java
public void changeandcopy_information() {
accX_w = new ArrayList();
accY_w = new ArrayList();
accZ_w = new ArrayList();
timeStamp_Time_forAcc_w = new ArrayList(timeStamp_Time_forAcc);
int temp_size = timeStamp_Time_forAcc_w.size();
boolean once = false;
//Variablen zum Ausdünnen des Arrays auf die gewünschte Abtastrate
int AdjustI = (int)(input_sampling_rate/wantConverting_sampling_rate);
for (int i = 0; AdjustI*i < temp_size; i++) {
if(!once){
timeStamp_Time_forAcc_w.clear();
once=true;
}
accX_w.add(accX.get(AdjustI*i));
accY_w.add(accY.get(AdjustI*i));
accZ_w.add(accZ.get(AdjustI*i));
timeStamp_Time_forAcc_w.add(timeStamp_Time_forAcc.get(AdjustI*i));
}
}
Beschreibung neuer Zeichenvariablen Die Beschleunigung wird in accX, axxY, accZ gespeichert und zuerst definiert, um sie für die CSV-Ausgabe nach accX_w, axxY_w, accZ_w zu kopieren. timeStamp_Time_forAcc_w speichert das Messdatum und die Messzeit des Frames In input_sampling_rate wird die maximale Abtastfrequenz des Endgeräts des Benutzers gespeichert, und in wantConverting_sampling_rate wird die vom Benutzer gewünschte Abtastfrequenz als ganzzahliger Typ gespeichert. Stellen Sie I und einmal so ein, wie Sie den Code sehen
Wenn Sie ein konkretes Beispiel geben und erklären, was Sie tun Angenommen, die maximale Abtastfrequenz des Terminals beträgt 400 (Hz) und die vom Benutzer gewünschte Abtastfrequenz beträgt 100 (Hz). Wenn Sie es hier einfach so kopieren, wie es ist, erhöht sich die Arraygröße der Variablen _w um 400 pro Sekunde. Wenn daher der Wert von 400/100 (maximale Abtastfrequenz (Hz) des vom Benutzer gewünschten Endgeräts / Abtastfrequenz (Hz) des Benutzers) in der for-Anweisung mit i multipliziert wird, ist i 0,1 * 400/100, 2 * 400/100, .. und die Größe des Arrays pro Sekunde beträgt 100, was 1/4 ist.
Erfolgreiche Einstellung der Abtastfrequenz! !! !! Wann ist es nicht teilbar? Es kann nicht geholfen werden. Fehler sind inhärent
Dies ist die Ausgabe, wenn die Abtastfrequenz der tatsächlichen Maschine 423 (Hz) beträgt und die Abtastfrequenz, die Sie konvertieren möchten, 10 (Hz) beträgt.
Die Differenz zum theoretischen Wert von 0,1 Sekunden betrug -0,001 und 0,000, und der maximale Fehler betrug insgesamt ± 0,001.
Ich frage mich, warum es bisher keinen Fehler gibt, aber es ist trotzdem ein Happy End.
Ich habe es auf Github gepostet. Die Verwendung ist etwas kompliziert, siehe READ ME.txt. https://github.com/miwazawa/accelerator-logger Es wurde bestätigt, mit Xperia und Nexus zu arbeiten, die in der Umgebung erwähnt werden.
Vielen Dank, dass Sie so lange bei uns geblieben sind.
Von der Implementierung an hatte ich das Gefühl, ich sollte es Github geben, und ich schrieb es, während ich das Gefühl hatte, dass es ein schlechter Satz war (lacht)
In Bezug auf den Quellcode erhalte ich eine große Warnung zu activity_main.xml, aber es funktioniert, sodass ich es wahrscheinlich nicht reparieren werde!
Das Referenzmaterial listet wahrscheinlich alle Websites auf, die ich dieses Mal verwendet habe. Ich denke, Sie können es implementieren, indem Sie es sich ansehen.
Es war fast das erste Mal, dass ich ein richtiges Programm in Java schrieb, also hoffe ich, dass Anfänger sich in Bezug auf Lernmethoden usw. darauf beziehen können.
Von der Mitte an wurde mir klar, dass es schneller von VBA aus geht, wenn man sich mit dem Arrangement anlegen möchte, was eine andere Geschichte ist
Typkonvertierungsmethode https://eng-entrance.com/java-var-change https://www.sejuku.net/blog/14531 Ganzzahlige Beurteilung der Zeichenfolge https://techacademy.jp/magazine/19075 So verwenden Sie Thread.sleep https://engineer-club.jp/java-sleep Informationen zur CSV-Ausgabe https://tech.pjin.jp/blog/2017/10/17/%E3%80%90java%E3%80%91csv%E5%87%BA%E5%8A%9B%E3%81%AE%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%82%B3%E3%83%BC%E3%83%89/ https://teratail.com/questions/25005?link=qa_related_pc_sidebar https://teratail.com/questions/49794 Liste / um das Array https://www.javadrive.jp/start/linkedlist/index2.html
Montage des Beschleunigungssensors https://akira-watson.com/android/accelerometer.html Abtastfrequenz-Erkennungsmethode http://akihito104.hatenablog.com/entry/2013/07/22/013000 https://qiita.com/taittide/items/2f6a70eae22117266a66
Von der Installation von Android Studio bis Hello World https://akira-watson.com/android/helloworld.html layout https://qiita.com/mii-chang/items/ee965c1e8826d4e59414 Edittext Input Urteil https://qiita.com/HALU5071/items/640652de9e31d4bbdbeb Textfeld erstellen http://mitoavadn.hatenablog.com/entry/2017/03/11/224529 Tastenlayout https://teratail.com/questions/19171 SharedPreferences https://akira-watson.com/android/sharedpreferences.html Externe Speicheranforderungsmethode https://qiita.com/folivora/items/f17a125e0bc88c17a6d3
Aktivitätslebenszyklus https://developer.android.com/guide/components/activities/activity-lifecycle?hl=ja Verwendung des Sensor-Listeners https://techbooster.org/android/device/12524/ https://www.atmarkit.co.jp/ait/articles/1001/15/news119.html Wie man von Android Studio zu Github schiebt https://blog.codecamp.jp/programming-androidstudio-github