···28use embassy_rp::rtc::{DateTime, DayOfWeek};
29use embassy_rp::spi::Spi;
30use embassy_rp::spi::{self};
031use embassy_rp::{bind_interrupts, gpio, i2c};
32use embassy_sync::blocking_mutex::NoopMutex;
33use embassy_sync::blocking_mutex::raw::NoopRawMutex;
···123 let btn_b = Input::new(p.PIN_13, Pull::Down);
124 let btn_c = Input::new(p.PIN_14, Pull::Down);
125 let rtc_alarm = Input::new(p.PIN_8, Pull::Down);
0126127 //Setup i2c bus
128 let config = embassy_rp::i2c::Config::default();
···171 RESOURCES.init(StackResources::new()),
172 seed,
173 );
000174175 spawner.must_spawn(net_task(runner));
176 //Attempt to connect to wifi to get RTC time loop for 2 minutes
···180 let wifi_ssid = env_value("WIFI_SSID");
181 let wifi_password = env_value("WIFI_PASSWORD");
182 while wifi_connection_attempts < 30 {
0183 match control
184 .join(wifi_ssid, JoinOptions::new(wifi_password.as_bytes()))
185 .await
···198 }
199200 if connected_to_wifi {
00201 info!("waiting for DHCP...");
202 while !stack.is_config_up() {
203 Timer::after_millis(100).await;
···235 let url = env_value("TIME_API");
236 info!("connecting to {}", &url);
237000238 //If the call goes through set the rtc
239 match http_client.request(Method::GET, &url).await {
240 Ok(mut request) => {
···334 let reset_cycle = 3_000;
335336 //Turn off led to signify that the badge is ready
337- user_led.set_low();
338339 //RTC alarm stuff
340 let mut go_to_sleep = false;
···353 }
354355 loop {
000356 //Change Image Button
357 if btn_c.is_high() {
358 info!("Button C pressed");
···486 //goes to sleep for 15 mins
487 _ = rtc_device.disable_all_alarms();
488 _ = rtc_device.clear_alarm_flag();
489- _ = rtc_device.set_alarm_seconds(5);
490- _ = rtc_device.control_alarm_seconds(Control::On);
491 _ = rtc_device.control_alarm_interrupt(Control::On);
492 power.set_low();
493 }
···28use embassy_rp::rtc::{DateTime, DayOfWeek};
29use embassy_rp::spi::Spi;
30use embassy_rp::spi::{self};
31+use embassy_rp::watchdog::Watchdog;
32use embassy_rp::{bind_interrupts, gpio, i2c};
33use embassy_sync::blocking_mutex::NoopMutex;
34use embassy_sync::blocking_mutex::raw::NoopRawMutex;
···124 let btn_b = Input::new(p.PIN_13, Pull::Down);
125 let btn_c = Input::new(p.PIN_14, Pull::Down);
126 let rtc_alarm = Input::new(p.PIN_8, Pull::Down);
127+ let mut watchdog = Watchdog::new(p.WATCHDOG);
128129 //Setup i2c bus
130 let config = embassy_rp::i2c::Config::default();
···173 RESOURCES.init(StackResources::new()),
174 seed,
175 );
176+177+ //If the watch dog isn't fed in 60 seconds reboot to help with hang up
178+ watchdog.start(Duration::from_secs(8));
179180 spawner.must_spawn(net_task(runner));
181 //Attempt to connect to wifi to get RTC time loop for 2 minutes
···185 let wifi_ssid = env_value("WIFI_SSID");
186 let wifi_password = env_value("WIFI_PASSWORD");
187 while wifi_connection_attempts < 30 {
188+ watchdog.feed();
189 match control
190 .join(wifi_ssid, JoinOptions::new(wifi_password.as_bytes()))
191 .await
···204 }
205206 if connected_to_wifi {
207+ //Feed the dog if it makes it this far
208+ watchdog.feed();
209 info!("waiting for DHCP...");
210 while !stack.is_config_up() {
211 Timer::after_millis(100).await;
···243 let url = env_value("TIME_API");
244 info!("connecting to {}", &url);
245246+ // Feeds the dog again for one last time
247+ watchdog.feed();
248+249 //If the call goes through set the rtc
250 match http_client.request(Method::GET, &url).await {
251 Ok(mut request) => {
···345 let reset_cycle = 3_000;
346347 //Turn off led to signify that the badge is ready
348+ // user_led.set_low();
349350 //RTC alarm stuff
351 let mut go_to_sleep = false;
···364 }
365366 loop {
367+ //Keep feeding the dog
368+ watchdog.feed();
369+370 //Change Image Button
371 if btn_c.is_high() {
372 info!("Button C pressed");
···500 //goes to sleep for 15 mins
501 _ = rtc_device.disable_all_alarms();
502 _ = rtc_device.clear_alarm_flag();
503+ _ = rtc_device.set_alarm_minutes(15);
504+ _ = rtc_device.control_alarm_minutes(Control::On);
505 _ = rtc_device.control_alarm_interrupt(Control::On);
506 power.set_low();
507 }