Bare-bones control of the first 30 leds

This commit is contained in:
Savanni D'Gerinel 2024-11-02 13:17:50 -04:00
parent 5d04c84437
commit e7a50040b2
5 changed files with 274 additions and 11 deletions

157
Cargo.lock generated
View File

@ -373,12 +373,12 @@ dependencies = [
"cortex-m",
"cortex-m-rt",
"embedded-alloc",
"embedded-hal",
"embedded-hal 0.2.7",
"fixed",
"fugit",
"lights-core",
"panic-halt",
"rp-pico",
"panic-halt 0.2.0",
"rp-pico 0.8.0",
]
[[package]]
@ -429,6 +429,12 @@ version = "0.13.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "46afbd2983a5d5a7bd740ccb198caf5b82f45c40c09c0eed36052d91cb92e719"
[[package]]
name = "bitfield"
version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2d7e60934ceec538daadb9d8432424ed043a904d8e0243f3c6446bce549a46ac"
[[package]]
name = "bitflags"
version = "1.3.2"
@ -775,8 +781,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8ec610d8f49840a5b376c69663b6369e71f4b34484b9b2eb29fb918d92516cb9"
dependencies = [
"bare-metal",
"bitfield",
"embedded-hal",
"bitfield 0.13.2",
"embedded-hal 0.2.7",
"volatile-register",
]
@ -1067,6 +1073,37 @@ dependencies = [
"void",
]
[[package]]
name = "embedded-hal"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "361a90feb7004eca4019fb28352a9465666b24f840f5c3cddf0ff13920590b89"
[[package]]
name = "embedded-hal-async"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0c4c685bbef7fe13c3c6dd4da26841ed3980ef33e841cddfa15ce8a8fb3f1884"
dependencies = [
"embedded-hal 1.0.0",
]
[[package]]
name = "embedded-hal-nb"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fba4268c14288c828995299e59b12babdbe170f6c6d73731af1b4648142e8605"
dependencies = [
"embedded-hal 1.0.0",
"nb 1.1.0",
]
[[package]]
name = "embedded-io"
version = "0.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d"
[[package]]
name = "emseries"
version = "0.6.0"
@ -1973,6 +2010,26 @@ dependencies = [
"crunchy",
]
[[package]]
name = "halloween-leds"
version = "0.1.0"
dependencies = [
"cortex-m-rt",
"embedded-hal 1.0.0",
"embedded-io",
"panic-halt 1.0.0",
"rp-pico 0.9.0",
]
[[package]]
name = "hash32"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "47d60b12902ba28e2730cd37e95b8c9223af2808df9e902d4df49588d1470606"
dependencies = [
"byteorder",
]
[[package]]
name = "hashbrown"
version = "0.14.5"
@ -2022,6 +2079,16 @@ dependencies = [
"http 0.2.12",
]
[[package]]
name = "heapless"
version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0bfb9eb618601c89945a70e254898da93b13be0388091d42117462b265bb3fad"
dependencies = [
"hash32",
"stable_deref_trait",
]
[[package]]
name = "heck"
version = "0.4.1"
@ -3082,6 +3149,12 @@ version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "de96540e0ebde571dc55c73d60ef407c653844e6f9a1e2fdbd40c07b9252d812"
[[package]]
name = "panic-halt"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a513e167849a384b7f9b746e517604398518590a9142f4846a32e3c2a4de7b11"
[[package]]
name = "parking"
version = "2.2.1"
@ -3810,8 +3883,21 @@ dependencies = [
"cortex-m-rt",
"fugit",
"rp2040-boot2",
"rp2040-hal",
"usb-device",
"rp2040-hal 0.9.2",
"usb-device 0.2.9",
]
[[package]]
name = "rp-pico"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b9342d3ac7011ac688300979e9b52a81f0add1d05feb02868cf94bfee0705b28"
dependencies = [
"cortex-m-rt",
"fugit",
"rp2040-boot2",
"rp2040-hal 0.10.2",
"usb-device 0.3.2",
]
[[package]]
@ -3832,7 +3918,7 @@ dependencies = [
"cortex-m",
"critical-section",
"embedded-dma",
"embedded-hal",
"embedded-hal 0.2.7",
"frunk",
"fugit",
"itertools 0.10.5",
@ -3841,8 +3927,37 @@ dependencies = [
"pio",
"rand_core 0.6.4",
"rp2040-hal-macros",
"rp2040-pac",
"usb-device",
"rp2040-pac 0.5.0",
"usb-device 0.2.9",
"vcell",
"void",
]
[[package]]
name = "rp2040-hal"
version = "0.10.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d11e711940087f2cdff8aeae9f4b902e2014c06a00b39a1092686b81ec973d6f"
dependencies = [
"bitfield 0.14.0",
"cortex-m",
"critical-section",
"embedded-dma",
"embedded-hal 0.2.7",
"embedded-hal 1.0.0",
"embedded-hal-async",
"embedded-hal-nb",
"embedded-io",
"frunk",
"fugit",
"itertools 0.10.5",
"nb 1.1.0",
"paste",
"pio",
"rand_core 0.6.4",
"rp2040-hal-macros",
"rp2040-pac 0.6.0",
"usb-device 0.3.2",
"vcell",
"void",
]
@ -3871,6 +3986,18 @@ dependencies = [
"vcell",
]
[[package]]
name = "rp2040-pac"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "83cbcd3f7a0ca7bbe61dc4eb7e202842bee4e27b769a7bf3a4a72fa399d6e404"
dependencies = [
"cortex-m",
"cortex-m-rt",
"critical-section",
"vcell",
]
[[package]]
name = "rsa"
version = "0.9.6"
@ -5086,6 +5213,16 @@ version = "0.2.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1f6cc3adc849b5292b4075fc0d5fdcf2f24866e88e336dd27a8943090a520508"
[[package]]
name = "usb-device"
version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "98816b1accafbb09085168b90f27e93d790b4bfa19d883466b5e53315b5f06a6"
dependencies = [
"heapless",
"portable-atomic",
]
[[package]]
name = "utf-8"
version = "0.7.6"

View File

@ -30,5 +30,5 @@ members = [
"sgf",
"timezone-testing",
"tree",
"visions/server", "gm-dash/server",
"visions/server", "gm-dash/server", "halloween-leds"
]

View File

@ -0,0 +1,12 @@
[build]
target = "thumbv6m-none-eabi"
[target.thumbv6m-none-eabi]
rustflags = [
"-C", "link-arg=--nmagic",
"-C", "link-arg=-Tlink.x",
"-C", "llvm-args=--inline-threshold=5",
"-C", "no-vectorize-loops",
]
runner = "elf2uf2-rs -d"

11
halloween-leds/Cargo.toml Normal file
View File

@ -0,0 +1,11 @@
[package]
name = "halloween-leds"
version = "0.1.0"
edition = "2021"
[dependencies]
cortex-m-rt = "0.7.3"
embedded-hal = "1.0.0"
embedded-io = "0.6.1"
panic-halt = "1.0.0"
rp-pico = "0.9.0"

103
halloween-leds/src/main.rs Normal file
View File

@ -0,0 +1,103 @@
#![no_main]
#![no_std]
use embedded_hal::{delay::DelayNs, digital::OutputPin};
use embedded_hal::spi::SpiBus;
use panic_halt as _;
use rp_pico::hal::gpio::bank0::Gpio0;
use rp_pico::{
entry,
hal::{
clocks::init_clocks_and_plls,
fugit::RateExtU32,
gpio::{
bank0::{Gpio2, Gpio4},
FunctionSio, Pin, PullDown, SioOutput,
},
spi::{Enabled, Spi, SpiDevice, ValidSpiPinout},
uart::{DataBits, StopBits, UartConfig, UartPeripheral},
Clock, Sio, Timer, Watchdog,
},
pac, Pins,
};
const XOSC_CRYSTAL_FREQ: u32 = 12_000_000; // MHz, https://forums.raspberrypi.com/viewtopic.php?t=356764
#[entry]
unsafe fn main() -> ! {
let mut peripherals = pac::Peripherals::take().unwrap();
let sio = Sio::new(peripherals.SIO);
let mut watchdog = Watchdog::new(peripherals.WATCHDOG);
let pins = Pins::new(
peripherals.IO_BANK0,
peripherals.PADS_BANK0,
sio.gpio_bank0,
&mut peripherals.RESETS,
);
let clocks = init_clocks_and_plls(
XOSC_CRYSTAL_FREQ,
peripherals.XOSC,
peripherals.CLOCKS,
peripherals.PLL_SYS,
peripherals.PLL_USB,
&mut peripherals.RESETS,
&mut watchdog,
)
.ok()
.unwrap();
// let mut power_light: Pin<Gpio0, FunctionSio<SioOutput>, PullDown> = pins.gpio0.into_function();
// power_light.set_high();
let mut timer = Timer::new(peripherals.TIMER, &mut peripherals.RESETS, &clocks);
let spi_clk = pins.gpio10.into_function();
let spi_sdo = pins.gpio11.into_function();
let spi = Spi::<_, _, _, 8>::new(peripherals.SPI1, (spi_sdo, spi_clk));
let mut spi = spi.init(
&mut peripherals.RESETS,
clocks.peripheral_clock.freq(),
1_u32.MHz(),
embedded_hal::spi::MODE_1,
);
let mut lights: [u8; 126] = [0; 126];
lights[124] = 0xff;
lights[125] = 0xff;
for i in 0..30 {
lights[(i + 1) * 4 + 0] = 0xe0 + 1;
lights[(i + 1) * 4 + 1] = 255;
}
let mut brightness = 1;
let mut step = 1;
loop {
if brightness == 255 && step == 1 {
step = -1;
} else if brightness == 1 && step == -1 {
step = 1;
};
for i in 0..30 {
lights[(i + 1) * 4 + 3] = brightness as u8;
}
brightness = brightness + step;
spi.write(lights.as_slice());
timer.delay_ms(10);
}
/*
let pins = (pins.gpio0.into_function(), pins.gpio1.into_function());
let uart = UartPeripheral::new(peripherals.UART0, pins, &mut peripherals.RESETS)
.enable(
UartConfig::new(9600_u32.Hz(), DataBits::Eight, None, StopBits::One),
clocks.peripheral_clock.freq(),
)
.unwrap();
loop {
uart.write_full_blocking(b"Hello World!\r\n");
timer.delay_ms(1000);
}
*/
}