From 9690161207e4b04747f431c49828c0a0583bd6d2 Mon Sep 17 00:00:00 2001 From: baldeau Date: Thu, 14 Nov 2024 09:54:43 +0100 Subject: [PATCH] get more accurate timings using the internal clock --- lib/xiao_connector/view/capture_view.dart | 6 +++--- xiao_controller_code/main.go | 18 ++++++++++-------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/lib/xiao_connector/view/capture_view.dart b/lib/xiao_connector/view/capture_view.dart index 77ed137..6914203 100644 --- a/lib/xiao_connector/view/capture_view.dart +++ b/lib/xiao_connector/view/capture_view.dart @@ -1,6 +1,5 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:xiao_pet_tracker/app_router/app_router.dart'; import 'package:xiao_pet_tracker/xiao_connector/cubit/xiao_connector_cubit.dart'; class CaptureView extends StatefulWidget { @@ -81,7 +80,7 @@ class _CaptureViewState extends State { const SizedBox( height: 12, ), - ElevatedButton( + ElevatedButton.icon( onPressed: () { // context.read().startCapturing( // captureType: 'test', @@ -89,7 +88,8 @@ class _CaptureViewState extends State { final timeToSend = DateTime.now().millisecondsSinceEpoch; context.read().setTime(timeToSend); }, - child: const Text('Send new Timestamp'), + icon: const Icon(Icons.watch_later_outlined), + label: const Text('Sync Clocks'), ), const SizedBox( height: 12, diff --git a/xiao_controller_code/main.go b/xiao_controller_code/main.go index e7bf475..c0705ea 100644 --- a/xiao_controller_code/main.go +++ b/xiao_controller_code/main.go @@ -24,7 +24,8 @@ var ( //temperatureSense = [16]byte{0x74, 0x65, 0x6D, 0x70, 0x65, 0x72, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x65, 0x6E, 0x73, 0x65} ) -var unixTimeStamp time.Time = time.Now() +var currentTimeStamp time.Time = time.Now() +var lastTimeStamp time.Time = time.Now() const sleepDuration time.Duration = time.Millisecond * 100 @@ -85,7 +86,7 @@ func main() { return } millisFromEpoch := binary.BigEndian.Uint64(value) - unixTimeStamp = time.Unix(0, int64(millisFromEpoch)*int64(time.Millisecond)) + currentTimeStamp = time.Unix(0, int64(millisFromEpoch)*int64(time.Millisecond)) }, }, { @@ -128,19 +129,20 @@ func main() { x, y, z, _ := accel.ReadAcceleration() arrRot := valuesToByteArray(X, Y, Z, int8(1)) - senseCharacteristic.Write(arrRot) - arrAcc := valuesToByteArray(x, y, z, int8(2)) - senseCharacteristic.Write(arrAcc) - arrTime := timeStampToByteArray(unixTimeStamp.UnixMilli(), int8(3)) + currentTimeStamp = currentTimeStamp.Add(time.Now().Sub(lastTimeStamp)) + arrTime := timeStampToByteArray(currentTimeStamp.UnixMilli(), int8(3)) + + senseCharacteristic.Write(arrRot) + senseCharacteristic.Write(arrAcc) senseCharacteristic.Write(arrTime) } - time.Sleep(sleepDuration) if isCapturing { - unixTimeStamp = unixTimeStamp.Add(sleepDuration) + lastTimeStamp = time.Now() } + time.Sleep(sleepDuration) } }