#![no_std]
#![no_main]
use esp_backtrace as _;
use esp_hal::{
delay::Delay,
gpio::{Level, Output, Input, Pull},
entry,
//prelude::*,
chip,
};
use esp_println::println;
use tm1637_embedded_hal::{blocking::TM1637, Brightness};
use rotary_encoder_embedded::{RotaryEncoder, Direction,};
use core::str;
use ssd1306_i2c::{displayrotation::DisplayRotation, displaysize::DisplaySize, Builder};
#[entry]
fn main() -> !{
let peripherals = esp_hal::init(esp_hal::Config::default());
println!("Hello, {}!", chip!());
let mut led = Output::new(peripherals.GPIO8, Level::Low);
let delay = Delay::new();
//let clk = Output::new(peripherals.GPIO2, Level::Low);
//let dio = Output::new(peripherals.GPIO3, Level::Low);
//let mut tm = TM1637::builder(clk, dio, delay).build();
//tm.init().unwrap();
//tm.write_brightness(Brightness::L3).unwrap();
// XXX vector init bad code
let mut vector: [u8; 4] = [49u8, 48u8, 48u8, 48u8];
//tm.write_ascii_str(0, str::from_utf8(&vector).unwrap());
let button = Input::new_typed(peripherals.GPIO10, Pull::Up,);
let mut was_pressed = false;
let rotary_dt = Input::new_typed(peripherals.GPIO0, Pull::Up,);
let rotary_clk = Input::new_typed(peripherals.GPIO1, Pull::Up,);
let mut encoder = RotaryEncoder::new(
rotary_dt,
rotary_clk,
).into_standard_mode();
let scl = Input::new_typed(peripherals.GPIO4,);
let sda = Input::new_typed(peripherals.GPIO5,);
let i2c = peripherals.i2c0;
let config = I2cConfig::new().baudrate(100.kHz().into()); // works ok at 400 kHz with short bus length
let i2c_dev = I2cDriver::new(i2c, sda, scl, &config)?;
let mut display: GraphicsMode<_> = Builder::new()
.with_size(DisplaySize::Display128x64NoOffset)
.with_i2c_addr(0x3C) //or 0x3d
.with_rotation(DisplayRotation::Rotate0)
.connect_i2c(i2c_dev)
.into()
println!("Start Loop!");
loop {
let is_pressed = button.is_low();
if is_pressed && !was_pressed {
println!("Button pressed!");
led.toggle();
}
was_pressed = is_pressed;
match encoder.update() {
Direction::Clockwise => {
println!("Clockwise!");
// XXX Increment value bad code
vector[3] += 1;
//tm.write_ascii_str(0, str::from_utf8(&vector).unwrap());
}
Direction::Anticlockwise => {
println!("Anticlockwise!");
// XXX Decrement value bad code
vector[3] -= 1;
//tm.write_ascii_str(0, str::from_utf8(&vector).unwrap());
}
Direction::None => {
// Do nothing
}
}
delay.delay_millis(2u32);
}
}