استفاده از تابع millis به جای delay

با سلام و عرض ادب

می خوام کدی به اینصورت بنویسم

زمانی که پایه 2 میکرو HIGHشد، LED  روشن بشه و بعد از 10ثانیه خاموش بشه  در این کد برای وقفه 10ثانیه می خوام بجای تابع delay  از تابع millis استفاده بشه ممنون می شم اگر راهنمایی بفرمایید

با تشکر

int period = 1000;
unsigned long time_now = 0;

void setup() {
Serial.begin(115200);
pinMode(A0,INPUT);
pinMode(2,OUTPUT);
pinMode(5,OUTPUT);
int sens;

}

void loop() {

int sens=analogRead(A0);
Serial.print(“sens”);
Serial.println(sens);
delay(1000);

time_now = millis();
if(sens<=100){//—بهد از اینکه مقدار سنسور کمتر یا مساوی100 شد ال ای دی باید روشن بشه و بعد از 10ثانیه خاموش بشه در حالیکه ال ای دی شماره5همزمان به کار خودش ادامه بده
digitalWrite(2,HIGH);

   if(millis() &gt; time_now + period){ //--دراین قسمت بعد از اینکه ال ای دی روشن شد بعد از چند ثانیه خاموش بشه ولی ال ای دی روشن میشه و خاموش نمی شه اشکال کد کجاست

 digitalWrite(2,LOW);
 time_now = millis();
}

}
digitalWrite(5,HIGH);
delay(100);
digitalWrite(5,LOW);

}

با سلام.

می توانید از کد زیر استفاده کنید.

 

int period = 10000; // میزان تاخیری که میخواهید

unsigned long time_now = 0;

int led2_state = 0;

void setup() {

  Serial.begin(115200);

  pinMode(A0, INPUT);

  pinMode(2, OUTPUT);

  pinMode(5, OUTPUT);

  int sens;

  time_now = millis();

}

void loop() {

  int sens = analogRead(A0);

  Serial.print("sens");

  Serial.println(sens);

  delay(1000);

  if (led2_state == 1 && (millis() > time_now + period)) {

    digitalWrite(2, LOW);

    led2_state = 0;

  }

  if (sens <= 100) {

    time_now = millis();

    digitalWrite(2, HIGH);

    led2_state = 1;

  }

  digitalWrite(5, HIGH);

  delay(100);

  digitalWrite(5, LOW);

}

1 پسندیده

ضمن تشکر از توجه شما
کد را نوشتم ولی اجرا نشد
کد را در متن سوال قرار می دم بررسی بفرمایید ممنون می شم
با تشکر

کد شما را اصلاح کردم و در جواب سوال شما ارسال شده. تست نشده اما احتمالا مشکلی نداشته باشه