waiasu’s diary

バーグマン200のカスタムをメインに。

より鼓動っぽく

勢いで作っていたディミングターンシグナルですが、ただ減光するだけではイマイチだったので緩急を付けてみました。

ボリュームやスイッチで切り替え可能な感じで書いていたのですが本体取り出して触るならUSB刺して焼いた方が手っ取り早いのでシンプルに。点滅回数・オンキープ・オフキープの時間・減光の具合を調整可能な感じに。最初にグッと光量を落とした方がそれっぽいですが視認性は悪くなると思います。好みの問題ですね。

int PO1=9;   //ポジション出力1 ディミング
int PO2=10;  //ポジション出力2 オーディオ
int NUM=65;  //一分間あたりの回数
int ONT=100; //オンの時間
int OFT=200; //オフの時間

int FRQ=0;
int GRT=0;
int SGR=0;
int LGR=0;

void setup() {
  pinMode(PO1,OUTPUT);
  pinMode(PO2,OUTPUT);
  Serial.begin(9600);
  Serial.println(NUM/60.0);
  FRQ=60.0/NUM*1000.0;
  GRT=(FRQ-ONT-OFT)*1000.0/256.0;
  SGR=GRT/3.5; //3.0/3.5/4.0
  LGR=GRT*3.5; //3.0/3.5/4.0
  delay(50);
}

void loop() {
  unsigned long time_data=millis();
  digitalWrite(PO1,HIGH); //点灯
  digitalWrite(PO2,HIGH); //オーディオオン
  delay(ONT);

  for (int v=255; v>-1; v--) { //ゆっくり消灯
    analogWrite(PO1,v);
    if (v==107){ digitalWrite(PO2,LOW); } //オーディオオフ

    if (v>107){ delayMicroseconds(SGR); //128/107/85
    } else if (v>42){ delayMicroseconds(GRT);
    } else{ delayMicroseconds(LGR); }
  }

  delay(OFT);
  Serial.println(60000.0/(millis()-time_data));
}

より鼓動っぽい感じになりました。