それでは、Arduinoの統合開発環境「Arduino IDE」で、スケッチ(プログラム)を作成していきましょう(スケッチ1、スケッチ2)。
#include "pitches.h" //----------------------- // 定数の定義 //----------------------- const int BZ = 2; //ブザーの出力ピン const int LED_COUNT = 5; //LEDの数 const int LED[LED_COUNT] = {7,8,9,10,11}; //各LEDのピン番号 const int VALUE[LED_COUNT] = {200,400,600,800,1000}; //LEDに対応したセンサー値 const int SENSOR = A5; //センサーの入力ピン const int SENSOR_OFF = 100; //センサーOFFの値 //----------------------- // グローバル変数の定義 //----------------------- int G_ledno = -1; //選択したLED(未選択の値:−1)
1行目で、ブザーで音階を鳴らすための「pitches.h」を読み込んでいます。pitches.hとブザーで音階を鳴らす関数については、連載第4回を参照してください。
6〜13行目は、ブザーとLED、LEDに対応する感圧センサー値の設定です。17行目の「G_ledno」は、アタリ番号(点灯しているLED番号)を入れる変数です。−1は初期値で、LEDを選んでいない状態です。
事前に、各LEDに対応するセンサー値のアタリは、LED1が200、LED5が1000になるようにシールを貼りました。LED1を端にすると感圧センサーを押していない状態との区別ができないので、センサー値が200になる位置をLED1としています。
センサー値を取得する関数「get_sensorno()」は、次のようになります(スケッチ2)。
int get_sensorno() { int sensorno = -1; int sensorVal = analogRead(SENSOR); //センサーの値を読む // Serial.println(sensorVal); if(sensorVal < SENSOR_OFF) { //センサーOFF sensorno = -999; } else { //センサー値が安定するのを待つ delay(100); sensorVal = analogRead(SENSOR); //センサーを押した位置を判定(しきい値±50) for(int i = 0; i < LED_COUNT; i++) { if(sensorVal >= VALUE[i] - 50 && sensorVal <= VALUE[i] + 50) { sensorno = i; break; } } } return(sensorno); }
スケッチ2は、“ユーザーが押した感圧センサーの位置”を、センサーの値から取得する関数です。
「sensorno」は、センサーの押された位置を格納する変数で、初期値は−1です(2行目)。
3行目のanalogRead()でセンサー値を読み取り、変数「sensorVal」に格納。5行目で取得した値が「SENSOR_OFF」より小さい場合、“何も押されていない”と判断し、sensornoに−999を入れて戻します。
どこかが押されているときは、センサー値が安定するのを待ってから、あらためてセンサー値を取得します(11〜12行目)。
閾値をプラスマイナス50ずつとして、sensorValの値と定数で設定したVALUE配列を比較し、センサーのどの位置が押されているかをチェック。押されている位置番号をsensornoに格納します(13〜17行目)。
Copyright © ITmedia, Inc. All Rights Reserved.