[貂蝉がプログラミングを学ぶ] Arduino ハンズオン (99) --- 8X32 LED ドット マトリックス スクリーン モジュール 4

37 個のセンサーとアクチュエーターに関する言及はインターネット上で広く広まっていますが、実際には、Arduino と互換性のあるセンサー モジュールは 37 個以上あるはずです。手持ちのセンサーとアクチュエーターのモジュールがいくつかあるという事実を考慮して、学習とコミュニケーションの目的で、真の知識を実践する(やらなければならない)というコンセプトに従って、一連の実験を試してみるつもりです。 1つは、成功(プログラムが完了する)かどうかに関係なく、他の人にインスピレーションを与えることを期待して、小さな進歩や解決できない問題などを記録します。

【Arduino】168種類のセンサーモジュールシリーズ実験(データコード+シミュレーションプログラミング+グラフィックスプログラミング)
実験99:8X32 LEDドットマトリクスディスプレイモジュール MAX7219出力カソードコモン5V 4ビットドットマトリクスモジュール

ここに画像の説明を挿入

知識ポイント: MAX7219 は
、米国の MAXIM 社が発売した多桁 LED ディスプレイ ドライバです. データの送信に 3 線式シリアル インターフェイスを使用しており、シングルチップ インターフェイスに直接接続できます. ユーザーはその内部を簡単に変更できます多桁LED表示を実現するためのパラメータです。ハードウェアダイナミックスキャン回路、BCDデコーダ、セグメントドライバ、ビットドライバが含まれています。さらに、内部には 8X8 ビットのスタティック RAM が含まれており、8 桁の表示データを保存するために使用されます。明らかに、64 セグメント LED ドットマトリックス ディスプレイを直接駆動できます。複数のMAX7219をカスケード接続すると、より多くのLEDドットマトリックスディスプレイを制御できます。表示されたデータはシングルチップマイコンで処理された後、MAX7219に送信されて表示されます。

MAX7219/MAX7221は、マイクロプロセッサを8桁7セグメントLEDディスプレイ、バーグラフディスプレイまたは64個の個別LEDに接続する統合シリアル入出力コモンカソードディスプレイドライバです。オンチップのBタイプBCDエンコーダ、マルチチャンネルスキャン回路、セグメントドライバ、各データを保存する8*8スタティックRAMを内蔵しています。各 LED のセグメント電流を設定するために使用される外部レジスタは 1 つだけです。MAX7221はSPI™、QSPI™、およびMICROWIRE™と互換性があり、スルー電流を制限してEMI(電磁妨害)を低減するセグメントドライブを備えています。便利な 4 線式シリアル インターフェイスは、すべての一般的なマイクロプロセッサと接続できます。すべての表示を書き換えることなく、各データのアドレスを更新できます。MAX7219/MAX7221では、各データをエンコードするかどうかをユーザーが選択することもできます。デバイス全体には、150μAの低電力シャットダウンモード、アナログおよびデジタル輝度制御、ユーザーが1~8ビットのデータを表示できるスキャンリミットレジスタ、およびすべてのLEDを点灯させる検出モードが含まれています。

ここに画像の説明を挿入
8X32 LED ドットマトリックスディスプレイモジュール MAX7219 出力コモンカソード 5V 4 ビットドットマトリックスモジュール

8X32 LEDドットマトリックスディスプレイカスケードモジュールのMAX7219は、統合型シリアル入出力コモンカソードディスプレイドライバで、マイクロプロセッサと8桁7セグメントデジタルLEDディスプレイを接続し、棒グラフディスプレイまたは64個の個別ディスプレイにも接続できます。 LED。オンチップのBタイプBCDエンコーダ、マルチチャンネルスキャン回路、セグメントドライバ、各データを保存する8*8スタティックRAMを内蔵しています。各 LED のセグメント電流を設定するために使用される外部レジスタは 1 つだけです。便利な 4 線式シリアル インターフェイスは、すべての一般的なマイクロプロセッサと接続できます。すべての表示を書き換えることなく、各データのアドレスを更新できます。MAX7219では、各データをエンコードするかどうかをユーザーが選択することもできます。デバイス全体には、150μAの低電力シャットダウンモード、アナログおよびデジタルの輝度制御、ユーザーが1~8ビットのデータを表示できるスキャンリミットレジスタ、およびすべてのLEDを点灯させる検出モードが含まれています。1 つのドットマトリックスを駆動するのに必要な IO ポートは 3 つだけです。ドットマトリクス表示時のちらつきなし!カスケードがサポートされています。

ここに画像の説明を挿入
8X32 LED ドットマトリックス ディスプレイ モジュールの参考回路図

ここに画像の説明を挿入
ここに画像の説明を挿入
Arduino実験の配線図

ここに画像の説明を挿入
【HuaDiao ハンズオン】面白くて楽しい音楽視覚化シリーズの小さなプロジェクト (08) - 4 桁 32 セグメント ドットマトリックス スクリーン
プロジェクト 2: マルチファイル arduinoFFT 浮動小数点 32 セグメント スペクトラム アナライザー

実験的なオープンソース コード

/*
  【花雕动手做】有趣好玩的音乐可视化系列小项目(08)---四位32段点阵屏
  项目之二:多档arduinoFFT浮点32段频谱仪
  接脚连线:MAX9814 接A0
  MAX7219 UNO
  VCC →→→→→ 5V
  GND →→→→→ GND
  DIN →→→→→ D11(数据,数据接收引脚)
  CS →→→→→ D10(负载,命令接收引脚)
  CLK →→→→→ D13(时钟,时钟引脚)
*/

#include <arduinoFFT.h>
#include <MD_MAX72xx.h>
#include <SPI.h>

#define SAMPLES 64
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
#define MAX_DEVICES  4
#define CLK_PIN   13
#define DATA_PIN  11
#define CS_PIN    10
#define  xres 32
#define  yres 8


int MY_ARRAY[] = {
    
    0, 128, 192, 224, 240, 248, 252, 254, 255};
int MY_MODE_1[] = {
    
    0, 128, 192, 224, 240, 248, 252, 254, 255};
int MY_MODE_2[] = {
    
    0, 128, 64, 32, 16, 8, 4, 2, 1};
int MY_MODE_3[] = {
    
    0, 128, 192, 160, 144, 136, 132, 130, 129};
int MY_MODE_4[] = {
    
    0, 128, 192, 160, 208, 232, 244, 250, 253};
int MY_MODE_5[] = {
    
    0, 1, 3, 7, 15, 31, 63, 127, 255};


double vReal[SAMPLES];
double vImag[SAMPLES];
char data_avgs[xres];

int yvalue;
int displaycolumn , displayvalue;
int peaks[xres];
const int buttonPin = 2;
int state = HIGH;
int previousState = LOW;
int displaymode = 1;
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50;


MD_MAX72XX mx = MD_MAX72XX(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
arduinoFFT FFT = arduinoFFT();



void setup() {
    
    

  ADCSRA = 0b11100101;
  ADMUX = 0b00000000;
  pinMode(buttonPin, INPUT);
  mx.begin();
  delay(50);
}

void loop() {
    
    
  // ++ Sampling
  for (int i = 0; i < SAMPLES; i++)
  {
    
    
    while (!(ADCSRA & 0x10));
    ADCSRA = 0b11110101 ;
    int value = ADC - 512 ;
    vReal[i] = value / 8;
    vImag[i] = 0;
  }

  FFT.Windowing(vReal, SAMPLES, FFT_WIN_TYP_HAMMING, FFT_FORWARD);
  FFT.Compute(vReal, vImag, SAMPLES, FFT_FORWARD);
  FFT.ComplexToMagnitude(vReal, vImag, SAMPLES);

  int step = (SAMPLES / 2) / xres;
  int c = 0;
  for (int i = 0; i < (SAMPLES / 2); i += step)
  {
    
    
    data_avgs[c] = 0;
    for (int k = 0 ; k < step ; k++) {
    
    
      data_avgs[c] = data_avgs[c] + vReal[i + k];
    }
    data_avgs[c] = data_avgs[c] / step;
    c++;
  }

  for (int i = 0; i < xres; i++)
  {
    
    
    data_avgs[i] = constrain(data_avgs[i], 0, 80);
    data_avgs[i] = map(data_avgs[i], 0, 80, 0, yres);
    yvalue = data_avgs[i];

    peaks[i] = peaks[i] - 1;
    if (yvalue > peaks[i])
      peaks[i] = yvalue ;
    yvalue = peaks[i];
    displayvalue = MY_ARRAY[yvalue];
    displaycolumn = 15 - i;
    mx.setColumn(displaycolumn, displayvalue);
  }

  displayModeChange ();
}

void displayModeChange() {
    
    
  int reading = digitalRead(buttonPin);
  if (reading == HIGH && previousState == LOW && millis() - lastDebounceTime > debounceDelay)

  {
    
    

    switch (displaymode) {
    
    
      case 1:
        displaymode = 2;
        for (int i = 0 ; i <= 8 ; i++ ) {
    
    
          MY_ARRAY[i] = MY_MODE_2[i];
        }
        break;
      case 2:
        displaymode = 3;
        for (int i = 0 ; i <= 8 ; i++ ) {
    
    
          MY_ARRAY[i] = MY_MODE_3[i];
        }
        break;
      case 3:
        displaymode = 4;
        for (int i = 0 ; i <= 8 ; i++ ) {
    
    
          MY_ARRAY[i] = MY_MODE_4[i];
        }
        break;
      case 4:
        displaymode = 5;
        for (int i = 0 ; i <= 8 ; i++ ) {
    
    
          MY_ARRAY[i] = MY_MODE_5[i];
        }
        break;
      case 5:
        displaymode = 1;
        for (int i = 0 ; i <= 8 ; i++ ) {
    
    
          MY_ARRAY[i] = MY_MODE_1[i];
        }
        break;
    }

    lastDebounceTime = millis();
  }
  previousState = reading;
}

【HuaDiao ハンズオン】面白くて楽しい音楽視覚化シリーズの小さなプロジェクト (08) - 4 桁 32 セグメント ドットマトリックス スクリーン
プロジェクト 2: マルチファイル arduinoFFT 浮動小数点 32 セグメント スペクトラム アナライザー

実験ビデオクリップ 1
https://v.youku.com/v_show/id_XNTgyMTY3NTQwNA==.html?spm=a2hcb.playlsit.page.1

実験シーンの動態図

ここに画像の説明を挿入

【HuaDiao ハンズオン】面白くて楽しい音楽視覚化シリーズの小さなプロジェクト (08) - 4 桁 32 セグメント ドットマトリックス スクリーン
プロジェクト 2: マルチファイル arduinoFFT 浮動小数点 32 セグメント スペクトラム アナライザー

実験ビデオクリップ 7
https://v.youku.com/v_show/id_XNTgyMjA0MTI1Mg==.html?spm=a2hcb.playlsit.page.1

実験風景ダイナミックフィギュア7
ここに画像の説明を挿入

【HuaDiao ハンズオン】面白くて楽しい音楽視覚化シリーズの小さなプロジェクト (08) - 4 桁 32 セグメント ドットマトリックス スクリーン
プロジェクト 2: マルチファイル arduinoFFT 浮動小数点 32 セグメント スペクトラム アナライザー

実験ビデオクリップ 8
https://v.youku.com/v_show/id_XNTgyMjA0MTM2MA==.html?spm=a2hcb.playlsit.page.1

実験風景ダイナミックダイアグラム8
ここに画像の説明を挿入

【HuaDiao ハンズオン】興味深く楽しい音楽視覚化シリーズの小規模プロジェクト (08) - 4 桁の 32 セグメントのドットマトリックス スクリーン
プロジェクト 3: 赤と緑の 32 セグメントのカスケード スペクトル ドットマトリックス スクリーン ライト (FFT アルゴリズム)

実験的なオープンソース コード

/*
  【花雕动手做】有趣好玩的音乐可视化系列小项目(08)---四位32段点阵屏
  项目之三:红绿色32段级联频谱点阵屏灯(FFT算法)
  接脚连线:MAX9814 接A0
  MAX7219 UNO
  VCC →→→→→ 5V
  GND →→→→→ GND
  DIN →→→→→ D11(数据,数据接收引脚)
  CS →→→→→ D10(负载,命令接收引脚)
  CLK →→→→→ D13(时钟,时钟引脚)
*/

#include <arduinoFFT.h>

#include <MD_MAX72xx.h>

#include <SPI.h>

MD_MAX72XX disp = MD_MAX72XX(MD_MAX72XX::FC16_HW, 10, 1);

arduinoFFT FFT = arduinoFFT();

double realComponent[64];

double imagComponent[64];

int spectralHeight[] = {
    
    0b00000000, 0b10000000, 0b11000000,

                        0b11100000, 0b11110000, 0b11111000,

                        0b11111100, 0b11111110, 0b11111111
                       };

int index, c, value;

void setup()

{
    
    

  disp.begin();

  Serial.begin(9600);

}

void loop()

{
    
    

  int sensitivity = map(analogRead(A0), 0, 1023, 50, 100);

  Serial.println (analogRead(A0));

  for (int i = 0; i < 64; i++)

  {
    
    

    realComponent[i] = analogRead(A7) / sensitivity;

    imagComponent[i] = 0;

  }

  FFT.Windowing(realComponent, 64, FFT_WIN_TYP_HAMMING, FFT_FORWARD);

  FFT.Compute(realComponent, imagComponent, 64, FFT_FORWARD);

  FFT.ComplexToMagnitude(realComponent, imagComponent, 64);

  for (int i = 0; i < 32; i++)

  {
    
    

    realComponent[i] = constrain(realComponent[i], 0, 80);

    realComponent[i] = map(realComponent[i], 0, 80, 0, 8);

    index = realComponent[i];

    value = spectralHeight[index];

    c = 31 - i;

    disp.setColumn(c, value);

  }

}

【HuaDiao ハンズオン】興味深く楽しい音楽視覚化シリーズの小規模プロジェクト (08) - 4 桁の 32 セグメントのドットマトリックス スクリーン
プロジェクト 3: 赤と緑の 32 セグメントのカスケード スペクトル ドットマトリックス スクリーン ライト (FFT アルゴリズム)

実験ビデオクリップ 2

https://v.youku.com/v_show/id_XNTgyMTc1NTk2OA==.html?spm=a2hcb.playlsit.page.1

実験シーン動態図2

ここに画像の説明を挿入

【HuaDiao ハンズオン】面白くて楽しい音楽視覚化シリーズの小さなプロジェクト
プロジェクト 4: FFT アルゴリズムを備えたダイナミック スペクトラム アナライザー デュアル ドット マトリックス スクリーン

実験的なビデオクリップ

https://v.youku.com/v_show/id_XNTgyMjEwNjcwMA==.html?spm=a2hcb.playlsit.page.1

実験シーングラフ

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/weixin_41659040/article/details/131990543