diff --git a/ANLEITUNG.md b/ANLEITUNG.md index ded3699..523f9c9 100644 --- a/ANLEITUNG.md +++ b/ANLEITUNG.md @@ -2,18 +2,21 @@ Der Stepper-Wecker hat 3 Knöpfe: Links, Mitte und Rechts. -Nach dem Anschließen des Stromkabels (zuerst in den Wecker, dann in die Steckdose) müssen die beiden Zeiger auf 12 Uhr gestellt werden. Dazu kann der linke und rechte Knopf benutzt werden. Mit einem kurzen Druck auf den mittleren Knopf wird zwischen Stunden- und Minutenzeiger gewechselt. Stehen beide Zeiger auf 12 wird durch einen langen Druck auf den mittleren Knopf die Auswahl bestätigt. Der Wecker befindet sich nun im Uhrmodus und zeigt die Uhrzeit an (sollte dies nicht der Fall sein, ist vielleicht die Knopfzellenbatterie im Wecker leer, die Uhrzeit lässt sich momentan noch nicht über den Wecker ändern und benötigt Eingriffe in die Software). +Nach dem Anschließen des Stromkabels (zuerst in den Wecker, dann in die Steckdose) müssen die beiden Zeiger auf 12 Uhr gestellt werden. Dazu kann der linke und rechte Knopf benutzt werden. Mit einem kurzen Druck auf den mittleren Knopf wird zwischen Stunden- und Minutenzeiger gewechselt. Stehen beide Zeiger auf 12 wird durch einen langen Druck auf den mittleren Knopf die Auswahl bestätigt. Der Wecker befindet sich nun im Uhrmodus und zeigt die Uhrzeit an (sollte dies nicht der Fall sein, ist vielleicht die Knopfzellenbatterie im Wecker leer, oder Zeitumstellung ist passiert). Im Uhrmodus kann die Beleuchtung des Weckers und der Alarm ein- und ausgestellt werden. Zum Wechseln der Helligkeit wird der linke Knopf benutzt. Zum An- und Ausschalten der Beleuchtung muss kurz auf den mittleren Knopf gedrückt werden. Zum Wechseln der Farbe kurz den rechten Knopf betätigen. Zum Ein- und Ausschalten des Alarms muss lange auf den rechten Knopf gedrückt werden. Das Knopf-Licht des Knopfes zeigt an, ob der Alarm an (Rechts leuchtet) oder aus (Rechts leuchtet nicht) ist. -Um Einstellungen am Wecker vorzunehmen, (wie zum Beispiel das Ändern der Alarmzeit) kann er über einen langen Druck auf die mittlere Taste in das Hauptmenü gebracht werden. Dort kann man zwischen den verschiedenen Menüpunkten auswählen: +Um Einstellungen am Wecker vorzunehmen, (wie zum Beispiel das Ändern der Alarmzeit oder die Uhrzeit) kann er über einen langen Druck auf die mittlere Taste in das Hauptmenü gebracht werden. Dort kann man zwischen den verschiedenen Menüpunkten auswählen: -0. Uhrmodus -1. Alarmzeit -2. Alarmton -3. Zeiger-Kalibrierung -4. IP-Adresse anzeigen +0. Uhrmodus (Weiß) +1. Alarmzeit (Rot) +2. Alarmton (Orange) +3. Uhrzeit einstellen (Lila) +4. Zeiger-Kalibrierung (Grün) +5. IP-Adresse anzeigen (Gelb) Die letzten beiden Menüpunkte sind für den normalen fehlerfreien Gebraucht nicht nötig. Zum Anpassen der Alarmzeit muss der Menüpunkt 1 ausgewählt werden. Dazu den linken oder rechten Knopf drücken, bis der Minutenzeiger auf der 1 steht und dann mit einem langen Druck auf den mittleren Knopf die Auswahl bestätigen. Dort kann dann die Alarmzeit ausgewählt werden. Das obere Bunte LED-Licht zeigt, ob die Uhrzeit Vormittag (Blau) oder Nachmittag (Gelb) anzeigt. Die Auswahl kann wie gewohnt über einen langen Druck auf die mittlere Taste bestätigt werden. Um wieder in den Uhrmodus zurückzukehren, muss im Menü der Zeiger auf 12 Uhr stehen und dann wieder bestätigt werden. + +Um die Uhrzeit aus dem Internet zu updaten muss im "Uhrzeit einstellen (Lila)"-Modus kurz auf die Mittlere Taste gedrückt werden. diff --git a/Buzzer.py b/Buzzer.py index 7247a87..574b801 100644 --- a/Buzzer.py +++ b/Buzzer.py @@ -17,6 +17,7 @@ C = 523 #Hz BEEP = ((100,1100),) BEEPBEEP = ((700,1100),(100,None),(600,1100)) +BOOP = ((100,120),) # 0: BEEEEP BEEEEP BEEEEEP # 1: Alle Meine Entchen @@ -29,7 +30,7 @@ ALARMTONES = (((300,1200),(80,None),(200,1200),(300,None),(None,10)), (400,f),(80,None),(400,f),(80,None),(400,f),(80,None),(400,f),(80,None),\ (900,e),(80,None),(900,e),(80,None),(400,d),(80,None),(400,d),(80,None),\ (400,d),(80,None),(400,d),(80,None),(1600,c)),\ - ((500,10000),(None,20)),) + ((1000,10000),(None,10)),) class Buzzer(): def __init__(self,pin,duty = 512): diff --git a/Hardware.py b/Hardware.py index 9d47119..556a891 100644 --- a/Hardware.py +++ b/Hardware.py @@ -8,6 +8,8 @@ import Button import HousingCapButton #Initialise the time module with the RTC +dsRtc = None +rtc = None try: dsRtc = DS3231.DS3231(machine.I2C(sda = machine.Pin(17), scl=machine.Pin(18))) rtc = machine.RTC() diff --git a/Screens.py b/Screens.py index 862f73b..2c5c087 100644 --- a/Screens.py +++ b/Screens.py @@ -6,6 +6,7 @@ import Hardware as HW import math import network import time +import ntptime class ClockScreen(): def __await__(self): @@ -119,6 +120,36 @@ class SetAlarmTimeScreen(): await timeScreen HW.housingLEDs.fill((0,0,0)) +class SetTimeScreen(): + def __init__(self): + self.timeScreen = None + def onShortMiddle(self): + try: + ntptime.settime() + if self.timeScreen != None: + ti = HW.rtc.datetime()[4:6] + self.timeScreen.pickedTime = ti[0]*60 + ti[1] + HW.buzzer.playSound(HW.Buzzer.BEEPBEEP) + except Exception as e: + HW.buzzer.playSound(HW.Buzzer.BOOP) + print("Failed to get NTP Time\n",e) + def setTime(self,selectedTime): + #TODO if (HW.rtc != None): + ti = list(HW.rtc.datetime()[:-1]) + ti[4:6] = selectedTime + HW.rtc.datetime(ti + [0]) + HW.dsRtc.DateTime(ti) + def __iter__(self): + HW.housingLEDs.fill((255,0,0)) + self.timeScreen = GetTimeScreen(\ + startTime=HW.rtc.datetime()[4:6],\ + onStart=lambda _: HW.buzzer.playSound(HW.Buzzer.BEEP),\ + onSelectedTimeChange=None,\ + onPicked=self.setTime, + onShortMiddle=self.onShortMiddle) + await self.timeScreen + HW.housingLEDs.fill((0,0,0)) + class RingtoneSettingsScreen(): def playAndSetSound(self,number): Settings.selectedSound = number @@ -299,7 +330,8 @@ class Get2PositionsScreen(): self.onSelectedTimeChange(self.pickedTime) class GetTimeScreen(): - def __init__(self,startTime = (0,0),onStart=None,onSelectedTimeChange = None,onPicked = None): + def __init__(self,startTime = (0,0),onStart=None,onSelectedTimeChange = None,onPicked = None,onShortMiddle = None): + self.onShortMiddle = onShortMiddle self.onStart = onStart self.onSelectedTimeChange = onSelectedTimeChange self.onPicked = onPicked @@ -354,5 +386,8 @@ class GetTimeScreen(): if button == 1: if time > 700: self.finish() + else: + if self.onShortMiddle != None: + self.onShortMiddle() else: self.direction = 0 \ No newline at end of file diff --git a/main.py b/main.py index 390960d..7324498 100644 --- a/main.py +++ b/main.py @@ -14,6 +14,7 @@ async def run_screens(): (Screens.ClockScreen(),(140,70,255)),\ (Screens.SetAlarmTimeScreen(),(255,0,0)),\ (Screens.RingtoneSettingsScreen(),(255,0,127)),\ + (Screens.SetTimeScreen(),(100,200,50)),\ (Screens.InitHandsScreen(),(0,0,255)),\ (Screens.ShowIpScreen(),HW.HousingLEDs.YELLOW),\ )