اطلاعیه

Collapse
No announcement yet.

سوییچ و LED با millis()

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    سوییچ و LED با millis()

    درود، من میخوام کلید فشاری رو وقتی میزنم led1 رو به اصطلاح toggle کنه و همزمان led2 رو هم روشن کنه اما در زمانی که براش تعیین کردم led2 خاموش بشه:

    int pin_switch = 2;
    int pin_LED = 3;
    int pin_LED2 = 4;

    boolean oldSwitchState = LOW;
    boolean newSwitchState = LOW;
    boolean LEDstatus = LOW;
    boolean LED2status = LOW;

    unsigned long previousMillis = 0;
    const long period = 3000;

    void setup()
    {
    Serial.begin(9600);
    Serial.print("Sketch: "); Serial.println(__FILE__);
    Serial.print("Uploaded: "); Serial.println(__DATE__);
    Serial.println(" ");

    pinMode(pin_LED, OUTPUT);
    pinMode(pin_LED2, OUTPUT);
    digitalWrite(pin_LED,LOW);

    pinMode(pin_switch, INPUT);
    }

    void loop()
    {
    newSwitchState = digitalRead(pin_switch);

    if ( newSwitchState != oldSwitchState ){
    unsigned long currentMillis = millis();
    if (currentMillis - previousMillis >= period) {
    digitalWrite(pin_LED2, LOW);
    LED2status = LOW;
    }
    else if ( LED2status == LOW ){
    digitalWrite(pin_LED2, HIGH);
    LED2status = HIGH;
    }
    previousMillis = currentMillis;
    if ( newSwitchState == HIGH ){
    if ( LEDstatus == LOW ){
    digitalWrite(pin_LED, HIGH);
    LEDstatus = HIGH;
    }
    else{
    digitalWrite(pin_LED, LOW);
    LEDstatus = LOW;
    }
    }
    oldSwitchState = newSwitchState;
    Serial.print("LED 1: ");
    Serial.println(LEDstatus);
    Serial.print("LED 2: ");
    Serial.println(LED2status);
    }
    }


    این رو نوشتم اما هرکاریش میکنم LED2 فقط 1 رو پرینت میکنه...
    کسی راه*کاری داره؟

    #2
    پاسخ : سوییچ و LED با millis()

    نوشته اصلی توسط J35U51510V3 نمایش پست ها
    درود، من میخوام کلید فشاری رو وقتی میزنم led1 رو به اصطلاح toggle کنه و همزمان led2 رو هم روشن کنه اما در زمانی که براش تعیین کردم led2 خاموش بشه:

    این رو نوشتم اما هرکاریش میکنم LED2 فقط 1 رو پرینت میکنه...
    کسی راه*کاری داره؟
    سلام
    کد زیر رو امتحان کنید (تست نشده فقط نوشتمش)
    بهینه سازی کد هم از نظر بار پردازشی و هم از نظر حافظه مصرفی (با دو متغیرکمتر) در برنامه ارائه شده لحاظ شده است.

    int pin_switch = 2;
    int pin_LED = 3;
    int pin_LED2 = 4;

    boolean baseSwitchState = false;
    boolean newSwitchState = false;
    boolean LED2status = false;

    unsigned long previousMillis = 0;
    const long period = 3000;


    void setup()
    {
    Serial.begin(9600);
    Serial.print("Sketch: "); Serial.println(__FILE__);
    Serial.print("Uploaded: "); Serial.println(__DATE__);
    Serial.println(" ");

    pinMode(pin_LED, OUTPUT);
    pinMode(pin_LED2, OUTPUT);
    digitalWrite(pin_LED,LOW);

    pinMode(pin_switch, INPUT);
    }

    void loop()
    {
    newSwitchState = digitalRead(pin_switch);

    if ( newSwitchState != baseSwitchState ) {
    newSwitchState = !baseSwitchState; // LEDstatus = newSwitchState;
    LED2status = true;
    digitalWrite(pin_LED, newSwitchState);
    digitalWrite(pin_LED2, LED2status);
    previousMillis = millis();
    } else if (previousMillis - millis() <= -period) { // this equal with (currentMillis - previousMillis >= period)
    LED2status = false;
    digitalWrite(pin_LED2, LED2status);
    }


    Serial.print("LED 1: ");
    Serial.println(newSwitchState);
    Serial.print("LED 2: ");
    Serial.println(LED2status);
    }


    تاپیک ویدیوهای آموزشی حواشی آردوینو و ESP

    دیدگاه


      #3
      پاسخ : سوییچ و LED با millis()

      نوشته اصلی توسط digi-rx نمایش پست ها
      سلام
      کد زیر رو امتحان کنید (تست نشده فقط نوشتمش)
      بهینه سازی کد هم از نظر بار پردازشی و هم از نظر حافظه مصرفی (با دو متغیرکمتر) در برنامه ارائه شده لحاظ شده است.

      int pin_switch = 2;
      int pin_LED = 3;
      int pin_LED2 = 4;

      boolean baseSwitchState = false;
      boolean newSwitchState = false;
      boolean LED2status = false;

      unsigned long previousMillis = 0;
      const long period = 3000;


      void setup()
      {
      Serial.begin(9600);
      Serial.print("Sketch: "); Serial.println(__FILE__);
      Serial.print("Uploaded: "); Serial.println(__DATE__);
      Serial.println(" ");

      pinMode(pin_LED, OUTPUT);
      pinMode(pin_LED2, OUTPUT);
      digitalWrite(pin_LED,LOW);

      pinMode(pin_switch, INPUT);
      }

      void loop()
      {
      newSwitchState = digitalRead(pin_switch);

      if ( newSwitchState != baseSwitchState ) {
      newSwitchState = !baseSwitchState; // LEDstatus = newSwitchState;
      LED2status = true;
      digitalWrite(pin_LED, newSwitchState);
      digitalWrite(pin_LED2, LED2status);
      previousMillis = millis();
      } else if (previousMillis - millis() <= -period) { // this equal with (currentMillis - previousMillis >= period)
      LED2status = false;
      digitalWrite(pin_LED2, LED2status);
      }


      Serial.print("LED 1: ");
      Serial.println(newSwitchState);
      Serial.print("LED 2: ");
      Serial.println(LED2status);
      }


      درود - دوست عزیز من میخوام با millis کدی بنویسم که وقتی سوییچ1 رومیزنی led روشن بشود و تا مدت 30ثانیه اگر سوییچ 2 زده شد روشن بماند در غیر این صورت led 2 روشن شود، میشه لطفا راهنمایی بفرمایید . ممنون
      جدیدترین ویرایش توسط saeidpourafshar; ۱۷:۰۳ ۱۴۰۰/۰۹/۲۶.

      دیدگاه

      لطفا صبر کنید...
      X