📝
DFR0090をArduinoで制御する
はじめに
秋月電子通商で販売されている「SPI(3線式) LED Module 8 Digital (8桁赤色7セグLEDモジュール)」をArduinoで光らせる方法をメモしておきます。
配線
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