Self-Aligning Dish in Rust: Command Application
Ian Ndeda
Posted on November 21, 2024
This part of the series will be an application of the preceding part, which enabled our project to receive commands remotely via Bluetooth.
Table of Contents
Requirements
- 1 x Raspberry Pi Pico board
- 1 x USB Cable type 2.0
- 1 x HC-05 Bluetooth module
- 10 x M-M jumper wires
- 2 x Mini Breadboards
- Serial Bluetooth Terminal App
Implementation
In the main
part of the program, under the super loop, we need to check whether we are in auto
or manual
mode. We'll also need to enter a critical section since shared variables will be used.
Add handles for uart_cmd
and direction
.
cortex_m::interrupt::free(|cs| {
let mut direction = DIRECTION.borrow(cs).borrow_mut();
let mut uart_cmd = UARTCMD.borrow(cs).borrow_mut();
if AUTO.borrow(cs).get() {
// Auto mode
} else {
// Manual mode
}
});
Then add the following under the auto
and manual
arms respectively:
writeln!(&mut serialbuf, "auto mode").unwrap();
transmit_uart_cmd(uart_cmd.as_mut().unwrap(), serialbuf);
writeln!(&mut serialbuf, "manual mode").unwrap();
transmit_uart_cmd(uart_cmd.as_mut().unwrap(), serialbuf);
Under manual
mode, we'll add the below code that applies our algorithm.
// manual mode
match direction.as_mut() {
Some(Direction::Cw) => {
*direction = None;// reset direction
writeln!(&mut serialbuf, "manual mode: cw").unwrap();
transmit_uart_cmd(uart_cmd.as_mut().unwrap(), serialbuf);
},
Some(Direction::Ccw) => {
*direction = None;
writeln!(&mut serialbuf, "manual mode: ccw").unwrap();
transmit_uart_cmd(uart_cmd.as_mut().unwrap(), serialbuf);
},
Some(Direction::Up) => {
*direction = None;
writeln!(&mut serialbuf, "manual mode: up").unwrap();
transmit_uart_cmd(uart_cmd.as_mut().unwrap(), serialbuf);
},
Some(Direction::Down) => {
*direction = None;
writeln!(&mut serialbuf, "manual mode: down").unwrap();
transmit_uart_cmd(uart_cmd.as_mut().unwrap(), serialbuf);
},
Some(Direction::Zero) => {
*direction = None;
writeln!(&mut serialbuf, "manual mode: position zero").unwrap();
transmit_uart_cmd(uart_cmd.as_mut().unwrap(), serialbuf);
},
None => {},
}
Connections
The connections will remain the same as from the previous part of the series.
Results
After rearranging our code we will get this final copy.
Here are highlights of changes from the previous program.
Running this program will flash it into the Pico, and we'll be set to receive commands remotely via Bluetooth.
We can see that while in auto
mode any further received commands other than A
are not consequential.
In manual
mode the system responds appropriately to further commands.
Next we will set up our system to receive GPS data from the Neo-6m GPS module.
Posted on November 21, 2024
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.