ytoi / ev3rt_aspsim_raspi_linux

2 stars 0 forks source link

カラーセンサーのモード同時使用 #8

Closed karubehub closed 2 years ago

karubehub commented 2 years ago

カラーセンサーは、reflect モードと、RGBモードの読み取りが可能だと思いますが、

同じタスク内で、2つのモードの値を切り替えながら取得すると、 固まるという症状が発生しました。

読み取り、間隔が短いために発生するのかと思い、 20ミリや、40ミリのSleepを入れてみたのですが、 改善されませんでした。

karubehub commented 2 years ago

view_spike.zip

実験用サンプルプログラムをお送りします。 30行目 ev3_color_sensor_get_rgb_raw(COLOR_PORT, &rgb);
と 36行目 printf("Color Refrect=%d\n",ev3_color_sensor_get_reflect(COLOR_PORT)); の両方を有効にして、実行すると、最初は、値を取得できるのですが、 しばらくすると、すべてのセンサー値が取得できない状態になります。 どちらか片方であれば、値の取得が可能です。

33行目で、20ミリ、40ミリ、100ミリ、1000ミリの Sleep間隔をあけてみましたが、結果は変わりませんでした。

karubehub commented 2 years ago

ちなみに、SPIKEアプリ(Python)の方だけだと、以下の様なプログラムになると思いますが、 およそ、40msec間隔で、それぞれの値を取得して、表示されました。

from spike import PrimeHub, LightMatrix, Button, StatusLight, ForceSensor, MotionSensor, Speaker, ColorSensor, App, DistanceSensor, Motor, MotorPair from spike.control import wait_for_seconds, wait_until, Timer from math import *

hub = PrimeHub()

color_sensor = ColorSensor('C')

while(1): print(color_sensor.get_reflected_light()) print(color_sensor.get_color()) print(color_sensor.get_red()) print(color_sensor.get_green()) print(color_sensor.get_blue())

ytoi commented 2 years ago

RasPiからSPIKEへのコマンドは10msec間隔で送られます。そのため、センサーの切り替えも10msec以内で行なった場合には反映がされません。 SPIKEでmicro pythonで書いた場合も切り替えには40msecかかっているようなので、短いスパンでの値の読み込みは実際でも期待の周期通りにはできないのではないかと思います。

センサーの切り替えの間は最低50msecとらないと値は取れないというような制約で逃れるか、きちんと同期させる仕組みを作るか、検討します。

karubehub commented 2 years ago

すみません。 値がとれなくなったとお思ったのは、もしかすると、2分の壁を越えてしまったからかもしれません。もう一度確認します。

karubehub commented 2 years ago

再確認したところ、やはり、2分以内に値がとれない状態になりました。