этот пост может показаться дублирующимся как часы Windows IoT и DS3231 RTC , но это не так. Кажется, это работает для меня. у меня нет опыта использования i2c в этой среде.
Моя предполагаемая функциональность,
- при запуске проверьте, есть ли сетевое подключение для обновления системных часов
- в автономном режиме система будет читать
datetime
изDS3231
и обновлять системуdatetime
- любые изменения
datetime
сdatepicker
илиtimepicker
будут обновленыDS3231
моя проблема
- Как проверить доступность сети для обновления системных часов.
для чтения из
DS3231
с помощьюi1cdevice.writeread
требуетсяwrite
read address
отдельно?i2c
автоматически считывает все данные до тех пор, пока не будет полученstop
бит, или мне нужно настроить счетчик?private const byte DS3231_I2C_WADDR = 0xD0; private const byte DS3231_I2C_RADDR = 0xD1; private I2cDevice DS3231_RTC; byte[] i2CWriteBuffer; byte[] i2CReadBuffer; private async void Read_DS3231_RTC() { var settings = new I2cConnectionSettings(DS3231_I2C_RADDR); settings.BusSpeed = I2cBusSpeed.StandardMode; var controller = await I2cController.GetDefaultAsync(); DS3231_RTC = controller.GetDevice(settings); try { DS3231_RTC.WriteRead(new byte[] { DS3231_I2C_RADDR }, i2CReadBuffer); } catch (Exception e) { StatusMessage.Text = "Fail to Init I2C:" + e.Message; return; } }
для записи в
DS3231
естьdateicker
иtimepicker
для настройки времени при установкеdatetime
как я могу обновить доDS3231
private void DatePicker_DateChanged(object sender, DatePickerValueChangedEventArgs e) { DateTimeSettings.SetSystemDateTime(e.NewDate.UtcDateTime); SetTime_DS3231(); } private void TimePicker_TimeChanged(object sender, TimePickerValueChangedEventArgs e) { var currentDate = DateTime.Now.ToUniversalTime(); var newDateTime = new DateTime(currentDate.Year, currentDate.Month, currentDate.Day, e.NewTime.Hours, e.NewTime.Minutes, e.NewTime.Seconds); DateTimeSettings.SetSystemDateTime(newDateTime); }
Спасибо.