拡張 I/O(トーン出力やシフト入出力)

矩形波やシリアルデータの入出力(ソフトウェア)、パルス幅を測るためのライブラリです。

tone

概要
指定周波数の矩形波を生成します。ブザーで音を鳴らすのに便利です。
文法
tone(int pin, int frequency, int duration)
パラメータ
pin: ピン番号
frequency: 周波数[Hz]
duration: 出力を維持する時間[ms]。省略時、0指定時は出力し続ける。
戻り値
なし
補足
0, 3, 5ピンのみ使用できます。

noTone

概要
tone関数で出力した矩形波出力を停止する。
文法
noTone(int pin)
パラメータ
pin: ピン番号
戻り値
なし

shiftOut

概要
1バイト分のデータを1ビットずつ出力します。各ビットはまずdataPinに出力され、その後clockPinが反転して、そのビットが有効になったことが示されます。
文法
shiftOut(int dataPin, int clockPin, bitOrder, unsigned char value)
パラメータ
dataPin: データ出力ピン
clockPin: クロック入力ピン
bitOrder: MSBFIRST(最上位ビットから出力)、LSBFIRST(最下位ビットから出力)
value: 送信したいデータ(unsigned charで8ビットデータ)
戻り値
なし

shiftIn

概要
1バイトのデータを1ビットずつ取り込みます。まずclockPinがHIGHになり、dataPinから次のビットが読み込まれ、clockPinがLOWに戻ります。
文法
unsigned char shiftIn(unsigned char dataPin, unsigned char clockPin, bitOrder)
パラメータ
dataPin: データ入力ピン
clockPin: クロック出力ピン
bitOrder: MSBFIRST(最上位ビットから入力)、LSBFIRST(最下位ビットから入力)
戻り値
読み取った値(8ビットデータ)

shiftOutEx

概要
複数バイト分(32ビットまで)のデータを1ビットずつ出力します。各ビットはまずdataPinに出力され、その後clockPinが反転して、そのビットが有効になったことが示されます。
文法
shiftOutEx(int dataPin, int clockPin, bitOrder, int len, unsigned long value)
パラメータ
dataPin: データ出力ピン
clockPin: クロック入力ピン
bitOrder: MSBFIRST(最上位ビットから出力)、LSBFIRST(最下位ビットから出力)
len: 出力するデータのビット数
value: 送信したいデータ(32ビット以下のデータ)。MSBFIRSTの場合は最上位ビットを詰めておく必要があります。
戻り値
なし

shiftInEx

概要
複数バイト分(32ビットまで)のデータを1ビットずつ取り込みます。まずclockPinがHIGHになり、dataPinから次のビットが読み込まれ、clockPinがLOWに戻ります。
文法
uint32_t shiftIn(unsigned char dataPin, unsigned char clockPin, bitOrder, int len)
パラメータ
dataPin: データ入力ピン
clockPin: クロック出力ピン
bitOrder: MSBFIRST(最上位ビットから入力)、LSBFIRST(最下位ビットから入力)
len: 入力するデータのビット数
戻り値
読み取った値(uint32_t)

pulseIn

概要
ピンに入力されるパルスの幅を測ります。
文法
unsigned long pulseIn(int pin, int val, unsigned long timeout = 1000000)
パラメータ
pin: ピン番号
val: 測定するパルスの種類。HIGHまたはLOW
timeout: タイムアウトまでの時間(単位・マイクロ秒)。デフォルトは1秒
戻り値
パルスの長さ[us] (unsigned long)。パルスがスタートする前にタイムアウトとなった場合は0。

サンプルプログラム

toneのサンプルです。ドレミ


#include <Arduino.h>
void setup(){
    tone(3, 261);
    delay(500);
    tone(3, 293);
    delay(500);
    tone(3, 329);
    delay(500);
    noTone(3);
    delay(500);
}
  
void loop(){
}