/* 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以上
這個程式才能正常運作
*/


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 蘇兄 的頭像
    蘇兄

    Mens et manus

    蘇兄 發表在 痞客邦 留言(0) 人氣()