Crates.io | sensehat-screen |
lib.rs | sensehat-screen |
version | 0.2.6 |
source | src |
created_at | 2018-04-01 21:00:06.04816 |
updated_at | 2021-01-26 04:27:25.796714 |
description | A library for using the 8x8-LED matrix, with RGB565 coloring, on the Raspberry Pi Sense HAT device. |
homepage | https://github.com/saibatizoku/sensehat-screen-rs |
repository | https://github.com/saibatizoku/sensehat-screen-rs |
max_upload_size | |
id | 58536 |
size | 181,315 |
The Raspberry Pi Sense HAT has an 8×8 RGB LED matrix that provides its own driver for the Linux framebuffer.
This library provides a thread-safe, strong-typed, high-level API for the LED matrix, treating it as you would any other screen on a Linux box.
This crate supports Rust stable version v1.32.0 and higher, and is tested on nightly continuously.
For a detailed summary of how changes are incorporated into the code, we keep a CHANGELOG.
To use this crate with the default features, add this to your Cargo.toml
:
[dependencies]
sensehat-screen = "0.2"
or, to manually specify the features::
[dependencies]
sensehat-screen = { version = "0.2", default-features = false, features = ["fonts"] }
Then you can use it with your crate:
extern crate sensehat_screen
use sensehat_screen::{FrameLine, PixelColor, Screen, FONT_COLLECTION};
You can find the documentation for the latest release at: https://docs.rs/sensehat-screen.
It contains a general description of the types contained in the library, it is a good to place to get familiar with the methods available.
You can find working examples in the source code.
This example builds low-level FrameLine
s by hand, writes them
to the Screen
at set intervals.
A letter from ゆにち (Yunichi) to Toño
This example makes use of the built-in 8x8 FontCollection
. The collection is used to sanitize a user-provided &str
, returning a FontString
that includes only those characters provided by the FontCollection (basically, the full latin
set, some greek
, some hiragana
, and legacy ascii box
and ascii block
sets).
Each font is given stroke color of 50% white, PixelColor::WHITE.dim(0.5)
, and then it is converted into a FrameLine
, which is finally written to the Screen
.
See the font8x8 crate for more details.
This example makes use of PixelFrame
, an ergonomic wrapper for representing each pixel in the 8x8 LED Matrix: [PixelColor; 64]
.
Like the letter
example, it makes use of the built-in FontCollection
, to create two hand-made PixelFrame
s, made from the a yellow-colored Ñ
, and a magenta-colored ó
.
Each frame is then subject to counter-clockwise rotation in steps of 90°.
Starts with an empty screen, and two font-symbols. Each symbol is then made to slide-in from the left by setting an Offset
progressively.
Once the symbol is fully displayed, it slides-out to the right, again by incrementing the offset, until the symbol disappears.
The same process is done with the top-bottom offset directions.
A Clip
is a PixelFrame
that is the result of merging two PixelFrame
. They are useful for manually constructing sequences of frames. Generally, you will prefer to work with Scroll
, and FrameSequence
iterators.
The name says it all: it builds a scroll of frames, and displays it from top to bottom, one clipped-frame at a time.
Makes use of FontString
, Scroll
, and FrameSequence
to work.
The name says it all: it builds a scroll of frames, and displays it from bottom to top, one clipped-frame at a time.
Makes use of FontString
, Scroll
, and FrameSequence
to work.
The name says it all: it builds a scroll of frames, and displays it from left to right, one clipped-frame at a time.
Makes use of FontString
, Scroll
, and FrameSequence
to work.
The name says it all: it builds a scroll of frames, and displays it from right to left, one clipped-frame at a time.
Makes use of FontString
, Scroll
, and FrameSequence
to work.
The following program shows how to:
screen
)red_pixel
)all_64_pixels
)extern crate sensehat_screen;
use sensehat_screen::{PixelFrame, PixelColor, Screen};
fn main() {
let mut screen = Screen::new("/dev/fb1")
.expect("Could not open the framebuffer for the screen");
let red_pixel = PixelColor::new(255, 0, 0); // The pixel color's RGB components are each in the range of 0 <= c < 256.
let all_64_pixels = &[red_pixel; 64]; // A single vector of 8 x 8 = 64 pixel colors (rows are grouped by chunks of 8)
let all_red_screen = PixelFrame::from_pixels(&all_64_pixels); // a screen frame
screen.write_frame(&all_red_screen.frame_line()); // show the frame on the LED matrix
}
default
featuresBy default, the basic
, and linux-framebuffer
features are included.
basic
featuresA set of features that don't require the hardware. This is mostly code that you will want to use if you are writing a simulator/emulator/etc. It includes, the fonts
, offset
, rotate
, clip
, scroll
, and serde-support
features.
fonts
In default
. A collection of legacy 8x8 fonts, renderable on the LED matrix.
offset
In default
. Support for offsetting the PixelFrame
left/right/top/bottom. Requires clip
.
rotate
In default
. Support for rotating PixelFrame
s by 90-degree steps.
clip
In default
. Support for combining, and clipping two PixelFrame
s onto a single frame.
scroll
In default
. Support for joining a collection of PixelFrame
s into a single Scroll
. Requires clip
.
serde-support
In default
. Enables support for serialization/deserialization with serde
.
linux-framebuffer
In default
. Use the Linux framebuffer to write to the LED matrix.
big-endian
Uses big-endian format, suitable for non-AMD64/x86-64 processors. This is used when encoding/decoding 16-bit RGB565 to/from 24-bit RGB. See this for more information.
linux-framebuffer
- In default
. Use the Linux framebuffer to write to the LED matrix.fonts
- In default
. A collection of legacy 8x8 fonts, renderable on the LED matrix.offset
- In default
. Support for offsetting the PixelFrame
left/right/up/down.rotate
- In default
. Support for rotating PixelFrame
s by 90-degree steps.clip
- In default
. Support for combining, and clipping two PixelFrame
s onto a single frame.scroll
- In default
. Support for joining a collection of PixelFrame
s into a single Scroll
. Requires clip
.serde-support
- In default
. Enables support for serialization/deserialization with serde
.big-endian
- Uses big-endian format, suitable for non-AMD64/x86-64 processors.Please do contribute! Issues and pull requests are welcome.
Thank you for your help improving software one changelog at a time!