diff --git a/epicardium/epicardium.h b/epicardium/epicardium.h index 3f0c9fa66dbeb39c70aa00816d2ef285dcad3f60..0c21eee1dc3f092de7fb782eb23bd1ae4b70761f 100644 --- a/epicardium/epicardium.h +++ b/epicardium/epicardium.h @@ -968,6 +968,8 @@ struct bhi160_data_vector { int16_t y; /** Z */ int16_t z; + /** Status */ + uint8_t status; }; /** diff --git a/epicardium/modules/bhi.c b/epicardium/modules/bhi.c index 6e141df990f752f2d60a2911b73d92243d3073c8..658c4b19a72351681d4cd6c5d16675f6685cbc4f 100644 --- a/epicardium/modules/bhi.c +++ b/epicardium/modules/bhi.c @@ -304,6 +304,7 @@ bhi160_handle_packet(bhy_data_type_t data_type, bhy_data_generic_t *sensor_data) data_vector.x = sensor_data->data_vector.x; data_vector.y = sensor_data->data_vector.y; data_vector.z = sensor_data->data_vector.z; + data_vector.status = sensor_data->data_vector.status; xQueueSend( bhi160_streams[sensor_type].queue, &data_vector, diff --git a/preload/apps/bhi160/__init__.py b/preload/apps/bhi160/__init__.py index e732581541517ef69b2d18c1e6c5713b9b4317cf..561c3e69073edbcb60702c8d69ea3527730fee21 100644 --- a/preload/apps/bhi160/__init__.py +++ b/preload/apps/bhi160/__init__.py @@ -12,10 +12,18 @@ while True: disp.clear() sample = samples[0] + color = [255, 0, 0] + if sample.status == 1: + color = [255, 128, 0] + elif sample.status == 2: + color = [255, 255, 0] + elif sample.status == 3: + color = [0, 200, 0] + disp.print("Accelerometer", posy=0) - disp.print("X: %f" % sample["x"], posy=20) - disp.print("Y: %f" % sample["y"], posy=40) - disp.print("Z: %f" % sample["z"], posy=60) + disp.print("X: %f" % sample.x, posy=20, fg=color) + disp.print("Y: %f" % sample.y, posy=40, fg=color) + disp.print("Z: %f" % sample.z, posy=60, fg=color) disp.update() diff --git a/pycardium/modules/bhi160-sys.c b/pycardium/modules/bhi160-sys.c index 4d23fe83168e75c0f9446b53d8ce0b9abab110b4..db0a5c9a65eb42f9b8ee392ffa5650909877bfb0 100644 --- a/pycardium/modules/bhi160-sys.c +++ b/pycardium/modules/bhi160-sys.c @@ -38,11 +38,12 @@ STATIC mp_obj_t mp_bhi160_read_sensor(mp_obj_t stream_id_in) // other data types are currently not supported mp_raise_OSError(EINVAL); } - mp_obj_t tuple[3]; + mp_obj_t tuple[4]; tuple[0] = mp_obj_new_int(buf[i].x); tuple[1] = mp_obj_new_int(buf[i].y); tuple[2] = mp_obj_new_int(buf[i].z); - mp_obj_list_append(list, mp_obj_new_tuple(3, tuple)); + tuple[3] = mp_obj_new_int(buf[i].status); + mp_obj_list_append(list, mp_obj_new_tuple(4, tuple)); } return MP_OBJ_FROM_PTR(list); diff --git a/pycardium/modules/py/bhi160.py b/pycardium/modules/py/bhi160.py index b5839194165c5244a297493d6bb3a7f0fa133548..86ad6f01f10b4f929d3390d41dda8283badb3676 100644 --- a/pycardium/modules/py/bhi160.py +++ b/pycardium/modules/py/bhi160.py @@ -1,5 +1,8 @@ import sys_bhi160 import interrupt +import ucollections + +DataVector = ucollections.namedtuple("DataVector", ["x", "y", "z", "status"]) class BHI160: @@ -49,6 +52,14 @@ class BHI160: if self._callback: self._callback(data) + def convert_data_vector(self, sample): + return DataVector( + self.convert_single(sample[0]), + self.convert_single(sample[1]), + self.convert_single(sample[2]), + sample[3], + ) + class BHI160Accelerometer(BHI160): def __init__( @@ -67,13 +78,7 @@ class BHI160Accelerometer(BHI160): return 2 * value / 32768.0 def convert(self, sample): - return dict( - { - "x": self.convert_single(sample[0]), - "y": self.convert_single(sample[1]), - "z": self.convert_single(sample[2]), - } - ) + return self.convert_data_vector(sample) class BHI160Gyroscope(BHI160): @@ -93,13 +98,7 @@ class BHI160Gyroscope(BHI160): return 360 * value / 32768.0 def convert(self, sample): - return dict( - { - "x": self.convert_single(sample[0]), - "y": self.convert_single(sample[1]), - "z": self.convert_single(sample[2]), - } - ) + return self.convert_data_vector(sample) class BHI160Orientation(BHI160): @@ -119,10 +118,4 @@ class BHI160Orientation(BHI160): return 360 * value / 32768.0 def convert(self, sample): - return dict( - { - "x": self.convert_single(sample[0]), - "y": self.convert_single(sample[1]), - "z": self.convert_single(sample[2]), - } - ) + return self.convert_data_vector(sample)