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ライブラリを追加する必要アリ

動画