Advertisement
Guest User

ds3231_alarm.py

a guest
Aug 14th, 2022
287
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.20 KB | None | 0 0
  1. # ds3231 alarn
  2. # Alarm test using a modify version of Peter Hinch ds3231 RTC library
  3. # Author: Daniel Perron
  4. # date: August 14, 2022
  5. # Copyright Daniel Perron Released under the MIT license
  6.  
  7. import sys
  8. from machine import Pin, I2C
  9. import utime
  10. from ds3231_port import DS3231
  11.  
  12. #utime index dictionary
  13. time_idx={'year':0,'month':1,'mday':2,'hour':3,
  14. 'minute':4,'second':5,'weekday':6,'yearday':7}
  15.  
  16. # set I2C
  17. scl_pin = Pin(17, pull=Pin.PULL_UP, mode=Pin.OPEN_DRAIN)
  18. sda_pin = Pin(16, pull=Pin.PULL_UP, mode=Pin.OPEN_DRAIN)
  19. i2c = I2C(0, scl=scl_pin, sda=sda_pin)
  20.  
  21. #set input pin to read ds3131 interrupt
  22. ds3231_int_pin = Pin(14,pull=Pin.PULL_UP, mode=Pin.IN)
  23.  
  24. # create ds3231 object
  25. ds3231 = DS3231(i2c)
  26.  
  27. #disable alarm
  28. ds3231.enable_alarm(1,False)
  29. ds3231.enable_alarm(2,False)
  30.  
  31.  
  32. #get ds3231 time and set rtc
  33.  
  34.  
  35. # print RTC time (RTC was set)
  36. print('DS3231 time:', ds3231.get_time(set_rtc=True))
  37. print('RTC time: ', utime.localtime())
  38. print('')
  39. print('')
  40.  
  41. # set alarm1 for 10 second
  42. now = utime.localtime()
  43. alarm1 = utime.localtime(utime.mktime(now)+5)
  44. print("set alarm1 for 5 sec")
  45. ds3231.set_alarm(alarm_id=1,alarm_time=alarm1,match=ds3231.ALARM_HMS_MATCH)
  46. print("now ",now)
  47. print("target",alarm1)
  48. print("======== step 1 sec")
  49.  
  50. while True:
  51. print(utime.localtime())
  52. if ds3231_int_pin.value()==0:
  53. break
  54. utime.sleep(1)
  55.  
  56. print("done")
  57. print("========")
  58. #disable alarm1
  59. ds3231.enable_alarm(1,False)
  60. print('')
  61. print("set alarm2 for next min start")
  62. # wait to get at least 2 seconds ti prevent false int
  63. while True:
  64. now = utime.localtime()
  65. alarm2 = utime.localtime(utime.mktime(now)+60)
  66. #reset second
  67. alarm2 = (alarm2[0], alarm2[1], alarm2[2], alarm2[3], alarm2[4], 0 , alarm2[6], alarm2[7])
  68. if (utime.mktime(alarm2) - utime.mktime(now)) > 2:
  69. break;
  70.  
  71. #alarm2 doesnt have second
  72. ds3231.set_alarm(alarm_id=2,alarm_time=alarm2)
  73. print("now ",now)
  74. print("target",alarm2)
  75. print("======== step 5 sec")
  76. while True:
  77. if (utime.localtime()[5]%5) == 0:
  78. print(utime.localtime())
  79. if ds3231_int_pin.value()==0:
  80. break
  81. utime.sleep(1)
  82. print("done")
  83. print("========")
  84. ds3231.enable_alarm(2,False)
  85.  
  86.  
  87.  
  88.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement