abstracted Numberpicker
This commit is contained in:
		
							parent
							
								
									ed30bf42d9
								
							
						
					
					
						commit
						d5be06edcd
					
				
							
								
								
									
										12
									
								
								Buzzer.py
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								Buzzer.py
									
									
									
									
									
								
							| @ -24,13 +24,13 @@ ALARMTONES = (((300,1200),(100,None),(200,1200),(300,None),(None,10)), | |||||||
|         ((400,c),(100,None),(400,d),(100,None),(400,e),(100,None),(400,f),(100,None),\ |         ((400,c),(100,None),(400,d),(100,None),(400,e),(100,None),(400,f),(100,None),\ | ||||||
|         (900,g),(100,None),(900,g),(100,None),(400,a),(100,None),(400,a),(100,None),\ |         (900,g),(100,None),(900,g),(100,None),(400,a),(100,None),(400,a),(100,None),\ | ||||||
|         (400,a),(100,None),(400,a),(100,None),(1900,g),(100,None),(400,a),(100,None),\ |         (400,a),(100,None),(400,a),(100,None),(1900,g),(100,None),(400,a),(100,None),\ | ||||||
|         (400,a),(100,None),(400,a),(100,None),(400,a),(100,None),(1900,g),(100,None),\ |         (400,a),(100,None),(400,a),(100,None),(400,a),(100,None),(1600,g),(100,None),\ | ||||||
|         (400,f),(100,None),(400,f),(100,None),(400,f),(100,None),(400,f),(100,None),\ |         (400,f),(100,None),(400,f),(100,None),(400,f),(100,None),(400,f),(100,None),\ | ||||||
|         (900,e),(100,None),(900,e),(100,None),(400,d),(100,None),(400,d),(100,None),\ |         (900,e),(100,None),(900,e),(100,None),(400,d),(100,None),(400,d),(100,None),\ | ||||||
|         (400,d),(100,None),(400,d),(100,None),(2000,c)),) |         (400,d),(100,None),(400,d),(100,None),(1600,c)),) | ||||||
| 
 | 
 | ||||||
| class Buzzer(): | class Buzzer(): | ||||||
|     def __init__(self,pin,duty = 100): |     def __init__(self,pin,duty = 1000): | ||||||
|         self._pwm = machine.PWM(machine.Pin(2), freq=0, duty=0) |         self._pwm = machine.PWM(machine.Pin(2), freq=0, duty=0) | ||||||
|         self.sound = None |         self.sound = None | ||||||
|         self.duty = duty |         self.duty = duty | ||||||
| @ -46,7 +46,7 @@ class Buzzer(): | |||||||
|             else: |             else: | ||||||
|                 self.newSound = False |                 self.newSound = False | ||||||
|                 timesPlayed = 0 |                 timesPlayed = 0 | ||||||
|                 print("Play sound!") |                 #print("Play sound!") | ||||||
|                 for i in range(len(self.sound)): |                 for i in range(len(self.sound)): | ||||||
|                     s = self.sound[i] |                     s = self.sound[i] | ||||||
|                     if s[0] == None: |                     if s[0] == None: | ||||||
| @ -56,8 +56,8 @@ class Buzzer(): | |||||||
|                             i = 0 |                             i = 0 | ||||||
|                             timesPlayed += 1 |                             timesPlayed += 1 | ||||||
|                     if (s[1] != None): |                     if (s[1] != None): | ||||||
|                         #self._pwm.freq(s[1]) |                         self._pwm.freq(s[1]) | ||||||
|                         #self._pwm.duty(self.duty) |                         self._pwm.duty(self.duty) | ||||||
|                         pass |                         pass | ||||||
|                     else:  |                     else:  | ||||||
|                         self._pwm.duty(0) |                         self._pwm.duty(0) | ||||||
|  | |||||||
| @ -5,7 +5,7 @@ import StepperL298M | |||||||
| import HousingLEDs | import HousingLEDs | ||||||
| import LED | import LED | ||||||
| import Button | import Button | ||||||
| 
 | import HousingCapButton | ||||||
| 
 | 
 | ||||||
| #Initialise the time module with the RTC | #Initialise the time module with the RTC | ||||||
| try: | try: | ||||||
| @ -34,6 +34,7 @@ leftButton = Button.Button(pin=34,inverted=True) | |||||||
| middleButton = Button.Button(pin=39,inverted=True) | middleButton = Button.Button(pin=39,inverted=True) | ||||||
| rightButton = Button.Button(pin=36,inverted=True) | rightButton = Button.Button(pin=36,inverted=True) | ||||||
| 
 | 
 | ||||||
|  | housingButton = HousingCapButton.HousingCapButton(pin=15) | ||||||
| 
 | 
 | ||||||
| buttons = (leftButton,middleButton,rightButton) | buttons = (leftButton,middleButton,rightButton) | ||||||
| leds = (leftButtonLED,middleButtonLED,rightButtonLED) | leds = (leftButtonLED,middleButtonLED,rightButtonLED) | ||||||
							
								
								
									
										23
									
								
								HousingCapButton.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								HousingCapButton.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,23 @@ | |||||||
|  | import uasyncio as asyncio | ||||||
|  | import machine | ||||||
|  | import Hardware as HW | ||||||
|  | 
 | ||||||
|  | class HousingCapButton(): | ||||||
|  |     def __init__(self, pin): | ||||||
|  |         self.tp = machine.TouchPad(machine.Pin(15)) | ||||||
|  |         reading = self.tp.read() | ||||||
|  |         self.value_avrg = [reading]*3 | ||||||
|  |         self.value_avrg2 = [reading]*4 | ||||||
|  |         loop = asyncio.get_event_loop() | ||||||
|  |         #loop.create_task(self._update_async()) | ||||||
|  | 
 | ||||||
|  |     async def _update_async(self): | ||||||
|  |         while True: | ||||||
|  |             await asyncio.sleep_ms(100) | ||||||
|  |             reading = self.tp.read() | ||||||
|  |             self.value_avrg = [reading*(10**-i) + (1-(10**-i))*v for i,v in enumerate(self.value_avrg)] | ||||||
|  |             #self.value_avrg2 = [max(v,max(self.value_avrg[1:i])) for i,v in enumerate(self.value_avrg[1:])] | ||||||
|  |             print("\t".join([str(v) for v in self.value_avrg])) | ||||||
|  |             if self.value_avrg[1] <= 80: #and not HW.buzzer.isPlaying() | ||||||
|  |                 HW.buzzer.playSound(HW.Buzzer.BEEP) | ||||||
|  | 
 | ||||||
| @ -2,6 +2,9 @@ import uasyncio as asyncio | |||||||
| import machine | import machine | ||||||
| import neopixel | import neopixel | ||||||
| 
 | 
 | ||||||
|  | WHITE = (140,70,255) | ||||||
|  | YELLOW = (127,0,255) | ||||||
|  | 
 | ||||||
| class LEDs(): | class LEDs(): | ||||||
|     def __init__(self, pin): |     def __init__(self, pin): | ||||||
|         self.neop = neopixel.NeoPixel(machine.Pin(pin, machine.Pin.OUT),5) |         self.neop = neopixel.NeoPixel(machine.Pin(pin, machine.Pin.OUT),5) | ||||||
| @ -26,7 +29,26 @@ class LEDs(): | |||||||
|     def clear(self): |     def clear(self): | ||||||
|         self.fill((0,0,0)) |         self.fill((0,0,0)) | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
|  |     def lower(self,color): | ||||||
|  |         self.neop[1] = color | ||||||
|  |         self.neop.write() | ||||||
|  | 
 | ||||||
|  |     def right(self,color): | ||||||
|  |         self.neop[2] = color | ||||||
|  |         self.neop.write() | ||||||
|  | 
 | ||||||
|     def upper(self,color): |     def upper(self,color): | ||||||
|         self.neop[3] = color |         self.neop[3] = color | ||||||
|         self.neop.write() |         self.neop.write() | ||||||
| 
 | 
 | ||||||
|  |     def left(self,color): | ||||||
|  |         self.neop[4] = color | ||||||
|  |         self.neop.write() | ||||||
|  | 
 | ||||||
|  |     def set(self,colors): | ||||||
|  |         self.neop[0] = (0,0,0) | ||||||
|  |         for i,c in enumerate(colors): | ||||||
|  |             self.neop[i+1] = c | ||||||
|  |         self.neop.write() | ||||||
|  | 
 | ||||||
|  | |||||||
							
								
								
									
										334
									
								
								Screens.py
									
									
									
									
									
								
							
							
						
						
									
										334
									
								
								Screens.py
									
									
									
									
									
								
							| @ -3,64 +3,8 @@ import uasyncio as asyncio | |||||||
| import Buzzer | import Buzzer | ||||||
| import Settings | import Settings | ||||||
| import Hardware as HW | import Hardware as HW | ||||||
| 
 | import math | ||||||
| class InitHandsScreen():  | import network | ||||||
|     def __await__(self): |  | ||||||
|         self.running = True |  | ||||||
|         self.mode=0 # 0: Minutes, 1: Hours |  | ||||||
|         HW.housingLEDs.fill((0,0,0)) |  | ||||||
|         HW.stepperminu.rotateTo(0) |  | ||||||
|         HW.stepperhour.rotateTo(0) |  | ||||||
|         HW.leds[1].flash(0.7) |  | ||||||
|         for number,button in enumerate(HW.buttons): |  | ||||||
|             button.setCallbacks(\ |  | ||||||
|                 onPushDown=lambda i=number:self.onButtonPressed(i),\ |  | ||||||
|                 onPushUp=lambda pushDownTime,button=number:self.onButtonReleased(button,pushDownTime)) |  | ||||||
|         # Wait for the Hands to move up |  | ||||||
|         while not HW.stepperhour.isAtTarget() or not HW.stepperminu.isAtTarget(): |  | ||||||
|             await asyncio.sleep_ms(200) |  | ||||||
|         HW.housingLEDs.upper((50,50,50)) |  | ||||||
| 
 |  | ||||||
|         while self.running: |  | ||||||
|             await asyncio.sleep_ms(200) |  | ||||||
|         HW.housingLEDs.fill((0,0,0)) |  | ||||||
|         self.cleanup() |  | ||||||
| 
 |  | ||||||
|     __iter__ = __await__  # https://github.com/micropython/micropython/issues/2678 |  | ||||||
|     def finish(self): |  | ||||||
|         self.running = False |  | ||||||
|         for b in HW.buttons: |  | ||||||
|             b.setCallbacks()#Clear Callbacks |  | ||||||
|         for l in HW.leds: |  | ||||||
|             l.off() |  | ||||||
|     def __init__(self): |  | ||||||
|         self.running = False |  | ||||||
| 
 |  | ||||||
|     def onButtonPressed(self,button): |  | ||||||
|         if button == 1: |  | ||||||
|             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)) |  | ||||||
|              |  | ||||||
|     def onButtonReleased(self,button,time): |  | ||||||
|         HW.leds[button].off(overwriteFlashing=(button!=1)) |  | ||||||
|         if button == 1: |  | ||||||
|             self.mode+=1 |  | ||||||
|             if self.mode == 2: |  | ||||||
|                 self.finish() |  | ||||||
|         else: |  | ||||||
|             if self.mode == 0: |  | ||||||
|                 HW.stepperminu.stop() |  | ||||||
|             else: |  | ||||||
|                 HW.stepperhour.stop() |  | ||||||
| 
 |  | ||||||
|     def cleanup(self): |  | ||||||
|         HW.stepperhour.reset() # Set the new Zero |  | ||||||
|         HW.stepperminu.reset() |  | ||||||
| 
 | 
 | ||||||
| class ClockScreen(): | class ClockScreen(): | ||||||
|     def __await__(self): |     def __await__(self): | ||||||
| @ -81,7 +25,7 @@ class ClockScreen(): | |||||||
|         self.light = False |         self.light = False | ||||||
|         self.clock = StepperClock.StepperClock() |         self.clock = StepperClock.StepperClock() | ||||||
|      |      | ||||||
|     COLORS     = ((255,0,0),(255,0,127),(127,0,255),(0,0,255),(0,127,255),(0,255,127),(0,255,0),(127,255,0),(255,127,0)) |     COLORS     = ((255,0,0),(255,0,127),(127,0,255),(0,0,255),(0,127,255),(140,70,255),(0,255,127),(0,255,0),(127,255,0),(255,127,0)) | ||||||
|     BRIGHTNESS = (5,10,50,100,160,255) |     BRIGHTNESS = (5,10,50,100,160,255) | ||||||
|      |      | ||||||
|     def onButtonPressed(self,button): |     def onButtonPressed(self,button): | ||||||
| @ -93,7 +37,7 @@ class ClockScreen(): | |||||||
|         if button == 0: |         if button == 0: | ||||||
|             Settings.selectedBrightness=(Settings.selectedBrightness+1)%len(ClockScreen.BRIGHTNESS) |             Settings.selectedBrightness=(Settings.selectedBrightness+1)%len(ClockScreen.BRIGHTNESS) | ||||||
|         elif button == 1: |         elif button == 1: | ||||||
|             if pushDownTime > 1100: |             if pushDownTime > 700: | ||||||
|                 self.finish() |                 self.finish() | ||||||
|                 return |                 return | ||||||
|             self.light = not self.light |             self.light = not self.light | ||||||
| @ -111,48 +55,274 @@ class ClockScreen(): | |||||||
|     def cleanup(self): |     def cleanup(self): | ||||||
|         self.clock.stop() |         self.clock.stop() | ||||||
| 
 | 
 | ||||||
|  | class InitHandsScreen():         | ||||||
|  |     def __iter__(self): | ||||||
|  |         HW.stepperminu.rotateTo(0) | ||||||
|  |         HW.stepperhour.rotateTo(0) | ||||||
|  |         HW.housingLEDs.upper((50,50,50)) | ||||||
|  |         timeScreen = GetTimeScreen(\ | ||||||
|  |             startTime=(0,0),\ | ||||||
|  |             onStart=lambda _: HW.buzzer.playSound(HW.Buzzer.BEEP),\ | ||||||
|  |             onSelectedTimeChange=None,\ | ||||||
|  |             onPicked=lambda _: Settings.save()) | ||||||
|  |         await timeScreen | ||||||
|  |         HW.stepperhour.reset() # Set the new Zero | ||||||
|  |         HW.stepperminu.reset() | ||||||
|  |         HW.housingLEDs.fill((0,0,0)) | ||||||
|  | 
 | ||||||
|  | class SetAlarmTimeScreen(): | ||||||
|  |     def setAlarmTime(self,selectedTime): | ||||||
|  |         Settings.alarmTime = selectedTime | ||||||
|  |     def __iter__(self): | ||||||
|  |         HW.housingLEDs.fill((255,0,0)) | ||||||
|  |         timeScreen = GetTimeScreen(\ | ||||||
|  |             startTime=Settings.alarmTime,\ | ||||||
|  |             onStart=lambda _: HW.buzzer.playSound(HW.Buzzer.BEEP),\ | ||||||
|  |             onSelectedTimeChange=self.setAlarmTime,\ | ||||||
|  |             onPicked=lambda _: Settings.save()) | ||||||
|  |         await timeScreen | ||||||
|  |         HW.housingLEDs.fill((0,0,0)) | ||||||
|  | 
 | ||||||
| class RingtoneSettingsScreen():   | class RingtoneSettingsScreen():   | ||||||
|  |     def playAndSetSound(self,number): | ||||||
|  |         Settings.selectedSound = number | ||||||
|  |         HW.buzzer.playSound(HW.Buzzer.ALARMTONES[number]) | ||||||
|  |     def __iter__(self): | ||||||
|  |         numberScreen = GetNumberScreen([i for i in range(len(HW.Buzzer.ALARMTONES))],\ | ||||||
|  |             startNumber=Settings.selectedSound,\ | ||||||
|  |             onStart=self.playAndSetSound,\ | ||||||
|  |             onNumberChange=self.playAndSetSound,\ | ||||||
|  |             onPicked=lambda _:Settings.save()) | ||||||
|  |         await numberScreen | ||||||
|  | 
 | ||||||
|  | class ShowIpScreen(): | ||||||
|  |     def __init__(self): | ||||||
|  |         self.IP = "0" | ||||||
|  |     async def beepAndWaitIP(self,digitShown): | ||||||
|  |         HW.housingLEDs.fill(HW.HousingLEDs.WHITE) | ||||||
|  |         ipdigit = digitShown+self.IP[:digitShown].count(".") | ||||||
|  |         if (ipdigit >= len(self.IP) or self.IP[ipdigit] == "."): | ||||||
|  |             HW.buzzer.playSound(HW.Buzzer.BEEPBEEP) | ||||||
|  |             await asyncio.sleep_ms(1800) | ||||||
|  |         else: | ||||||
|  |             HW.buzzer.playSound(HW.Buzzer.BEEP) | ||||||
|  |             await asyncio.sleep_ms(1100) | ||||||
|  |         HW.housingLEDs.fill((0,0,0)) | ||||||
|  |     def __iter__(self): | ||||||
|  |         sta_if = network.WLAN(network.STA_IF) | ||||||
|  |         if sta_if.status() != network.STAT_GOT_IP: | ||||||
|  |             HW.housingLEDs.fill((255,0,0)) | ||||||
|  |             HW.buzzer.playSound(HW.Buzzer.BEEP) | ||||||
|  |             await asyncio.sleep_ms(1000) | ||||||
|  |         else: | ||||||
|  |             self.IP = sta_if.ifconfig()[0] | ||||||
|  |             showNumberScreen = ShowNumberScreen(number=[int(i) for i in self.IP.replace(".","")],onDigitShown=self.beepAndWaitIP) | ||||||
|  |             await showNumberScreen | ||||||
|  |         HW.housingLEDs.fill((0,0,0)) | ||||||
|  | 
 | ||||||
|  | class ShowNumberScreen(): | ||||||
|  |     def __init__(self,number,onDigitShown): | ||||||
|  |         self.number = number | ||||||
|  |         self.digit_shown = 0 | ||||||
|  |         self.onDigitShown = onDigitShown | ||||||
|  |         self.running = False | ||||||
|  |     def onButtonReleased(self,pushDownTime): | ||||||
|  |         HW.leds[1].off() | ||||||
|  |         if pushDownTime > 700: | ||||||
|  |             self.running = False | ||||||
|  |     def __await__(self): | ||||||
|  |         self.running = True | ||||||
|  |         HW.buttons[1].setCallbacks(onPushUp=self.onButtonReleased,onPushDown=lambda :HW.leds[1].on()) | ||||||
|  |         HW.stepperminu.rotateTo(0) | ||||||
|  |         HW.stepperhour.rotateTo(0) | ||||||
|  |         self.digit_shown = 0 | ||||||
|  |         await self.onDigitShown(self.digit_shown) | ||||||
|  |         while self.digit_shown < len(self.number): | ||||||
|  |             HW.stepperminu.rotateTo(-((self.number[self.digit_shown]%10)/12)) | ||||||
|  |             while self.running and (not HW.stepperminu.isAtTarget() or not HW.stepperhour.isAtTarget()): | ||||||
|  |                 await asyncio.sleep_ms(200) | ||||||
|  |             if not self.running: | ||||||
|  |                 return | ||||||
|  |             self.digit_shown=self.digit_shown+1 | ||||||
|  |             await self.onDigitShown(self.digit_shown) | ||||||
|  |         HW.buttons[1].setCallbacks() | ||||||
|  |     __iter__ = __await__  # https://github.com/micropython/micropython/issues/2678 | ||||||
|  | 
 | ||||||
|  | class GetNumberScreen():  | ||||||
|  |     def __init__(self,acceptedInputNumbers,startNumber = None,onStart=None,onNumberChange = None,onPicked = None): | ||||||
|  |         self.acceptedInputNumbers = acceptedInputNumbers | ||||||
|  |         self.onStart = onStart | ||||||
|  |         self.onNumberChange = onNumberChange | ||||||
|  |         self.onPicked = onPicked | ||||||
|  |         self.running = False | ||||||
|  |         if startNumber: | ||||||
|  |             self.number = startNumber | ||||||
|  |         else: | ||||||
|  |             self.number = acceptedInputNumbers[0] | ||||||
|  | 
 | ||||||
|     def __await__(self): |     def __await__(self): | ||||||
|         self.running = True |         self.running = True | ||||||
|         for i,b in enumerate(HW.buttons): |         for i,b in enumerate(HW.buttons): | ||||||
|             b.setCallbacks(onPushDown=lambda i=i:self.onButtonPressed(i),onPushUp=lambda pushDownTime,button=i:self.onButtonReleased(button,pushDownTime)) |             b.setCallbacks(onPushDown=lambda i=i:self.onButtonPressed(i),onPushUp=lambda pushDownTime,button=i:self.onButtonReleased(button,pushDownTime)) | ||||||
|         # Turn LEDs Red and play the selected Sound and turn the minute-hand to the selected sound |         HW.stepperminu.rotateTo(-(self.number/12)) | ||||||
|         HW.housingLEDs.fill((200,0,0)) |  | ||||||
|         HW.buzzer.playSound(HW.Buzzer.ALARMTONES[Settings.selectedSound]) |  | ||||||
|         HW.stepperminu.rotateTo(-Settings.selectedSound/12) |  | ||||||
|         HW.stepperhour.rotateTo(0) |         HW.stepperhour.rotateTo(0) | ||||||
|         while not HW.stepperhour.isAtTarget() or not HW.stepperminu.isAtTarget(): |         while not HW.stepperhour.isAtTarget() or not HW.stepperminu.isAtTarget(): | ||||||
|             await asyncio.sleep_ms(200) |             await asyncio.sleep_ms(200) | ||||||
|  |         if self.onStart: | ||||||
|  |             self.onStart(self.number) | ||||||
|         while self.running: |         while self.running: | ||||||
|             await asyncio.sleep_ms(200) |             await asyncio.sleep_ms(200) | ||||||
|         HW.housingLEDs.fill((0,0,0)) |         if self.onPicked: | ||||||
|         self.cleanup() |             self.onPicked(self.number) | ||||||
|  |         return self.number | ||||||
|     __iter__ = __await__  # https://github.com/micropython/micropython/issues/2678 |     __iter__ = __await__  # https://github.com/micropython/micropython/issues/2678 | ||||||
|     def __init__(self): |  | ||||||
|         self.running = False |  | ||||||
|     def finish(self): |  | ||||||
|         self.running = False |  | ||||||
|         for b in HW.buttons: |  | ||||||
|             b.setCallbacks()#Clear Callbacks |  | ||||||
| 
 |  | ||||||
| 
 | 
 | ||||||
|     def onButtonPressed(self,button): |     def onButtonPressed(self,button): | ||||||
|         HW.leds[button].on() |         HW.leds[button].on() | ||||||
| 
 | 
 | ||||||
|     def onButtonReleased(self,button,pushDownTime): |     def onButtonReleased(self,button,pushDownTime): | ||||||
|         print("Ring Select push down",pushDownTime) |         print("NumberSel push down",pushDownTime) | ||||||
|         HW.leds[button].off() |         HW.leds[button].off() | ||||||
|         if button == 1: |         if button == 1: | ||||||
|             if pushDownTime > 1100: |             if pushDownTime > 700: | ||||||
|                 Settings.save() |  | ||||||
|                 self.finish() |                 self.finish() | ||||||
|                 return |                 return | ||||||
|         else: |         else: | ||||||
|             if pushDownTime < 500: |             if pushDownTime < 500: | ||||||
|                 Settings.selectedSound=(Settings.selectedSound+ (1 if button == 2 else -1))%len(Buzzer.ALARMTONES) |                 self.number=self.acceptedInputNumbers[(self.acceptedInputNumbers.index(self.number) + (1 if button == 2 else -1)) % len(self.acceptedInputNumbers)] | ||||||
|                 HW.stepperminu.rotateTo(-Settings.selectedSound/12) |                 HW.stepperminu.rotateTo(-(self.number/12)) | ||||||
|                 HW.buzzer.playSound(HW.Buzzer.ALARMTONES[Settings.selectedSound]) |                 if self.onNumberChange: | ||||||
|  |                     self.onNumberChange(self.number) | ||||||
| 
 | 
 | ||||||
|     def cleanup(self): |     def finish(self): | ||||||
|         HW.housingLEDs.fill((0,0,0)) |         self.running = False | ||||||
|         HW.buzzer.stop() |         for b in HW.buttons: | ||||||
|  |             b.setCallbacks()#Clear Callbacks | ||||||
|  |              | ||||||
|  | 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.mode = 0 | ||||||
|  | 
 | ||||||
|  |     def __await__(self): | ||||||
|  |         self.running = True | ||||||
|  |         self.mode=0 # 0: Minutes, 1: Hours | ||||||
|  |         HW.stepperminu.rotateTo(-(self.pickedTime[1])/12) | ||||||
|  |         HW.stepperhour.rotateTo(-(self.pickedTime[0])/12) | ||||||
|  |         HW.leds[1].flash(1) | ||||||
|  |         for number,button in enumerate(HW.buttons): | ||||||
|  |             button.setCallbacks(\ | ||||||
|  |                 onPushDown=lambda i=number:self.onButtonPressed(i),\ | ||||||
|  |                 onPushUp=lambda pushDownTime,button=number:self.onButtonReleased(button,pushDownTime)) | ||||||
|  |         # Wait for the Hands to move up | ||||||
|  |         while not HW.stepperhour.isAtTarget() or not HW.stepperminu.isAtTarget(): | ||||||
|  |             await asyncio.sleep_ms(200) | ||||||
|  |         if self.onStart: | ||||||
|  |             self.onStart(self.pickedTime) | ||||||
|  |         while self.running: | ||||||
|  |             await asyncio.sleep_ms(200) | ||||||
|  |         if self.onPicked: | ||||||
|  |             self.onPicked(self.pickedTime) | ||||||
|  | 
 | ||||||
|  |     __iter__ = __await__  # https://github.com/micropython/micropython/issues/2678 | ||||||
|  |     def finish(self): | ||||||
|  |         self.running = False | ||||||
|  |         for b in HW.buttons: | ||||||
|  |             b.setCallbacks()#Clear Callbacks | ||||||
|  |         for l in HW.leds: | ||||||
|  |             l.off() | ||||||
|  | 
 | ||||||
|  |     def onButtonPressed(self,button): | ||||||
|  |         if button == 1: | ||||||
|  |             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)) | ||||||
|  |              | ||||||
|  |     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)           | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | # TODO | ||||||
|  | class GetTimeOnePressScreen():  | ||||||
|  |     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 | ||||||
|  | 
 | ||||||
|  |     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) | ||||||
|  |         for number,button in enumerate(HW.buttons): | ||||||
|  |             button.setCallbacks(\ | ||||||
|  |                 onPushDown=lambda i=number:self.onButtonPressed(i),\ | ||||||
|  |                 onPushUp=lambda pushDownTime,button=number:self.onButtonReleased(button,pushDownTime)) | ||||||
|  |         # Wait for the Hands to move up | ||||||
|  |         while not HW.stepperhour.isAtTarget() or not HW.stepperminu.isAtTarget(): | ||||||
|  |             await asyncio.sleep_ms(200) | ||||||
|  |         if self.onStart: | ||||||
|  |             self.onStart(self.pickedTime) | ||||||
|  |         while self.running: | ||||||
|  |             await asyncio.sleep_ms(200) | ||||||
|  |         if self.onPicked: | ||||||
|  |             self.onPicked(self.pickedTime) | ||||||
|  | 
 | ||||||
|  |     __iter__ = __await__  # https://github.com/micropython/micropython/issues/2678 | ||||||
|  |     def finish(self): | ||||||
|  |         self.running = False | ||||||
|  |         for b in HW.buttons: | ||||||
|  |             b.setCallbacks()#Clear Callbacks | ||||||
|  |         for l in HW.leds: | ||||||
|  |             l.off() | ||||||
|  | 
 | ||||||
|  |     def onButtonPressed(self,button): | ||||||
|  |         if button == 1: | ||||||
|  |             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)) | ||||||
|  |              | ||||||
|  |     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) | ||||||
| @ -1,8 +1,8 @@ | |||||||
| selectedSound=0 | selectedSound=0 | ||||||
| selectedBrightness=0 | selectedBrightness=0 | ||||||
| selectedColor=0 | selectedColor=0 | ||||||
| alarmTime=((1,2,3,4),(8,),(0,)) | alarmTime=(8,0) | ||||||
| 
 | alarmOn=False | ||||||
| 
 | 
 | ||||||
| def printState(): | def printState(): | ||||||
|     print("selectedSound=",selectedSound) |     print("selectedSound=",selectedSound) | ||||||
|  | |||||||
| @ -5,7 +5,7 @@ import uasyncio as asyncio | |||||||
| stepping = [[1,0,1,0],[1,0,0,0],[1,0,0,1],[0,0,0,1],[0,1,0,1],[0,1,0,0],[0,1,1,0],[0,0,1,0]] | stepping = [[1,0,1,0],[1,0,0,0],[1,0,0,1],[0,0,0,1],[0,1,0,1],[0,1,0,0],[0,1,1,0],[0,0,1,0]] | ||||||
| 
 | 
 | ||||||
| class Stepper: | class Stepper: | ||||||
|     def __init__(self,pins,stepsPerRev=400,stepDurationMs=10,inverted=False): |     def __init__(self,pins,stepsPerRev=400,stepDurationMs=8,inverted=False): | ||||||
|         self._pins = [Pin(p, Pin.OUT) for p in  pins] |         self._pins = [Pin(p, Pin.OUT) for p in  pins] | ||||||
|         self.reset() |         self.reset() | ||||||
|         self.stepDurationMs = stepDurationMs |         self.stepDurationMs = stepDurationMs | ||||||
|  | |||||||
							
								
								
									
										34
									
								
								main.py
									
									
									
									
									
								
							
							
						
						
									
										34
									
								
								main.py
									
									
									
									
									
								
							| @ -1,23 +1,37 @@ | |||||||
| import time | import time | ||||||
| import uasyncio as asyncio | import uasyncio as asyncio | ||||||
| import Hardware as HW | import Hardware as HW | ||||||
|  | import Settings | ||||||
| import Screens | import Screens | ||||||
| 
 | 
 | ||||||
| #Async | #Async | ||||||
| loop = asyncio.get_event_loop() | loop = asyncio.get_event_loop() | ||||||
| 
 | 
 | ||||||
| async def run_screens(): |  | ||||||
|     InitScreen = Screens.InitHandsScreen() |  | ||||||
|     await InitScreen |  | ||||||
| 
 | 
 | ||||||
|     modus = 0 | 
 | ||||||
|     screens = (Screens.ClockScreen(),\ | async def run_screens(): | ||||||
|                 Screens.RingtoneSettingsScreen()) |     screens = ( \ | ||||||
|  |             (Screens.ClockScreen(),(140,70,255)),\ | ||||||
|  |             (Screens.SetAlarmTimeScreen(),(255,0,0)),\ | ||||||
|  |             (Screens.RingtoneSettingsScreen(),(255,0,127)),\ | ||||||
|  |             (Screens.InitHandsScreen(),(0,0,255)),\ | ||||||
|  |             (Screens.ShowIpScreen(),HW.HousingLEDs.YELLOW),\ | ||||||
|  |             ) | ||||||
|  |     colorSet = lambda number: HW.housingLEDs.fill(screens[number][1]) | ||||||
|  |     selectScreen = Screens.GetNumberScreen([i for i in range(len(screens))],\ | ||||||
|  |         startNumber=0,\ | ||||||
|  |         onStart=colorSet,\ | ||||||
|  |         onNumberChange=colorSet,\ | ||||||
|  |         onPicked=lambda number: HW.housingLEDs.fill((0,0,0))) | ||||||
|  | 
 | ||||||
|  |     initScreen = Screens.InitHandsScreen() | ||||||
|  |     await initScreen | ||||||
|  | 
 | ||||||
|  |     activeScreen = 0 | ||||||
|     while True: |     while True: | ||||||
|         HW.buzzer.playSound(HW.Buzzer.BEEP) |         HW.buzzer.playSound(HW.Buzzer.BEEP) | ||||||
|         await screens[modus] |         await screens[activeScreen][0] | ||||||
|         for b in HW.buttons: |         # Get the new screen from the screen selection screen | ||||||
|             b.setCallbacks()#Clear Callbacks |         activeScreen = await selectScreen | ||||||
|         modus = (modus+1)%len(screens) |  | ||||||
| 
 | 
 | ||||||
| loop.run_until_complete(run_screens()) | loop.run_until_complete(run_screens()) | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user