背景
メイン基板にはFrontのRGB-LEDの傍に明るさセンサーが搭載されています。
明るさセンサを入力として扱うプログラミングを行いました。
Scratch
明るさセンサは取得した値を変数として扱いになっているので、値を取得する命令をするブロックがあるわけではないようです。
「起動後にBackのLEDが緑色に点灯しているときに、もし明るさセンサを指で隠していたらFrontのLEDが青色に点灯する」
ifの前のディレイを入れないと動作が不安定でした。
明るさセンサの取得タイミングとif文の判定の順番に癖があるのかもしれません。
spheroV2
testにあったBoltTest.pyのコメントアウトを参考に同様な動作をするスクリプトを作成しました。
この場合は、明るさセンサの取得タイミングとif文の判定の順番が分かりやすいです。
(厳密にget_luminosity()の先を調べたほうがよさそうです)
import time
from spherov2 import scanner
from spherov2.sphero_edu import EventType, SpheroEduAPI
from spherov2.types import Color
print("Testing Starting...")
print("Connecting to Bolt...")
toy = scanner.find_BOLT()
if toy is not None:
print("Connected.")
with SpheroEduAPI(toy) as droid:
print("Testing Start...")
droid.reset_aim()
droid.set_back_led(Color(r=0, g=255, b=0))
time.sleep(1)
ambient_light_data = droid.get_luminosity()
ambientLight = ambient_light_data['ambient_light'] # 辞書から値を取得
print(f"Luminosity: {ambientLight:.1f}")
if ambientLight < 10 :
print("it is dark")
droid.set_front_led(Color(r=0, g=0, b=255))
time.sleep(1)
print("Testing End...")
#droid.register_event(EventType.on_sensor_streaming_data, droid.SensorStreamingInfo) #how you would register to data (function name is custom)
指で明るさセンサを隠していた時の実行結果はこちらのようになりました。
git\spherov2.py\spherov2\test>python BoltTest_ambientLight0.py
Testing Starting...
Connecting to Bolt...
Connected.
Testing Start...
Luminosity: 3.0
it is dark
Testing End...
まとめ
明るさセンサを入力に使ったプログラミングを実験しました。
spheroV2は明るさセンサの値自体を表示する機能があるので、遊ぶ幅が広がりそうです。