IntroductionArduinoの関数ってあんまり綺麗じゃないよねこれの問題点mbedだとこう書けるライブラリ紹介 IO-Kit時間計測にTime関数を使うと綺麗に描けない時間計測(ms)をするプログラムmbedではこう書けるライブラリ紹介 mbedlike-timerlibライブラリを使った例さいごに
Introduction
私はArduinoは好きではなくmbedを好んで使っています。簡潔に書きたい。
mbedに求めるものをArduinoに移植してくれているライブラリを紹介します。
Arduinoの関数ってあんまり綺麗じゃないよね
例えばですがdigitalPinを使う時はこう書きます。
// Setup pinMode(outputPin,OUTPUT); //アウトプット pinMode(switchPin,INPUT); //インプット // Write digitalWrite(outputPin,HIGH); digitalWrite(outputPin,LOW); // Read bool state = digitalRead(switchPin);
これの問題点
- Read/Writeの時に文頭からなんのピンを制御制御しているかわからない
- 長すぎる
- 沢山のピンを扱う時にアレイで扱えない
mbedだとこう書ける
めちゃくちゃ簡単にかけます。直感的で扱いやすいライティングができる。
// Setup DigitalIn switchPin(PinName); DigitalOut switchPin(PinName); // Write outputPin = 1; outputPin = 0; // Read bool state = switchPin;
ライブラリ紹介 IO-Kit
しろくまさんが作っているIO-Kitを使うと綺麗に書くことができます。ありがたや〜
詳しくはReadmeを読んでください
#include "IO-Kit.h” // Setup Output LED = 13; // Write LED = HIGH; LED = LOW;
ArduinoIDEで使う場合はファイルを編集する必要があります
src
の中にあったinclude
ファイルの中身を出してダウンロードしたIO-Kit-main
の直下に置いてあげる必要があります時間計測にTime関数を使うと綺麗に描けない
全然直感的な時間計測ができないですよね。。。
時間計測関数には
millis()
というのが提供されています。時間計測(ms)をするプログラム
millis()
を使ってミリ秒の時間計測をしてみます(μsの場合はmicros()
)void loop() { unsigned long timeStart = millis(); //計測開始 delay(1000); unsigned long time = millis() - timeStart; // 計測終了 Serial.print(time); }
時間計測前に変数に時間を代入するの毎回書くのなんか直感的じゃないですよね。
複数の時間計測をしたい時はあんまり便利じゃなさそう。
もっと簡単に、ストップウォッチの感覚で使いたい。
mbedではこう書ける
書く量がかなり減ります。
Timer timer; //宣言 timer.start(); //計測開始 // 時間取得 timer.read(); //秒 timer.read_ms(); //ミリ秒 timer.read_us(); //マイクロ秒 timer.reset(); //カウントを0にする timer.stop(); //カウントを止める
ライブラリ紹介 mbedlike-timerlib
このライブラリを使うとmbedのような直感的ライティングができます。
#include "timer.h" // Setup timer timer1; // リセット・スタート timer1.reset(); // 時間取得 timer1.read_ms(); timer1.read_us();
ライブラリを使った例
簡単な例ですがLチカをしてみました。
使っているマイコンはATTiny85です。
#include "IO-Kit.h" #include "timer.h" Output LED1 = 0; //1秒に一回Blinkする予定のピン Output LED2 = 1; //PWMに対応したピン timer timer1; //1秒計測のためのタイマー float fadeAmout = 0.001; float brightness = 0.0; void setup() { } void Blink(){ if(timer1.read_ms() > 1000) { //1秒周期でLチカする LED1 = !LED1; timer1.reset(); //タイマーリセット } } void Fading(){ LED2 = brightness; brightness += fadeAmout; if (brightness <= 0.0 || brightness >= 1.0) { fadeAmout = -fadeAmout; } } void loop() { Blink(); //1秒周期でLチカする Fading(); //なめらかなLED制御 }
さいごに
他にもあれば教えてください。