ArduinoとGroveキット
Arduinoはたくさんあるし、
https://www.arduino.cc/
Groveセンサもたくさんあります
https://www.switch-science.com/catalog/list/145/
組み合わせたセットもあります。
https://www.rs-online.com/designspark/a-first-look-at-the-grove-starter-kit-for-arduino-jp
Wio-NodeにArduinoとして書き込む
事前の準備はこちらを参照してください。
http://dev-moyashi.hatenablog.com/entry/2016/09/08/185933
・USBシリアル変換モジュールを経由して、
・FUNCボタン長押し+RSTボタンちょい押しで書き込みモードにする
ことを毎回忘れずに!
Wio-NodeのIOピン配置
先人の知恵に感謝しましょう。
https://qiita.com/binzume/items/e0c0234668992ef42f9a
まずは青いLEDを光らせます。
LEDを点滅させる
Wio-Nodeの上にある青いLEDを点滅させてみましょう。
こちらのコードを見ながら進めます。
https://github.com/asanoqm/factoryScientist_WioArduino/blob/master/blueLEDblink.ino
ポート番号の割り当て
const uint8_t BLUE_LED = 2;
BLUE_LED という変数に2番ポートを割り当てます。
※コーディングの可読性を上げるための作業なので、必須ではありません。
void setup / pinMode
void setup(){
pinMode(BLUE_LED, OUTPUT);
}
void setupはプログラム起動時に1度だけ実行されます。
・pinModeは各ポートを入力/出力に割り当てるための関数です。
BLUE_LEDは出力に用いるので、上のようなコードで出力用の設定をします。
void loop / digitalWrite, delay
void loop() {
digitalWrite(BLUE_LED
, HIGH);
delay(1000);
digitalWrite(BLUE_LED
, LOW);
delay(1000);
}
void loop の中に書かれた命令が繰り返し実行されます。
・digitalWriteは指定のポートにHIGHかLOWの信号を送ります。
BLUE_LEDはLOWが送られたときに点灯する模様。
・delayは数字×ミリ秒待機します。
点滅のパターンを変える
これまでのプログラムを書き込むと、
青色のLEDが一秒おきに点滅するはずです。
成功したらdelayの中の数値を変えて、点滅のパターンを変えてみましょう。
FUNCボタンの状態を知る
LEDへの出力ができたので、次は入力にトライします。
Wio-NodeのFUNCボタンの押下を読み取ってみましょう。
コードはこちら
https://github.com/asanoqm/factoryScientist_WioArduino/blob/master/FUNCinput.ino
ポート番号の割り当て、変数の用意
const uint8_t FUNC_BTN = 0;
int val = 0;
FUNCTIONキーをFUNC_BTNという変数名にしてポート0番を割り当てます。
あとで使うために valという整数変数を用意し、ひとまず0を入れておきます。
void setup / Serial.begin
void setup() {
pinMode(FUNC_BTN, INPUT);
Serial.begin(115200);
}
・LEDと同様、pinMODEでFUNC_BTN,をINPUT(入力)に設定します。
・Serial.begin でシリアルポートを開き、通信速度を規定します。
void loop / digitalRead, Serial.println
void loop() {
val = digitalRead(FUNC_BTN);
Serial.println(val);
delay(1000);
}
・digitalReadで入力ピンの状態(HIGH, LOW)を取得しval に代入します。valの値はHIGHなら1、LOWなら0となります。
・Serial.println はシリアル通信で受け取った値をシリアルモニタに表示します。
シリアルモニタの確認
プログラムをWio-Nodeに書き込み、シリアルモニタを開いてください。
・FUNCボタンを押していないと1
・FUNCボタンを押していると0
の数字が表示されていれば成功です。
※ 右下の通信速度の設定は115200bpsにしてください。
ボタンを押している間だけLEDを光らせる
LEDへの出力とFUNCボタンからの入力を学びました。
この2つを組み合わせて、FUNCボタンを押している間だけLEDが光るようなプログラムを作ってみましょう!
コードはこちら
https://github.com/asanoqm/factoryScientist_WioArduino/blob/master/buttonANDblink.ino
ポート番号の割り当て、変数の用意
const uint8_t BLUE_LED = 2;
const uint8_t FUNC_BTN = 0;
int val = 0;
void setup
void setup() {
// Serial.begin(115200);
pinMode(BLUE_LED, OUTPUT);
pinMode(FUNC_BTN, INPUT);
}
※FUNC_BTNの状態をシリアルモニタで確認したい場合は、
Serial.begin の前の//(コメントアウト)を削除してください。
void loop / if else 構文による分岐
void loop() {
val = digitalRead(FUNC_BTN);
// Serial.println(val);
if(val == 0){
digitalWrite(BLUE_LED,LOW);
}else{
digitalWrite(BLUE_LED,HIGH);
}
}
・if else 構文を使ってLEDの点滅を制御します。
条件:スイッチを押したとき = valが0のとき
命令:LEDを転倒させる = BLUE_LEDをLOWにする
完成!
(おまけ)ある温度を越えたらLEDが点灯する
SHT-31から温度を取得して、ある温度を越えたらWio-Nodeの青いLEDが点灯するようにしてみます。
コードはこちら
https://github.com/asanoqm/factoryScientist_WioArduino/blob/master/SHT31-LED.ino
(おまけ)ある加速度を越えたらLEDが点灯する
ADXL345から加速度を取得して、ある値を越えたらWio-Nodeの青いLEDが点灯するようにしてみます。
※ ADXL345ライブラリを追加する必要アリ
動画