Max 7219 Canvas
A library built for rust that makes setting and getting pixels from co-ordinates easy, aswell as handling displaying different layers on top of each other. Works with the max7219 crate on 8x8 matrix displays.
[!CAUTION]
Whilst this crate was built to support multiple displays, it has never been tested using multiple displays, use at your own discretion
Example
#![no_std]
#![no_main]
use panic_halt as _;
use max7219::MAX7219;
use max7219_canvas::{ layer::CanvasLayer, DisplayCanvas };
#[arduino_hal::entry]
fn main() -> ! {
let dp = arduino_hal::Peripherals::take().unwrap();
let pins = arduino_hal::pins!(dp);
let din = pins.d13.into_output();
let cs = pins.d12.into_output();
let clk = pins.d11.into_output();
let mut display = MAX7219::from_pins(1 , din, cs, clk).unwrap();
display.power_on().unwrap();
display.set_intensity(0, 0x0f).unwrap();
let mut canvas: DisplayCanvas<2 , 1 > = DisplayCanvas::new();
let mut static_layer = CanvasLayer::new();
static_layer.set_pixel(1, 3, true);
static_layer.set_pixel(1, 2, true);
static_layer.set_pixel(2, 1, true);
static_layer.set_pixel(3, 1, true);
static_layer.set_pixel(4, 1, true);
static_layer.set_pixel(5, 1, true);
static_layer.set_pixel(6, 2, true);
static_layer.set_pixel(6, 3, true);
static_layer.set_pixel(1, 6, true);
static_layer.set_pixel(2, 6, true);
static_layer.set_pixel(1, 5, true);
static_layer.set_pixel(2, 5, true);
static_layer.set_pixel(6, 6, true);
static_layer.set_pixel(5, 6, true);
static_layer.set_pixel(6, 5, true);
static_layer.set_pixel(5, 5, true);
let mut animated_layer = CanvasLayer::new();
let mut animation_position: usize = 0;
loop {
animated_layer.clear();
animated_layer.set_pixel(animation_position, animation_position, true);
animation_position = (animation_position + 1) % 8;
canvas.update_layer(0, static_layer);
canvas.update_layer(1, animated_layer);
canvas.write_to_display(0, &mut display);
arduino_hal::delay_ms(100);
}
}