From 89dbe4adcac7de58e54cdcadc4360627e801131c Mon Sep 17 00:00:00 2001 From: Marco Thomas Date: Mon, 18 Apr 2022 13:19:17 +0200 Subject: [PATCH] Cleanup code and add simple README --- Cargo.lock | 1 + Cargo.toml | 3 +- README.org | 24 ++++++++++++++-- assets/bad_apple.jpg | Bin 0 -> 112854 bytes src/main.rs | 64 +++++++++++++++++++++++++------------------ video-to-ascii.py | 28 +++++++++++++++++-- 6 files changed, 88 insertions(+), 32 deletions(-) create mode 100644 assets/bad_apple.jpg diff --git a/Cargo.lock b/Cargo.lock index b4926fe..f8a30c6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -42,6 +42,7 @@ dependencies = [ "cortex-m 0.7.4", "cortex-m-rt", "embedded-graphics", + "embedded-time", "panic-halt", "panic-rtt-target", "rtt-target 0.2.2", diff --git a/Cargo.toml b/Cargo.toml index ad1d892..cc74cea 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,4 +14,5 @@ stm32f3xx-hal = { version = "0.9.0", features = ["ld", "rt", "stm32f303xe"] } rtt-target = { version = "0.2.2", features = ["cortex-m"] } panic-rtt-target = { version = "0.1.1", features = ["cortex-m"] } ssd1306 = "0.7.0" -embedded-graphics = "0.7.1" \ No newline at end of file +embedded-graphics = "0.7.1" +embedded-time = "0.12.1" \ No newline at end of file diff --git a/README.org b/README.org index 1b71774..9c6a084 100644 --- a/README.org +++ b/README.org @@ -1,11 +1,29 @@ #+TITLE: bad-apple-embedded-rs +#+html:

+ +Why? Because I wanted to and because Rust rocks! + * Features +This project was built using an =STM32-F303ZE= with a simple =ssd1306= OLED display. +It draws 21x10 with (almost perfectly) stable 8 frames per second and +was designed and built to play Bad Apple, but anything else would also work. +Frame timings and length of the video can be adjusted, too high frames per second can lead to slowed down playback due to the render time being larger than the desired one. +Faster render times are being adjusted for. + +* How to use +1. Convert a video to an ASCII file, using =video-to-ascii.py= +2. Adjust frame timing in the main program (draw time per picture, width, height, total frames) +3. Flash and enjoy! + +* Input format +The screen renders video through ASCII characters. It takes in a long text file, containing all the images in a contiguous stream, which is then read in =IMAGE_LEN=-sized (height * width + newline chars) chunks in the main program. +If these parameters don't match up, the end result won't either. * Dependencies -The video-to-ascii conversion script uses [[https://github.com/ivanl-exe/image-to-ascii/][image-to-ascii]] for the conversion in the background. +The =video-to-ascii.py= conversion script uses [[https://github.com/ivanl-exe/image-to-ascii/][image-to-ascii]] for the conversion in the background. It is assumed to be located on the same height as this project and that it is build in release-mode (due to performance). * TODO -- [ ] Add README Stuff -- [ ] Rewrite ascii conversion in Rust (with an own impl of ascii-to-text) +- [ ] Fix timing in draw +- [ ] Rewrite ascii conversion in Rust or Haskell (with an own implementation of =ascii-to-text=) diff --git a/assets/bad_apple.jpg b/assets/bad_apple.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f0365d98dcbada7e6daf4350ade6ee9774a2ab95 GIT binary patch literal 112854 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

C@pTX1SLInQ%ld|9X6b1+(Vw!Q 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 literal 0 HcmV?d00001 diff --git a/src/main.rs b/src/main.rs index 013e771..4d35a64 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,42 +1,47 @@ #![no_std] #![no_main] -use cortex_m::prelude::*; +use cortex_m::delay::Delay; use cortex_m_rt::entry; +use embedded_graphics::mono_font::MonoTextStyleBuilder; use embedded_graphics::{ mono_font::ascii::FONT_4X6, pixelcolor::BinaryColor, prelude::*, text::{Baseline, Text}, }; -use panic_halt as _; +use embedded_time::fixed_point::FixedPoint as _; +use hal::{i2c::I2c, timer::MonoTimer}; +use pac::{CorePeripherals, Peripherals}; +use panic_rtt_target as _; use rtt_target::{rprintln, rtt_init_print}; use ssd1306::{prelude::*, I2CDisplayInterface, Ssd1306}; -use stm32f3xx_hal::{self as hal, pac, prelude::*}; use stm32f3xx_hal::prelude::_embedded_hal_digital_InputPin; +use stm32f3xx_hal::{self as hal, pac, prelude::*}; -const IMAGE_LEN: usize = 220; // size of a single ascii image on screen -const IMAGE_END: usize = 1093 * 220; // position of the last ascii char +const IMAGE_WIDTH: usize = 21; +const IMAGE_HEIGHT: usize = 10; +const TOTAL_FRAMES: usize = 1749; +const DRAW_TIME: usize = 125; // ms for a single screen draw + +const IMAGE_LEN: usize = IMAGE_HEIGHT * (IMAGE_WIDTH + 1); // adjust for newline char +const IMAGE_END: usize = TOTAL_FRAMES * IMAGE_LEN; // position of the last ascii char #[entry] fn main() -> ! { rtt_init_print!(); - let peripherals = pac::Peripherals::take().unwrap(); - let mut core_peripherals = pac::CorePeripherals::take().unwrap(); + let peripherals = Peripherals::take().unwrap(); + let mut core_peripherals = CorePeripherals::take().unwrap(); let mut rcc = peripherals.RCC.constrain(); let mut flash = peripherals.FLASH.constrain(); let clocks = rcc.cfgr.freeze(&mut flash.acr); let mut gpiob = peripherals.GPIOB.split(&mut rcc.ahb); let mut gpioc = peripherals.GPIOC.split(&mut rcc.ahb); - let monotimer = hal::timer::MonoTimer::new( - core_peripherals.DWT, - clocks, - &mut core_peripherals.DCB); - // TODO: dont use hardcoded val here - let mut delay = cortex_m::delay::Delay::new(core_peripherals.SYST, 8000000); + let monotimer = MonoTimer::new(core_peripherals.DWT, clocks, &mut core_peripherals.DCB); + let mut delay_provider = Delay::new(core_peripherals.SYST, clocks.hclk().integer()); - let mut button1 = gpioc + let button1 = gpioc .pc13 .into_pull_down_input(&mut gpioc.moder, &mut gpioc.pupdr); @@ -47,7 +52,7 @@ fn main() -> ! { .pb9 .into_af_open_drain(&mut gpiob.moder, &mut gpiob.otyper, &mut gpiob.afrh); - let i2c = hal::i2c::I2c::new( + let i2c = I2c::new( peripherals.I2C1, (scl, sda), 1000.kHz().try_into().unwrap(), @@ -60,40 +65,47 @@ fn main() -> ! { .into_buffered_graphics_mode(); display.init().unwrap(); - let text_style = embedded_graphics::mono_font::MonoTextStyleBuilder::new() + let text_style = MonoTextStyleBuilder::new() .font(&FONT_4X6) .text_color(BinaryColor::On) .build(); - let bad_apple = core::str::from_utf8(include_bytes!("../assets/gen.txt")).unwrap(); + let ascii_txt = core::str::from_utf8(include_bytes!("../assets/ascii.txt")).unwrap(); // start indexing at 0, draw IMAGE_LEN ascii chars to display let mut index: usize = 0; loop { - let instant = monotimer.now(); + let monotimer_instant = monotimer.now(); + display.clear(); - rprintln!("draw: {} to {}", index, index + IMAGE_LEN); let text = Text::with_baseline( - &bad_apple[index..index + IMAGE_LEN], + &ascii_txt[index..index + IMAGE_LEN], Point::new(0, 0), text_style, Baseline::Top, ); text.draw(&mut display).unwrap(); + // draw out to physical screen display.flush().unwrap(); // go to next frame or reset to start index = (index + IMAGE_LEN) % IMAGE_END; - let elapsed = instant.elapsed(); - rprintln!("draw took: {}", elapsed); - rprintln!("freq: {}", monotimer.frequency()); - delay.delay_ms(100); + // adjust for desired framerate + // TODO: chip is too fast for some reason + let freq = monotimer.frequency().0; + // maybe use float calc here? + let ms_per_draw = 1000 / (freq / monotimer_instant.elapsed()); + rprintln!("Draw took {}ms", ms_per_draw); + match DRAW_TIME.checked_sub(ms_per_draw as usize) { + Some(result) => delay_provider.delay_ms(result as u32), + None => (), + }; - // kill switch + // reset if button1.is_high().unwrap() { - loop {} + index = 0 } } } diff --git a/video-to-ascii.py b/video-to-ascii.py index bcdf4bc..73200a1 100644 --- a/video-to-ascii.py +++ b/video-to-ascii.py @@ -1,15 +1,28 @@ """ -Convert a video to a txt in a format, which i need +Convert a video to a textfile in a format, which i need: + +ASCII_TXT: +--- +IMAGE +IMAGE +IMAGE +... +--- + Using: https://github.com/ivanl-exe/image-to-ascii/ """ + import cv2 import os import shutil import argparse + OUTPUT = 'assets/output' ASCII_TXT = 'assets/ascii.txt' +TOOL_PATH = '../image-to-ascii/target/release/image_to_ascii' + def parse_args(): """ @@ -22,6 +35,7 @@ def parse_args(): return parser.parse_args() + def main(): """ Convert frames to jpgs, convert each to ascii, and append it to the ascii.txt @@ -59,11 +73,21 @@ def main(): for f in os.listdir(OUTPUT): filename = os.path.abspath(OUTPUT + '/' + f) print(f'Processing: {filename}') - os.system(f'../image-to-ascii/target/release/image_to_ascii {args.width} {args.height} true {filename} >> {ASCII_TXT}') + os.system(f'{TOOL_PATH} {args.width} {args.height} true {filename} >> {ASCII_TXT}') # cleanup video.release() cv2.destroyAllWindows() + +def check_deps(): + """ + Checks if the deps, used in this script, are present + """ + if not os.path.isfile(TOOL_PATH): + print("Missing image-to-ascii at expected location!") + exit(1) + if __name__ == '__main__': + check_deps() main()