(defvar *rtc-port* 0) (defun rtc-set (hr min) "(rtc-set hr min) Set the time on a DS3231 RTC. Times are in BCD, so use the appropriate reader macro, e.g. (rtc-set #x12 #x34) for 12:34. Assumes seconds are zero." (with-i2c (str *rtc-port* #x68) (write-byte 0 str) (write-byte 0 str) (write-byte min str) (write-byte hr str))) (defun bcd-to-dec (x) "(bcd-to-dec x) Convert the BCD-encoded number x to a decimal value." (+ (* 10 (ash x -4)) (logand x #xf))) (defun dec-to-bcd (x) "(dec-to-bcd x) Converts the decimal value to a BCD-encoded number. Number must be in the range 0 to 99.") (defun rtc-get () (with-i2c (str *rtc-port* #x68) (write-byte 0 str) (restart-i2c str 3) (mapcar bcd-to-dec (reverse (list (read-byte str) (read-byte str) (read-byte str)))))) (defun rtc-now () "(rtc-now) Set the time using the RTC." (apply now (rtc-get))) (defun now-rtc ()