Skip to content

Commit

Permalink
examples: st7789: Initial commit
Browse files Browse the repository at this point in the history
This is a basic example of displaying data on a st7789 screen using
Tock.

Signed-off-by: Alistair Francis <[email protected]>
  • Loading branch information
alistair23 committed Jun 5, 2024
1 parent a41c0d2 commit 2c1bffd
Show file tree
Hide file tree
Showing 2 changed files with 78 additions and 0 deletions.
4 changes: 4 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,10 @@ libtock_temperature = { path = "apis/temperature" }

embedded-hal = { version = "1.0", optional = true }

mipidsi = "0.8.0"
display-interface-spi = "0.5"
embedded-graphics = "0.8"

[build-dependencies]
libtock_build_scripts = { path = "build_scripts" }

Expand Down
74 changes: 74 additions & 0 deletions examples/st7789.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
//! This sample demonstrates displaying text on a ST7789 display
//! using a rust-embedded based crate
#![no_main]
#![no_std]
use core::fmt::Write;
use libtock::alarm::{Alarm, Milliseconds};
use libtock::console::Console;
use libtock::gpio::Gpio;
use libtock::runtime::{set_main, stack_size};
use libtock::spi_controller::EmbeddedHalSpi;

use display_interface_spi::SPIInterface;
use embedded_graphics::{
mono_font::{ascii::FONT_10X20, MonoTextStyle},
pixelcolor::Rgb565,
prelude::*,
text::Text,
};
use mipidsi::{models::ST7789, options::ColorInversion, Builder};

set_main! {main}
stack_size! {0x1000}

// Display
const W: i32 = 240;
const H: i32 = 240;

struct Delay;

impl embedded_hal::delay::DelayNs for Delay {
fn delay_ns(&mut self, ns: u32) {
writeln!(Console::writer(), "delay_ns: {ns}ns\r").unwrap();
Alarm::sleep_for(Milliseconds(ns / (1000 * 1000))).unwrap();
}
}

fn main() {
writeln!(Console::writer(), "st7789: example\r").unwrap();

let mut gpio_dc = Gpio::get_pin(0).unwrap();
let dc = gpio_dc.make_output().unwrap();

let mut gpio_reset = Gpio::get_pin(1).unwrap();
let reset = gpio_reset.make_output().unwrap();

let di = SPIInterface::new(EmbeddedHalSpi, dc);

let mut delay = Delay;
let mut display = Builder::new(ST7789, di)
.display_size(W as u16, H as u16)
.invert_colors(ColorInversion::Inverted)
.reset_pin(reset)
.init(&mut delay)
.unwrap();

// Text
let text_style = MonoTextStyle::new(&FONT_10X20, Rgb565::WHITE);
let text = "Hello World ^_^;";
let text_x = W;
let text_y = H / 2;

// Clear the display initially
display.clear(Rgb565::BLUE).unwrap();

writeln!(Console::writer(), "Done clear\r").unwrap();

// Draw text
Text::new(text, Point::new(text_x, text_y), text_style)
.draw(&mut display)
.unwrap();

loop {}
}

0 comments on commit 2c1bffd

Please sign in to comment.