Add potentiometer, button and color mult

This commit is contained in:
Sofia 2025-09-11 19:58:10 +03:00
parent f3dc46a38b
commit d60efaa381
3 changed files with 66 additions and 7 deletions

View File

@ -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
View File

@ -0,0 +1,9 @@
fn letter(character: char) -> [u8; 8] {
match character {
'a' => [
0b01111110, 0b01000010, 0b10000001, 0b11111111, 0b10000001, 0b10000001, 0b10000001,
0b10000001,
],
_ => [0; 8],
}
}

View File

@ -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);
} }
} }