Last active 1700878528

https://blahaj.zone/notes/9mehzr6pjs5zsfs8

aly's Avatar aly revised this gist 1700878528. Go to revision

1 file changed, 20 insertions, 11 deletions

main.py

@@ -11,7 +11,8 @@ class Notes:
11 11 E6 = 1320
12 12 D7 = 2349
13 13
14 - mute = [] #list(range(0,5))+list(range(21,24))
14 + mute = list(range(0,9))+list(range(21,24))
15 + #mute = range(0,24)
15 16 is_muted = False
16 17
17 18 buzzer = machine.PWM(machine.Pin(22))
@@ -19,7 +20,7 @@ led = machine.PWM(machine.Pin(21),5000)
19 20 led.duty_u16(0)
20 21
21 22 rtc=machine.RTC()
22 - #rtc.datetime((2023,11,24,0, 5,44,55,0))
23 + rtc.datetime((2021,1,1,0, 12,13,24,0))
23 24 offset = 0
24 25 ben = [
25 26 [
@@ -42,17 +43,17 @@ ben = [
42 43
43 44 minute = [(Notes.E6, 0.1, 500, True)]
44 45 special = {
45 - 900: ben[0],
46 - 1800: ben[0] + ben[1],
47 - 2700: ben[0] + ben[1] + ben[0],
46 + # 900: ben[0],
47 + # 1800: ben[0] + ben[1],
48 + # 2700: ben[0] + ben[1] + ben[0],
48 49 }
49 50
50 51 def get_hour_tune(hour):
51 52 chimes = []
52 53 for n in range((hour%12 or 12)):
53 54 chimes += [(Notes.GS4,0.4,1000,True), (None,0.4,1000,False), (None,0.4,1000,False)]
54 - if not is_muted:
55 - return ben[0] + ben[1] + ben[0] + ben[1] + chimes
55 + # if not is_muted:
56 + # return ben[0] + ben[1] + ben[0] + ben[1] + chimes
56 57 return chimes
57 58
58 59 def init_clock():
@@ -65,12 +66,12 @@ def init_clock():
65 66 break
66 67 m,s = divmod(offset,60)
67 68 h,m = divmod(m,60)
68 - print("init clock",offset,h,m,s)
69 + # print("init clock",offset,h,m,s)
69 70 t = rtc.datetime()
70 71 rtc.datetime((t[0],t[1],t[2],t[3],t[4]+h,t[5]+m,t[6]+s,t[7]))
71 72
72 73 def sleep(s,p=True):
73 - if p: print("sleep %02f"%s)
74 + # if p: print("sleep %02f"%s)
74 75 utime.sleep(s)
75 76
76 77 def play(song):
@@ -110,5 +111,13 @@ def loop():
110 111 else:
111 112 sleep(play(minute))
112 113
113 - init_clock()
114 - loop()
114 +
115 + import os
116 + logfile = open("log.txt", "a")
117 + os.dupterm(logfile)
118 + try:
119 + init_clock()
120 + loop()
121 + finally:
122 + logfile.flush()
123 + logfile.close()

aly's Avatar aly revised this gist 1700827305. Go to revision

1 file changed, 13 insertions, 13 deletions

main.py

@@ -11,30 +11,30 @@ class Notes:
11 11 E6 = 1320
12 12 D7 = 2349
13 13
14 - mute = list(range(0,5))+list(range(21,24))
14 + mute = [] #list(range(0,5))+list(range(21,24))
15 15 is_muted = False
16 16
17 17 buzzer = machine.PWM(machine.Pin(22))
18 - green = machine.Pin(21, machine.Pin.OUT)
19 - green.value(0)
18 + led = machine.PWM(machine.Pin(21),5000)
19 + led.duty_u16(0)
20 20
21 21 rtc=machine.RTC()
22 - #rtc.datetime((2023,11,24,0, 3,59,55,0))
22 + #rtc.datetime((2023,11,24,0, 5,44,55,0))
23 23 offset = 0
24 24 ben = [
25 25 [
26 26 (Notes.GS4,0.4,1000,True),
27 - (Notes.E4,0.4,1000,True),
28 - (Notes.FS4,0.4,1000,True),
29 - (Notes.B3,0.4,1000,True),
27 + (Notes.E4,0.4,600,True),
28 + (Notes.FS4,0.4,1200,True),
29 + (Notes.B3,0.4,900,True),
30 30 (None,0.4,1000,False),
31 31 (None,0.4,1000,False)
32 32 ],
33 33 [
34 - (Notes.B3,0.4,1000,True),
35 - (Notes.FS4,0.4,1000,True),
34 + (Notes.B3,0.4,900,True),
35 + (Notes.FS4,0.4,1200,True),
36 36 (Notes.GS4,0.4,1000,True),
37 - (Notes.E4,0.4,1000,True),
37 + (Notes.E4,0.4,600,True),
38 38 (None,0.4,1000,False),
39 39 (None,0.4,1000,False)
40 40 ]
@@ -78,14 +78,14 @@ def play(song):
78 78 for note,length,vol,flash in song:
79 79 print("freq:%d,length:%d,vol:%d,flash:%r"%(note or 0,length,vol,flash))
80 80 if flash:
81 - green.value(1)
81 + led.duty_u16(vol*4)
82 82 if note:
83 83 buzzer.freq(note)
84 84 buzzer.duty_u16(vol if not is_muted else 0)
85 85 sleep(length, p=False)
86 86 tot += length
87 87 if flash:
88 - green.value(0)
88 + led.duty_u16(0)
89 89 if note:
90 90 buzzer.duty_u16(0)
91 91 return 60-tot
@@ -105,7 +105,7 @@ def loop():
105 105 continue
106 106 if m == 0:
107 107 sleep(play(get_hour_tune(h)))
108 - elif sec in special:
108 + elif sec in special and not is_muted:
109 109 sleep(play(special[sec]))
110 110 else:
111 111 sleep(play(minute))

aly's Avatar aly revised this gist 1700826329. Go to revision

1 file changed, 76 insertions, 42 deletions

main.py

@@ -7,32 +7,53 @@ class Notes:
7 7 FS4 = 370
8 8 GS4 = 415
9 9 A4 = 440
10 + D6 = 1174
11 + E6 = 1320
10 12 D7 = 2349
11 13
14 + mute = list(range(0,5))+list(range(21,24))
15 + is_muted = False
16 +
12 17 buzzer = machine.PWM(machine.Pin(22))
13 - green = machine.Pin(25, machine.Pin.OUT)
18 + green = machine.Pin(21, machine.Pin.OUT)
14 19 green.value(0)
15 20
16 21 rtc=machine.RTC()
22 + #rtc.datetime((2023,11,24,0, 3,59,55,0))
17 23 offset = 0
24 + ben = [
25 + [
26 + (Notes.GS4,0.4,1000,True),
27 + (Notes.E4,0.4,1000,True),
28 + (Notes.FS4,0.4,1000,True),
29 + (Notes.B3,0.4,1000,True),
30 + (None,0.4,1000,False),
31 + (None,0.4,1000,False)
32 + ],
33 + [
34 + (Notes.B3,0.4,1000,True),
35 + (Notes.FS4,0.4,1000,True),
36 + (Notes.GS4,0.4,1000,True),
37 + (Notes.E4,0.4,1000,True),
38 + (None,0.4,1000,False),
39 + (None,0.4,1000,False)
40 + ]
41 + ]
42 +
43 + minute = [(Notes.E6, 0.1, 500, True)]
44 + special = {
45 + 900: ben[0],
46 + 1800: ben[0] + ben[1],
47 + 2700: ben[0] + ben[1] + ben[0],
48 + }
18 49
19 - minute = [(Notes.D7, 0.1)]
20 - hour = [(Notes.D7, 0.4)]
21 - #minute = [
22 - # (Notes.D7, 0.1)
23 - #]
24 - #hour = [
25 - # (Notes.GS4, 0.4),
26 - # (Notes.E4, 0.4),
27 - # (Notes.FS4, 0.4),
28 - # (Notes.B3, 0.4),
29 - # (None, 0.4),
30 - # (None, 0.4),
31 - # (Notes.B3, 0.4),
32 - # (Notes.FS4, 0.4),
33 - # (Notes.GS4, 0.4),
34 - # (Notes.E4, 0.4)
35 - #]
50 + def get_hour_tune(hour):
51 + chimes = []
52 + for n in range((hour%12 or 12)):
53 + chimes += [(Notes.GS4,0.4,1000,True), (None,0.4,1000,False), (None,0.4,1000,False)]
54 + if not is_muted:
55 + return ben[0] + ben[1] + ben[0] + ben[1] + chimes
56 + return chimes
36 57
37 58 def init_clock():
38 59 global offset
@@ -44,37 +65,50 @@ def init_clock():
44 65 break
45 66 m,s = divmod(offset,60)
46 67 h,m = divmod(m,60)
47 - print(offset,h,m,s)
68 + print("init clock",offset,h,m,s)
48 69 t = rtc.datetime()
49 70 rtc.datetime((t[0],t[1],t[2],t[3],t[4]+h,t[5]+m,t[6]+s,t[7]))
50 71
72 + def sleep(s,p=True):
73 + if p: print("sleep %02f"%s)
74 + utime.sleep(s)
75 +
76 + def play(song):
77 + tot = 0
78 + for note,length,vol,flash in song:
79 + print("freq:%d,length:%d,vol:%d,flash:%r"%(note or 0,length,vol,flash))
80 + if flash:
81 + green.value(1)
82 + if note:
83 + buzzer.freq(note)
84 + buzzer.duty_u16(vol if not is_muted else 0)
85 + sleep(length, p=False)
86 + tot += length
87 + if flash:
88 + green.value(0)
89 + if note:
90 + buzzer.duty_u16(0)
91 + return 60-tot
92 +
51 93 def loop():
94 + global is_muted
95 + first = True
52 96 while True:
53 97 timestamp=rtc.datetime()
54 - print("%04d-%02d-%02d %02d:%02d:%02d.%04d"%(timestamp[0:3] + timestamp[4:8]))
55 - song = []
56 - # internal RTC starts on 2021-01-01 00:00:01.0000
57 - if timestamp[6]-1 == 0:
58 - if timestamp[5] == 0:
59 - song = hour
60 - else:
61 - song = minute
62 - for note,length in song:
63 - if length > 0.5:
64 - raise Exception
65 - green.value(1)
66 - if note:
67 - buzzer.freq(note)
68 - buzzer.duty_u16(1000)
69 - utime.sleep(length)
70 - green.value(0)
71 - if note:
72 - buzzer.duty_u16(0)
73 - utime.sleep(0.5-length)
74 - if len(song)%2 != 0:
75 - utime.sleep(0.5)
98 + y,m,d,w,h,m,s,ss = rtc.datetime()
99 + sec = m*60+s
100 + print("%04d-%02d-%02d %02d:%02d:%02d %03d"%(y,m,d,h,m,s,sec))
101 + is_muted = h in mute
102 + if first:
103 + first = False
104 + sleep(60-s)
105 + continue
106 + if m == 0:
107 + sleep(play(get_hour_tune(h)))
108 + elif sec in special:
109 + sleep(play(special[sec]))
76 110 else:
77 - utime.sleep(1)
111 + sleep(play(minute))
78 112
79 113 init_clock()
80 114 loop()

aly's Avatar aly revised this gist 1700794135. Go to revision

1 file changed, 65 insertions, 52 deletions

main.py

@@ -1,67 +1,80 @@
1 1 import machine
2 2 import utime
3 3
4 - notes = {
5 - "B3": 247,
6 - "E4": 330,
7 - "FS4": 370,
8 - "GS4": 415,
9 - "A4": 440,
10 - "D7": 2349,
11 - }
4 + class Notes:
5 + B3 = 247
6 + E4 = 330
7 + FS4 = 370
8 + GS4 = 415
9 + A4 = 440
10 + D7 = 2349
12 11
12 + buzzer = machine.PWM(machine.Pin(22))
13 13 green = machine.Pin(25, machine.Pin.OUT)
14 14 green.value(0)
15 15
16 - buzzer = machine.PWM(machine.Pin(22))
17 -
18 16 rtc=machine.RTC()
19 - #timestamp=rtc.datetime()
20 - #file = open("test","a")
21 - #file.write("%04d-%02d-%02d %02d:%02d:%02d.%04d\n"%(timestamp[0:3] + timestamp[4:8]))
22 - #file.close()
17 + offset = 0
23 18
19 + minute = [(Notes.D7, 0.1)]
20 + hour = [(Notes.D7, 0.4)]
24 21 #minute = [
25 - # ("D7", 0.1)
22 + # (Notes.D7, 0.1)
26 23 #]
27 24 #hour = [
28 - # ("GS4", 0.4),
29 - # ("E4", 0.4),
30 - # ("FS4", 0.4),
31 - # ("B3", 0.4),
32 - # ("", 0.4),
33 - # ("", 0.4),
34 - # ("B3", 0.4),
35 - # ("FS4", 0.4),
36 - # ("GS4", 0.4),
37 - # ("E4", 0.4)
25 + # (Notes.GS4, 0.4),
26 + # (Notes.E4, 0.4),
27 + # (Notes.FS4, 0.4),
28 + # (Notes.B3, 0.4),
29 + # (None, 0.4),
30 + # (None, 0.4),
31 + # (Notes.B3, 0.4),
32 + # (Notes.FS4, 0.4),
33 + # (Notes.GS4, 0.4),
34 + # (Notes.E4, 0.4)
38 35 #]
39 - minute = [("D7", 0.1)]
40 - hour = [("D7", 0.4)]
41 36
42 - while True:
43 - timestamp=rtc.datetime()
44 - # print("%04d-%02d-%02d %02d:%02d:%02d.%04d"%(timestamp[0:3] + timestamp[4:8]))
45 - song = []
46 - # internal RTC starts on 2021-01-01 00:00:01.0000
47 - if timestamp[6]-1 == 0:
48 - if timestamp[5] == 0:
49 - song = hour
37 + def init_clock():
38 + global offset
39 + # check if offset pin is pulled high: GP0-11 for 5-60 minute offset
40 + for n,pin in enumerate(range(0,12)):
41 + inp = machine.Pin(pin, machine.Pin.IN, pull=None)
42 + if inp.value():
43 + offset += (n+1)*300
44 + break
45 + m,s = divmod(offset,60)
46 + h,m = divmod(m,60)
47 + print(offset,h,m,s)
48 + t = rtc.datetime()
49 + rtc.datetime((t[0],t[1],t[2],t[3],t[4]+h,t[5]+m,t[6]+s,t[7]))
50 +
51 + def loop():
52 + while True:
53 + timestamp=rtc.datetime()
54 + print("%04d-%02d-%02d %02d:%02d:%02d.%04d"%(timestamp[0:3] + timestamp[4:8]))
55 + song = []
56 + # internal RTC starts on 2021-01-01 00:00:01.0000
57 + if timestamp[6]-1 == 0:
58 + if timestamp[5] == 0:
59 + song = hour
60 + else:
61 + song = minute
62 + for note,length in song:
63 + if length > 0.5:
64 + raise Exception
65 + green.value(1)
66 + if note:
67 + buzzer.freq(note)
68 + buzzer.duty_u16(1000)
69 + utime.sleep(length)
70 + green.value(0)
71 + if note:
72 + buzzer.duty_u16(0)
73 + utime.sleep(0.5-length)
74 + if len(song)%2 != 0:
75 + utime.sleep(0.5)
50 76 else:
51 - song = minute
52 - for note,length in song:
53 - if length > 0.5:
54 - raise Exception
55 - green.value(1)
56 - if note:
57 - buzzer.freq(notes[note])
58 - buzzer.duty_u16(1000)
59 - utime.sleep(length)
60 - green.value(0)
61 - if note:
62 - buzzer.duty_u16(0)
63 - utime.sleep(0.5-length)
64 - if len(song)%2 != 0:
65 - utime.sleep(0.5)
66 - else:
67 - utime.sleep(1)
77 + utime.sleep(1)
78 +
79 + init_clock()
80 + loop()

aly's Avatar aly revised this gist 1700791394. Go to revision

1 file changed, 19 insertions, 17 deletions

main.py

@@ -10,32 +10,34 @@ notes = {
10 10 "D7": 2349,
11 11 }
12 12
13 - green = machine.Pin(21, machine.Pin.OUT)
13 + green = machine.Pin(25, machine.Pin.OUT)
14 14 green.value(0)
15 15
16 16 buzzer = machine.PWM(machine.Pin(22))
17 17
18 18 rtc=machine.RTC()
19 - timestamp=rtc.datetime()
19 + #timestamp=rtc.datetime()
20 20 #file = open("test","a")
21 21 #file.write("%04d-%02d-%02d %02d:%02d:%02d.%04d\n"%(timestamp[0:3] + timestamp[4:8]))
22 22 #file.close()
23 23
24 - minute = [
25 - ("D7", 0.1)
26 - ]
27 - hour = [
28 - ("GS4", 0.4),
29 - ("E4", 0.4),
30 - ("FS4", 0.4),
31 - ("B3", 0.4),
32 - ("", 0.4),
33 - ("", 0.4),
34 - ("B3", 0.4),
35 - ("FS4", 0.4),
36 - ("GS4", 0.4),
37 - ("E4", 0.4)
38 - ]
24 + #minute = [
25 + # ("D7", 0.1)
26 + #]
27 + #hour = [
28 + # ("GS4", 0.4),
29 + # ("E4", 0.4),
30 + # ("FS4", 0.4),
31 + # ("B3", 0.4),
32 + # ("", 0.4),
33 + # ("", 0.4),
34 + # ("B3", 0.4),
35 + # ("FS4", 0.4),
36 + # ("GS4", 0.4),
37 + # ("E4", 0.4)
38 + #]
39 + minute = [("D7", 0.1)]
40 + hour = [("D7", 0.4)]
39 41
40 42 while True:
41 43 timestamp=rtc.datetime()

aly's Avatar aly revised this gist 1700728804. Go to revision

1 file changed, 65 insertions

main.py(file created)

@@ -0,0 +1,65 @@
1 + import machine
2 + import utime
3 +
4 + notes = {
5 + "B3": 247,
6 + "E4": 330,
7 + "FS4": 370,
8 + "GS4": 415,
9 + "A4": 440,
10 + "D7": 2349,
11 + }
12 +
13 + green = machine.Pin(21, machine.Pin.OUT)
14 + green.value(0)
15 +
16 + buzzer = machine.PWM(machine.Pin(22))
17 +
18 + rtc=machine.RTC()
19 + timestamp=rtc.datetime()
20 + #file = open("test","a")
21 + #file.write("%04d-%02d-%02d %02d:%02d:%02d.%04d\n"%(timestamp[0:3] + timestamp[4:8]))
22 + #file.close()
23 +
24 + minute = [
25 + ("D7", 0.1)
26 + ]
27 + hour = [
28 + ("GS4", 0.4),
29 + ("E4", 0.4),
30 + ("FS4", 0.4),
31 + ("B3", 0.4),
32 + ("", 0.4),
33 + ("", 0.4),
34 + ("B3", 0.4),
35 + ("FS4", 0.4),
36 + ("GS4", 0.4),
37 + ("E4", 0.4)
38 + ]
39 +
40 + while True:
41 + timestamp=rtc.datetime()
42 + # print("%04d-%02d-%02d %02d:%02d:%02d.%04d"%(timestamp[0:3] + timestamp[4:8]))
43 + song = []
44 + # internal RTC starts on 2021-01-01 00:00:01.0000
45 + if timestamp[6]-1 == 0:
46 + if timestamp[5] == 0:
47 + song = hour
48 + else:
49 + song = minute
50 + for note,length in song:
51 + if length > 0.5:
52 + raise Exception
53 + green.value(1)
54 + if note:
55 + buzzer.freq(notes[note])
56 + buzzer.duty_u16(1000)
57 + utime.sleep(length)
58 + green.value(0)
59 + if note:
60 + buzzer.duty_u16(0)
61 + utime.sleep(0.5-length)
62 + if len(song)%2 != 0:
63 + utime.sleep(0.5)
64 + else:
65 + utime.sleep(1)
Newer Older