+1
-1
Cargo.toml
+1
-1
Cargo.toml
+58
-13
src/main.rs
+58
-13
src/main.rs
···
9
9
use core::cell::RefCell;
10
10
use core::fmt::Write;
11
11
use core::str::from_utf8;
12
+
use cortex_m::asm::delay;
12
13
use cyw43::JoinOptions;
13
14
use cyw43_pio::{DEFAULT_CLOCK_DIVIDER, PioSpi};
14
15
use defmt::info;
15
16
use defmt::*;
17
+
use embassy_embedded_hal::shared_bus::I2cDeviceError;
16
18
use embassy_embedded_hal::shared_bus::blocking::i2c::I2cDevice;
17
19
use embassy_executor::Spawner;
18
20
use embassy_net::StackResources;
···
21
23
use embassy_rp::clocks::RoscRng;
22
24
use embassy_rp::flash::Async;
23
25
use embassy_rp::gpio::Input;
24
-
use embassy_rp::i2c::I2c;
26
+
use embassy_rp::i2c::{Error, I2c};
25
27
use embassy_rp::peripherals::{DMA_CH0, I2C0, PIO0, SPI0};
26
28
use embassy_rp::pio::{InterruptHandler, Pio};
27
29
use embassy_rp::rtc::{DateTime, DayOfWeek};
···
181
183
wifi_connection_attempts += 1;
182
184
}
183
185
186
+
//Setup i2c bus
187
+
let config = embassy_rp::i2c::Config::default();
188
+
let i2c = i2c::I2c::new_blocking(p.I2C0, p.PIN_5, p.PIN_4, config);
189
+
static I2C_BUS: StaticCell<I2c0Bus> = StaticCell::new();
190
+
let i2c_bus = NoopMutex::new(RefCell::new(i2c));
191
+
let i2c_bus = I2C_BUS.init(i2c_bus);
192
+
193
+
let i2c_dev = I2cDevice::new(i2c_bus);
194
+
let mut rtc_device = PCF85063::new(i2c_dev);
195
+
184
196
let mut time_was_set = false;
185
197
if connected_to_wifi {
186
198
info!("waiting for DHCP...");
···
212
224
&mut tls_write_buffer,
213
225
TlsVerify::None,
214
226
);
227
+
228
+
Timer::after(Duration::from_millis(500)).await;
215
229
// let mut http_client = HttpClient::new(&tcp_client, &dns_client);
216
230
let mut http_client = HttpClient::new_with_tls(&tcp_client, &dns_client, tls_config);
217
231
···
276
290
minute,
277
291
second: second as u8,
278
292
};
279
-
rtc.set_datetime(rtc_time).unwrap();
293
+
294
+
// // prepare date and time to be set
295
+
// let now = DateTime {
296
+
// year: 21, // 2021
297
+
// month: 4, // April
298
+
// weekday: 0, // Sunday
299
+
// day: 4,
300
+
// day_of_week: DayOfWeek::Sunday,
301
+
// hour,
302
+
// minute,
303
+
// hours: 16,
304
+
// minutes: 52,
305
+
// seconds: 00,
306
+
// second: 0,
307
+
// };
308
+
309
+
rtc_device
310
+
.set_datetime(&rtc_time)
311
+
.expect("TODO: panic message");
312
+
// rtc.set_datetime(rtc_time).unwrap();
280
313
time_was_set = true;
281
314
let _ = control.leave().await;
282
315
}
···
295
328
296
329
//Set up saving
297
330
let mut flash = embassy_rp::flash::Flash::<_, Async, FLASH_SIZE>::new(p.FLASH, p.DMA_CH3);
298
-
let mut save: Save = read_postcard_from_flash(ADDR_OFFSET, &mut flash, SAVE_OFFSET).unwrap();
331
+
//TODO baaaaaad
332
+
let mut save =
333
+
read_postcard_from_flash(ADDR_OFFSET, &mut flash, SAVE_OFFSET).unwrap_or_else(|err| {
334
+
error!("Error getting the save from the flash: {:?}", err);
335
+
Save::new()
336
+
});
299
337
WIFI_COUNT.store(save.wifi_counted, core::sync::atomic::Ordering::Relaxed);
300
-
301
-
//Setup i2c bus
302
-
let config = embassy_rp::i2c::Config::default();
303
-
let i2c = i2c::I2c::new_blocking(p.I2C0, p.PIN_5, p.PIN_4, config);
304
-
static I2C_BUS: StaticCell<I2c0Bus> = StaticCell::new();
305
-
let i2c_bus = NoopMutex::new(RefCell::new(i2c));
306
-
let i2c_bus = I2C_BUS.init(i2c_bus);
307
-
308
-
let i2c_dev = I2cDevice::new(i2c_bus);
309
-
let mut rtc_device = PCF85063::new(i2c_dev);
310
338
311
339
//Task spawning
312
340
spawner.must_spawn(run_the_temp_sensor(i2c_bus));
···
322
350
user_led.set_low();
323
351
324
352
loop {
353
+
//TODO take out
354
+
Timer::after(Duration::from_millis(5_000)).await;
355
+
356
+
let time = rtc_device.get_datetime().unwrap();
357
+
info!("Hour: {:?}", time.hour());
358
+
info!("Minute: {:?}", time.minute());
359
+
info!("Second: {:?}", time.second());
360
+
361
+
// match rtc_device.get_datetime() {
362
+
// Ok(time) => {
363
+
// info!("RTC time: {:?}", time.as_utc().time().minute());
364
+
// }
365
+
// Err(err) => {
366
+
// error!("Error reading rtc");
367
+
// }
368
+
// }
369
+
325
370
//Change Image Button
326
371
if btn_c.is_high() {
327
372
info!("Button C pressed");
+12
-14
src/pcf85063a/datetime.rs
+12
-14
src/pcf85063a/datetime.rs
···
7
7
//! a convenient set_time() function could be added (sets only seconds, minutes and hours)
8
8
9
9
use super::{DEVICE_ADDRESS, Error, PCF85063, Register, decode_bcd, encode_bcd};
10
+
use embassy_rp::rtc::DateTime;
10
11
use embedded_hal_1::i2c::I2c;
11
12
use time::{Date, PrimitiveDateTime, Time};
12
13
···
36
37
}
37
38
38
39
/// Set date and time all at once.
39
-
pub fn set_datetime(&mut self, datetime: &PrimitiveDateTime) -> Result<(), Error<E>> {
40
+
pub fn set_datetime(&mut self, datetime: &DateTime) -> Result<(), Error<E>> {
40
41
let payload = [
41
42
Register::SECONDS, //first register
42
-
encode_bcd(datetime.second()),
43
-
encode_bcd(datetime.minute()),
44
-
encode_bcd(datetime.hour()),
45
-
encode_bcd(datetime.day()),
46
-
encode_bcd(datetime.weekday().number_days_from_sunday()),
47
-
encode_bcd(datetime.month().into()),
48
-
encode_bcd((datetime.year() - 2000) as u8),
43
+
encode_bcd(datetime.second),
44
+
encode_bcd(datetime.minute),
45
+
encode_bcd(datetime.hour),
46
+
encode_bcd(datetime.day),
47
+
//Not sure if this is correct
48
+
encode_bcd(datetime.day_of_week as u8),
49
+
encode_bcd(datetime.month),
50
+
encode_bcd((datetime.year - 2000) as u8),
49
51
];
50
-
self.i2c
51
-
.write(DEVICE_ADDRESS, &payload)
52
-
.map_err(Error::I2C)
52
+
self.i2c.write(DEVICE_ADDRESS, &payload).map_err(Error::I2C)
53
53
}
54
54
55
55
/// Set only the time, date remains unchanged.
···
62
62
encode_bcd(time.minute()),
63
63
encode_bcd(time.hour()),
64
64
];
65
-
self.i2c
66
-
.write(DEVICE_ADDRESS, &payload)
67
-
.map_err(Error::I2C)
65
+
self.i2c.write(DEVICE_ADDRESS, &payload).map_err(Error::I2C)
68
66
}
69
67
}
+3
-4
src/pcf85063a/mod.rs
+3
-4
src/pcf85063a/mod.rs