- 630 名前:774ワット発電中さん mailto:sage [2010/07/07(水) 00:25:41 ID:TWaGL3D5]
- // ### Japanino POV -- Dimmered LED Line - 行ったり来たりスケッチ -- by OZ
### // カスタマイズ部分 #define Duration 80 // LEDを点灯する時間(ミリ秒) #define LedStep 5 // LED点灯ステップ数(個数) 大体ね #define LedOnValue 100 // LEDのON時の輝度% (LedStep〜100) // Japanino POV 定義 #define LedMin 7 // LEDピン範囲の最小 #define LedMax 13 // LEDピン範囲の最大 // グローバル変数 int ledBuf[LedMax + 1]; // LEDバッファ:各LEDの輝度 ledMinより小さい場所は未使用 int ledDimValue = (LedStep < 2 ? LedOnValue : int( LedOnValue / ( LedStep - 1 ) ) - 1); void setup() { //初期設定 for (int i = LedMin; i <= LedMax; i++) { pinMode(i, OUTPUT); // LEDへの接続は出力 ledBuf[i] = 0; // LEDバッファ:すべて消灯状態 } } void pause() { // LED点灯中にやるべき処理 unsigned long started = millis(); // 開始時間 for (;;) { // 無限ループ(開始時間から点灯終了時間まで) unsigned long now = millis(); // 経過時間計測用 unsigned long s = now - started; // 経過時間 int d = int(( ledDimValue * s ) / Duration); //経過時間の表示時間比分輝度を落とす(ぼんやり) for(int k = 0; k <= 100; k++) { // 輝度カウンタ for(int l = LedMin; l <= LedMax; l++) { // LEDの場所 if ((ledBuf[l] - d) > k) { // LEDバッファの輝度が輝度カウンタより digitalWrite(l, HIGH); // 大きければ点灯する } else { digitalWrite(l, LOW); // 同じか小さければ消灯する } } } if (now - started > Duration) { // LED点灯時間が経過したら、 break; // この無限ループを終わる。 } } for(int l = LedMin; l <= LedMax; l++) { // 各LEDの輝度を再計算 if (ledBuf[l] > ledDimValue) { // LED減衰量より大きければ ledBuf[l] -= ledDimValue; // その場所の輝度から減衰量分暗くする } else { ledBuf[l] = 0; // 小さければ0に設定する=消灯 } } } void loop() { for (int i = LedMin; i <= LedMax; i++) { // 上方向 ledBuf[i] = LedOnValue; // カウンタの場所を指定輝度+減衰量に設定=点灯 pause(); } for (int i = LedMax - 1; i > LedMin; i--) { // 下方向 ledBuf[i] = LedOnValue; // カウンタの場所を指定輝度+減衰量に設定=点灯 pause(); } }
|
|