PDMライブラリ

PDMライブラリを使うと、パルス密度変調(Pulse-Density Modulation)マイクを使うことができます。Nano RP2040 Connectと Nano 33 BLE Senseボードに搭載されています。


AUTHOR: Arduino、LAST REVISION: 2022/11/23 23:29


概要

PDMライブラリを使うと、PDM(パルス密度変調マイクを使うことができます。Nano RP2040 Connectと Nano 33 BLE Senseボードに搭載されています。

このライブラリを使うには、

1
#include <PDM.h>

ArduinoSoundライブラリを通してもアクセスできオーディオにも対応しています。

関数

begin()

説明

PDMインターフェイスを初期化します。

文法

1
PDM.begin(channels, sampleRate)

パラメータ

  • channels: チャネル番号。1: モノラル、2: ステレオ
  • sampleRate: 利用するサンプリング周波数(Hz)

戻り値

成功時: 1、失敗時: 0

スケッチ例

1
2
3
4
if (!PDM.begin(1, 16000)) {
    Serial.println("Failed to start PDM!");
    while (1);
  }

end()

説明

PDMインターフェイスを終期化します。

文法

1
PDM.end()

パラメータ

なし

戻り値

なし

スケッチ例

1
2
3
4
5
6
7
8
9
if (!PDM.begin(1, 16000)) {
    Serial.println("Failed to start PDM!");
    while (1);
}


// 

PDM.end();

available()

説明

PDFインターフェイスから読み取り可能なバイト数を取得します。これはすでに到着したデータで、PDM受信バッファに格納されています。

文法

1
PDM.available()

パラメータ

なし

戻り値

読み取り可能なバイト数。

スケッチ例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
// buffer to read samples into, each sample is 16-bits
short sampleBuffer[256];

// number of samples read
volatile int samplesRead;

// 

  // query the number of bytes available
  int bytesAvailable = PDM.available();

  // read into the sample buffer
  PDM.read(sampleBuffer, bytesAvailable);

read()

説明

PDMからデータを読み指定したバッファに格納します。

文法

1
PDM.read(buffer, size)

パラメータ

  • buffer: PDMデータを格納する配列
  • size: 読み取るバイト数

戻り値

読みっとたバイト数

スケッチ例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
// buffer to read samples into, each sample is 16-bits
short sampleBuffer[256];

// number of samples read
volatile int samplesRead;

// 

  // query the number of bytes available
  int bytesAvailable = PDM.available();

  // read into the sample buffer
  Int bytesRead = PDM.read(sampleBuffer, bytesAvailable);

  // 16-bit, 2 bytes per sample
  samplesRead = bytesRead / 2;

onReceive()

説明

新しいPDMデータが読み取り可能となった時に呼ばれるコールバック関数を設定します。

文法

1
PDM.onReceive(callback)

パラメータ

  • callback: 新しいPDMデータが読み取り可能となった時に呼ばれる関数

戻り値

なし

スケッチ例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
// buffer to read samples into, each sample is 16-bits
short sampleBuffer[256];

// number of samples read
volatile int samplesRead;

// 

  // configure the data receive callback
  PDM.onReceive(onPDMdata);

  // initialize PDM with:
  // - one channel (mono mode)
  // - a 16 kHz sample rate
  if (!PDM.begin(1, 16000)) {
    Serial.println("Failed to start PDM!");
    while (1);
  }


  // 

void onPDMdata() {
  // query the number of bytes available
  int bytesAvailable = PDM.available();

  // read into the sample buffer
  Int bytesRead = PDM.read(sampleBuffer, bytesAvailable);

  // 16-bit, 2 bytes per sample
  samplesRead = bytesRead / 2;
}

setGain()

説明

PDMインターフェイスにより利用されるゲインを設定します。

文法

1
PDM.setGain(gain)

パラメータ

  • gain: 利用するゲイン。0-255、指定されない場合のデフォルトは20。

戻り値

なし

スケッチ例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
// optionally set the gain, defaults to 20
  PDM.setGain(30);

  // initialize PDM with:
  // - one channel (mono mode)
  // - a 16 kHz sample rate
  if (!PDM.begin(1, 16000)) {
    Serial.println("Failed to start PDM!");
    while (1);
  }

setBufferSize()

説明

PDMインターフェイスにより利用されるバッファサイズ(バイト単位)を設定します。PDM.begin(…)を呼ぶ前に呼ぶ必要があります。この関数が呼ばれないときは、デフォルトのバッファサイズの512が使われます。これは、256個の16ビットサンプルを格納するのに十分です。

文法

1
PDM.setBufferSize(size)

パラメータ

  • size: 利用するバッファサイズ(バイト)

戻り値

なし

スケッチ例

1
2
3
4
5
6
7
8
9
 PDM.setBufferSize(1024);

  // initialize PDM with:
  // - one channel (mono mode)
  // - a 16 kHz sample rate
  if (!PDM.begin(1, 16000)) {
    Serial.println("Failed to start PDM!");
    while (1);
  }

オリジナルのページ

https://docs.arduino.cc/learn/built-in-libraries/pdm

最終更新日

August 25, 2024

inserted by FC2 system