私はあなたのコードを少しカスタマイズしました。主な問題は、あなたはすぐに最大限の明るさに向かい、決してそれを減らしていないということでした。 analogWrite()
は0から255までの値しか取ることができません。あなたは255から始まりそこから増加していたので、明るく留まりました。それはあなたがこれらの日非常に多くの電子機器に見る「ブリージング効果」だ、と永遠にループし、代わりにこれを試してみてください:
int ledPin = 3; // the pin that the LED is attached to
int brightness =0; // how bright the LED is
int extra_delay = 1000; // the extra delay at max
int super_delay = 5000; // super delay at min
int direction = 1; // the dimmer-brighter direction
void setup() {
pinMode(ledPin, OUTPUT);
analogWrite(ledPin, 0);
}
void loop() {
analogWrite(ledPin, brightness); // light at certain brightness
//delay(5); // wait a bit, stay at this level so we can see the effect!
delay(50); // longer delay means much slower change from bright to dim
if (direction == 1) // determine whether to go brighter or dimmer
brightness += 1;
else
brightness -= 1;
if (brightness == 255) // switch direction for next time
{
direction = -1;
delay(extra_delay); // extra delay at maximum brightness
}
if (brightness == 0) // switch direction, go brighter next time
{
direction = 1;
delay(super_delay); // super long delay at minimum brightness
}
}
これは、その後、明るく行く暗く、そして繰り返されます。遅延は非常に重要です。これを減らすか長くすることはできますが、それがなければ、変化は非常に速く起こります。オシロスコープでのみ目で見ることはできません。これがあなたを助けることを願って!
EDIT:
追加したレベルの測定のための最小輝度で「スーパー遅延」。
このようなパルス幅変調は、がまだ出力ピンから完全な駆動電圧を与えることに留意してください。 PWMは、ピンがハイのときとローのときの比率を変更するだけです。このAduinoでは、電圧は0V〜3.3Vの間で即座に急激に変化します。この出力から真のアナログ電圧を得るには、PWMのハイとローをフィルタしてより平滑な平均DC電圧にする回路が必要です。あなたがそれを追求したい場合は、 "RCローパスフィルター"を検索するか、サイトlike this oneにアクセスしてください。
。ありがとうございました。しかし、私はどのように私は長い光を維持するために最低の強度を作るのか分からない。私が書いたコードでは、 'int desired_brightness = 1'を置くと、最も低い光強度が得られます。しかし、その強度で私は93のlux値を取得しています。私はあなたのコードも試しました。私が到達できる光の最低強度は、まだルクス値のままです。93 –
LEDを駆動するピンがオンまたはオフです。問題は、どれくらいの時間を過ごすか、過ごす時間、視力の人間の執拗さ、より低い比率でのオンとオフの比較、より暗く見えます。真の低電圧を得るための唯一の方法は、PWM信号を取ってそれをフィルタリングして、RCまたはLCネットワークのように、上下PWM信号を実際の変化するDC電圧に平滑化することです。それを行うにはもっと多くの電子部品が必要です。 – TomServo
@ Georgeluke私は上記のコードに "super_delay"を5秒間最低限に抑えるために追加しました。ただし、この最小値は基本的に「オフ」です。私の編集の残りの部分を読んで、私がそれを得たと感じたら、upvoteし、これまでのところ私の答えを受け入れる。 – TomServo