diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 6b7820d..e3d88b1 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -29,6 +29,7 @@
+
diff --git a/app/src/main/java/com/example/greenwatch/Kamera_Beschleunigungssensor.java b/app/src/main/java/com/example/greenwatch/Kamera_Beschleunigungssensor.java
new file mode 100644
index 0000000..eb2e07b
--- /dev/null
+++ b/app/src/main/java/com/example/greenwatch/Kamera_Beschleunigungssensor.java
@@ -0,0 +1,320 @@
+package com.example.greenwatch;
+
+import android.graphics.ImageFormat;
+import android.hardware.Sensor;
+import android.hardware.SensorEvent;
+import android.hardware.SensorEventListener;
+import android.hardware.SensorManager;
+import android.media.Image;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.HandlerThread;
+import android.os.Looper;
+import android.util.Size;
+
+import android.widget.TextView;
+
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.camera.core.CameraSelector;
+import androidx.camera.core.ImageAnalysis;
+import androidx.camera.lifecycle.ProcessCameraProvider;
+// PREVIEW
+//import androidx.camera.view.PreviewView;
+import androidx.core.content.ContextCompat;
+
+import com.google.common.util.concurrent.ListenableFuture;
+
+import java.nio.ByteBuffer;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Executor;
+
+public class Kamera_Beschleunigungssensor extends AppCompatActivity implements SensorEventListener {
+
+ private HandlerThread cameraThread;
+ private Handler cameraHandler;
+ // PREVIEW
+ // private PreviewView previewView;
+ private boolean isMotionDetected;
+ private boolean camera_alarm;
+ private TextView alarm;
+ private ByteBuffer previousBuffer;
+ private int previousWidth;
+ private int previousHeight;
+
+ /////////////////////////////////////
+
+ private SensorManager bsmanager;
+ private ArrayList Gesamt_be;
+ private int sensorType = Sensor.TYPE_GYROSCOPE, zaehler_runde =0, listen_groesse = 500, kalibrieren, Offset_shared = 0, shared_merk, mittelwertsumme_shared;
+ private Sensor sens, sensor_l;
+ private float x_value = 0, y_value, z_value, Vorbesetzung = 0, gesamt_runde =0;
+ private double Schwellwert = 0.15, mittelwertsumme = 0.0, Offset = 0.1;
+ String Daten, Warnung, Zeitstempel, Array_shared;
+ private final static String KEY_kalibirieren = "KEY_KALIBRIEREN_"+Beschleunigungssensor.class.getSimpleName();
+ private final static String KEY_Gesamt_be = "KEY_GESAMT_BE_"+Beschleunigungssensor.class.getSimpleName();
+ private final static String KEY_Offset = "KEY_OFFSET_"+Beschleunigungssensor.class.getSimpleName();
+ private final static String KEY_Mittelwertsumme = "KEY_MITTELWERTSUMME_"+Beschleunigungssensor.class.getSimpleName();
+ TextView Daten_Bsensor, Warnung_Bsensor, test;
+ private boolean toggle = true, ts_setzen = true, start_messen;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_beschleunigung_kamera);
+ ////////
+ Daten_Bsensor = (TextView) findViewById(R.id.DatenBsensor);
+ Warnung_Bsensor = (TextView) findViewById(R.id.WarnungBsensor);
+ test = (TextView) findViewById(R.id.test);
+
+ bsmanager = (SensorManager) getSystemService(SENSOR_SERVICE);
+ if (bsmanager.getSensorList(Sensor.TYPE_GYROSCOPE).size() == 0) {
+ sens = null;
+ Daten = "kein B Sensor voranden";
+ } else {
+ sens = bsmanager.getSensorList(sensorType).get(0);
+ }
+ Gesamt_be = new ArrayList();
+ for (int i = 0; i < listen_groesse ; i++){
+ Gesamt_be.add(Vorbesetzung);
+ }
+ kalibrieren = 0;
+ start_messen = false;
+
+ ///////
+ // NUR FÜR TESTS
+ alarm = findViewById(R.id.Alarm_Kamera);
+
+ // PREVIEW //
+ // previewView = findViewById(R.id.previewView);
+
+ final ListenableFuture cameraProviderFuture = ProcessCameraProvider.getInstance(this);
+ cameraProviderFuture.addListener(() -> {
+ try {
+ bindImageAnalysis(cameraProviderFuture.get());
+ } catch (ExecutionException | InterruptedException e) {
+ e.printStackTrace();
+ }
+ }, ContextCompat.getMainExecutor(this));
+ }
+
+ public static String getTimestamp(){
+ Long tslong = System.currentTimeMillis();
+ SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
+ Date date = new Date(tslong);
+ String result = sdf.format(date);
+
+ return result;
+ }
+
+ @Override
+ public void onSensorChanged(SensorEvent event) {
+ StringBuilder sb = new StringBuilder();
+ sb.append("x=").append(event.values[0])//.append(event.timestamp)
+ .append("\ny=").append(event.values[1])
+ .append("\nz=").append(event.values[2]);
+ Daten = sb.toString();
+ Daten_Bsensor.setText(Daten);
+ gesamt_runde = event.values[0] + event.values[1] + event.values[2];
+ Gesamt_be.remove(zaehler_runde);
+ Gesamt_be.add(zaehler_runde, gesamt_runde);
+ mittelwertsumme = 0.0;
+
+ //Mittelwert des Arrays berechnen
+ for (int i = 0; i < listen_groesse; i++){
+ if (Gesamt_be.get(i) < 0){
+ mittelwertsumme += (Gesamt_be.get(i) * (-1));
+ }else {
+ mittelwertsumme += Gesamt_be.get(i);
+ }
+ }
+ mittelwertsumme = mittelwertsumme/listen_groesse;
+ if (kalibrieren < listen_groesse){
+ Offset = mittelwertsumme;
+ kalibrieren++;
+ }else {
+ start_messen = true;
+ }
+ StringBuilder testsb = new StringBuilder();
+ testsb.append(mittelwertsumme);
+ String tests = testsb.toString();
+ test.setText(tests);
+
+ if((mittelwertsumme > (Schwellwert+Offset) ) & (ts_setzen == true) &(start_messen == true)){
+ Zeitstempel = getTimestamp();
+ StringBuilder ts = new StringBuilder();
+ ts.append(Zeitstempel)
+ .append(", Gruppe3")
+ .append(", An")
+ .append(", Bewegung, ")
+ .append(mittelwertsumme);
+ Warnung = ts.toString();
+ Warnung_Bsensor.setText(Warnung);
+ ts_setzen = false;
+ }else if((mittelwertsumme > (Schwellwert+Offset)) & (ts_setzen == false)){
+ } else if ((mittelwertsumme < (Schwellwert+Offset)) & (ts_setzen == false)) {
+ Warnung_Bsensor.setText("");
+ ts_setzen = true;
+ }
+
+ if (zaehler_runde < (listen_groesse -1)){
+ zaehler_runde++;
+ }else {
+ zaehler_runde = 0;
+ }
+ }
+ //mittelwertsumme ist kein int in diesem programm
+ //shared prefenrences: bei Kippen speichern -> nochmal neu klalibrieren? -> eig ja, weil neuer Standort
+ //Vorbelegung nicht nochmal neu vornehmen -> aus onCreate Funktion raus -> hilfsvariablen auch in shared preferences speichern
+ @Override
+ public void onAccuracyChanged(Sensor sensor, int accuracy) {}
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+ if (sens != null) {
+ if (bsmanager.registerListener(this, sens, SensorManager.SENSOR_DELAY_GAME)) {
+ Daten = "Wir haben uns beim Sensor angemeldet";
+ } else {
+ Daten = "Das anmelden hat nicht geklappt";
+ }
+ }
+ //SharedPreferences p = getPreferences(Context.MODE_PRIVATE);
+ //mittelwertsumme_shared = p.getInt(KEY_Mittelwertsumme, 0);
+ //kalibrieren = p.getInt(KEY_kalibirieren, 0);
+ //Offset_shared = p.getInt(KEY_Offset, 0 );
+ //Array_shared = p.getString(KEY_Gesamt_be, "");
+
+ //mittelwertsumme = (double) mittelwertsumme_shared;
+ //mittelwertsumme /= 1000000.0;
+
+ //Offset = (double) Offset_shared;
+ //Offset /= 1000000.0;
+
+ //String zw[] = Array_shared.split(";", listen_groesse);
+
+ //if(shared_merk == 2){
+ //for (int i=0; i {
+
+ int imageFormat = imageProxy.getFormat();
+
+ if (imageFormat == ImageFormat.YUV_420_888) {
+
+ Image currentImage = imageProxy.getImage();
+
+ if (previousHeight != 0) {
+ assert currentImage != null;
+ isMotionDetected = compareFrames(currentImage);
+ }
+
+ assert currentImage != null;
+ Image.Plane[] planes = currentImage.getPlanes();
+ ByteBuffer buffer = planes[0].getBuffer().duplicate();
+ previousBuffer = ByteBuffer.allocateDirect(buffer.remaining());
+ previousBuffer.put(buffer);
+ previousWidth = currentImage.getWidth();
+ previousHeight = currentImage.getHeight();
+
+ currentImage.close();
+
+ if (isMotionDetected) {
+ alarm.setText("ALARM");
+ camera_alarm = true;
+ } else {
+ camera_alarm = false;
+ alarm.setText("OK");
+ }
+
+ }
+
+ imageProxy.close();
+ });
+
+ // Preview preview = new Preview.Builder().build();
+
+ CameraSelector cameraSelector = new CameraSelector.Builder().requireLensFacing(CameraSelector.LENS_FACING_BACK).build();
+
+ // PREVIEW //
+ // preview.setSurfaceProvider(previewView.getSurfaceProvider());
+
+ cameraProvider.bindToLifecycle(this, cameraSelector, imageAnalysis);
+
+ }
+
+ // Bildverarbeitung zur Bewegungserkennung
+ private boolean compareFrames(Image currentImage) {
+
+ ByteBuffer currentBuffer = currentImage.getPlanes()[0].getBuffer();
+
+ int currentWidth = currentImage.getWidth();
+ int currentHeight = currentImage.getHeight();
+
+ if (previousWidth != currentWidth || previousHeight != currentHeight) {
+ return false;
+ }
+
+ for (int row = 0; row < previousHeight; row++) {
+ for (int col = 0; col < previousWidth; col++) {
+
+ int previousIndex = row * previousWidth + col;
+ int currentIndex = row * currentWidth + col;
+
+ int previousPixel = previousBuffer.get(previousIndex) & 0xFF;
+ int currentPixel = currentBuffer.get(currentIndex) & 0xFF;
+
+ int pixelDifference = Math.abs(previousPixel - currentPixel);
+ int threshold = 120;
+
+ if (pixelDifference > threshold) {
+ // Testzwecke
+ //String text = String.valueOf(pixelDifference);
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+}
diff --git a/app/src/main/java/com/example/greenwatch/MainActivity.java b/app/src/main/java/com/example/greenwatch/MainActivity.java
index 520b150..3925a68 100644
--- a/app/src/main/java/com/example/greenwatch/MainActivity.java
+++ b/app/src/main/java/com/example/greenwatch/MainActivity.java
@@ -35,6 +35,6 @@ public class MainActivity extends AppCompatActivity {
}
private void starteKameraAktivitaet() {
- startActivity(new Intent(this, KameraAktivitaet.class));
+ startActivity(new Intent(this, Kamera_Beschleunigungssensor.class));
}
}
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_beschleunigung_kamera.xml b/app/src/main/res/layout/activity_beschleunigung_kamera.xml
new file mode 100644
index 0000000..c0c72da
--- /dev/null
+++ b/app/src/main/res/layout/activity_beschleunigung_kamera.xml
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file