diff options
| author | Radomir Dopieralski <openstack@sheep.art.pl> | 2018-08-23 23:22:47 +0200 |
|---|---|---|
| committer | Radomir Dopieralski <openstack@sheep.art.pl> | 2019-02-28 23:34:03 +0100 |
| commit | 59f63eaef6d1024163864c9b30f879efc9dfd682 (patch) | |
| tree | 30c08d2c5e052e0929b932d835605ffe845aa952 /shared-module/_pew | |
| parent | 0a5c1c94025a1d36762d14b48995337b0f09ce97 (diff) | |
Handle new buttons
Diffstat (limited to 'shared-module/_pew')
| -rw-r--r-- | shared-module/_pew/PewPew.c | 15 | ||||
| -rw-r--r-- | shared-module/_pew/PewPew.h | 3 | ||||
| -rw-r--r-- | shared-module/_pew/__init__.c | 8 |
3 files changed, 19 insertions, 7 deletions
diff --git a/shared-module/_pew/PewPew.c b/shared-module/_pew/PewPew.c index de1224a37..27c2d1c99 100644 --- a/shared-module/_pew/PewPew.c +++ b/shared-module/_pew/PewPew.c @@ -52,16 +52,17 @@ void pewpew_interrupt_handler(uint8_t index) { } void pew_init() { - pew_obj_t* pew_singleton = MP_STATE_VM(pew_singleton); - for (size_t i = 0; i < pew_singleton->rows_size; ++i) { - digitalio_digitalinout_obj_t *pin = MP_OBJ_TO_PTR( - pew_singleton->rows[i]); + pew_obj_t* pew = MP_STATE_VM(pew_singleton); + + common_hal_digitalio_digitalinout_switch_to_input(pew->buttons, PULL_UP); + + for (size_t i = 0; i < pew->rows_size; ++i) { + digitalio_digitalinout_obj_t *pin = MP_OBJ_TO_PTR(pew->rows[i]); common_hal_digitalio_digitalinout_switch_to_output(pin, false, DRIVE_MODE_PUSH_PULL); } - for (size_t i = 0; i < pew_singleton->cols_size; ++i) { - digitalio_digitalinout_obj_t *pin = MP_OBJ_TO_PTR( - pew_singleton->cols[i]); + for (size_t i = 0; i < pew->cols_size; ++i) { + digitalio_digitalinout_obj_t *pin = MP_OBJ_TO_PTR(pew->cols[i]); common_hal_digitalio_digitalinout_switch_to_output(pin, true, DRIVE_MODE_OPEN_DRAIN); } diff --git a/shared-module/_pew/PewPew.h b/shared-module/_pew/PewPew.h index 2f25f9ce2..57b25c3a0 100644 --- a/shared-module/_pew/PewPew.h +++ b/shared-module/_pew/PewPew.h @@ -28,14 +28,17 @@ #define MICROPY_INCLUDED_PEW_PEWPEW_H #include <stdint.h> +#include "shared-bindings/digitalio/DigitalInOut.h" typedef struct { mp_obj_base_t base; uint8_t* buffer; mp_obj_t* rows; mp_obj_t* cols; + digitalio_digitalinout_obj_t *buttons; uint8_t rows_size; uint8_t cols_size; + uint8_t pressed; } pew_obj_t; void pew_init(void); diff --git a/shared-module/_pew/__init__.c b/shared-module/_pew/__init__.c index 2e09932f3..e44a4c0e3 100644 --- a/shared-module/_pew/__init__.c +++ b/shared-module/_pew/__init__.c @@ -36,6 +36,8 @@ void pew_tick(void) { static uint8_t col = 0; static uint8_t turn = 0; + static uint8_t pressed = 0; + static uint8_t last_pressed = 0; digitalio_digitalinout_obj_t *pin; pew_obj_t* pew = MP_STATE_VM(pew_singleton); @@ -44,12 +46,18 @@ void pew_tick(void) { pin = MP_OBJ_TO_PTR(pew->cols[col]); ++col; if (col >= pew->cols_size) { + pew->pressed |= last_pressed & pressed; + last_pressed = pressed; + pressed = 0; col = 0; ++turn; if (turn >= 8) { turn = 0; } } + if (!common_hal_digitalio_digitalinout_get_value(pew->buttons)) { + pressed |= 1 << col; + } common_hal_digitalio_digitalinout_set_value(pin, true); for (size_t x = 0; x < pew->rows_size; ++x) { pin = MP_OBJ_TO_PTR(pew->rows[x]); |
