diff options
| author | huntc <[email protected]> | 2022-02-04 13:04:55 +1100 |
|---|---|---|
| committer | huntc <[email protected]> | 2022-02-04 13:04:55 +1100 |
| commit | 1af6b23f970d80d881bbc83fe69846e14c512e1c (patch) | |
| tree | dabe8b1b01350098387ff349ca66a2d6be12ffe1 /examples | |
| parent | bc7266394ddba3d6128cc9de131109c2454f3d05 (diff) | |
Introduces a Sequences struct
Diffstat (limited to 'examples')
| -rw-r--r-- | examples/nrf/src/bin/pwm_sequence_ws2812b.rs | 39 |
1 files changed, 18 insertions, 21 deletions
diff --git a/examples/nrf/src/bin/pwm_sequence_ws2812b.rs b/examples/nrf/src/bin/pwm_sequence_ws2812b.rs index 0ce79cbe0..310842d8d 100644 --- a/examples/nrf/src/bin/pwm_sequence_ws2812b.rs +++ b/examples/nrf/src/bin/pwm_sequence_ws2812b.rs | |||
| @@ -9,7 +9,7 @@ use embassy::executor::Spawner; | |||
| 9 | use embassy::time::{Duration, Timer}; | 9 | use embassy::time::{Duration, Timer}; |
| 10 | use embassy_nrf::gpio::NoPin; | 10 | use embassy_nrf::gpio::NoPin; |
| 11 | use embassy_nrf::pwm::{ | 11 | use embassy_nrf::pwm::{ |
| 12 | Config, Prescaler, Sequence, SequenceConfig, SequenceLoad, SequenceMode, SequencePwm, | 12 | Config, Prescaler, Sequence, SequenceConfig, SequenceLoad, SequenceMode, SequencePwm, Sequences, |
| 13 | }; | 13 | }; |
| 14 | use embassy_nrf::Peripherals; | 14 | use embassy_nrf::Peripherals; |
| 15 | 15 | ||
| @@ -30,19 +30,6 @@ const RES: u16 = 0x8000; | |||
| 30 | // line is assumed to be P1_05. | 30 | // line is assumed to be P1_05. |
| 31 | #[embassy::main] | 31 | #[embassy::main] |
| 32 | async fn main(_spawner: Spawner, p: Peripherals) { | 32 | async fn main(_spawner: Spawner, p: Peripherals) { |
| 33 | // Declare the bits of 24 bits | ||
| 34 | let mut color_seq_words = [ | ||
| 35 | T0H, T0H, T0H, T0H, T0H, T0H, T0H, T0H, // G | ||
| 36 | T0H, T0H, T0H, T0H, T0H, T0H, T0H, T0H, // R | ||
| 37 | T1H, T1H, T1H, T1H, T1H, T1H, T1H, T1H, // B | ||
| 38 | ]; | ||
| 39 | let color_seq = Sequence::new(&mut color_seq_words, SequenceConfig::default()); | ||
| 40 | |||
| 41 | let mut reset_seq_words = [RES; 1]; | ||
| 42 | let mut reset_seq_config = SequenceConfig::default(); | ||
| 43 | reset_seq_config.end_delay = 799; // 50us (20 ticks * 40) - 1 tick because we've already got one RES; | ||
| 44 | let reset_seq = Sequence::new(&mut reset_seq_words, reset_seq_config); | ||
| 45 | |||
| 46 | let mut config = Config::default(); | 33 | let mut config = Config::default(); |
| 47 | config.sequence_load = SequenceLoad::Common; | 34 | config.sequence_load = SequenceLoad::Common; |
| 48 | config.prescaler = Prescaler::Div1; | 35 | config.prescaler = Prescaler::Div1; |
| @@ -51,18 +38,24 @@ async fn main(_spawner: Spawner, p: Peripherals) { | |||
| 51 | p.PWM0, p.P1_05, NoPin, NoPin, NoPin, config, | 38 | p.PWM0, p.P1_05, NoPin, NoPin, NoPin, config, |
| 52 | )); | 39 | )); |
| 53 | 40 | ||
| 54 | unwrap!(pwm.start(color_seq, Some(reset_seq), SequenceMode::Times(2))); | 41 | // Declare the bits of 24 bits in a buffer we'll be |
| 55 | 42 | // mutating later. | |
| 56 | Timer::after(Duration::from_millis(1000)).await; | 43 | let mut seq_words = [ |
| 44 | T0H, T0H, T0H, T0H, T0H, T0H, T0H, T0H, // G | ||
| 45 | T0H, T0H, T0H, T0H, T0H, T0H, T0H, T0H, // R | ||
| 46 | T1H, T1H, T1H, T1H, T1H, T1H, T1H, T1H, // B | ||
| 47 | RES, | ||
| 48 | ]; | ||
| 49 | let mut seq_config = SequenceConfig::default(); | ||
| 50 | seq_config.end_delay = 799; // 50us (20 ticks * 40) - 1 tick because we've already got one RES; | ||
| 57 | 51 | ||
| 58 | let mut color_bit = 16; | 52 | let mut color_bit = 16; |
| 59 | let mut bit_value = T0H; | 53 | let mut bit_value = T0H; |
| 60 | 54 | ||
| 61 | loop { | 55 | loop { |
| 62 | if let (Some(color_seq), Some(reset_seq)) = pwm.stop() { | 56 | let sequence0 = Sequence::new(&seq_words, seq_config.clone()); |
| 63 | color_seq.words[color_bit] = bit_value; | 57 | let sequences = Sequences::new(&mut pwm, sequence0, None); |
| 64 | unwrap!(pwm.start(color_seq, Some(reset_seq), SequenceMode::Times(2))); | 58 | unwrap!(sequences.start(SequenceMode::Times(2))); |
| 65 | } | ||
| 66 | 59 | ||
| 67 | Timer::after(Duration::from_millis(50)).await; | 60 | Timer::after(Duration::from_millis(50)).await; |
| 68 | 61 | ||
| @@ -79,5 +72,9 @@ async fn main(_spawner: Spawner, p: Peripherals) { | |||
| 79 | color_bit -= 1; | 72 | color_bit -= 1; |
| 80 | } | 73 | } |
| 81 | } | 74 | } |
| 75 | |||
| 76 | drop(sequences); | ||
| 77 | |||
| 78 | seq_words[color_bit] = bit_value; | ||
| 82 | } | 79 | } |
| 83 | } | 80 | } |
