【概要】
センサー:QTR-8A フォトリフレクタアレイ
センサーモジュールには8つのフォトリフレクタが付いているが、UNO互換ボードのアナログポートの8つのうちKEY用に1つ使っているため、7つのフォトリフレクタを使用。
//****************************************
//7ポート分のアナログ入力値をシリアルポートとLCDに一定時間毎に出力
//シリアルには0から1023までの数字が半角スペースを伴って7つ出力される。
//例) 556 755 100 234 567 890 1023
//LCDには2桁に圧縮された値が表示される
//
//****************************************
//地面とセンサーの距離により値がかなり変わる
//左右端のセンサー値はそれ以外より大きな値になる。
//地面に平行でない場合、左右で値が変わる(角度センサーに使えそう)
//個々のセンサー値に個体差があるようだ
//
//
#include <MsTimer2.h> // timer interrupt
#include <LiquidCrystal.h>
LiquidCrystal lcd(8,9,4,5,6,7); //lcdタイプの変数を定義
//初期設定*********************************
void setup() {
MsTimer2::set(100, AnalogIn); //タイマー100ms period
MsTimer2::start(); //タイマースタート
//アナログピンは自動的に入力となるので、設定不要。
Serial.begin(115200); //Serial Portを設定
lcd.begin(16, 2); // LCD 行と列を設定
}
//メインループ******************************
void loop() {
}
//タイマー割り込み処理***********************
void AnalogIn() {
int i;
long val[8];
String strVal[8];
//1からまで7のアナログポートを読む
for (i=1;i<=7;i++) {
val[i] = analogRead(i);
}
//AD値をシリアルポートに出力
for(i=1;i<=7;i++){
Serial.print(" "+String(val[i]));
}
Serial.println(); //7つのポート出力をしたら、改行コードを出力
//AD値をLCDに表示
//数値を文字列2桁にする
for(i=1;i<=7;i++){
val[i]= val[i]*100/1024; //0-99の値にする
strVal[i]=String(val[i]); //文字にする
if (strVal[i].length()==1) { //一桁なら前にスペースをつける
strVal[i]=" " + strVal[i];
}
}
//1行目 (AD1,AD3,AD5,AD7)
lcd.home();
for(i=1;i<=7;i+=2){
lcd.print(strVal[i] + " ");
}
//2行目 (AD2,AD4,AD6)
lcd.setCursor(2,1);
for(i=2;i<=6;i+=2){
lcd.print(strVal[i] + " ");
}
}
0 件のコメント:
コメントを投稿