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

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実験の配線図

ここに画像の説明を挿入

実験的なオープンソース グラフィックス プログラミング (Mind+、プログラミングと学習)

ここに画像の説明を挿入
ここに画像の説明を挿入

実験的なオープンソース シミュレーション プログラミング (Linkboy V5.33)

ここに画像の説明を挿入
【HuaDiao ハンズオン】面白くて楽しい音楽視覚化シリーズの小規模プロジェクト (08) - 4 桁の 32 セグメントのドットマトリックス スクリーン プロジェクトの 1 つ: 8
セグメント周波数分割 8X8 ドットマトリックス スクリーン 音楽スペクトル ライト ピン
接続: MAX9814~A0
MAX7219 UNO
VCC →→→→→ 5V
GND →→→→→ GND
DIN →→→→→ D11 (データ、データ受信ピン)
CS →→→→→ D10 (負荷、コマンド受信ピン)
CLK →→ →→→ D13 (クロック、クロックピン)

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

#include "LedControl.h"

/* Led matrix - Max7219 Declared */
LedControl lc = LedControl(11, 13, 10, 1);

const int maxScale = 11;

/* Sensor - Max9812 Declared */
const int sensorPin = A0;
const int sampleWindow = 50; // 50ms = 20Hz
unsigned int sample;

unsigned long startMillis;
unsigned long timeCycle;

unsigned int signalMax = 0;
unsigned int signalMin = 1024;
unsigned char index = 0;

unsigned int peakToPeak[8];
unsigned int displayPeak[8];
unsigned int temp[8] = {
    
    0, 0, 0, 0, 0, 0, 0, 0};
unsigned int signalMaxBuff[8];
unsigned int signalMinBuff[8];


void setup() {
    
    
  // Led matrix
  lc.shutdown(0, false); // bật hiện thị
  lc.setIntensity(0, 2); // chỉnh độ sáng
  lc.clearDisplay(0); // tắt tất cả led

  Serial.begin(9600);
}

void loop() {
    
    
  startMillis = millis();
  //peakToPeak = 0;

  signalMax = 0;
  signalMin = 1024;

  // Get data in 50ms
  while (millis() - startMillis < sampleWindow) {
    
    
    sample = analogRead(sensorPin);

    if (sample < 1024) {
    
    
      if (sample > signalMax) {
    
    
        signalMax = sample;
      }
      if (sample < signalMin) {
    
    
        signalMin = sample;
      }
    }

    // 20Hz - 64Hz - 125Hz - 250Hz - 500Hz - 1kHz (timeCycle = 1/F)(ms)
    timeCycle = millis() - startMillis;
    if (timeCycle == 1 || timeCycle == 2 || timeCycle == 4 || timeCycle == 8
        || timeCycle == 16 || timeCycle == 32 || timeCycle == 40 || timeCycle == 50) {
    
    
      signalMaxBuff[index] = signalMax;
      signalMinBuff[index] = signalMin;
      index = (index + 1) % 8;
      delay(1);
      Serial.println(timeCycle);
    }
  }

  // Delete pointer to array
  index = 0;

  // Calculation after get samples
  for (int i = 0; i < 8; i++) {
    
     // i = row (led matrix)
    // sound level
    peakToPeak[i] = signalMaxBuff[i] - signalMinBuff[i];

    // Map 1v p-p level to the max scale of the display
    displayPeak[i] = map(peakToPeak[i], 0, 1023, 0, maxScale);

    // Show to led matrix
    displayLed(displayPeak[i], i);

    // Led drop down
    if (displayPeak[i] >= temp[i]) {
    
    
      temp[i] = displayPeak[i];
    }
    else {
    
    
      temp[i]--;
    }

    lc.setLed(0, i, temp[i], true);
    delayMicroseconds(10);
  }

}

void displayLed(int displayPeak, int row) {
    
    
  switch (displayPeak) {
    
    
    case 0 : lc.setRow(0, row, 0x80); break;
    case 1 : lc.setRow(0, row, 0xC0); break;
    case 2 : lc.setRow(0, row, 0xE0); break;
    case 3 : lc.setRow(0, row, 0xF0); break;
    case 4 : lc.setRow(0, row, 0xF8); break;
    case 5 : lc.setRow(0, row, 0xFC); break;
    case 6 : lc.setRow(0, row, 0xFE); break;
    case 7 : lc.setRow(0, row, 0xFF); break;
  }
}

実験シーンの動態図

ここに画像の説明を挿入

実験的なビデオクリップ

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

ここに画像の説明を挿入

おすすめ

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