見出し画像

M5stack Core2で7セグLEDの制御

今日突然、電子回路とか何もわからんかった頃にただカッコイイからという理由で購入した7セグLEDを思い出しました。そして、せっかくなのでその7セグLEDを使って、数字を1秒ごとにカウントアップする回路を作ってみました。
こちらの記事を参考にさせていただきました。
https://burariweb.info/electronic-work/arduino-learning/arduino-7segment-led.html

環境

使用マイコン: M5stack Core2
7セグLED: R362T(アノードコモン)

設計

アノードコモン(+側が共通)の7セグLEDを使用するので、+側を3.3V端子と接続します。
後は以下の記事を参考に、適当に繋ぎます。今回はこのように繋ぎました。
a → G13
b → G32
c → G27
d → G25
e → G26
f → G14
g → G19

ピンをつなぐ際参考にした記事
https://lang-ship.com/blog/work/m5stack-core2-gpio/


プログラム

以下は1秒ごとにLEDの数字をカウントアップし、9を越えたらまた0に戻って表示するプログラムです。こちらは冒頭に貼った記事のプログラムをM5Core2向けに改変したものです。そのため、詳しい解説は省き、変更点のみ解説します。

#include <Arduino.h>
#include <M5Core2.h>

//0から9までの7セグ表示の真理値表
boolean seg[10][7] = {
// a b c d e f g
  {1,1,1,1,1,1,0},  // 0
  {0,1,1,0,0,0,0},  // 1
  {1,1,0,1,1,0,1},  // 2
  {1,1,1,1,0,0,1},  // 3
  {0,1,1,0,0,1,1},  // 4
  {1,0,1,1,0,1,1},  // 5
  {1,0,1,1,1,1,1},  // 6
  {1,1,1,0,0,0,0},  // 7
  {1,1,1,1,1,1,1},  // 8
  {1,1,1,1,0,1,1}   // 9
};

//7セグ表示に使用するピン(a,b,c,d,e,f,gの順)
int segPin[7] = {13, 32, 27, 25, 26, 14, 19};

//入力された数字を7セグLEDに表示する関数
void toSeg(int i) {
  for(int j = 0; j < 7; j++) {
    digitalWrite(segPin[j], !seg[i][j]);
  }
}

void setup() {
  M5.begin();

  //ピンモードの設定
  for(int i = 0; i < 7; i++) {
    pinMode(segPin[i], OUTPUT);
  }
}

void loop() {
  //1秒ごとに表示をカウントアップ
  for(int i = 0; i < 10; i++) {
    toSeg(i);
    delay(1000);
  }
}

参考元の記事ではArduinoUNO互換機を使用しているので、最終的に割り当てるピン番号を連番にしていますが、M5Core2はピン番号が飛び飛びになっているので、ピン番号の配列を宣言して簡潔に書けるようにしました。

完成形

左側にある押しボタンと抵抗は関係ありません。
正常に動いていますね。

この記事が気に入ったらサポートをしてみませんか?