use bevy::prelude::*;
use bevy_serial::{SerialPlugin, SerialReadEvent, SerialWriteEvent};
#[derive(Resource)]
struct SerialWriteTimer(Timer);
const SERIAL_PORT: &str = "/dev/ttyUSB0";
fn main() {
App::new()
.add_plugins(MinimalPlugins)
.add_plugins(SerialPlugin::new(SERIAL_PORT, 115200))
.insert_resource(SerialWriteTimer(Timer::from_seconds(
1.0,
TimerMode::Repeating,
)))
.add_systems(Update, read_serial)
.add_systems(Update, write_serial)
.run();
}
fn read_serial(mut ev_serial: EventReader<SerialReadEvent>) {
for SerialReadEvent(label, buffer) in ev_serial.iter() {
let s = String::from_utf8(buffer.clone()).unwrap();
println!("received packet from {label}: {s}");
}
}
fn write_serial(
mut ev_serial: EventWriter<SerialWriteEvent>,
mut timer: ResMut<SerialWriteTimer>,
time: Res<Time>,
) {
if timer.0.tick(time.delta()).just_finished() {
let buffer = b"Hello, bevy!";
ev_serial.send(SerialWriteEvent(SERIAL_PORT.to_string(), buffer.to_vec()));
}
}