jms1989

pico script to toggle 8 relays with reset button

Aug 13th, 2023
256
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.21 KB | None | 0 0
  1. from machine import Pin
  2. import time
  3. # debounce and interrupts to avoid triggering things too fast
  4. debounce_time1=0
  5. debounce_time2=0
  6. debounce_time3=0
  7. debounce_time4=0
  8. debounce_time5=0
  9. debounce_time6=0
  10. debounce_time7=0
  11. debounce_time8=0
  12. interrupt_flag1=0
  13. interrupt_flag2=0
  14. interrupt_flag3=0
  15. interrupt_flag4=0
  16. interrupt_flag5=0
  17. interrupt_flag6=0
  18. interrupt_flag7=0
  19. interrupt_flag8=0
  20.  
  21. # inputs and outputs
  22. relay1 = Pin(7, Pin.OUT)
  23. relay2 = Pin(6, Pin.OUT)
  24. relay3 = Pin(5, Pin.OUT)
  25. relay4 = Pin(4, Pin.OUT)
  26. relay5 = Pin(3, Pin.OUT)
  27. relay6 = Pin(2, Pin.OUT)
  28. relay7 = Pin(1, Pin.OUT)
  29. relay8 = Pin(0, Pin.OUT)
  30. button1 = Pin(8, Pin.IN, Pin.PULL_UP)
  31. button2 = Pin(9, Pin.IN, Pin.PULL_UP)
  32. button3 = Pin(10, Pin.IN, Pin.PULL_UP)
  33. button4 = Pin(11, Pin.IN, Pin.PULL_UP)
  34. button5 = Pin(12, Pin.IN, Pin.PULL_UP)
  35. button6 = Pin(13, Pin.IN, Pin.PULL_UP)
  36. button7 = Pin(14, Pin.IN, Pin.PULL_UP)
  37. button8 = Pin(15, Pin.IN, Pin.PULL_UP)
  38. # things for the relay resets
  39. reset = Pin(16, Pin.IN, Pin.PULL_UP) # reset all outputs
  40. debounce_time_reset=0
  41. interrupt_flag_reset=0
  42.  
  43. # definitions to debounce the inputs
  44. def callback1(button1):
  45. global interrupt_flag1, debounce_time1
  46. if (time.ticks_ms()-debounce_time1) > 500:
  47. interrupt_flag1=1
  48. debounce_time1=time.ticks_ms()
  49. def callback2(button2):
  50. global interrupt_flag2, debounce_time2
  51. if (time.ticks_ms()-debounce_time2) > 500:
  52. interrupt_flag2=1
  53. debounce_time2=time.ticks_ms()
  54. def callback3(button3):
  55. global interrupt_flag3, debounce_time3
  56. if (time.ticks_ms()-debounce_time3) > 500:
  57. interrupt_flag3=1
  58. debounce_time3=time.ticks_ms()
  59. def callback4(button4):
  60. global interrupt_flag4, debounce_time4
  61. if (time.ticks_ms()-debounce_time4) > 500:
  62. interrupt_flag4=1
  63. debounce_time4=time.ticks_ms()
  64. def callback5(button5):
  65. global interrupt_flag5, debounce_time5
  66. if (time.ticks_ms()-debounce_time5) > 500:
  67. interrupt_flag5=1
  68. debounce_time5=time.ticks_ms()
  69. def callback6(button6):
  70. global interrupt_flag6, debounce_time6
  71. if (time.ticks_ms()-debounce_time6) > 500:
  72. interrupt_flag6=1
  73. debounce_time6=time.ticks_ms()
  74. def callback7(button7):
  75. global interrupt_flag7, debounce_time7
  76. if (time.ticks_ms()-debounce_time7) > 500:
  77. interrupt_flag7=1
  78. debounce_time7=time.ticks_ms()
  79. def callback8(button8):
  80. global interrupt_flag8, debounce_time8
  81. if (time.ticks_ms()-debounce_time8) > 500:
  82. interrupt_flag8=1
  83. debounce_time8=time.ticks_ms()
  84. def callback_reset(reset):
  85. global interrupt_flag_reset, debounce_time_reset
  86. if (time.ticks_ms()-debounce_time_reset) > 500:
  87. interrupt_flag_reset=1
  88. debounce_time_reset=time.ticks_ms()
  89.  
  90. # interrupts
  91. button1.irq(trigger=Pin.IRQ_RISING, handler=callback1)
  92. button2.irq(trigger=Pin.IRQ_RISING, handler=callback2)
  93. button3.irq(trigger=Pin.IRQ_RISING, handler=callback3)
  94. button4.irq(trigger=Pin.IRQ_RISING, handler=callback4)
  95. button5.irq(trigger=Pin.IRQ_RISING, handler=callback5)
  96. button6.irq(trigger=Pin.IRQ_RISING, handler=callback6)
  97. button7.irq(trigger=Pin.IRQ_RISING, handler=callback7)
  98. button8.irq(trigger=Pin.IRQ_RISING, handler=callback8)
  99. reset.irq(trigger=Pin.IRQ_RISING, handler=callback_reset)
  100.  
  101. # begin the main program
  102. while True:
  103. if interrupt_flag1 is 1:
  104. interrupt_flag1=0
  105. relay1.toggle()
  106. if interrupt_flag2 is 1:
  107. interrupt_flag2=0
  108. relay2.toggle()
  109. if interrupt_flag3 is 1:
  110. interrupt_flag3=0
  111. relay3.toggle()
  112. if interrupt_flag4 is 1:
  113. interrupt_flag4=0
  114. relay4.toggle()
  115. if interrupt_flag5 is 1:
  116. interrupt_flag5=0
  117. relay5.toggle()
  118. if interrupt_flag6 is 1:
  119. interrupt_flag6=0
  120. relay6.toggle()
  121. if interrupt_flag7 is 1:
  122. interrupt_flag7=0
  123. relay7.toggle()
  124. if interrupt_flag8 is 1:
  125. interrupt_flag8=0
  126. relay8.toggle()
  127.  
  128. if interrupt_flag_reset is 1: #reset outputs
  129. interrupt_flag_reset=0
  130. relay1.value(0)
  131. relay2.value(0)
  132. relay3.value(0)
  133. relay4.value(0)
  134. relay5.value(0)
  135. relay6.value(0)
  136. relay7.value(0)
  137. relay8.value(0)
Advertisement
Add Comment
Please, Sign In to add comment