diff --git a/HousingLEDs.py b/HousingLEDs.py index e6e8904..e4e2b99 100644 --- a/HousingLEDs.py +++ b/HousingLEDs.py @@ -4,6 +4,7 @@ import neopixel WHITE = (140,70,255) YELLOW = (127,0,255) +BLUE = (0,255,0) class LEDs(): def __init__(self, pin): diff --git a/Screens.py b/Screens.py index a199496..7f5b49e 100644 --- a/Screens.py +++ b/Screens.py @@ -60,7 +60,7 @@ class InitHandsScreen(): HW.stepperminu.rotateTo(0) HW.stepperhour.rotateTo(0) HW.housingLEDs.upper((50,50,50)) - timeScreen = GetTimeScreen(\ + timeScreen = Get2PositionsScreen(\ startTime=(0,0),\ onStart=lambda _: HW.buzzer.playSound(HW.Buzzer.BEEP),\ onSelectedTimeChange=None,\ @@ -199,7 +199,7 @@ class GetNumberScreen(): for b in HW.buttons: b.setCallbacks()#Clear Callbacks -class GetTimeScreen(): +class Get2PositionsScreen(): def __init__(self,startTime = (0,0),onStart=None,onSelectedTimeChange = None,onPicked = None): self.onStart = onStart self.onSelectedTimeChange = onSelectedTimeChange @@ -261,23 +261,24 @@ class GetTimeScreen(): # TODO This is probably not save as its super unstable around the hour-increments minutes = (60-HW.stepperminu.getOrientation()*60) hours = (12-HW.stepperminu.getOrientation()*12) + self.pickedTime = (hours,minutes) self.onSelectedTimeChange(self.pickedTime) - -# TODO -class GetTimeOnePressScreen(): +class GetTimeScreen(): def __init__(self,startTime = (0,0),onStart=None,onSelectedTimeChange = None,onPicked = None): self.onStart = onStart self.onSelectedTimeChange = onSelectedTimeChange self.onPicked = onPicked self.running = False - self.pickedTime = startTime - + self.pickedTime = (startTime[0]*60 + startTime[1])%(24*60) + self.AM = (self.pickedTime < 12*60) + self.direction = 0 + def calcTupleTime(self): + return (int(self.pickedTime/60),self.pickedTime%60) def __await__(self): self.running = True - HW.stepperminu.rotateTo(-(self.pickedTime[1])/12) - HW.stepperhour.rotateTo(-(self.pickedTime[0])/12) HW.leds[1].flash(1) + HW.housingLEDs.upper(HW.HousingLEDs.BLUE if self.AM else HW.HousingLEDs.YELLOW) for number,button in enumerate(HW.buttons): button.setCallbacks(\ onPushDown=lambda i=number:self.onButtonPressed(i),\ @@ -286,11 +287,19 @@ class GetTimeOnePressScreen(): while not HW.stepperhour.isAtTarget() or not HW.stepperminu.isAtTarget(): await asyncio.sleep_ms(200) if self.onStart: - self.onStart(self.pickedTime) + self.onStart(self.calcTupleTime()) while self.running: - await asyncio.sleep_ms(200) + HW.stepperminu.rotateTo(-(self.pickedTime/60)) + HW.stepperhour.rotateTo(-(self.pickedTime/60/12)) + # Color the Top LED to indikate AM or PM + self.AM = (self.pickedTime < 12*60) + HW.housingLEDs.upper(HW.HousingLEDs.BLUE if self.AM else HW.HousingLEDs.YELLOW) + await asyncio.sleep_ms(100) + self.pickedTime = (self.pickedTime+self.direction)%(24*60) + if self.onSelectedTimeChange: + self.onSelectedTimeChange(self.calcTupleTime()) if self.onPicked: - self.onPicked(self.pickedTime) + self.onPicked(self.calcTupleTime()) __iter__ = __await__ # https://github.com/micropython/micropython/issues/2678 def finish(self): @@ -305,24 +314,12 @@ class GetTimeOnePressScreen(): HW.leds[button].on(overwriteFlashing=False) else: HW.leds[button].on() - if self.mode == 0: - HW.stepperminu.rotateTo(direction=(1 if button == 0 else -1)) - elif self.mode == 1: - HW.stepperhour.rotateTo(direction=(1 if button == 0 else -1)) + self.direction = (-1 if button == 0 else 1) def onButtonReleased(self,button,time): HW.leds[button].off(overwriteFlashing=(button!=1)) if button == 1: - self.mode=(1+self.mode )% 2 if time > 700: self.finish() else: - if self.mode == 0: - HW.stepperminu.stop() - else: - HW.stepperhour.stop() - if self.onSelectedTimeChange: - # TODO This is probably not save as its super unstable around the hour-increments - minutes = (60-HW.stepperminu.getOrientation()*60) - hours = (12-HW.stepperminu.getOrientation()*12) - self.onSelectedTimeChange(self.pickedTime) \ No newline at end of file + self.direction = 0 \ No newline at end of file