Osoyoo Arduino LEDデジタル表示管で4桁の数字を表示する

Prev:74HC595 シフトレジスターを使って、直列入力並列出力プロジェクト

今回は7SEG LED(7SegmentLED)の点灯みたいっす。

ちょっと配線がめんどいっすー。

本家の配線図(イメージ)だと大きいブレッドボードなのかな?

自分が買ったサイズは小さくて乗せれないので空中配線にしましたw

配線図は小さな基板上で記載してますが、実際は空中配線です。

実際の配線。7SEGLEDひっくり返ってますw

/* Display 4-digit numbers on a 5643S Dixie LED tube
 * copyright Yilun Yu
 * tutorial: https://osoyoo.com/?p=222
 */
int a = 1;
int b = 2;
int c = 3;
int d = 4;
int e = 5;
int f = 6;
int g = 7;
int p = 8;

int d4 = 9;
int d3 = 10;
int d2 = 11;
int d1 = 12;

int x = 100;
long del = 600;
int interval=50000;

void setup()
{
	pinMode(d1, OUTPUT);
	pinMode(d2, OUTPUT);
	pinMode(d3, OUTPUT);
	pinMode(d4, OUTPUT);
	pinMode(a, OUTPUT);
	pinMode(b, OUTPUT);
	pinMode(c, OUTPUT);
	pinMode(d, OUTPUT);
	pinMode(e, OUTPUT);
	pinMode(f, OUTPUT);
	pinMode(g, OUTPUT);
	pinMode(p, OUTPUT);
}

void loop()
{ 
	long i;

	for (i=0;i<1000000;i++)
	{
		showNum(i);
	}

}
void showNum(long n)
{
	clearLEDs();
	pickDigit(1);
	pickNumber((n/x/1000)%10);
	delayMicroseconds(del);

	clearLEDs();
	pickDigit(2);
	pickNumber((n/x/100)%10);
	delayMicroseconds(del);

	clearLEDs();
	pickDigit(3);
	dispDec(3);
	pickNumber((n/x/10)%10);
	delayMicroseconds(del);

	clearLEDs();
	pickDigit(4);
	pickNumber(n/x%10);
	delayMicroseconds(del);

	n++;

	if (digitalRead(13) == HIGH)
	{
		n = 0;
	}

}

void pickDigit(int x)
{
	digitalWrite(d1, HIGH);
	digitalWrite(d2, HIGH);
	digitalWrite(d3, HIGH);
	digitalWrite(d4, HIGH);

	switch(x)
	{
		case 1:
			digitalWrite(d1, LOW);
			break;
		case 2:
			digitalWrite(d2, LOW);
			break;
		case 3:
			digitalWrite(d3, LOW);
			break;
		default:
			digitalWrite(d4, LOW);
			break;
	}
}

void pickNumber(int x)
{
	switch(x)
	{
	default:
		zero();
		break;
	case 1:
		one();
		break;
	case 2:
		two();
		break;
	case 3:
		three();
		break;
	case 4:
		four();
		break;
	case 5:
		five();
		break;
	case 6:
		six();
		break;
	case 7:
		seven();
		break;
	case 8:
		eight();
		break;
	case 9:
		nine();
		break;
	}
}

void dispDec(int x)
{
	digitalWrite(p, HIGH);
}

void clearLEDs()
{
	digitalWrite(a, LOW);
	digitalWrite(b, LOW);
	digitalWrite(c, LOW);
	digitalWrite(d, LOW);
	digitalWrite(e, LOW);
	digitalWrite(f, LOW);
	digitalWrite(g, LOW);
	digitalWrite(p, LOW);
}

void zero()
{
	digitalWrite(a, HIGH);
	digitalWrite(b, HIGH);
	digitalWrite(c, HIGH);
	digitalWrite(d, HIGH);
	digitalWrite(e, HIGH);
	digitalWrite(f, HIGH);
	digitalWrite(g, LOW);
}

void one()
{
	digitalWrite(a, LOW);
	digitalWrite(b, HIGH);
	digitalWrite(c, HIGH);
	digitalWrite(d, LOW);
	digitalWrite(e, LOW);
	digitalWrite(f, LOW);
	digitalWrite(g, LOW);
}

void two()
{
	digitalWrite(a, HIGH);
	digitalWrite(b, HIGH);
	digitalWrite(c, LOW);
	digitalWrite(d, HIGH);
	digitalWrite(e, HIGH);
	digitalWrite(f, LOW);
	digitalWrite(g, HIGH);
}

void three()
{
	digitalWrite(a, HIGH);
	digitalWrite(b, HIGH);
	digitalWrite(c, HIGH);
	digitalWrite(d, HIGH);
	digitalWrite(e, LOW);
	digitalWrite(f, LOW);
	digitalWrite(g, HIGH);
}

void four()
{
	digitalWrite(a, LOW);
	digitalWrite(b, HIGH);
	digitalWrite(c, HIGH);
	digitalWrite(d, LOW);
	digitalWrite(e, LOW);
	digitalWrite(f, HIGH);
	digitalWrite(g, HIGH);
}

void five()
{
	digitalWrite(a, HIGH);
	digitalWrite(b, LOW);
	digitalWrite(c, HIGH);
	digitalWrite(d, HIGH);
	digitalWrite(e, LOW);
	digitalWrite(f, HIGH);
	digitalWrite(g, HIGH);
}

void six()
{
	digitalWrite(a, HIGH);
	digitalWrite(b, LOW);
	digitalWrite(c, HIGH);
	digitalWrite(d, HIGH);
	digitalWrite(e, HIGH);
	digitalWrite(f, HIGH);
	digitalWrite(g, HIGH);
}

void seven()
{
	digitalWrite(a, HIGH);
	digitalWrite(b, HIGH);
	digitalWrite(c, HIGH);
	digitalWrite(d, LOW);
	digitalWrite(e, LOW);
	digitalWrite(f, LOW);
	digitalWrite(g, LOW);
}

void eight()
{
	digitalWrite(a, HIGH);
	digitalWrite(b, HIGH);
	digitalWrite(c, HIGH);
	digitalWrite(d, HIGH);
	digitalWrite(e, HIGH);
	digitalWrite(f, HIGH);
	digitalWrite(g, HIGH);
}

void nine()
{
	digitalWrite(a, HIGH);
	digitalWrite(b, HIGH);
	digitalWrite(c, HIGH);
	digitalWrite(d, HIGH);
	digitalWrite(e, LOW);
	digitalWrite(f, HIGH);
	digitalWrite(g, HIGH);
}

LEDの点灯情報が多いのでソースコードが多いですね。

で、これをArduinoに転送すると、7SEGLEDの数字がカウントアップしていきます。

今回は7SEGLEDを初めて使う人には面白かったんじゃないかな?

自分も昔初めて7SEGLEDで表示させる時にデータ間違えて、変な形の表示した失敗を思い出しつつ、今回は楽しみました。約30年前の思い出ですがwww

Next:1桁LEDデジタル表示管1個

シェアする

  • このエントリーをはてなブックマークに追加

フォローする