aboutsummaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorhuntc <[email protected]>2022-02-04 13:04:55 +1100
committerhuntc <[email protected]>2022-02-04 13:04:55 +1100
commit1af6b23f970d80d881bbc83fe69846e14c512e1c (patch)
treedabe8b1b01350098387ff349ca66a2d6be12ffe1 /examples
parentbc7266394ddba3d6128cc9de131109c2454f3d05 (diff)
Introduces a Sequences struct
Diffstat (limited to 'examples')
-rw-r--r--examples/nrf/src/bin/pwm_sequence_ws2812b.rs39
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;
9use embassy::time::{Duration, Timer}; 9use embassy::time::{Duration, Timer};
10use embassy_nrf::gpio::NoPin; 10use embassy_nrf::gpio::NoPin;
11use embassy_nrf::pwm::{ 11use embassy_nrf::pwm::{
12 Config, Prescaler, Sequence, SequenceConfig, SequenceLoad, SequenceMode, SequencePwm, 12 Config, Prescaler, Sequence, SequenceConfig, SequenceLoad, SequenceMode, SequencePwm, Sequences,
13}; 13};
14use embassy_nrf::Peripherals; 14use 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]
32async fn main(_spawner: Spawner, p: Peripherals) { 32async 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}