summaryrefslogtreecommitdiff
path: root/shared-module
diff options
context:
space:
mode:
Diffstat (limited to 'shared-module')
-rw-r--r--shared-module/_pew/PewPew.c15
-rw-r--r--shared-module/_pew/PewPew.h3
-rw-r--r--shared-module/_pew/__init__.c8
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]);