From 104407c0f4bdeb028bbeb404d31a44b484a6a182 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=A1clav=20Jel=C3=ADnek?= <jelinva4@fel.cvut.cz> Date: Tue, 22 Oct 2024 11:30:12 +0200 Subject: [PATCH] Add reset funciton to motor encoders --- menu_programs/i2c_master.py | 14 ++++++++------ micropython/modules/opencube_motors/encoder_api.c | 8 ++++++++ 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/menu_programs/i2c_master.py b/menu_programs/i2c_master.py index a2bf991..260e821 100644 --- a/menu_programs/i2c_master.py +++ b/menu_programs/i2c_master.py @@ -23,7 +23,9 @@ def i2c_master_run(robot): while True: robot.display.fill(0) robot.display.centered_text(f"I2C master", 0, 1) - if ADDRESS in robot.i2c_master.i2c.scan(): + scan = robot.i2c_master.i2c.scan() + print(scan) + if ADDRESS in scan: connected = True robot.display.text(f"Sending: {chr(data_sending+ASCII_a)}", 0, 16, 1) robot.display.text(f"Received: {chr(data_received_parsed)}", 0, 24, 1) @@ -35,11 +37,11 @@ def i2c_master_run(robot): robot.display.text('<', 0, 54, 1) robot.display.show() - if connected: - robot.i2c_master.write(ADDRESS, (data_sending + ASCII_a).to_bytes(1, 'big')) - data_received = robot.i2c_master.read(0x41, 1) - if data_received: - data_received_parsed = int.from_bytes(data_received, 'big') + print("writing") + robot.i2c_master.write(ADDRESS, (data_sending + ASCII_a).to_bytes(1, 'big')) + #data_received = robot.i2c_master.read(ADDRESS, 1) + #if data_received: + # data_received_parsed = int.from_bytes(data_received, 'big') buttons = robot.buttons.pressed() if buttons[Button.LEFT]: diff --git a/micropython/modules/opencube_motors/encoder_api.c b/micropython/modules/opencube_motors/encoder_api.c index af5f4e5..fb73bac 100644 --- a/micropython/modules/opencube_motors/encoder_api.c +++ b/micropython/modules/opencube_motors/encoder_api.c @@ -73,6 +73,13 @@ static mp_obj_t encoder_get_speed(mp_obj_t self_in) { static MP_DEFINE_CONST_FUN_OBJ_1(encoder_get_speed_obj, encoder_get_speed); +static mp_obj_t encoder_reset(mp_obj_t self_in) { + encoder_obj_t *self = MP_OBJ_FROM_PTR(self_in); + self->ref_position = opencube_encoders_get_position(self->port); + return mp_const_none; +} +static MP_DEFINE_CONST_FUN_OBJ_1(encoder_reset_obj, encoder_reset); + static mp_obj_t encoder_finalizer(mp_obj_t self_in) { encoder_obj_t *self = MP_OBJ_FROM_PTR(self_in); opencube_encoders_deinit(self->port); @@ -84,6 +91,7 @@ static const mp_rom_map_elem_t encoder_locals_dict[] = { {MP_ROM_QSTR(MP_QSTR_get_position), MP_ROM_PTR(&encoder_get_position_obj)}, {MP_ROM_QSTR(MP_QSTR_set_position), MP_ROM_PTR(&encoder_set_position_obj)}, {MP_ROM_QSTR(MP_QSTR_get_speed), MP_ROM_PTR(&encoder_get_speed_obj)}, + {MP_ROM_QSTR(MP_QSTR_reset), MP_ROM_PTR(&encoder_reset_obj)}, {MP_ROM_QSTR(MP_QSTR___del__), MP_ROM_PTR(&encoder_finalizer_obj)}, }; static MP_DEFINE_CONST_DICT(encoder_locals_dict_obj, encoder_locals_dict); -- GitLab