ロボ研の藤田大悟です。

Engineerコースは新しいことだらけで、生徒と一緒に問題解決をしています。備忘録的に学んだことをUPしていきます。

KIMG0149

今、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の繰り返し。