@@ -54,6 +54,13 @@ const microbit_pin_obj_t microbit_p16_obj = {{µbit_dig_pin_type}, 16, MICRO
54
54
const microbit_pin_obj_t microbit_p19_obj = {{µbit_dig_pin_type}, 19 , MICROBIT_PIN_P19, MODE_I2C};
55
55
const microbit_pin_obj_t microbit_p20_obj = {{µbit_dig_pin_type}, 20 , MICROBIT_PIN_P20, MODE_I2C};
56
56
57
+ static void microbit_pin_configure_touch_mode (microbit_pin_obj_t *self) {
58
+ const microbit_pinmode_t *mode = microbit_pin_get_mode (self);
59
+ if (mode != microbit_pin_mode_touch && mode != microbit_pin_mode_button) {
60
+ microbit_obj_pin_acquire (self, microbit_pin_mode_touch);
61
+ nrf_gpio_cfg_input (self->name , NRF_GPIO_PIN_NOPULL);
62
+ }
63
+ }
57
64
58
65
static mp_obj_t microbit_pin_get_mode_func (mp_obj_t self_in) {
59
66
microbit_pin_obj_t *self = (microbit_pin_obj_t *)self_in;
@@ -179,16 +186,26 @@ MP_DEFINE_CONST_FUN_OBJ_1(microbit_pin_get_analog_period_microseconds_obj, micro
179
186
180
187
mp_obj_t microbit_pin_is_touched (mp_obj_t self_in) {
181
188
microbit_pin_obj_t *self = (microbit_pin_obj_t *)self_in;
182
- const microbit_pinmode_t *mode = microbit_pin_get_mode (self);
183
- if (mode != microbit_pin_mode_touch && mode != microbit_pin_mode_button) {
184
- microbit_obj_pin_acquire (self, microbit_pin_mode_touch);
185
- nrf_gpio_cfg_input (self->name , NRF_GPIO_PIN_NOPULL);
186
- }
189
+ microbit_pin_configure_touch_mode (self);
187
190
/* Pin is touched if it is low after debouncing */
188
- return mp_obj_new_bool (!microbit_pin_high_debounced (self));
191
+ return mp_obj_new_bool (!microbit_pin_debounce_is_high (self));
189
192
}
190
193
MP_DEFINE_CONST_FUN_OBJ_1 (microbit_pin_is_touched_obj, microbit_pin_is_touched);
191
194
195
+ mp_obj_t microbit_pin_was_touched (mp_obj_t self_in) {
196
+ microbit_pin_obj_t *self = (microbit_pin_obj_t *)self_in;
197
+ microbit_pin_configure_touch_mode (self);
198
+ return mp_obj_new_bool (microbit_pin_debounce_was_pressed (self));
199
+ }
200
+ MP_DEFINE_CONST_FUN_OBJ_1 (microbit_pin_was_touched_obj, microbit_pin_was_touched);
201
+
202
+ mp_obj_t microbit_pin_get_touches (mp_obj_t self_in) {
203
+ microbit_pin_obj_t *self = (microbit_pin_obj_t *)self_in;
204
+ microbit_pin_configure_touch_mode (self);
205
+ return mp_obj_new_int (microbit_pin_debounce_get_presses (self));
206
+ }
207
+ MP_DEFINE_CONST_FUN_OBJ_1 (microbit_pin_get_touches_obj, microbit_pin_get_touches);
208
+
192
209
#define PULL_CONSTANTS \
193
210
{ MP_OBJ_NEW_QSTR (MP_QSTR_PULL_UP), MP_OBJ_NEW_SMALL_INT (NRF_GPIO_PIN_PULLUP) }, \
194
211
{ MP_OBJ_NEW_QSTR (MP_QSTR_PULL_DOWN), MP_OBJ_NEW_SMALL_INT (NRF_GPIO_PIN_PULLDOWN) }, \
@@ -230,6 +247,8 @@ STATIC const mp_map_elem_t microbit_touch_pin_locals_dict_table[] = {
230
247
{ MP_OBJ_NEW_QSTR (MP_QSTR_set_analog_period_microseconds), (mp_obj_t )µbit_pin_set_analog_period_microseconds_obj },
231
248
{ MP_OBJ_NEW_QSTR (MP_QSTR_get_analog_period_microseconds), (mp_obj_t )µbit_pin_get_analog_period_microseconds_obj },
232
249
{ MP_OBJ_NEW_QSTR (MP_QSTR_is_touched), (mp_obj_t )µbit_pin_is_touched_obj },
250
+ { MP_OBJ_NEW_QSTR (MP_QSTR_was_touched), (mp_obj_t )µbit_pin_was_touched_obj },
251
+ { MP_OBJ_NEW_QSTR (MP_QSTR_get_touches), (mp_obj_t )µbit_pin_get_touches_obj },
233
252
PULL_CONSTANTS,
234
253
{ MP_OBJ_NEW_QSTR (MP_QSTR_get_pull),(mp_obj_t )µbit_pin_get_pull_obj },
235
254
{ MP_OBJ_NEW_QSTR (MP_QSTR_set_pull),(mp_obj_t )µbit_pin_set_pull_obj },
0 commit comments