モーションコントロールライトを作成しようとしています。モーションコントロールライト
動きが検出されたときにpwmを使用して光をゆっくりオンとオフにしたい。現在、私のコードは動作し、私が望むほとんどすべてのことをしています。
問題は、ディレイ機能を使用して、明るさが最大になった後でも点灯し続けることです。このため、ライトが点灯している間に動きが検出された場合、タイマーはリセットされません。遅延タイマーがなくなり動きが検出されると、明るさが下がり、その後戻ってきます。
私はモーションディテクタにLEDをオンにしても動作させることができないタイマーをリセットさせたいと思います。
私はこれらを見てきました:
http://playground.arduino.cc/Code/AvoidDelay
https://www.arduino.cc/en/Tutorial/BlinkWithoutDelay
しかし、理由はArduinoのコードの私のやや限られた理解の私はそれを動作させることができていません。私は本当に助けていただければ幸いです。
const byte MotionPin = 4; // Motionsensor
int LightSensorPin = 2; // Lightsensor
const byte LedPin = 11; // LED
unsigned long MotionDetectedMillis; // When motion was detected
unsigned long ledTurnedOnAt; // when led was turned on
unsigned long turnOnDelay = 50; // wait to turn on LED
unsigned long turnOffDelay = 5000; // turn off LED after this time
bool ledReady = false; // Has motion been detected
bool ledState = false; // Led on or off
int LightSensorState = 0;
int fadeAmount = 5; // How much to fade in a loop
byte brightness = 0;
void setup() {
pinMode(MotionPin, INPUT);
pinMode(LightSensorPin, INPUT);
pinMode(LedPin, OUTPUT);
digitalWrite(LedPin, LOW);
}
void loop() {
// get the time at the start of this loop()
unsigned long currentMillis = millis();
if (digitalRead(MotionPin) == HIGH && digitalRead(LightSensorPin)== HIGH)
{
MotionDetectedMillis = millis();
ledReady = true;
}
if (ledReady)
{
if ((unsigned long)(currentMillis - MotionDetectedMillis) >= turnOnDelay)
{
while (brightness < 255)
{
brightness = brightness + fadeAmount;
analogWrite(LedPin, brightness);
delay(30);
}
// setup our next "state"
ledState = true;
// save when the LED turned on
ledTurnedOnAt = currentMillis;
ledReady = false;
}
}
// see if we are watching for the time to turn off LED
if (ledState)
{
if ((unsigned long)(currentMillis - ledTurnedOnAt) >= turnOffDelay)
{
while (brightness >0)
{
brightness = brightness - fadeAmount;
analogWrite(LedPin, brightness);
delay(30);
}
ledState = false;
}
}
}
あなたが投稿した2番目のリンクは、あなたの問題に直接対処する優れたチュートリアルです。それが役に立たなかったら、もっと具体的な質問をする必要があるでしょう。チュートリアルのどの部分があなたを混乱させましたか? –
私が助けてくれる部分は、そのコードをどのように私のものに統合するかということです。私はかなり何度も試してみて、それを働かせることができませんでした。 – lollero2