プログラミング素人のはてなブログ

プログラミングも電気回路も専門外の技術屋の末端が勉強したことや作品をアウトプットするブログ。コードに間違いなど見つけられたら、気軽にコメントください。 C#、Python3、ラズパイなど。

LED Cube 3x3x3

3x3x3 の3次元のLED Cubeができました。

f:id:s51517765:20190105114907j:plain

ハード構成としては、3x3のときと同じ様なものをさらに2段作ります。
ただし、LEDのカソードは一段目と共通にすることを注意しながら組み立てます。

f:id:s51517765:20190105114919j:plain


アノード側は1段目と同じですが、カソードは一段目に接続するために足を折り曲げずに置いておきます。
これをはんだつけによって、立体的に積み上げていきます。
赤いリード線(カソード側)がついているほうにこの伸ばしたままにした足をつけます。

写りこんでいるピンセットは、逆作動ピンセットと言って手を緩めたとき閉じるようになっています。 

アネックス(ANEX) ステンレスピンセット 逆作動(小) No.134
 

 

f:id:s51517765:20190105114931j:plain

なにかと活用できます。

さて、プログラミングですが、LEDを一つずつ制御する関数はつくりましたが、これをさらに発展させて、因数を持たせてLEDを制御するようにします。
↓のような因数をもつ関数をつくり、

 int LED(int);  //プロトタイプ宣言

そのなかで、Noに応じてLEDを変化させるために
ifで条件分けします。

また、LEDが27個に増えているのでアノード(マイナス側)は9本に増えています。
また、この関数では計算結果を数値として返すことはしないので "int"で定義しても "void"で定義してもいいようです。
ここではintのままにしておきます。
また、delay(LEDを点灯したままにしておく)が毎回必要そうなので、これもあらかじめ関数に組み込んでおきます。

/*↓LEDを一つずつONするための関数*/
int LED(int no) {
if (no == 1) {
//1
digitalWrite(2, HIGH); //+ 消したいとき
digitalWrite(3, LOW); //+
digitalWrite(4, LOW); //+
digitalWrite(5, LOW); //-
digitalWrite(6, HIGH); //-
digitalWrite(8, HIGH); //-
digitalWrite(9, HIGH); //-
digitalWrite(10, HIGH); //-
digitalWrite(11, HIGH); //-
digitalWrite(A0, HIGH); //-
digitalWrite(A1, HIGH); //-
digitalWrite(A2, HIGH); //-
delay(wait);
return 0;
}
else if (no == 2) {
//2
digitalWrite(2, LOW); //+
digitalWrite(3, HIGH); //+
digitalWrite(4, LOW); //+
digitalWrite(5, LOW); //-
digitalWrite(6, HIGH); //-
digitalWrite(8, HIGH); //-
digitalWrite(9, HIGH); //-
digitalWrite(10, HIGH); //-
digitalWrite(11, HIGH); //-
digitalWrite(A0, HIGH); //-
digitalWrite(A1, HIGH); //-
digitalWrite(A2, HIGH); //-
delay(wait);
return 0;
}

 

for(j=1;j< times/2;j++){
LED1();
delay(wait);
LED0();
delay(wait);
LED2();
delay(wait);

↑のように書いていたものが↓になります。

for(j=1;j< times/2;j++){
LED(1);
LED(2);


ひとつずつ順番に点けているだけならこれでもよいですが、27個となるとそれも結構大変なので、Noだけを入力すればいいようにします。

/*LED 5連続Pattern*/
void ptn8(int p1, int p2, int p3, int p4, int p5, int p6, int p7, int p8) {
LED(p1);
LED(p2);
LED(p3);
LED(p4);
LED(p5);
LED(p6);
LED(p7);
LED(p8);
}

LED No.を引数として、関数に引数を渡す関数を作成します。
関数 in 関数ですね。こんなこともできます。

8連続パターン、9連続パターン、5連続パターンの3種類を作りました。
もっとこまかく、2~27とかも作ってもいいですが、たとえば、4なら2回同じことを書けば8で使えるので、これは、どのようにすれば一番労力を節約できるか?というだけのことです。

ここでは、関数を"int"ではなく"Void"で作成しましたので、

return 0; 

は要らなくなります。

あとは、↓のようなLEDの配置をイメージしながらパターンを作っていきます。


長くなったので、動画とソース全文は次の記事。

s51517765.hatenadiary.jp