メカコレ機動部隊
「始めます」の回で三段空母を紫外線LEDで照らす動画をお見せしたが、一区切りにあたって作例としてご紹介。
照らすLEDは4個、ユニバーサル基板に固定してハンダ付け
台座にはダイソーで買ったLEDライトスタンドを使う。
スタンドの首が細いので導線はポリウレタン線、マイナスを共有して線の数を節約。
首を通した所でソケットにハンダ付けする。
PICは小さいので台座の電池ボックスの脇に収まってしまう。
その横にソケットを挿すピンヘッダをハンダ付けし、PICの足と繋げる。
マイナスは可変抵抗を通して電池ボックスのマイナスに繋がっている。
抵抗を可変抵抗にしているのは通常の電池を使う場合と(4.5V)、エネループを使う場合で(3.6V)適切な抵抗値が違うので変えられるようにしておこうという考え。
そもそも複数のLEDで抵抗を共有するのはダメらしいので、この作りは本当はよろしくないのだが、まあ動くのでいいかなと。
LEDのカバーはドメラーズを使うことにし、
底に穴を開けて中を削ってLED基盤を収めた。
これでドメラーズの下に発進誘導灯を点灯させる三段空母の図の出来上がり。
発光パターンは
1)後ろから前へ順送り発光を5回
2)後ろから前へ順次点灯していって全点灯
3)全点灯と全消灯を3回繰り返す
を1セットにして繰り返している。
プログラムは以下のようになっている。
while, for, if then などすでに説明した構文で出来ているのだが、2つだけ補足。
1) k++; は k=k+1; と同じ意味。
2) while (event==0) や if (count==5) の「==」は、右辺と左辺が同じ数値ならば、という意味。普通なら恒等関係はイコール「=」だがC言語(に限らず多くのプログラム言語)ではイコールを2つ並べた「==」で書かなくてはならない。
#include <xc.h>
#define _XTAL_FREQ 8000000
// CONFIG
#pragma config FOSC = INTOSCIO
#pragma config WDTE = OFF
#pragma config PWRTE = ON
#pragma config MCLRE = ON
#pragma config CP = OFF
#pragma config CPD = OFF
#pragma config BOREN = ON
#pragma config IESO = OFF
#pragma config FCMEN = OFF
void main(void)
{
OSCCON=0b01100000;
ANSEL= 0b00000000;
CMCON0=0b00000111;
WPU= 0b00000000;
TRISIO=0b00000000;
unsigned int a[10],k,count,event;
a[0]=0b00000000;
a[1]=0b00000001;
a[2]=0b00000011;
a[3]=0b00000110;
a[4]=0b00010100;
a[5]=0b00010000;
a[6]=0b00000001;
a[7]=0b00000011;
a[8]=0b00000111;
a[9]=0b00010111;
GPIO=0;
count=0;
event=0;
while(1)
{
while(event==0)
{
for(k=0;k<=5;k++)
{
GPIO=a[k];
__delay_ms(100);
}
count=count+1;
if(count==5)
{
count=0;
event=1;
}
}
GPIO=0;
__delay_ms(200);
for(k=6;k<=9;k++)
{
GPIO=a[k];
__delay_ms(300);
}
for(k=0;k<=3;k++)
{
GPIO=a[0];
__delay_ms(200);
GPIO=a[9];
__delay_ms(200);
}
GPIO=0;
__delay_ms(500);
event=0;
}
}