diff --git a/code/arduino/Movement-sensor-code/Connectivity.cpp b/code/arduino/Movement-sensor-code/Connectivity.cpp index 651e40c..5bdaa9e 100644 --- a/code/arduino/Movement-sensor-code/Connectivity.cpp +++ b/code/arduino/Movement-sensor-code/Connectivity.cpp @@ -33,8 +33,12 @@ const char* Connectivity::fetchIPAddress() { int httpCode = http.GET(); if (httpCode > 0) { if (httpCode == HTTP_CODE_OK) { - // If successful (code 200), read the response body and store the IP address - ipAddress = strdup(http.getString().c_str()); + // If successful (code 200), read the response body and parse the IP address + String response = http.getString(); + StaticJsonDocument<200> doc; + deserializeJson(doc, response); + const char* ip = doc["ip"]; // Extract the IP address + ipAddress = strdup(ip); } } else { Serial.printf("GET request failed, error: %s\n", http.errorToString(httpCode).c_str()); diff --git a/code/arduino/Movement-sensor-code/Connectivity.h b/code/arduino/Movement-sensor-code/Connectivity.h index 37d528b..27cfe94 100644 --- a/code/arduino/Movement-sensor-code/Connectivity.h +++ b/code/arduino/Movement-sensor-code/Connectivity.h @@ -11,6 +11,8 @@ #include #include #include +#include + class Connectivity { diff --git a/code/arduino/Movement-sensor-code/Movement-sensor-code.ino b/code/arduino/Movement-sensor-code/Movement-sensor-code.ino index fbb0a11..4a17a93 100644 --- a/code/arduino/Movement-sensor-code/Movement-sensor-code.ino +++ b/code/arduino/Movement-sensor-code/Movement-sensor-code.ino @@ -4,11 +4,12 @@ void setup() { //connect to internet and start sensor connectivity.connectWiFi(ssid, pass); sensorManager.sensorSetup(); - Serial.begin(9600); + Serial.begin(115200); + Serial.println("startup"); } void loop() { - SensorManager::eulerAngles eulerRotation = sensorManager.getEulerAngles(); + SensorManager::RotationQuaternions Rotation = sensorManager.getQuaternions(); // SensorManager::acceleration rotationAcceleration = sensorManager.getAcelleration(); struct acceleration { @@ -18,9 +19,10 @@ struct acceleration { } accelData; if (!ipAquired) { - serverIp = connectivity.fetchIPAddress(); + serverIp = connectivity.fetchIPAddress(); // Assign the value here ipAquired = true; } + unsigned long lastTime = 0; // will store the last time the code was run unsigned long currentTime = millis(); if (currentTime - lastTime >= 100) { // 100 ms has passed @@ -29,15 +31,17 @@ struct acceleration { buffer, "{\"deviceId\": %d, \"rotationX\": %f, \"rotationY\": %f, \"rotationZ\": %f, \"accelerationX\": %f, \"accelerationY\": %f, \"accelerationZ\": %f, \"type\": %s}", DEVICE_ID, - eulerRotation.roll, - eulerRotation.pitch, - eulerRotation.yaw, - accelData.x, + Rotation.i, + Rotation.j, + Rotation.k, + Rotation.w, accelData.y, accelData.z, "data"); // %d = int, %f = floatation, %s = string - connectivity.httpPost("192.168.137.30", "/", 3445, buffer, strlen(buffer), "application/json"); + connectivity.httpPost(serverIp, "/", 3445, buffer, strlen(buffer), "application/json"); + Serial.println(serverIp); + Serial.println(buffer); lastTime = currentTime; } } diff --git a/code/arduino/Movement-sensor-code/SensorManager.h b/code/arduino/Movement-sensor-code/SensorManager.h index a7652e7..d1a0e4e 100644 --- a/code/arduino/Movement-sensor-code/SensorManager.h +++ b/code/arduino/Movement-sensor-code/SensorManager.h @@ -22,14 +22,17 @@ public: eulerAngles getEulerAngles(); acceleration getAcelleration(); bool sensorTap(); -private: - struct RotationQuaternions { + + struct RotationQuaternions { float i; float j; float k; float w; }; RotationQuaternions getQuaternions(); + +private: + BNO080 myIMU; }; diff --git a/code/arduino/Movement-sensor-code/headerFIle.h b/code/arduino/Movement-sensor-code/headerFIle.h index bd6639b..cc25dec 100644 --- a/code/arduino/Movement-sensor-code/headerFIle.h +++ b/code/arduino/Movement-sensor-code/headerFIle.h @@ -8,8 +8,8 @@ Connectivity connectivity; WebSocketsClient webSocket; #define USE_SERIAL Serial -#define ssid "1235678i" -#define pass "12345678" +#define ssid "msi 5556" +#define pass "abc12345" #define BUFFER_SIZE 1024 #define DEVICE_ID 1 #define IP_ADDRESS "192.168.137.12" diff --git a/code/src/Fitbot/.idea/misc.xml b/code/src/Fitbot/.idea/misc.xml index ca880a9..44c9792 100644 --- a/code/src/Fitbot/.idea/misc.xml +++ b/code/src/Fitbot/.idea/misc.xml @@ -22,6 +22,7 @@ + diff --git a/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/EndScreenActivity.java b/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/EndScreenActivity.java index f2185de..1c36be4 100644 --- a/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/EndScreenActivity.java +++ b/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/EndScreenActivity.java @@ -13,6 +13,8 @@ public class EndScreenActivity extends AppCompatActivity { super.onCreate(savedInstanceState); setContentView(R.layout.activity_end_screen); + NavigationManager.hideSystemUI(this); + NavigationManager.setupButtonNavigation(this, R.id.homeButtonEndScreen, MainActivity.class); NavigationManager.setupButtonNavigation(this, R.id.startButtonEndScreen, FitnessActivity.class); } diff --git a/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java b/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java index c6a89ab..4dc2472 100644 --- a/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java +++ b/code/src/Fitbot/app/src/main/java/com/example/fitbot/ui/activities/FitnessActivity.java @@ -2,11 +2,17 @@ package com.example.fitbot.ui.activities; import android.app.Dialog; import android.content.Context; +import android.content.res.ColorStateList; +import android.graphics.Color; import android.graphics.drawable.ColorDrawable; +import android.media.MediaPlayer; +import android.net.Uri; import android.os.Bundle; import android.util.Log; +import android.widget.ProgressBar; import android.widget.TextView; import android.view.View; +import android.view.WindowManager; import android.widget.Button; import android.widget.VideoView; @@ -53,7 +59,7 @@ public class FitnessActivity extends RobotActivity implements RobotLifecycleCall private static final float SENSOR_SAMPLE_RATE = 10.0f; private static final int EXERCISE_COUNT = 5; - private static int EXERCISE_REP = 10; + private static int EXERCISE_REP = 1; private static final float EXERCISE_SPEED_MULTIPLIER = 1.0f; @Override @@ -67,6 +73,13 @@ public class FitnessActivity extends RobotActivity implements RobotLifecycleCall this.exerciseShortDescriptionTextView = findViewById(R.id.textViewFitnessShortDescription); //this.exerciseDescriptionTextView = findViewById(R.id.textViewDialogDescription); + // Set the repetition count for the exercise + EXERCISE_REP = 1; + + // Set color of loading circle + ProgressBar loadingCircle = findViewById(R.id.loadingCircle); + loadingCircle.setIndeterminateTintList(ColorStateList.valueOf(Color.RED)); + // Navigation Buttons NavigationManager.setupButtonNavigation(this, R.id.homeButtonFitness, MainActivity.class); NavigationManager.setupButtonNavigation(this, R.id.skipButtonFitness, MainActivity.class); //Needs to skip exercises once those are implemented @@ -99,7 +112,7 @@ public class FitnessActivity extends RobotActivity implements RobotLifecycleCall exerciseStatusElement.post(() -> { this.fetchExerciseAsync((exercise) -> { // Acquire paths from the exercise and provide them to the motion processor - Vector3f[][] vectors = new Vector3f[][]{exercise.leftPath.getAngleVectors(), exercise.rightPath.getAngleVectors()}; + Vector3f[][] vectors = new Vector3f[][]{exercise.leftPath.getVectors(), exercise.rightPath.getVectors()}; motionProcessor = new InputProcessor(vectors, exercise.exerciseTimeInSeconds, SENSOR_SAMPLE_RATE); @@ -126,7 +139,7 @@ public class FitnessActivity extends RobotActivity implements RobotLifecycleCall public void fetchExerciseAsync(Exercise.ExerciseFetchHandler onSuccessfulFetch, Exercise.ExerciseFetchHandler onFailedFetch) { // For some stupid reason we cannot perform network operations on the main thread. // therefore we'll have to do it like this... - (new Thread(() -> { + new Thread(() -> { Exercise exercise = ExerciseManager.fetchExerciseFromDatabase(); if (exercise == null) { onFailedFetch.handle(null); @@ -142,14 +155,28 @@ public class FitnessActivity extends RobotActivity implements RobotLifecycleCall VideoView videoView = findViewById(R.id.videoView); playVideo(videoView, this); - // Set a listener to repeat the video - while (EXERCISE_REP > 1) { - videoView.setOnCompletionListener(mp -> videoView.start()); // start the video again); - EXERCISE_REP--; - } + // When the video has started playing remove the loading circle + videoView.setOnInfoListener((mp, what, extra) -> { + if (what == MediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START) { + ProgressBar loadingCircle = findViewById(R.id.loadingCircle); + loadingCircle.setVisibility(View.GONE); + return true; + } + return false; + }); + + videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + if (EXERCISE_REP < EXERCISE_COUNT) { + videoView.start(); // start the video again + EXERCISE_REP++; + } + } + }); }); } - })).start(); + }).start(); } /** @@ -158,7 +185,7 @@ public class FitnessActivity extends RobotActivity implements RobotLifecycleCall * @param videoView The VideoView to play the video in * @param context The context to use */ - public static void playVideo(VideoView videoView, Context context) { + public void playVideo(VideoView videoView, Context context) { // Set up the video player if (videoView != null) { videoView.setVideoPath(exerciseVideoUrl); diff --git a/code/src/Fitbot/app/src/main/res/drawable/border_background.xml b/code/src/Fitbot/app/src/main/res/drawable/border_background.xml index 7ea69e6..3d0d3c1 100644 --- a/code/src/Fitbot/app/src/main/res/drawable/border_background.xml +++ b/code/src/Fitbot/app/src/main/res/drawable/border_background.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/code/src/Fitbot/app/src/main/res/drawable/border_background_2.xml b/code/src/Fitbot/app/src/main/res/drawable/border_background_2.xml index 0fb955b..408d16b 100644 --- a/code/src/Fitbot/app/src/main/res/drawable/border_background_2.xml +++ b/code/src/Fitbot/app/src/main/res/drawable/border_background_2.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/code/src/Fitbot/app/src/main/res/layout/activity_end_screen.xml b/code/src/Fitbot/app/src/main/res/layout/activity_end_screen.xml index 35aa21a..d8a48fd 100644 --- a/code/src/Fitbot/app/src/main/res/layout/activity_end_screen.xml +++ b/code/src/Fitbot/app/src/main/res/layout/activity_end_screen.xml @@ -12,7 +12,7 @@ android:layout_height="450dp" android:layout_marginStart="80dp" android:layout_marginTop="24dp" - android:background="@drawable/border_background_2" + android:background="@drawable/border_background" android:orientation="vertical" android:padding="16dp" app:layout_constraintStart_toStartOf="parent" @@ -24,7 +24,7 @@ android:layout_gravity="center" android:layout_marginTop="20dp" android:layout_marginBottom="40dp" - android:background="@drawable/border_background" + android:background="@drawable/border_background_3" android:orientation="vertical" android:paddingVertical="15dp" android:paddingHorizontal="20dp" @@ -40,11 +40,11 @@ - + + + + + + + +