Home > 制作 > 電子工作

電子工作 Archive

Display at METAMORPHOSE

Display at METAMORPHOSE on May 12th, 2012(Sat.)

Made by me and partner.

 

 

Movie
Metamo01  Metamo02

 

 

Metamo program basic

//複数のLEDのフェードインとフェードアウト
//タイミングは任意に調整可能

//テスト終了後に「Serial.begin」をコメントアウトしてあげると、動作が速くなる。

float rad = 0;               //ラジアン。カウントアップに使用。このプログラム内でのメトロノーム
long i = 0;                   // 明るさに変換するための中間変数
long j = 0;                   // 明るさに変換するための中間変数
long k = 0;                   // 明るさに変換するための中間変数
long l = 0;                   // 明るさに変換するための中間変数
long m = 0;                   // 明るさに変換するための中間変数
long n = 0;                   // 明るさに変換するための中間変数

#define LEDA 11               //LEDが接続されたピン
#define LEDB 10               //LEDが接続されたピン
#define LEDC 9                //LEDが接続されたピン
#define LEDD 6                //LEDが接続されたピン
#define LEDE 5                //LEDが接続されたピン
#define LEDF 3                //LEDが接続されたピン
int a = 0;                    //LEDAの明るさ
int b = 0;                    //LEDBの明るさ
int c = 0;                    //LEDCの明るさ
int d = 0;                    //LEDDの明るさ
int e = 0;                    //LEDEの明るさ
int f = 0;                    //LEDFの明るさ                        

void setup(){
  pinMode(LEDA, OUTPUT);       //LEDのピンの出力に設定
  pinMode(LEDB, OUTPUT);       //LEDのピンの出力に設定
  pinMode(LEDC, OUTPUT);       //LEDのピンの出力に設定
  pinMode(LEDD, OUTPUT);       //LEDのピンの出力に設定
  pinMode(LEDE, OUTPUT);       //LEDのピンの出力に設定
  pinMode(LEDF, OUTPUT);       //LEDのピンの出力に設定
  //Serial.begin(9600) ;         //テストの値チェック
}

void loop(){//radを-PIからPIになるまで増加させ、その後-PIに戻す
  for (rad = -PI * 1000 ; rad < PI * 1000; rad = rad + 100) { //ラジアンを加算
           if (rad >= PI * 1000) { //radが回り続けるための式(radが3.14まで行ったらリセット)
         rad = -PI *1000;// 条件を満たしたとき実行される文
      }

      //下記で、sinなどを用い、ゆっくり明るくゆっくり暗くを実現する。
      //元となるradからタイミングや速さなどを調整(ifなどで分岐も可能)
      i = sin(rad/1000) * 1000;//

      j = sin(rad/1000 + 1) * 1000;//

      k = sin(rad/1000 + 2) * 1000;//

      l = sin(rad/1000 + 3) * 1000;//

      // 上記の値(タイミングや早さの調節をしたもの)をシリアルにプリントする
      Serial.print("i: ");
      Serial.print(i);
      Serial.print("    j: ");
      Serial.print(j);
      Serial.print("    k: ");
      Serial.print(k);
      Serial.print("    l: ");
      Serial.print(l);     

      //上記で計算したものを、PWMの仕様にあった数値に変換
      a = (i + 1000) / 10 * 1.26 ;  //sinなどの値は-1から1が変位。元の数値を1000倍しているので、元の値換算+1で整数にするため、
      b = (j + 1000) / 10 * 1.26 ;  //+1000を足して正の値にし0〜2の変位になる。それをPWM上限の255になるように調整。
      c = (k + 1000) / 10 * 1.26 ;  //(Arduino仕様のPWMにあう形に変換するための計算   )
      d = (l + 1000) / 10 * 1.26 ;      

      //LEDを光らせる
      analogWrite(LEDA,a);     //LEDの明るさをセット
      analogWrite(LEDB,b);
      analogWrite(LEDC,c);
      analogWrite(LEDD,d);
//      analogWrite(LEDE,e);

      Serial.print("    rad: ");
      Serial.print(rad);

      // ベースクロックをシリアルにプリントする
      Serial.print("    i: ");
      Serial.print(i);

      // 明るさをシリアルにプリントする
      Serial.print("   A: ");
      Serial.print(a);
      Serial.print("   B: ");
      Serial.print(b);
      Serial.print("   C: ");
      Serial.print(c);
      Serial.print("   D: ");
      Serial.print(d);

      //シリアル出力の改行
      Serial.println();

      //delay(2);               //全体の明滅の速度を調節(「♪=??」の部分)
                               //ミリ秒停止 analogWrite()は一瞬なので
                               //これがないと変化が見えない しかし、処理が重い場合は不要

  }
}

ホーム > 制作 > 電子工作

Search
Feeds
Meta

Return to page top