kopia lustrzana https://github.com/pimoroni/pimoroni-pico
Exposed servo value loading
rodzic
6fe79d4ebc
commit
2819fb0020
|
@ -211,6 +211,10 @@ namespace servo {
|
|||
return servos[servo].calibration();
|
||||
}
|
||||
|
||||
void ServoCluster::load() {
|
||||
pwms.load_pwm();
|
||||
}
|
||||
|
||||
void ServoCluster::apply_pulse(uint servo, float pulse, bool load) {
|
||||
pwms.set_chan_level(servo, ServoState::pulse_to_level(pulse, pwm_period, pwm_frequency), load);
|
||||
}
|
||||
|
|
|
@ -68,6 +68,8 @@ namespace servo {
|
|||
Calibration& calibration(uint servo);
|
||||
const Calibration& calibration(uint servo) const;
|
||||
|
||||
void load();
|
||||
|
||||
//--------------------------------------------------
|
||||
private:
|
||||
void apply_pulse(uint servo, float pulse, bool load);
|
||||
|
|
|
@ -53,6 +53,7 @@ MP_DEFINE_CONST_FUN_OBJ_KW(ServoCluster_to_mid_obj, 2, ServoCluster_to_mid);
|
|||
MP_DEFINE_CONST_FUN_OBJ_KW(ServoCluster_to_max_obj, 2, ServoCluster_to_max);
|
||||
MP_DEFINE_CONST_FUN_OBJ_KW(ServoCluster_to_percent_obj, 3, ServoCluster_to_percent);
|
||||
MP_DEFINE_CONST_FUN_OBJ_KW(ServoCluster_calibration_obj, 2, ServoCluster_calibration);
|
||||
MP_DEFINE_CONST_FUN_OBJ_1(ServoCluster_load_obj, ServoCluster_load);
|
||||
|
||||
/***** Binding of Methods *****/
|
||||
STATIC const mp_rom_map_elem_t Calibration_locals_dict_table[] = {
|
||||
|
@ -111,6 +112,7 @@ STATIC const mp_rom_map_elem_t ServoCluster_locals_dict_table[] = {
|
|||
{ MP_ROM_QSTR(MP_QSTR_to_max), MP_ROM_PTR(&ServoCluster_to_max_obj) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_to_percent), MP_ROM_PTR(&ServoCluster_to_percent_obj) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_calibration), MP_ROM_PTR(&ServoCluster_calibration_obj) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_load), MP_ROM_PTR(&ServoCluster_load_obj) },
|
||||
};
|
||||
|
||||
STATIC MP_DEFINE_CONST_DICT(Calibration_locals_dict, Calibration_locals_dict_table);
|
||||
|
|
|
@ -1076,7 +1076,7 @@ extern mp_obj_t ServoCluster_enable(size_t n_args, const mp_obj_t *pos_args, mp_
|
|||
else if(servo < 0 || servo >= servo_count)
|
||||
mp_raise_msg_varg(&mp_type_ValueError, MP_ERROR_TEXT("servo out of range. Expected 0 to %d"), servo_count);
|
||||
else
|
||||
self->cluster->enable((uint)servo, args[ARG_servo].u_bool);
|
||||
self->cluster->enable((uint)servo, args[ARG_load].u_bool);
|
||||
|
||||
return mp_const_none;
|
||||
}
|
||||
|
@ -1102,7 +1102,7 @@ extern mp_obj_t ServoCluster_disable(size_t n_args, const mp_obj_t *pos_args, mp
|
|||
else if(servo < 0 || servo >= servo_count)
|
||||
mp_raise_msg_varg(&mp_type_ValueError, MP_ERROR_TEXT("servo out of range. Expected 0 to %d"), servo_count);
|
||||
else
|
||||
self->cluster->disable((uint)servo);
|
||||
self->cluster->disable((uint)servo, args[ARG_load].u_bool);
|
||||
|
||||
return mp_const_none;
|
||||
}
|
||||
|
@ -1178,7 +1178,7 @@ extern mp_obj_t ServoCluster_pulse(size_t n_args, const mp_obj_t *pos_args, mp_m
|
|||
mp_raise_msg_varg(&mp_type_ValueError, MP_ERROR_TEXT("servo out of range. Expected 0 to %d"), servo_count);
|
||||
else {
|
||||
float pulse = mp_obj_get_float(args[ARG_pulse].u_obj);
|
||||
self->cluster->set_pulse((uint)servo, pulse, args[ARG_servo].u_bool);
|
||||
self->cluster->set_pulse((uint)servo, pulse, args[ARG_load].u_bool);
|
||||
}
|
||||
}
|
||||
return mp_const_none;
|
||||
|
@ -1230,7 +1230,7 @@ extern mp_obj_t ServoCluster_value(size_t n_args, const mp_obj_t *pos_args, mp_m
|
|||
mp_raise_msg_varg(&mp_type_ValueError, MP_ERROR_TEXT("servo out of range. Expected 0 to %d"), servo_count);
|
||||
else {
|
||||
float value = mp_obj_get_float(args[ARG_value].u_obj);
|
||||
self->cluster->set_value((uint)servo, value, args[ARG_servo].u_bool);
|
||||
self->cluster->set_value((uint)servo, value, args[ARG_load].u_bool);
|
||||
}
|
||||
}
|
||||
return mp_const_none;
|
||||
|
@ -1282,7 +1282,7 @@ extern mp_obj_t ServoCluster_phase(size_t n_args, const mp_obj_t *pos_args, mp_m
|
|||
mp_raise_msg_varg(&mp_type_ValueError, MP_ERROR_TEXT("servo out of range. Expected 0 to %d"), servo_count);
|
||||
else {
|
||||
float phase = mp_obj_get_float(args[ARG_phase].u_obj);
|
||||
self->cluster->set_phase((uint)servo, phase, args[ARG_servo].u_bool);
|
||||
self->cluster->set_phase((uint)servo, phase, args[ARG_load].u_bool);
|
||||
}
|
||||
}
|
||||
return mp_const_none;
|
||||
|
@ -1421,7 +1421,7 @@ extern mp_obj_t ServoCluster_to_min(size_t n_args, const mp_obj_t *pos_args, mp_
|
|||
else if(servo < 0 || servo >= servo_count)
|
||||
mp_raise_msg_varg(&mp_type_ValueError, MP_ERROR_TEXT("servo out of range. Expected 0 to %d"), servo_count);
|
||||
else
|
||||
self->cluster->to_min((uint)servo, args[ARG_servo].u_bool);
|
||||
self->cluster->to_min((uint)servo, args[ARG_load].u_bool);
|
||||
|
||||
return mp_const_none;
|
||||
}
|
||||
|
@ -1447,7 +1447,7 @@ extern mp_obj_t ServoCluster_to_mid(size_t n_args, const mp_obj_t *pos_args, mp_
|
|||
else if(servo < 0 || servo >= servo_count)
|
||||
mp_raise_msg_varg(&mp_type_ValueError, MP_ERROR_TEXT("servo out of range. Expected 0 to %d"), servo_count);
|
||||
else
|
||||
self->cluster->to_mid((uint)servo, args[ARG_servo].u_bool);
|
||||
self->cluster->to_mid((uint)servo, args[ARG_load].u_bool);
|
||||
|
||||
return mp_const_none;
|
||||
}
|
||||
|
@ -1473,7 +1473,7 @@ extern mp_obj_t ServoCluster_to_max(size_t n_args, const mp_obj_t *pos_args, mp_
|
|||
else if(servo < 0 || servo >= servo_count)
|
||||
mp_raise_msg_varg(&mp_type_ValueError, MP_ERROR_TEXT("servo out of range. Expected 0 to %d"), servo_count);
|
||||
else
|
||||
self->cluster->to_max((uint)servo, args[ARG_servo].u_bool);
|
||||
self->cluster->to_max((uint)servo, args[ARG_load].u_bool);
|
||||
|
||||
return mp_const_none;
|
||||
}
|
||||
|
@ -1502,7 +1502,7 @@ extern mp_obj_t ServoCluster_to_percent(size_t n_args, const mp_obj_t *pos_args,
|
|||
mp_raise_msg_varg(&mp_type_ValueError, MP_ERROR_TEXT("servo out of range. Expected 0 to %d"), servo_count);
|
||||
else {
|
||||
float in = mp_obj_get_float(args[ARG_in].u_obj);
|
||||
self->cluster->to_percent((uint)servo, in, args[ARG_servo].u_bool);
|
||||
self->cluster->to_percent((uint)servo, in, args[ARG_load].u_bool);
|
||||
}
|
||||
}
|
||||
else if(n_args <= 6) {
|
||||
|
@ -1532,7 +1532,7 @@ extern mp_obj_t ServoCluster_to_percent(size_t n_args, const mp_obj_t *pos_args,
|
|||
float in = mp_obj_get_float(args[ARG_in].u_obj);
|
||||
float in_min = mp_obj_get_float(args[ARG_in_min].u_obj);
|
||||
float in_max = mp_obj_get_float(args[ARG_in_max].u_obj);
|
||||
self->cluster->to_percent((uint)servo, in, in_min, in_max, args[ARG_servo].u_bool);
|
||||
self->cluster->to_percent((uint)servo, in, in_min, in_max, args[ARG_load].u_bool);
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
@ -1566,7 +1566,7 @@ extern mp_obj_t ServoCluster_to_percent(size_t n_args, const mp_obj_t *pos_args,
|
|||
float in_max = mp_obj_get_float(args[ARG_in_max].u_obj);
|
||||
float value_min = mp_obj_get_float(args[ARG_value_min].u_obj);
|
||||
float value_max = mp_obj_get_float(args[ARG_value_max].u_obj);
|
||||
self->cluster->to_percent((uint)servo, in, in_min, in_max, value_min, value_max, args[ARG_servo].u_bool);
|
||||
self->cluster->to_percent((uint)servo, in, in_min, in_max, value_min, value_max, args[ARG_load].u_bool);
|
||||
}
|
||||
}
|
||||
return mp_const_none;
|
||||
|
@ -1628,4 +1628,10 @@ extern mp_obj_t ServoCluster_calibration(size_t n_args, const mp_obj_t *pos_args
|
|||
|
||||
return mp_const_none;
|
||||
}
|
||||
|
||||
extern mp_obj_t ServoCluster_load(mp_obj_t self_in) {
|
||||
_ServoCluster_obj_t *self = MP_OBJ_TO_PTR2(self_in, _ServoCluster_obj_t);
|
||||
self->cluster->load();
|
||||
return mp_const_none;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -63,4 +63,5 @@ extern mp_obj_t ServoCluster_to_min(size_t n_args, const mp_obj_t *pos_args, mp_
|
|||
extern mp_obj_t ServoCluster_to_mid(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args);
|
||||
extern mp_obj_t ServoCluster_to_max(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args);
|
||||
extern mp_obj_t ServoCluster_to_percent(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args);
|
||||
extern mp_obj_t ServoCluster_calibration(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args);
|
||||
extern mp_obj_t ServoCluster_calibration(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args);
|
||||
extern mp_obj_t ServoCluster_load(mp_obj_t self_in);
|
Ładowanie…
Reference in New Issue