@@ -34,30 +34,56 @@ func RunGPIO(chgpio chan bool) {
3434 button2 .Input ()
3535 button2 .PullUp ()
3636
37- //GPIO12をブザーPWMに設定。出力
38- buzzer := rpio .Pin (13 )
39- buzzer .Mode (rpio .Pwm )
40- buzzer .Freq (64000 )
41- buzzer .DutyCycle (0 , 32 )
42-
4337 // ここで音楽を鳴らす
44- buzzer .Freq (1244 * 64 )
45- buzzer .DutyCycle (16 , 32 )
46- time .Sleep (time .Millisecond * 100 )
47- buzzer .Freq (1108 * 64 )
48- time .Sleep (time .Millisecond * 100 )
49- buzzer .Freq (739 * 64 )
50- time .Sleep (time .Millisecond * 150 )
51- buzzer .DutyCycle (0 , 32 )
52- time .Sleep (time .Millisecond * 100 )
53- buzzer .Freq (1479 * 64 )
54- buzzer .DutyCycle (16 , 32 )
55- time .Sleep (time .Millisecond * 100 )
56- buzzer .DutyCycle (0 , 32 )
57- time .Sleep (time .Millisecond * 100 )
58- buzzer .DutyCycle (16 , 32 )
59- time .Sleep (time .Millisecond * 100 )
60- buzzer .DutyCycle (0 , 32 )
38+ // buzzer.Freq(1244 * 64)
39+ // buzzer.DutyCycle(16, 32)
40+ // time.Sleep(time.Millisecond * 100)
41+ // buzzer.Freq(1108 * 64)
42+ // time.Sleep(time.Millisecond * 100)
43+ // buzzer.Freq(739 * 64)
44+ // time.Sleep(time.Millisecond * 150)
45+ // buzzer.DutyCycle(0, 32)
46+ // time.Sleep(time.Millisecond * 100)
47+ // buzzer.Freq(1479 * 64)
48+ // buzzer.DutyCycle(16, 32)
49+ // time.Sleep(time.Millisecond * 100)
50+ // buzzer.DutyCycle(0, 32)
51+ // time.Sleep(time.Millisecond * 100)
52+ // buzzer.DutyCycle(16, 32)
53+ // time.Sleep(time.Millisecond * 100)
54+ // buzzer.DutyCycle(0, 32)
55+
56+ ringBuzzer (0 , 100 * time .Millisecond , 1244 )
57+ ringBuzzer (0 , 100 * time .Millisecond , 1108 )
58+ ringBuzzer (0 , 150 * time .Millisecond , 739 )
59+ time .Sleep (100 * time .Millisecond )
60+ ringBuzzer (0 , 100 * time .Millisecond , 1479 )
61+ time .Sleep (100 * time .Millisecond )
62+ ringBuzzer (0 , 100 * time .Millisecond , 1479 )
63+
64+ // ringBuzzer(0, 1000*time.Millisecond) //ラ#
65+ // ringBuzzer(1, 1000*time.Millisecond) //シ
66+ // ringBuzzer(2, 1000*time.Millisecond) //ド
67+ // ringBuzzer(3, 1000*time.Millisecond) //ド#
68+ // ringBuzzer(4, 1000*time.Millisecond) //レ
69+ // ringBuzzer(5, 1000*time.Millisecond) //レ#
70+ // ringBuzzer(6, 1000*time.Millisecond) //ミ
71+ // ringBuzzer(7, 1000*time.Millisecond) //ファ
72+ // ringBuzzer(8, 1000*time.Millisecond) //ファ#
73+ // ringBuzzer(9, 1000*time.Millisecond) //ソ
74+ // ringBuzzer(10, 1000*time.Millisecond) //ソ#
75+ // ringBuzzer(11, 1000*time.Millisecond) //ラ
76+ // ringBuzzer(12, 1000*time.Millisecond) //ラ#
77+ // ringBuzzer(13, 1000*time.Millisecond) //シ
78+ // ringBuzzer(14, 1000*time.Millisecond) //ド
79+ // ringBuzzer(15, 1000*time.Millisecond) //ド#
80+ // ringBuzzer(16, 1000*time.Millisecond) //レ
81+ // ringBuzzer(17, 1000*time.Millisecond) //レ#
82+ // ringBuzzer(18, 1000*time.Millisecond) //ミ
83+ // ringBuzzer(19, 1000*time.Millisecond) //ファ
84+ // ringBuzzer(20, 1000*time.Millisecond) //ファ#
85+ // ringBuzzer(21, 1000*time.Millisecond) //ソ
86+ // ringBuzzer(22, 1000*time.Millisecond) //ソ#
6187
6288 //GPIO 6, 25, 4, 5 を DIP 1, 2, 3, 4 に設定。入力
6389 dip1 := rpio .Pin (4 )
@@ -91,38 +117,49 @@ func RunGPIO(chgpio chan bool) {
91117 for {
92118 //電圧降下検知
93119 if recvdata .Volt <= uint8 (alarmVoltage ) {
120+ log .Println ("BATTERY ALARM" )
94121 for {
95- buzzer .Freq (1200 * 64 )
96- buzzer .DutyCycle (16 , 32 )
122+ if recvdata .Volt <= uint8 (BATTERY_CRITICAL_THRESHOULD ) {
123+ ringBuzzer (25 , 5000 * time .Millisecond , 0 )
124+ continue
125+ }
97126
98- //高速チカチカ
99127 led2 .High ()
100- time . Sleep ( 100 * time .Millisecond )
101-
102- buzzer . Freq ( 760 * 64 )
128+ go ringBuzzer ( 25 , 50 * time .Millisecond , 0 )
129+ time . Sleep ( 60 * time . Millisecond )
130+ go ringBuzzer ( 20 , 90 * time . Millisecond , 0 )
103131 led2 .Low ()
104- time .Sleep (150 * time .Millisecond )
132+ time .Sleep (120 * time .Millisecond )
105133
106134 if button1 .Read ()^ 1 == rpio .High || alarmIgnore {
107135 //一時的にアラーム解除する
108136 log .Println ("BATTERY ALARM IGNORED" )
109137 alarmVoltage = BATTERY_CRITICAL_THRESHOULD
138+ time .Sleep (100 * time .Millisecond )
139+ go ringBuzzer (20 , 20 * time .Millisecond , 0 )
140+ time .Sleep (300 * time .Millisecond )
141+ go ringBuzzer (20 , 20 * time .Millisecond , 0 )
142+ time .Sleep (300 * time .Millisecond )
143+ go ringBuzzer (20 , 20 * time .Millisecond , 0 )
144+ time .Sleep (300 * time .Millisecond )
110145 break
111146 }
112147 }
113148 } else {
114149 //通常チカチカ。ボタンが押されたら高速チカチカ
115150 //button2はkickボタン
116- buzzer .Freq (1479 * 64 )
151+ // buzzer.Freq(1479 * 64)
117152 time .Sleep (ledsec )
118153 led .Write (rpio .High )
119154 if button1 .Read ()^ 1 == rpio .High {
120- ledsec = 100 * time .Millisecond
121- buzzer . DutyCycle ( 16 , 32 )
155+ ledsec = 75 * time .Millisecond
156+ go ringBuzzer ( 20 , 20 * time . Millisecond , 0 )
122157 } else {
123158 ledsec = 500 * time .Millisecond
124159 }
125160 if button2 .Read ()^ 1 == rpio .High {
161+ go ringBuzzer (10 , 50 * time .Millisecond , 0 )
162+
126163 //log.Println(button2.Read())
127164 //kickする
128165 //buzzer.DutyCycle(16, 32)
@@ -133,15 +170,24 @@ func RunGPIO(chgpio chan bool) {
133170 }
134171 time .Sleep (ledsec )
135172 led .Write (rpio .Low )
136- buzzer .DutyCycle (0 , 32 )
137-
138- if doBuzzer {
139- buzzer .Freq (int (440 * math .Pow (1.0595 , float64 (buzzerTone ))) * 64 )
140- buzzer .DutyCycle (16 , 32 )
141- time .Sleep (buzzerTime )
142- buzzer .DutyCycle (0 , 32 )
143- doBuzzer = false
144- }
145173 }
146174 }
147175}
176+
177+ func ringBuzzer (buzzerTone int , buzzerTime time.Duration , freq int ) {
178+ //GPIO12をブザーPWMに設定。出力
179+ buzzer := rpio .Pin (13 )
180+ buzzer .Mode (rpio .Pwm )
181+
182+ if freq == 0 {
183+ freq = int (440 * math .Pow (1.0595 , float64 (buzzerTone ))) * 64
184+ } else {
185+ freq = freq * 64
186+ }
187+
188+ buzzer .Freq (freq )
189+ buzzer .DutyCycle (16 , 32 )
190+ time .Sleep (buzzerTime )
191+ buzzer .DutyCycle (0 , 32 )
192+
193+ }
0 commit comments