Clean up rust implementation, add lidar implementation in rust
This commit is contained in:
@@ -2,6 +2,8 @@ use std::sync::{Arc, Mutex};
|
||||
|
||||
use serialport::SerialPort;
|
||||
|
||||
mod lidar;
|
||||
|
||||
// TODO: Should be returning results in these traits
|
||||
pub trait Servo {
|
||||
fn get_value(&self) -> f64;
|
||||
@@ -91,14 +93,14 @@ pub mod rppal {
|
||||
}
|
||||
|
||||
pub struct Esp32SerialPwmServo<T: SerialPort> {
|
||||
serial_port: Arc<Mutex<T>>,
|
||||
serial_port: T,
|
||||
value: f64,
|
||||
channel: u8,
|
||||
pin: u8,
|
||||
}
|
||||
|
||||
impl<T: SerialPort> Esp32SerialPwmServo<T> {
|
||||
pub fn new(serial_port: Arc<Mutex<T>>, channel: u8, pin: u8) -> Esp32SerialPwmServo<T> {
|
||||
pub fn new(serial_port: T, channel: u8, pin: u8) -> Esp32SerialPwmServo<T> {
|
||||
let mut servo = Esp32SerialPwmServo {
|
||||
serial_port,
|
||||
value: 0.,
|
||||
@@ -112,11 +114,7 @@ impl<T: SerialPort> Esp32SerialPwmServo<T> {
|
||||
|
||||
impl<T: SerialPort> Esp32SerialPwmServo<T> {
|
||||
fn init_pwm(&mut self) {
|
||||
let bytes_written = self
|
||||
.serial_port
|
||||
.lock()
|
||||
.unwrap()
|
||||
.write(&[0, 1, self.channel, self.pin]);
|
||||
let bytes_written = self.serial_port.write(&[0, 1, self.channel, self.pin]);
|
||||
// TODO: Better error handling (even anyhow would be better)
|
||||
match bytes_written {
|
||||
Ok(size) => println!("{}", size),
|
||||
@@ -132,7 +130,6 @@ impl<T: SerialPort> Servo for Esp32SerialPwmServo<T> {
|
||||
|
||||
fn set_value(&mut self, value: f64) {
|
||||
let mut temp_value = value;
|
||||
// TODO: Panic when out of bounds?
|
||||
if temp_value < -1. {
|
||||
temp_value = -1.;
|
||||
} else if temp_value > 1. {
|
||||
@@ -141,8 +138,6 @@ impl<T: SerialPort> Servo for Esp32SerialPwmServo<T> {
|
||||
self.value = temp_value;
|
||||
let bytes_written = self
|
||||
.serial_port
|
||||
.lock()
|
||||
.unwrap()
|
||||
.write(&[self.channel, ((value + 1.) / 2. * 255.) as u8]);
|
||||
// TODO: Better error handling
|
||||
match bytes_written {
|
||||
|
||||
Reference in New Issue
Block a user