一列に並べたLEDを短い周期で点滅させ振ったときの残像で 表示物を作るものである。
ちなみに上の画像は下のフリスクを振りまくって撮影しました
下は中身です。かなり汚いです。
test.c
CCS-Cを利用しています
1 void main(){ timer=0;timer2=0; move=0;kind=0;check=0b00000001; 2 while(1){move=0; 3 delay_us(200); 4 if(input(PIN_A1)==0){ 5 move++; 6 kind=0; 7 output_bit(PIN_B0,1); //ぜんけし 8 output_bit(PIN_B1,1); 9 output_bit(PIN_B2,1); 0 output_bit(PIN_B3,1); 10 output_bit(PIN_B4,1); 11 output_bit(PIN_B5,1); 12 output_bit(PIN_A0,1); 13 delay_ms(10);//文字が始まるまでの時間 14 if(check==0b00000001)aisiteru(); 15 else if(check==0b00000010)tasukete(); 16 else{ 17 movelet(timer++); 18 if(timer>49) timer=0; 19 } 20 } 21 else{ 22 kind++; 23 //delay_ms(6); 24 if(kind>12000){ 25 kind=12001; 26 if(check==0b10000000) check=0b00000001; 27 else check=check<<1; 28 output_b(~check); 29 delay_ms(1000); 30 } 31 32 } 33 } 34 }
プログラムのメイン部です。 ここでは、全体の流れのみが書かれています。 やっていることは、単純で水銀スイッチが押されたら(4行目)、表示スタート。 表示一回分が終わったらまた水銀スイッチが押されているか見に行きます。 これが押されていない状態が、12000(24行目)*200μ秒(3行目)以上続くと 表示文字選択モード(24~30行目)に移行します。 プログラムはページ下のtest.cです。興味見たい方はどうぞ。 test.cを見る方ように表示部分のプログラムも少し説明します。 上のプログラムのaisiteru();などが表示をしている部分です。 1msごとにLEDを点灯させるかどうか判断しています。判断するために配列 を用意しています。それが、test.cの5~68行目に書かれている配列です。 PICマイコンは持っているメモリが非常に少ないので本当は2次元配列にして 表示内容を作ってやると楽なのですが、これはint形(8bit)を配列の2次元目 の代わりに使い使用メモリを減らしています。めんどくさかったのでここでは 利用する文字のみしか作っていませんが、この方法ならアルファベットは全文字 いけるはずです。なお今回は
を利用しました。 このフォントは7*7でほぼすべての文字を表現可能との事だったため今回の バーサライタには最適でした。
今回のメインです。バーサライタ自体は、システム的には簡単なもので、 工夫したのは、文字列選択モードを作ったことくらいです。今回大変だったのは 実装部分です。具体的には”フリスクをバーサライタにしよう”ということ です。
そのため選んだ部品は、安い小さいの二つに気を配りました。
PIC16f88 ちょっと大きいがPIN数てきに仕方なし CR2032 & 電池ホルダー 小型化に最適ボタン電池 LED緑 これは部品ミスだった。もっと広角タイプが良かった 水銀スイッチ たまたま大須で発見 フリスクケース 超重要部品 あと抵抗とかピンヘッダとかそんな感じ 合計で500円以内に収まってます。(フリスクケースはプライスレスで換算)
今回は、秋月の3mmのLEDを使ったが思ったより光が見える角度が狭く 見辛くなることがあった。チップLEDなら広角になるのでその方向で
そのままです。1色は寂しい
今回はフリスク実装ということで7つのLEDしかありません。次回は、 絵が表示できるようにたくさんのLEDをつけます。
シフトレジスタとトランジスタを使えばもっとたくさんできるはず。
今回は、手でバーサライタを振っています。自動で振ったほうがかっこいい にきまってる。
楽に作れるが、速度の制御が利かない
作るの難しいが、速度が作れる。