ロボ研の藤田大悟です。
Engineerコースは新しいことだらけで、生徒と一緒に問題解決をしています。備忘録的に学んだことをUPしていきます。
今、1人の生徒が挑戦しているのが人が近づくとセンサーに反応して光るライト。しかも、全体の明るさ調整と個別の明るさ調整が2段階でできるもの。個別の明るさ調整は成功。しかし、同時に全体の明るさ調整がうまく行きませんでした。
#include <rxduino.h> const int SENSOR1 = 14; //ホントは3種類あるが省略 const int SENSOR4 = 14; //全体の明るさ調整ボリューム const int LED1 = 13; int sensVAL1 = 0; int sensVAL4 = 0; void setup() { pinMode(SENSOR1, INPUT); pinMode(SENSOR4, INPUT); pinMode(LED, OUTPUT); }
void loop(){ sensVAL4 =analogRead(SENSOR4)/1024; //センサーの値を0〜1023で取得し、全体の割合をだす sensVAL1 =sensVAL4*analogRead(SENSOR1)/4; //個別のライトの明るさに全体の割合をかけて明るさを調整 analogWrite(LED1,sensVAL1); delay(1000); }
どうしてか。。。あれこれ悩んでいていたところ、話の中で「整数が・・・」という話が生徒からでて、あ!とおもいました。
「int」で定義したsensVAL4は整数しか変数に格納できず、少数は切り捨てられてしまうのです。
そこで、float(少数)の関数をつかってみたりしましたが、うまくいかないので、途中で少数にならないような計算式にかえてみました。
void loop(){
sensVAL4 =analogRead(SENSOR4); //センサーの値を0〜1023で取得する
sensVAL1 =sensVAL4*analogRead(SENSOR1)/4096; //個別のライトの明るさに全体の割合をかけて明るさを調整
analogWrite(LED1,sensVAL1);
delay(1000);
こうしたら、無事調整に成功しました。Try&Errorの繰り返し。
Leave A Comment