stepper-clock/main.py
2020-03-19 17:35:20 +01:00

87 lines
2.5 KiB
Python

import time
import machine
import DS3231
import Button
import uasyncio as asyncio
import StepperL298M
import StepperClock
import neopixel
#Async
loop = asyncio.get_event_loop()
#Initialise the time module with the RTC
try:
dsRtc = DS3231.DS3231(machine.I2C(sda = machine.Pin(17), scl=machine.Pin(18)))
rtc = machine.RTC()
rtc.init(dsRtc.DateTime()+[0])
except:
print("Error on DS3231-Inititalisation")
housingLEDs = neopixel.NeoPixel(machine.Pin(16, machine.Pin.OUT),5)
housingLEDs.fill((0,0,0))
housingLEDs.write()
Buzzer = machine.PWM(machine.Pin(2), freq=10000, duty=0)
#Initalise the Motors
stepDurationMs = 8
stepperminu = StepperL298M.Stepper([19,21,22,23],inverted=False,stepDurationMs=stepDurationMs)
stepperhour = StepperL298M.Stepper([12,27,26,25],inverted=True, stepDurationMs=stepDurationMs)
leftButtonLED = machine.Pin(32,machine.Pin.OUT)
middleButtonLED = machine.Pin(33,machine.Pin.OUT)
rightButtonLED = machine.Pin(13,machine.Pin.OUT)
clock = StepperClock.StepperClock(stepperhour,stepperminu)
def leftButtonClickDown():
leftButtonLED.on()
def leftButtonClickUp():
leftButtonLED.off()
def leftButtonClick():
if(clock.isRunning()):
stepperminu.stepnum = (stepperminu.stepnum+8)%stepperminu.stepsPerRev
else:
stepperminu.rotateTo(stepperminu.getOrientation()+0.25)
leftButton = Button.Button(pin=36,onPushDown=leftButtonClickDown,onPushUp=leftButtonClickUp,onClick=leftButtonClick,inverted=True)
def rightButtonClickDown():
rightButtonLED.on()
def rightButtonClickUp():
rightButtonLED.off()
def rightButtonClick():
if(clock.isRunning()):
stepperminu.stepnum = (stepperminu.stepnum+8)%stepperminu.stepsPerRev
else:
stepperminu.rotateTo(stepperminu.getOrientation()-0.25)
rightButton = Button.Button(pin=34,onPushDown=rightButtonClickDown,onPushUp=rightButtonClickUp,onClick=rightButtonClick,inverted=True)
def middleButtonClickDown():
pass
def middleButtonClickUp():
pass
def middleButtonClick():
middleButtonLED.value(not middleButtonLED.value())
if middleButtonLED.value():
clock.stop()
stepperminu.rotateTo(0)
stepperhour.rotateTo(0)
housingLEDs.fill((255,0,255))
housingLEDs.write()
else:
clock.start()
housingLEDs.fill((0,0,0))
housingLEDs.write()
middleButton = Button.Button(pin=39,onPushDown=middleButtonClickDown,onPushUp=middleButtonClickUp,onClick=middleButtonClick,inverted=True)
clock.start()
loop.run_forever()