Q&A
実現したいこと
- 処理量を減らし省エネを実現する
- forever 関数の代替
前提
Microsoft MakeCode for micro:bitで勉強のためのストップウォッチを作っています。
勉強した時間に応じる長さの棒グラフがLEDライトによって表示されます。
各ボタンの説明
- Aボタンを押すとストップウォッチが開始、停止します。
- Bボタンを押すとリセットされます。
- micro:bitについているロゴを短くタッチするとLEDライトが消灯し、これによって省エネをしています。
- ロゴを長くタッチすると棒グラフがリセットされます。時間はリセットされないまま、棒グラフは初めからスタートします。つまり、棒グラフが最大値まで達してしまったときに、はじめから開始できるようになっているということです。なお、棒グラフは50分程度で最大になるように設定しています。
問題
ここで、棒グラフは計っている時間によって長さがきまり、そのために”forever”で長さを決める計算をしなくてはなりません。処理量を減らすために1000msで繰り返すようにしているのですが、これよりいい方法がないか探しています。
追加の質問
forever関数で処理するのにはそれほど電力はかからないのでしょうか。
試したこと
処理量を減らすために1000msで繰り返すようにしました。
10秒ごとにすればそれほど支障はないのですが、それより長くにしてしまうと、時間の経過に対応する棒グラフの変化が遅れてしまうということが起こってしまいます。
該当のソースコード
JavaScript
1input.onLogoEvent(TouchButtonEvent.LongPressed, function () { 2 LastGraphValue = elasped() 3}) 4input.onButtonPressed(Button.A, function () { 5 ShouldShowGraph = false 6 led.stopAnimation() 7 led.setBrightness(LedBrightness) 8 basic.clearScreen() 9 if (InMeasure == false) { 10 InMeasure = true 11 start = input.runningTime() 12 basic.showIcon(IconNames.Yes) 13 ShouldShowGraph = true 14 } else { 15 InMeasure = false 16 basic.showLeds(` 17 . . . . . 18 . . . . . 19 . . # . . 20 . . . . . 21 . . . . . 22 `) 23 basic.clearScreen() 24 basic.showNumber(Math.round(elasped())) 25 } 26}) 27function elasped () { 28 elapsed = input.runningTime() - start + elapsed 29 start = input.runningTime() 30 return elapsed / 1000 / 60 31} 32input.onButtonPressed(Button.B, function () { 33 control.reset() 34}) 35input.onLogoEvent(TouchButtonEvent.Pressed, function () { 36 if (led.brightness() == LedBrightness) { 37 led.setBrightness(0) 38 } else { 39 led.setBrightness(LedBrightness) 40 } 41}) 42let LedBrightness = 0 43let ShouldShowGraph = false 44let InMeasure = false 45let LastGraphValue = 0 46let start = 0 47let elapsed = 0 48elapsed = 0 49start = 0 50LastGraphValue = 0 51InMeasure = false 52ShouldShowGraph = false 53LedBrightness = 100 54loops.everyInterval(1000, function () { 55 if (ShouldShowGraph == true) { 56 led.plotBarGraph( 57 elasped() - LastGraphValue, 58 55 59 ) 60 } 61}) 62
補足情報(FW/ツールのバージョンなど)
micro:bitはバージョン2を使用しています。
見つけたこと
明るさを下げることで省エネができました
回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2023/03/26 11:54