📝

DFR0090をArduinoで制御する

2024/05/14に公開

はじめに

秋月電子通商で販売されている「SPI(3線式) LED Module 8 Digital (8桁赤色7セグLEDモジュール)」をArduinoで光らせる方法をメモしておきます。
https://akizukidenshi.com/catalog/g/g106681/

配線

inputとoutputがあるので注意してください。基板上にプリントされています。

以下の通りArduinoと接続します。

Arduino Pin DFR0090 Pin
D3 LATCH
D8 CLOCK
D9 DATA
+5V VCC
GND GND

Arduino側ソースコード

//Pin connected to latch pin (ST_CP) of 74HC595
const int latchPin = 3;
//Pin connected to clock pin (SH_CP) of 74HC595
const int clockPin = 8;
//Pin connected to Data in (DS) of 74HC595
const int dataPin = 9;
//7SegLEDの数
const int ledArray = 8;

byte byteData[ledArray] = {0};
char strData[ledArray] = {0};

//表示させたい数字ledArrayの桁数以内
//8桁の場合-9999999から99999999
long number = 20240513;

void setup() {
  //set pins to output because they are addressed in the main loop
  pinMode(latchPin, OUTPUT);
  pinMode(dataPin, OUTPUT);  
  pinMode(clockPin, OUTPUT);
}

void loop() {
 sprintf(strData, "%ld", number);
 setDataFormat(strData, byteData);
 
 digitalWrite(latchPin, LOW);
 for(int i=ledArray-1; i>=0; i--){
     shiftOut(dataPin, clockPin, MSBFIRST, byteData[i]);
 }
 digitalWrite(latchPin, HIGH);
 
}

void setDataFormat(char* strData,byte *byteData){
  int numofNull=0;
  for(int i=0; i<ledArray; i++){
    switch(strData[i]){
      case '\0':
        byteData[i]=0xff;
        numofNull++;
        break;
      case '0': 
        byteData[i]=0xc0;
        break;
      case '1':
        byteData[i]=0xf9;
        break;
      case '2':
        byteData[i]=0xa4;
        break;
      case '3':
        byteData[i]=0xb0;
        break;
      case '4':
        byteData[i]=0x99;
        break;
      case '5':
        byteData[i]=0x92;
        break;
      case '6':
        byteData[i]=0x82;
        break;
      case '7':
        byteData[i]=0xf8;
        break;
      case '8':
        byteData[i]=0x80;
        break;
      case '9':
        byteData[i]=0x90;
        break;
      case '-':
        byteData[i]=0xbf;
        break;
    }
  }

  for(int i=0; i<numofNull; i++){
    byte tmp[ledArray];
    int j;
    for(int i =0; i<ledArray; i++){
      tmp[i]=byteData[i];
    }
    for(int i =0; i<ledArray; i++){
      if(i==0){
        j = ledArray-1;
      }else{
        j = i-1;
      }
      byteData[i] = tmp[j];
    }
  }
  
}

参考にさせていただいたサイト

Discussion