Fix graph view

This commit is contained in:
Vineyro 2024-06-17 13:53:34 +07:00
parent ab1046fd61
commit 067b5e94eb
7 changed files with 197 additions and 173 deletions

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="deploymentTargetDropDown">
<value>
<entry key="app">
<State />
</entry>
</value>
</component>
</project>

10
.idea/migrations.xml Normal file
View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectMigrations">
<option name="MigrateToGradleLocalJavaHome">
<set>
<option value="$PROJECT_DIR$" />
</set>
</option>
</component>
</project>

View File

@ -13,8 +13,8 @@ android {
applicationId "llc.arma.ble" applicationId "llc.arma.ble"
minSdk 26 minSdk 26
targetSdk 34 targetSdk 34
versionCode 22 versionCode 23
versionName "1.3.2" versionName "1.3.3"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables { vectorDrawables {

View File

@ -25,7 +25,7 @@ import llc.arma.ble.app.ui.screen.inspection.accelerometer.view.AccelScaleEdit
import llc.arma.ble.app.ui.screen.inspection.accelerometer.view.AccelSpectreEdit import llc.arma.ble.app.ui.screen.inspection.accelerometer.view.AccelSpectreEdit
import llc.arma.ble.app.ui.screen.inspection.accelerometer.view.AccelViewEdit import llc.arma.ble.app.ui.screen.inspection.accelerometer.view.AccelViewEdit
import llc.arma.ble.app.ui.screen.inspection.accelerometer.view.AccelerometerSpectre import llc.arma.ble.app.ui.screen.inspection.accelerometer.view.AccelerometerSpectre
import llc.arma.ble.app.ui.screen.inspection.accelerometer.view.AccelerometerAccel import llc.arma.ble.app.ui.screen.inspection.accelerometer.view.AccelerometerRealtime
import llc.arma.ble.app.ui.screen.inspection.accelerometer.view.AccelerometerHistory import llc.arma.ble.app.ui.screen.inspection.accelerometer.view.AccelerometerHistory
import llc.arma.ble.app.ui.screen.inspection.accelerometer.view.DisplayState import llc.arma.ble.app.ui.screen.inspection.accelerometer.view.DisplayState
import llc.arma.ble.app.ui.screen.inspection.accelerometer.view.HistoryEdit import llc.arma.ble.app.ui.screen.inspection.accelerometer.view.HistoryEdit
@ -94,7 +94,7 @@ fun AccelerometerScreen(
if (currentState is AccelerometerContract.State.Display) { if (currentState is AccelerometerContract.State.Display) {
bottomDialog.show { bottomDialog.show {
AccelerometerAccel( AccelerometerRealtime(
ble = currentState.accelerometer.info, ble = currentState.accelerometer.info,
accelMode = currentState.accelViewMode, accelMode = currentState.accelViewMode,
fftAxis = currentState.fftAxis, fftAxis = currentState.fftAxis,

View File

@ -1,5 +1,6 @@
package llc.arma.ble.app.ui.screen.inspection.accelerometer.view package llc.arma.ble.app.ui.screen.inspection.accelerometer.view
import android.util.Log
import androidx.compose.animation.core.tween import androidx.compose.animation.core.tween
import androidx.compose.foundation.layout.* import androidx.compose.foundation.layout.*
import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.CircleShape
@ -47,7 +48,7 @@ import llc.arma.ble.domain.usecase.FftViewMode
import llc.arma.ble.domain.usecase.GetAccelerometerMeasureBySerialFlow import llc.arma.ble.domain.usecase.GetAccelerometerMeasureBySerialFlow
@Composable @Composable
fun AccelerometerAccel( fun AccelerometerRealtime(
ble: BleInfo, ble: BleInfo,
accelScale: AccelScale, accelScale: AccelScale,
accelMode: AccelViewMode, accelMode: AccelViewMode,
@ -196,199 +197,195 @@ fun Display(
val lastMeasure = state.measureHistory.lastOrNull() val lastMeasure = state.measureHistory.lastOrNull()
if(lastMeasure is Ble.Accelerometer.RealtimePoint.Common) { Log.d("mode", lastMeasure.toString())
when(lastMeasure){
is Ble.Accelerometer.RealtimePoint.Angle -> {
Column(
verticalArrangement = Arrangement.spacedBy(16.dp),
horizontalAlignment = Alignment.CenterHorizontally
) {
when(state.mode){
ROTATIONS -> {
Column( Column(
verticalArrangement = Arrangement.spacedBy(16.dp), modifier = Modifier.weight(1f),
horizontalAlignment = Alignment.CenterHorizontally horizontalAlignment = Alignment.CenterHorizontally
) { ) {
Text(text = "Ось X: ${lastMeasure.x}")
Spacer(modifier = Modifier.height(8.dp))
Angle(
angle = lastMeasure.x,
modifier = Modifier.weight(1f),
)
}
Column(
modifier = Modifier.weight(1f),
horizontalAlignment = Alignment.CenterHorizontally
) {
Text(text = "Ось Y: ${lastMeasure.y}") Text(text = "Ось Y: ${lastMeasure.y}")
Column( Spacer(modifier = Modifier.height(8.dp))
Angle(
modifier = Modifier.weight(1f), modifier = Modifier.weight(1f),
horizontalAlignment = Alignment.CenterHorizontally angle = lastMeasure.y
) {
Text(text = "Ось X: ${lastMeasure.x}")
Spacer(modifier = Modifier.height(8.dp))
Angle(
angle = lastMeasure.x,
modifier = Modifier.weight(1f),
)
}
Text(text = "Ось Z:")
Chart(
chart = lineChart,
chartModelProducer = zProducer,
startAxis = startAxis(),
bottomAxis = bottomAxis(),
modifier = Modifier
.fillMaxWidth()
.weight(1f),
autoScaleUp = AutoScaleUp.None,
diffAnimationSpec = tween(0),
chartScrollSpec = rememberChartScrollSpec(
initialScroll = InitialScroll.End,
autoScrollCondition = AutoScrollCondition.OnModelSizeIncreased,
autoScrollAnimationSpec = tween(0)
)
) )
} }
}
ANGLE -> {
Column( Column(
verticalArrangement = Arrangement.spacedBy(16.dp), modifier = Modifier.weight(1f),
horizontalAlignment = Alignment.CenterHorizontally horizontalAlignment = Alignment.CenterHorizontally
) { ) {
Column( Text(text = "Ось Z: ${lastMeasure.z}")
Spacer(modifier = Modifier.height(8.dp))
Angle(
modifier = Modifier.weight(1f), modifier = Modifier.weight(1f),
horizontalAlignment = Alignment.CenterHorizontally angle = lastMeasure.z
) {
Text(text = "Ось X: ${lastMeasure.x}")
Spacer(modifier = Modifier.height(8.dp))
Angle(
angle = lastMeasure.x,
modifier = Modifier.weight(1f),
)
}
Column(
modifier = Modifier.weight(1f),
horizontalAlignment = Alignment.CenterHorizontally
) {
Text(text = "Ось Y: ${lastMeasure.y}")
Spacer(modifier = Modifier.height(8.dp))
Angle(
modifier = Modifier.weight(1f),
angle = lastMeasure.y
)
}
Column(
modifier = Modifier.weight(1f),
horizontalAlignment = Alignment.CenterHorizontally
) {
Text(text = "Ось Z: ${lastMeasure.z}")
Spacer(modifier = Modifier.height(8.dp))
Angle(
modifier = Modifier.weight(1f),
angle = lastMeasure.z
)
}
}
}
else -> {
Column() {
Text(text = "Ось X:")
Chart(
chart = lineChart,
chartModelProducer = xProducer,
startAxis = startAxis(),
bottomAxis = bottomAxis(),
modifier = Modifier
.fillMaxWidth()
.weight(1f),
autoScaleUp = AutoScaleUp.None,
diffAnimationSpec = tween(0),
chartScrollSpec = rememberChartScrollSpec(
initialScroll = InitialScroll.End,
autoScrollCondition = AutoScrollCondition.OnModelSizeIncreased,
autoScrollAnimationSpec = tween(0)
)
)
Text(text = "Ось Y:")
Chart(
chart = lineChart,
chartModelProducer = yProducer,
startAxis = startAxis(),
bottomAxis = bottomAxis(),
modifier = Modifier
.fillMaxWidth()
.weight(1f),
autoScaleUp = AutoScaleUp.None,
diffAnimationSpec = tween(0),
chartScrollSpec = rememberChartScrollSpec(
initialScroll = InitialScroll.End,
autoScrollCondition = AutoScrollCondition.OnModelSizeIncreased,
autoScrollAnimationSpec = tween(0)
)
)
Text(text = "Ось Z:")
Chart(
chart = lineChart,
chartModelProducer = zProducer,
startAxis = startAxis(),
bottomAxis = bottomAxis(),
modifier = Modifier
.fillMaxWidth()
.weight(1f),
autoScaleUp = AutoScaleUp.None,
diffAnimationSpec = tween(0),
chartScrollSpec = rememberChartScrollSpec(
initialScroll = InitialScroll.End,
autoScrollCondition = AutoScrollCondition.OnModelSizeIncreased,
autoScrollAnimationSpec = tween(0)
)
) )
} }
} }
} }
is Ble.Accelerometer.RealtimePoint.Rotation -> {
Column(
verticalArrangement = Arrangement.spacedBy(16.dp),
horizontalAlignment = Alignment.CenterHorizontally
) {
} else {
Column { Text(text = "Ось Y: ${lastMeasure.tmp}")
Text(text = "Вибрация:") Column(
modifier = Modifier.weight(1f),
horizontalAlignment = Alignment.CenterHorizontally
) {
Chart( Text(text = "Ось X: ${lastMeasure.angle}")
chart = lineChart,
chartModelProducer = xProducer, Spacer(modifier = Modifier.height(8.dp))
startAxis = startAxis(),
bottomAxis = bottomAxis(), Angle(
modifier = Modifier angle = lastMeasure.angle,
.fillMaxWidth() modifier = Modifier.weight(1f),
.weight(1f), )
autoScaleUp = AutoScaleUp.None,
diffAnimationSpec = tween(0), }
chartScrollSpec = rememberChartScrollSpec(
initialScroll = InitialScroll.End, Text(text = "Ось Z:")
autoScrollCondition = AutoScrollCondition.OnModelSizeIncreased, Chart(
autoScrollAnimationSpec = tween(0) chart = lineChart,
chartModelProducer = zProducer,
startAxis = startAxis(),
bottomAxis = bottomAxis(),
modifier = Modifier
.fillMaxWidth()
.weight(1f),
autoScaleUp = AutoScaleUp.None,
diffAnimationSpec = tween(0),
chartScrollSpec = rememberChartScrollSpec(
initialScroll = InitialScroll.End,
autoScrollCondition = AutoScrollCondition.OnModelSizeIncreased,
autoScrollAnimationSpec = tween(0)
)
) )
)
}
} }
is Ble.Accelerometer.RealtimePoint.Vibration -> {
Column {
Text(text = "Вибрация:")
Chart(
chart = lineChart,
chartModelProducer = xProducer,
startAxis = startAxis(),
bottomAxis = bottomAxis(),
modifier = Modifier
.fillMaxWidth()
.weight(1f),
autoScaleUp = AutoScaleUp.None,
diffAnimationSpec = tween(0),
chartScrollSpec = rememberChartScrollSpec(
initialScroll = InitialScroll.End,
autoScrollCondition = AutoScrollCondition.OnModelSizeIncreased,
autoScrollAnimationSpec = tween(0)
)
)
}
}
is Ble.Accelerometer.RealtimePoint.Common -> {
Column() {
Text(text = "Ось X:")
Chart(
chart = lineChart,
chartModelProducer = xProducer,
startAxis = startAxis(),
bottomAxis = bottomAxis(),
modifier = Modifier
.fillMaxWidth()
.weight(1f),
autoScaleUp = AutoScaleUp.None,
diffAnimationSpec = tween(0),
chartScrollSpec = rememberChartScrollSpec(
initialScroll = InitialScroll.End,
autoScrollCondition = AutoScrollCondition.OnModelSizeIncreased,
autoScrollAnimationSpec = tween(0)
)
)
Text(text = "Ось Y:")
Chart(
chart = lineChart,
chartModelProducer = yProducer,
startAxis = startAxis(),
bottomAxis = bottomAxis(),
modifier = Modifier
.fillMaxWidth()
.weight(1f),
autoScaleUp = AutoScaleUp.None,
diffAnimationSpec = tween(0),
chartScrollSpec = rememberChartScrollSpec(
initialScroll = InitialScroll.End,
autoScrollCondition = AutoScrollCondition.OnModelSizeIncreased,
autoScrollAnimationSpec = tween(0)
)
)
Text(text = "Ось Z:")
Chart(
chart = lineChart,
chartModelProducer = zProducer,
startAxis = startAxis(),
bottomAxis = bottomAxis(),
modifier = Modifier
.fillMaxWidth()
.weight(1f),
autoScaleUp = AutoScaleUp.None,
diffAnimationSpec = tween(0),
chartScrollSpec = rememberChartScrollSpec(
initialScroll = InitialScroll.End,
autoScrollCondition = AutoScrollCondition.OnModelSizeIncreased,
autoScrollAnimationSpec = tween(0)
)
)
}
}
null -> {}
} }
} }

View File

@ -1,11 +1,7 @@
package llc.arma.ble.data package llc.arma.ble.data
import android.Manifest
import android.app.Application import android.app.Application
import android.content.pm.PackageManager
import android.os.Build
import android.util.Log import android.util.Log
import androidx.core.app.ActivityCompat
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
@ -95,7 +91,9 @@ fun getAccelerometerHistory(
while (nextPackageDataCount.toInt() != 0) { while (nextPackageDataCount.toInt() != 0) {
val temperatureDataArray = if (value[0] == 250.toByte()) { Log.d("dataTable", "next package fata size $nextPackageDataCount")
val packageDataArray = if (value[0] == 250.toByte()) {
bleMeasureInterval = value.get4byteUIntAt(4).toLong() bleMeasureInterval = value.get4byteUIntAt(4).toLong()
bleLastMeasureTime = value.get4byteUIntAt(8).toLong() bleLastMeasureTime = value.get4byteUIntAt(8).toLong()
@ -104,6 +102,14 @@ fun getAccelerometerHistory(
lastMeasureSystemTime = lastMeasureSystemTime =
System.currentTimeMillis() - ((bleRealTime - bleLastMeasureTime) * 1_000) System.currentTimeMillis() - ((bleRealTime - bleLastMeasureTime) * 1_000)
Log.d("dataTable",
"bleMeasureInterval $bleMeasureInterval " +
"bleLastMeasureTime $bleLastMeasureTime " +
"bleRealTime $bleRealTime " +
"lastMeasureSystemTime $lastMeasureSystemTime " +
"data size ${value.toUByteArray().asList().subList(16, value.size).size}"
)
value.toUByteArray().asList().subList(16, value.size) value.toUByteArray().asList().subList(16, value.size)
} else { } else {
@ -116,7 +122,7 @@ fun getAccelerometerHistory(
nextPackageDataCount = value.get2byteUIntAt(2) nextPackageDataCount = value.get2byteUIntAt(2)
resultPackage.addAll( resultPackage.addAll(
temperatureDataArray.chunked(2).map { packageDataArray.chunked(2).map {
it.toUByteArray().toByteArray().get2byteShortAt().toFloat() it.toUByteArray().toByteArray().get2byteShortAt().toFloat()
}.toMutableList() }.toMutableList()
) )

View File

@ -1,6 +1,7 @@
package llc.arma.ble.data package llc.arma.ble.data
import android.app.Application import android.app.Application
import android.util.Log
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow