音声入力

アナログサウンドセンサーモジュール

dfr0034.jpg

配線

配線意味
音声入力(Arduinoのアナログピンへ)
電源(Arduinoの5Vへ)
茶色Ground(ArduinoのGNDへ)

プログラミング

/*
fht_adc.pde
guest openmusiclabs.com 9.5.12
example sketch for testing the fht library.
it takes in data on ADC0 (Analog0) and processes them
with the fht. the data is sent out over the serial
port at 115.2kb.  there is a pure data patch for
visualizing the data.
*/

#define LOG_OUT 1 // 出力は対数(デシベルと等価)
// ここから4行は適宜設定してもよい。
#define FHT_N 256 // データの個数(実際に利用できるのはその半分)
                  // データの個数は4, 8, 16, 32, 64, 128, 256のいずれか。
#define PIN_NO 0  // 入力ピン番号(0から5)
#define LG_DIV_RATIO 7 // 分周率の指数(1から7)
#define INTERLEAVE 8 // データ間引き
// サンプリング周波数は 16MHz / 2^LG_DIV_RATIO / 13 / INTERLEAVE
// 周波数の分解能はサンプリング周波数 / データの個数

#include <FHT.h> // include the library

void setup() {
  Serial.begin(115200); // use the serial port
  // FFTを使う準備
  TIMSK0 = 0; // turn off timer0 for lower jitter
  ADCSRA = 0xe0 | LG_DIV_RATIO; // アナログ入力の方式を設定
  ADMUX = 0x40 | PIN_NO; // 入力ピン番号を設定
  DIDR0 = 1 << PIN_NO; // アナログ入力ピンのデジタル入力を禁止
}

void loop() {
  int s=INTERLEAVE-1;
  while(1) { // reduces jitter
    cli();  // 割り込み禁止
    for (int i = 0 ; i < FHT_N ; i++) { // save 256 samples
      while(!(ADCSRA & 0x10)); // AD変換が完了するのを待つ
      ADCSRA = 0xf0 | LG_DIV_RATIO; // 次のAD変換を開始する
      s = (s+1) % INTERLEAVE; // sがINTERLEAVEの倍数であるときだけ入力を処理
      if( s!= 0 ){ i--; continue; }
      byte m = ADCL; // データ下位8ビット読み込み
      byte j = ADCH; // データ上位2ビット読み込み
      int k = (j << 8) | m; // 上位、下位を合わせて10ビットの値にする
      k -= 0x0200; // 10ビットの値から512を引いて有符号数にする
      k <<= 6; // 6ビットシフトして
      fht_input[i] = k; // i番目の入力データとして格納
    }
    // 以下4行でフーリエ変換を実行
    fht_window(); // fht_input[]のデータに窓関数を施す
    fht_reorder(); // fht_run()のために、入力データの並び順を変える
    fht_run(); // FFTを実行し、fht_input[]に格納
    fht_mag_log(); // FFTの結果の絶対値の対数を計算し、fht_log_out[]に格納
    sei();  // 割り込み許可
    // PCへデータを送信。ここを変更するのは可。
    Serial.print( "0\n0\n0\n0\n" );
    for( int i=0; i<FHT_N/2; i++ )
      Serial.println(fht_log_out[i]); // i番目の結果を送信
  }
}

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS