/* by angel91250
lightsaber ver.1
有伸縮功能
下一個版本要加入聲音
*/
int pin[] = {2,3,4,5,6,7,8};//我使用了七組LED,每組10顆,一共70顆
int pin9 = 9; //這是控制光鍵伸縮的pin
int flag = 0;
int var = 0; //pin9的狀態
int t = 1;
int T = 80; //每次多點(或熄滅)一組LED所需要的周期
int i = 0;
int j = 0;
void setup()
{
for( int i = 0; i < 7; i++)
{
pinMode(pin[i], OUTPUT);
digitalWrite(pin[i], HIGH);
}
pinMode(pin9, INPUT);
}
void loop()
{
while(true)
{
// flag 計數器
var = digitalRead(pin9);
if( var == 0 ) //若pin9為低電位,則光劍開始伸長
{
flag++;
j++;
if( flag > 6*T ) //等到全部點亮之後才會執行
{
flag = 6*T;
}
}
if( var != 0) //若pin9為高電位,則光劍開始縮短
{
flag--;
j--;
if( flag < 0)
{
flag = 0;
j=0;
i=0;
var = digitalRead(pin9);
for( int i = 0; i < 7; i++)
{
digitalWrite(pin[i], HIGH);
}
}
}
i = int(flag/T+1);
if( var == 0 && j > i-1)
{
j = 0;
}
if( var != 0 && j < 0 )
{
j = i - 1;
}
// 以下的意思是1100000 -> 0110000 -> 0011000 -> 0001100...循環
digitalWrite( pin[( j ) % i], HIGH );
digitalWrite( pin[(j+1) % i], HIGH );
digitalWrite( pin[(j+2) % i], HIGH );
digitalWrite( pin[(j+3) % i], HIGH );
digitalWrite( pin[(j+4) % i], HIGH );
digitalWrite( pin[(j+5) % i], LOW );
digitalWrite( pin[(j+6) % i], LOW );
if( var != 0 && flag%T == 0) //i = int(flag/T+1);
{
digitalWrite(pin[i-1],HIGH);
}
delay(t);
}
}
/*
這個計畫的LED每組10顆
因此在電壓5V的情況下
必須供應電流400mA以上
這個程式才能正常運作
*/
- Aug 04 Wed 2010 09:39
arduino的光劍程式
全站熱搜
留言列表