@@ -166,6 +166,17 @@ mp_obj_t microbit_pin_is_touched(mp_obj_t self_in) {
166166}
167167MP_DEFINE_CONST_FUN_OBJ_1 (microbit_pin_is_touched_obj , microbit_pin_is_touched );
168168
169+ mp_obj_t microbit_pin_set_touch_mode (mp_obj_t self_in , mp_obj_t mode_in ) {
170+ microbit_pin_obj_t * self = (microbit_pin_obj_t * )self_in ;
171+ const microbit_pinmode_t * mode = microbit_pin_get_mode (self );
172+ if (mode != microbit_pin_mode_touch && mode != microbit_pin_mode_button ) {
173+ microbit_obj_pin_acquire (self , microbit_pin_mode_touch );
174+ }
175+ microbit_hal_pin_set_touch_mode (self -> name , mp_obj_get_int (mode_in ));
176+ return mp_const_none ;
177+ }
178+ MP_DEFINE_CONST_FUN_OBJ_2 (microbit_pin_set_touch_mode_obj , microbit_pin_set_touch_mode );
179+
169180STATIC mp_obj_t microbit_pin_speaker_disable (mp_obj_t self_in ) {
170181 (void )self_in ;
171182 microbit_pin_audio_speaker_enable (false);
@@ -185,17 +196,21 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(microbit_pin_speaker_enable_obj, microbit_pin_s
185196 { MP_ROM_QSTR(MP_QSTR_PULL_DOWN), MP_ROM_INT(MICROBIT_HAL_PIN_PULL_DOWN) }, \
186197 { MP_ROM_QSTR(MP_QSTR_NO_PULL), MP_ROM_INT(MICROBIT_HAL_PIN_PULL_NONE) }
187198
199+ #define TOUCH_CONSTANTS \
200+ { MP_ROM_QSTR(MP_QSTR_RESISTIVE), MP_ROM_INT(MICROBIT_HAL_PIN_TOUCH_RESISTIVE) }, \
201+ { MP_ROM_QSTR(MP_QSTR_CAPACITIVE), MP_ROM_INT(MICROBIT_HAL_PIN_TOUCH_CAPACITIVE) }
202+
188203STATIC const mp_rom_map_elem_t microbit_dig_pin_locals_dict_table [] = {
189204 { MP_ROM_QSTR (MP_QSTR_write_digital ), MP_ROM_PTR (& microbit_pin_write_digital_obj ) },
190205 { MP_ROM_QSTR (MP_QSTR_read_digital ), MP_ROM_PTR (& microbit_pin_read_digital_obj ) },
191206 { MP_ROM_QSTR (MP_QSTR_write_analog ), MP_ROM_PTR (& microbit_pin_write_analog_obj ) },
192207 { MP_ROM_QSTR (MP_QSTR_set_analog_period ), MP_ROM_PTR (& microbit_pin_set_analog_period_obj ) },
193208 { MP_ROM_QSTR (MP_QSTR_set_analog_period_microseconds ), MP_ROM_PTR (& microbit_pin_set_analog_period_microseconds_obj ) },
194209 { MP_ROM_QSTR (MP_QSTR_get_analog_period_microseconds ), MP_ROM_PTR (& microbit_pin_get_analog_period_microseconds_obj ) },
195- PULL_CONSTANTS ,
196210 { MP_ROM_QSTR (MP_QSTR_get_pull ), MP_ROM_PTR (& microbit_pin_get_pull_obj ) },
197211 { MP_ROM_QSTR (MP_QSTR_set_pull ), MP_ROM_PTR (& microbit_pin_set_pull_obj ) },
198212 { MP_ROM_QSTR (MP_QSTR_get_mode ), MP_ROM_PTR (& microbit_pin_get_mode_obj ) },
213+ PULL_CONSTANTS ,
199214};
200215STATIC MP_DEFINE_CONST_DICT (microbit_dig_pin_locals_dict , microbit_dig_pin_locals_dict_table );
201216
@@ -213,10 +228,10 @@ STATIC const mp_rom_map_elem_t microbit_ann_pin_locals_dict_table[] = {
213228 { MP_ROM_QSTR (MP_QSTR_set_analog_period ), MP_ROM_PTR (& microbit_pin_set_analog_period_obj ) },
214229 { MP_ROM_QSTR (MP_QSTR_set_analog_period_microseconds ), MP_ROM_PTR (& microbit_pin_set_analog_period_microseconds_obj ) },
215230 { MP_ROM_QSTR (MP_QSTR_get_analog_period_microseconds ), MP_ROM_PTR (& microbit_pin_get_analog_period_microseconds_obj ) },
216- PULL_CONSTANTS ,
217231 { MP_ROM_QSTR (MP_QSTR_get_pull ), MP_ROM_PTR (& microbit_pin_get_pull_obj ) },
218232 { MP_ROM_QSTR (MP_QSTR_set_pull ), MP_ROM_PTR (& microbit_pin_set_pull_obj ) },
219233 { MP_ROM_QSTR (MP_QSTR_get_mode ), MP_ROM_PTR (& microbit_pin_get_mode_obj ) },
234+ PULL_CONSTANTS ,
220235};
221236STATIC MP_DEFINE_CONST_DICT (microbit_ann_pin_locals_dict , microbit_ann_pin_locals_dict_table );
222237
@@ -235,10 +250,12 @@ STATIC const mp_rom_map_elem_t microbit_touch_pin_locals_dict_table[] = {
235250 { MP_ROM_QSTR (MP_QSTR_set_analog_period_microseconds ), MP_ROM_PTR (& microbit_pin_set_analog_period_microseconds_obj ) },
236251 { MP_ROM_QSTR (MP_QSTR_get_analog_period_microseconds ), MP_ROM_PTR (& microbit_pin_get_analog_period_microseconds_obj ) },
237252 { MP_ROM_QSTR (MP_QSTR_is_touched ), MP_ROM_PTR (& microbit_pin_is_touched_obj ) },
238- PULL_CONSTANTS ,
239253 { MP_ROM_QSTR (MP_QSTR_get_pull ), MP_ROM_PTR (& microbit_pin_get_pull_obj ) },
240254 { MP_ROM_QSTR (MP_QSTR_set_pull ), MP_ROM_PTR (& microbit_pin_set_pull_obj ) },
241255 { MP_ROM_QSTR (MP_QSTR_get_mode ), MP_ROM_PTR (& microbit_pin_get_mode_obj ) },
256+ { MP_ROM_QSTR (MP_QSTR_set_touch_mode ), MP_ROM_PTR (& microbit_pin_set_touch_mode_obj ) },
257+ PULL_CONSTANTS ,
258+ TOUCH_CONSTANTS ,
242259};
243260STATIC MP_DEFINE_CONST_DICT (microbit_touch_pin_locals_dict , microbit_touch_pin_locals_dict_table );
244261
@@ -250,6 +267,8 @@ const mp_obj_type_t microbit_touch_pin_type = {
250267
251268STATIC const mp_rom_map_elem_t microbit_touch_only_pin_locals_dict_table [] = {
252269 { MP_ROM_QSTR (MP_QSTR_is_touched ), MP_ROM_PTR (& microbit_pin_is_touched_obj ) },
270+ { MP_ROM_QSTR (MP_QSTR_set_touch_mode ), MP_ROM_PTR (& microbit_pin_set_touch_mode_obj ) },
271+ TOUCH_CONSTANTS ,
253272};
254273STATIC MP_DEFINE_CONST_DICT (microbit_touch_only_pin_locals_dict , microbit_touch_only_pin_locals_dict_table );
255274
0 commit comments