kopia lustrzana https://github.com/pimoroni/pimoroni-pico
Added support for pin objects on Servo and Motor cluster
rodzic
930487af3a
commit
70dea93042
|
@ -635,12 +635,12 @@ mp_obj_t MotorCluster_make_new(const mp_obj_type_t *type, size_t n_args, size_t
|
|||
mp_raise_TypeError("list or tuple must contain at least one pair tuple");
|
||||
else {
|
||||
// Specific check for is a single 2 pin list/tuple was provided
|
||||
if(pair_count == 2 && mp_obj_is_int(items[0]) && mp_obj_is_int(items[1])) {
|
||||
if(pair_count == 2 && pimoroni_obj_is_int_or_gpio(items[0]) && pimoroni_obj_is_int_or_gpio(items[1])) {
|
||||
pins = m_new(pin_pair, 1);
|
||||
pair_count = 1;
|
||||
|
||||
int pos = mp_obj_get_int(items[0]);
|
||||
int neg = mp_obj_get_int(items[1]);
|
||||
int pos = pimoroni_gpio_from_obj(items[0]);
|
||||
int neg = pimoroni_gpio_from_obj(items[1]);
|
||||
if((pos < 0 || pos >= (int)NUM_BANK0_GPIOS) ||
|
||||
(neg < 0 || neg >= (int)NUM_BANK0_GPIOS)) {
|
||||
delete[] pins;
|
||||
|
@ -669,8 +669,8 @@ mp_obj_t MotorCluster_make_new(const mp_obj_type_t *type, size_t n_args, size_t
|
|||
delete[] pins;
|
||||
mp_raise_ValueError("pair tuple must only contain two integers");
|
||||
}
|
||||
int pos = mp_obj_get_int(tuple->items[0]);
|
||||
int neg = mp_obj_get_int(tuple->items[1]);
|
||||
int pos = pimoroni_gpio_from_obj(tuple->items[0]);
|
||||
int neg = pimoroni_gpio_from_obj(tuple->items[1]);
|
||||
if((pos < 0 || pos >= (int)NUM_BANK0_GPIOS) ||
|
||||
(neg < 0 || neg >= (int)NUM_BANK0_GPIOS)) {
|
||||
delete[] pins;
|
||||
|
|
|
@ -24,4 +24,21 @@ extern int pimoroni_gpio_from_obj(const mp_obj_t &object) {
|
|||
}
|
||||
return gpio;
|
||||
}
|
||||
|
||||
extern int pimoroni_obj_is_int_or_gpio(const mp_obj_t &object) {
|
||||
int is_int_or_gpio = false;
|
||||
if (mp_obj_is_type(object, &machine_pin_type)) {
|
||||
#if MICROPY_HW_PIN_EXT_COUNT
|
||||
machine_pin_obj_t *pin = MP_OBJ_TO_PTR2(object, machine_pin_obj_t);
|
||||
is_int_or_gpio = !pin->is_ext;
|
||||
#else
|
||||
is_int_or_gpio = true;
|
||||
#endif
|
||||
}
|
||||
else {
|
||||
is_int_or_gpio = mp_obj_is_int(object);
|
||||
}
|
||||
|
||||
return is_int_or_gpio;
|
||||
}
|
||||
}
|
|
@ -2,4 +2,5 @@ extern "C" {
|
|||
#include "py/obj.h"
|
||||
|
||||
extern int pimoroni_gpio_from_obj(const mp_obj_t &object);
|
||||
extern int pimoroni_obj_is_int_or_gpio(const mp_obj_t &object);
|
||||
}
|
|
@ -1288,7 +1288,7 @@ mp_obj_t ServoCluster_make_new(const mp_obj_type_t *type, size_t n_args, size_t
|
|||
// Create and populate a local array of pins
|
||||
pins = m_new(uint8_t, pin_count);
|
||||
for(size_t i = 0; i < pin_count; i++) {
|
||||
int pin = mp_obj_get_int(items[i]);
|
||||
int pin = pimoroni_gpio_from_obj(items[i]);
|
||||
if(pin < 0 || pin >= (int)NUM_BANK0_GPIOS) {
|
||||
m_free(pins);
|
||||
mp_raise_ValueError("a pin in the list or tuple is out of range. Expected 0 to 29");
|
||||
|
|
Ładowanie…
Reference in New Issue