use embedded_svc::wifi::{AuthMethod, ClientConfiguration, Configuration};
use esp_idf_hal::peripherals::Peripherals;
use esp_idf_svc::eventloop::EspSystemEventLoop;
use esp_idf_svc::nvs::EspDefaultNvsPartition;
use esp_idf_svc::wifi::EspWifi;
use esp_idf_sys::EspError;
use esp_idf_hal::i2c::*;
use esp_idf_hal::prelude::*; //KHz
use ssd1306::{prelude::*, I2CDisplayInterface, Ssd1306};
use std::time::Duration;
use std::thread;
use hardware::HDisplay;
mod hardware;
fn main() -> anyhow::Result<()> {
esp_idf_sys::link_patches();
let peripherals = Peripherals::take().unwrap();
let config = I2cConfig::new().baudrate(100.kHz().into());
let i2c = I2cDriver::new(peripherals.i2c0, peripherals.pins.gpio7, peripherals.pins.gpio6, &config).unwrap();
let interface = I2CDisplayInterface::new(i2c);
let sysloop = EspSystemEventLoop::take()?;
let nvs_default_partition = EspDefaultNvsPartition::take()?;
let mut wifi = EspWifi::new(
peripherals.modem,
sysloop.clone(),
Some(nvs_default_partition.clone()),
)?;
wifi.set_configuration(&Configuration::Client(ClientConfiguration {
ssid: "Wokwi-GUEST".into(),
password: "".into(),
auth_method: AuthMethod::None,
..Default::default()
}))?;
wifi.start()?;
wifi.connect()?;
while !wifi.is_connected().unwrap(){
//let config = wifi.get_configuration().unwrap();
//println!("Waiting for station {:?}", config);
print!(".");
thread::sleep(Duration::from_millis(500));
}
println!("IP info: {:?}", wifi.sta_netif().get_ip_info().unwrap());
let mut display = HDisplay::new(interface);
display.init();
display.flush();
let mut mcu_pos: [i32; 2] = [12, 24];
let mut ball_pos: [i32; 2] = [60, 28];
let mut increasing = true;
loop {
if increasing{
if mcu_pos[0]<= 12 || mcu_pos[0] < 116{
mcu_pos[0]+=1;
}else{
increasing = false;
}
}else{
if mcu_pos[0]>= 12 || mcu_pos[0] >= 116{
mcu_pos[0]-=1;
}else{
increasing = true;
}
}
display.clear_field();
display.draw_text();
display.draw_rectangle(&mut mcu_pos);
display.draw_circle(&mut ball_pos);
display.flush();
//println!("{}",'a');
thread::sleep(Duration::from_millis(100));
}
}