Add potentiometer, button and color mult
This commit is contained in:
parent
f3dc46a38b
commit
d60efaa381
@ -1,3 +1,5 @@
|
|||||||
|
use core::ops::Mul;
|
||||||
|
|
||||||
use atmega_hal::{
|
use atmega_hal::{
|
||||||
Spi,
|
Spi,
|
||||||
port::{self, Pin, PinOps, mode},
|
port::{self, Pin, PinOps, mode},
|
||||||
@ -5,6 +7,7 @@ use atmega_hal::{
|
|||||||
};
|
};
|
||||||
use embedded_hal::{delay::DelayNs, digital::OutputPin, spi::SpiBus};
|
use embedded_hal::{delay::DelayNs, digital::OutputPin, spi::SpiBus};
|
||||||
|
|
||||||
|
#[derive(Clone, Copy)]
|
||||||
pub struct Rgb565(pub u8, pub u8, pub u8);
|
pub struct Rgb565(pub u8, pub u8, pub u8);
|
||||||
|
|
||||||
impl Rgb565 {
|
impl Rgb565 {
|
||||||
@ -15,6 +18,42 @@ impl Rgb565 {
|
|||||||
|
|
||||||
Color::from(r | b | g)
|
Color::from(r | b | g)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn red() -> Rgb565 {
|
||||||
|
Rgb565(255, 0, 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn green() -> Rgb565 {
|
||||||
|
Rgb565(0, 255, 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn blue() -> Rgb565 {
|
||||||
|
Rgb565(0, 0, 255)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn yellow() -> Rgb565 {
|
||||||
|
Rgb565(255, 255, 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn purple() -> Rgb565 {
|
||||||
|
Rgb565(255, 0, 255)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn cyan() -> Rgb565 {
|
||||||
|
Rgb565(0, 255, 255)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Mul<f32> for Rgb565 {
|
||||||
|
type Output = Rgb565;
|
||||||
|
|
||||||
|
fn mul(self, rhs: f32) -> Self::Output {
|
||||||
|
Rgb565(
|
||||||
|
(self.0 as f32 * rhs) as u8,
|
||||||
|
(self.1 as f32 * rhs) as u8,
|
||||||
|
(self.2 as f32 * rhs) as u8,
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Default, Clone, Copy)]
|
#[derive(Default, Clone, Copy)]
|
||||||
|
9
src/font.rs
Normal file
9
src/font.rs
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
fn letter(character: char) -> [u8; 8] {
|
||||||
|
match character {
|
||||||
|
'a' => [
|
||||||
|
0b01111110, 0b01000010, 0b10000001, 0b11111111, 0b10000001, 0b10000001, 0b10000001,
|
||||||
|
0b10000001,
|
||||||
|
],
|
||||||
|
_ => [0; 8],
|
||||||
|
}
|
||||||
|
}
|
25
src/main.rs
25
src/main.rs
@ -5,7 +5,7 @@
|
|||||||
#![no_main]
|
#![no_main]
|
||||||
|
|
||||||
use atmega_hal::{
|
use atmega_hal::{
|
||||||
Usart,
|
Adc, Usart,
|
||||||
spi::{self, Settings},
|
spi::{self, Settings},
|
||||||
usart::Baudrate,
|
usart::Baudrate,
|
||||||
};
|
};
|
||||||
@ -15,6 +15,7 @@ use panic_halt as _;
|
|||||||
use crate::display::{Display, Position, Rgb565};
|
use crate::display::{Display, Position, Rgb565};
|
||||||
|
|
||||||
mod display;
|
mod display;
|
||||||
|
mod font;
|
||||||
mod image;
|
mod image;
|
||||||
|
|
||||||
type CoreClock = atmega_hal::clock::MHz8;
|
type CoreClock = atmega_hal::clock::MHz8;
|
||||||
@ -61,17 +62,27 @@ fn main() -> ! {
|
|||||||
|
|
||||||
display.init();
|
display.init();
|
||||||
|
|
||||||
|
let mut adc: Adc<CoreClock> = atmega_hal::Adc::new(dp.ADC, Default::default());
|
||||||
|
|
||||||
|
let button = pins.pd5.into_pull_up_input();
|
||||||
|
let potentiometer = pins.pc1.into_analog_input(&mut adc);
|
||||||
|
|
||||||
|
let colors = [Rgb565::red(), Rgb565::green(), Rgb565::blue()];
|
||||||
|
let mut idx = 0;
|
||||||
|
|
||||||
let mut delay = atmega_hal::delay::Delay::<CoreClock>::new();
|
let mut delay = atmega_hal::delay::Delay::<CoreClock>::new();
|
||||||
let mut color = 0;
|
|
||||||
loop {
|
loop {
|
||||||
// color += 40;
|
let raw_input = potentiometer.analog_read(&mut adc);
|
||||||
delay.delay_ms(1000);
|
let input = raw_input as f32 / 1024f32;
|
||||||
|
|
||||||
display.draw_rect(
|
display.draw_rect(
|
||||||
Position { x: 0, y: 0 },
|
Position { x: 0, y: 0 },
|
||||||
Position { x: 200, y: 200 },
|
Position { x: 200, y: 200 },
|
||||||
Rgb565(color % 255, color % 100, color % 50).as_color(),
|
(colors[idx] * input).as_color(),
|
||||||
);
|
);
|
||||||
color = color + 50;
|
if button.is_low() {
|
||||||
ufmt::uwriteln!(&mut serial, "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA").unwrap();
|
idx = (idx + 1) % colors.len();
|
||||||
|
}
|
||||||
|
delay.delay_ms(1000);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user