set pwm values as ratio 0..1

This commit is contained in:
Astro 2020-05-27 20:38:57 +02:00
parent 35af543e33
commit ec6aa03dc3
2 changed files with 11 additions and 11 deletions

View File

@ -52,10 +52,10 @@ The scope of this setting is per TCP session.
| `report mode` | Show current report mode | | `report mode` | Show current report mode |
| `report mode <off/on>` | Set report mode | | `report mode <off/on>` | Set report mode |
| `pwm` | Show current PWM settings | | `pwm` | Show current PWM settings |
| `pwm <0/1> max_i_pos <width>` | Set PWM duty cycle for **max_i_pos** to *width* | | `pwm <0/1> max_i_pos <ratio>` | Set PWM duty cycle for **max_i_pos** to *ratio* |
| `pwm <0/1> max_i_neg <width>` | Set PWM duty cycle for **max_i_neg** to *width* | | `pwm <0/1> max_i_neg <ratio>` | Set PWM duty cycle for **max_i_neg** to *ratio* |
| `pwm <0/1> max_v <width>` | Set PWM duty cycle for **max_v** to *width* | | `pwm <0/1> max_v <ratio>` | Set PWM duty cycle for **max_v** to *ratio* |
| `pwm <0/1> <width>` | Disengage PID, set **i_set** DAC to *width* | | `pwm <0/1> <volts>` | Disengage PID, set **i_set** DAC to *volts* |
| `pwm <0/1> pid` | Set PWM to be controlled by PID | | `pwm <0/1> pid` | Set PWM to be controlled by PID |
| `pid` | Show PID configuration | | `pid` | Show PID configuration |
| `pid <0/1> target <value>` | Set the PID controller target | | `pid <0/1> target <value>` | Set the PID controller target |

View File

@ -273,13 +273,13 @@ fn main() -> ! {
); );
} }
Command::Pwm { channel, pin, duty } => { Command::Pwm { channel, pin, duty } => {
let duty = duty as u16; fn set_pwm_channel<P: hal::PwmPin<Duty=u16>>(pin: &mut P, duty: f64) -> (u16, u16) {
let max = pin.get_max_duty();
fn set_pwm_channel<P: hal::PwmPin<Duty=u16>>(pin: &mut P, duty: u16) -> u16 { let value = (duty * (max as f64)) as u16;
pin.set_duty(duty); pin.set_duty(value);
pin.get_max_duty() (value, max)
} }
let max = match (channel, pin) { let (value, max) = match (channel, pin) {
(_, PwmPin::ISet) => (_, PwmPin::ISet) =>
// Handled above // Handled above
unreachable!(), unreachable!(),
@ -300,7 +300,7 @@ fn main() -> ! {
}; };
let _ = writeln!( let _ = writeln!(
socket, "channel {}: PWM {} reconfigured to {}/{}", socket, "channel {}: PWM {} reconfigured to {}/{}",
channel, pin.name(), duty, max channel, pin.name(), value, max
); );
} }
Command::Pid { channel, parameter, value } => { Command::Pid { channel, parameter, value } => {