2進数アドベントケーキ🍰
Fusion360主催の #クリスマスオーナメントコンペ2019 に出品しました。
今年はアドベントカレンダーが流行ったので、私はクリスマスケーキを
模した2進数アドベントカレンダーの製作に取り組みました。
もともとArduino Nano用の箱型ケースは設計・製作していたのでLEDが
通る穴をあけた蓋を付けるだけなのですがクリームが覆われているような
形を意識しました。まあモデリング技術でいえばほかの参加者に到底およ
ばないので、実際に造形してコンセプト通りに動くようにしていきます。
とりあえず蓋をSTLに変換して出力。その間に出力ピンの対応を確認。
正しくは抵抗を挟んで電流等を調整する必要がありますがそのような
隙間もないので今回は直刺しでいきます。
プログラムは配列を活用しながら計算・出力していきます。
2進数⇒10進数の変換は忘れかけていましたがこちらのサイトに救われました。
C言語入門 - 10進数を2進数に変換 - サンプルプログラム - Webkaru
int day=17; int value[5]; int anode[]={11,8,5,2,0}; int casode[]={1,4,7,10}; void setup() { //Serial.begin(9600); pinMode(0, OUTPUT); //2^0 pinMode(1, OUTPUT); //GND pinMode(2, OUTPUT); //2^1 pinMode(4, OUTPUT); //GND pinMode(5, OUTPUT); //2^2 pinMode(7, OUTPUT); //GND pinMode(8, OUTPUT); //2^3 pinMode(10, OUTPUT); //GND pinMode(11, OUTPUT); //2^4 for(int p=0;p<4;p++){ digitalWrite(casode[p], LOW); } } /* 10進数-->2進数変換関数 */ void ChangeFunc( unsigned long int DecimalNumber, /* 10進数[in] */ char* BinaryString) /* 2進数文字列化[out] */ { int i,k; for(i = 0, k = 4; k >= 0; i++, k--) { if((DecimalNumber >> i) & 1)BinaryString[k] = '1'; else BinaryString[k] = '0'; } BinaryString[i] = '\0'; } void loop() { int i; char BinaryString[5]; /* 2進数文字列化 */ ChangeFunc( day, /* 10進数[in] */ BinaryString); /* 2進数文字列化[out] */ /* シリアルポートに文字列を出力 */ /*Serial.print(day, DEC); Serial.print("\n"); Serial.print(BinaryString); Serial.print("\n"); */ for(int i=0;i<5;i++){ if(BinaryString[i]=='1'){ digitalWrite(anode[i], HIGH); } else digitalWrite(anode[i], LOW); } delay(86400000UL); day = day-1; while(day<=0){ for(int s=0;s<5;s++){ digitalWrite(anode[s], HIGH); } delay(1000); for(int n=0;n<5;n++){ digitalWrite(anode[n], LOW); } delay(1000); } }
シリアルポートを確認用に使っていましたがRX/TXのピンを出力に使って
いるためコメントアウトしています。
カレンダーと言いながら、カウントダウンになってしまいましたが
クリスマスまで問題なく動いてくれると信じて常設しておきます🎅
追伸:応募方法ミスってました。悲しみながらデータ共有の用意を致しましたので
是非皆さん作ってみてください😭
https://a360.co/2rfe0O2