Arduino IDEの組み込み関数とライブラリを使うには?

  • リファレンスの一部のみ抜き出だしています。詳しい使い方は原本を参照してください。

Arduinoの組み込み関数は?

  • Arduino IDEにはシリアルモニタ制御用の関数が組み込まれています。
  • Arduinoのサイト[Arduino Reference]で関数の説明がされています。株式会社武蔵野電波さんによって[Arduino 日本語リファレンス]が公開されています。
  • シリアルモニタでよく使う関数を列挙します。

begin()関数

  • begin(baud rate)関数はシリアル通信のデータ転送レートを指定する関数です。
Serial.begin(9600);

Serial.print(data)関数

  • データをシリアルポートへ送信します。
Serial.print("Hello World");

Serial.println(data)関数

  • データをシリアルポートへデータの末尾にCRとLFを付けて送信します。(シリアルモニタ表示が改行される。)
Serial.println("Hello World");

Arduinoのライブラリを使う方法は?

  • Arduino IDEには組み込まれているライブラリと追加するライブラリがあります。Arduinoに電子部品モジュールを組み込んで動作させるには適切なライブラリが必要になることがあります。

ヘッダファイル

#include <SoftwareSerial.h>

インスタンスの作成

  • SoftwareSerialのmySerialのインスタンスを作り、RX、TXを定義します。下記はRXが2で、TXが3の設定。
const byte rxPin = 2;
const byte txPin = 3;

SoftwareSerial mySerial (rxPin, txPin);

begin()メソッド

  • begin()メソッドはSoftwareSerialの通信速度を設定するメソッドです。
mySerial.begin(9600);

available()、read() メソッド

  • available()メソッドはSoftwareSerialポートから取得できるデータの数を取得します。このデータは既にSoftwareSerialの受信バッファで受信されています。
  • read()メソッドは、受信バッファのデータを返します。データが無ければ「-1」を返します。
  • SoftwareSerialの受信バッファポートにデータが届いているかどうかをavailable()メソッドを使って判断できます。受信バッファが「0」以上ならread()メソッドでデータ読む場合は以下のようになります。
 if (mySerial.available() > 0) {
        mySerial.read();
    }

Serial.readStringUntil() メソッド

  • Description
    • readStringUntil() reads characters from the serial buffer into a String. The function terminates if it times out (see setTimeout()).
    • Serial.readStringUntil() inherits from the Stream utility class.
  • Syntax
    • Serial.readStringUntil(terminator)
  • Parameters
    • Serial: serial port object. See the list of available serial ports for each board on the Serial main page.
      terminator: the character to search for. Allowed data types: char.
  • Returns
    • The entire String read from the serial buffer, up to the terminator character
  • Notes and Warnings
    • The terminator character is discarded from the serial buffer.

ヘッダファイル

  • SPI.hはSPI通信用のライブラリです。
  • SD.hはSDクラスとFileクラスで構成されます。
#include <SPI.h>
#include <SD.h>

begin()メソッド

  • begin()メソッドはSDライブラリとカードを初期化し、Chip Selectラインのピン番号を指定できます。
  • 戻り値は、成功すれば1,失敗すれば0なので、成功・失敗の判断に使えます。
#define chipSelect 10  

if (!SD.begin(chipSelect)) {
    Serial.println("Card failed, or not present");
    return;
  }  

open() メソッド

  • open()メソッドはSDカードのファイルをオープンします。ファイルが書き込みでオープンされた場合、ファイルが存在しなければ作成されます。
  • 引数: SD.open(filepath, mode) filepathはオープンするファイル名でディレクトリ情報を含んでも良い。modeはオプションであり、FILE_READ若しくはFILE_WRITE。
  • 戻り値: オープンしたファイルのFileオブジェクト。ファイルがオープンできない場合はブール型変数のfalseと評価されます。
  // Open the file for writing
  File dataFile = SD.open(filename, FILE_WRITE);

write()メソッド

  • SD.open()で作成された、Fileクラスのインスタンスから呼びます。
  • 引数: dataFile.write(buf, len) bufはcharacters若しくはbytesの配列。lenはbufの中の要素の数。
uint8_t *buffer;
uint8_t bytesToRead = min((uint16_t)32, datalen);
buffer = cam.readPicture(bytesToRead);
dataFile.write(buffer, bytesToRead);
スケッチの操作の意味は?
  • bufferを準備して、bytesToReadに読み込む数を32byteかデータ長(datalen)の少ないほうを設定し(datalenは終了までデータ書き込み後に32を引く。)
  • bufferにbytesToReadに設定した数だけのデータを読む
  • dataFile.writeでbufferのデータをbytesToReadの数書き込む

close()メソッド

  • ファイルを閉じで書く操作をされたデータがSDカードに物理的に書かれたことを確実にします。
dataFile.close()

  • Wireを使ってI2C/TWIデバイスと通信ができます。Arduino UNO R3ボードでは SDA (data line)とSCL (clock line)が使われます。

ヘッダファイル

#include <Wire.h>

begin()

  • この関数はWireライブラリを初期化してI2Cバスをコントローラ若しくは端末としてArduinoに加える。この関数は通常1回だけ呼ばれます。
  • [address]はオプションの7bitのスレーブのアドレスである。指定されない場合はコントローラとして組み込まれます。
Wire.begin(address);

beginTransmission(), write()

  • この関数は与えられたアドレスのI2Cデバイスと交信を開始します。この後にwrite()関数でクエリがセットされ、endTrasmission()で送信されます。
Wire.beginTransmission(address);
Wire.write();

endTransmission()

  • この関数は与えられたアドレスのI2Cデバイスへwrite()にクエリされたデータを返送します。
  • stopはture若しくはfalseであり、trueの場合はストップメッセージを送りバスを開放します。falseの場合はリスタートを送信しバスをアクティブを維持します。
Wire.endTransmission(stop);

requestFrom()

  • この関数はコントローラから周辺のI2Cデバイスへ、所定バイトのデータを準備するように要求します。
  • stopの記述はオプションです。stopはture若しくはfalseであり、trueの場合はストップメッセージを送りバスを開放します。falseの場合はリスタートを送信しバスをアクティブを維持します。
  • データがすべて送信されたかどうかは available()関数で確認が可能です。
Wire.requestFrom(address, quantity, stop);
  • 具体例です。
#include <Wire.h>

void setup() {
  Wire.begin();             // Join I2C bus (address is optional for controller device)
  Serial.begin(9600);       // Start serial for output
}

void loop() {
    Wire.requestFrom(2, 6);    // Request 6 bytes from slave device number two

    // Slave may send less than requested
    while(Wire.available()) {
        char c = Wire.read();    // Receive a byte as character
        Serial.print(c);         // Print the character
    }

    delay(500);
}
  • TinyGPS++はGPSモジュールから送信されるNMEAデータを解析するためのライブラリです。[TinyGPS++]から最新のライブラリをダウンロードします。

使い方の概略

  • [TinyGPS++]のホームページに書かれている、第一歩の説明。
Let’s say you have an Arduino hooked to an off-the-shelf GPS device and you want to display your altitude.  You would simply create a TinyGPS++ instance like this:
#include "TinyGPS++.h"
TinyGPSPlus gps;

Repeatedly feed it characters from your GPS device:
while (ss.available() > 0)
  gps.encode(ss.read());

Then query it for the desired information:
if (gps.altitude.isUpdated())
  Serial.println(gps.altitude.meters());

ヘッダファイル

#include <TinyGPS++.h>