اطلاعیه

Collapse
No announcement yet.

کمک در مورد کد نویسی اردوینو

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

    کمک در مورد کد نویسی اردوینو

    سلام.برای من یک مشکلی در بنامه نویسی برد اردوینو پیش اومده می خواستم کمکم کنید.
    این پروژه بر این اساس است که دو رله و یک کلید به اردوینو متصل است.وقتی کلید فشار داده شد باید رله ی اول وصل شود و بعد از 1 ثانیه رله ی دوم وصل شود و بعد از 0.1 ثانیه رله ی دوم قطع شود و تا فشار داده شدن دوباره ی کلید قطع بماند و رله ی اول وقتی کلید قطع شد بعد از 3 دقیقه قطع شود.
    برنامه نوشتن برای رله ی اول راحت است ولی برای رله ی دوم نمی دانم چطور به برد بفهمانم که وقتی کلید وصل شد فقط برای یک بار رله را به مدت 0.1 ثانیه وصل کند و بعد تا اتصال دوباره ی کلید قطع بماند.
    هرجور کد مینویسم یا ارور می دهد که فلان چیز نباید فلان جا باشد یا ارور کامپایل می دهد در صورتی که برد بهش وصل نیست.

    لطفا اگر میتوانید راهنمایی ام کنید یا یک برنامه بنویسید و در اینجا قرار دهید.جدا از این پروژه این تیکه اش برایم سوال شده که چطور باید برایش برنامه نوشت.











    جدیدترین ویرایش توسط Alireza2025; ۲۱:۰۹ ۱۴۰۴/۰۹/۱۴.

    #2
    سلام
    وقت بخیر
    نوشته اصلی توسط Alireza2025 نمایش پست ها
    سلام.برای من یک مشکلی در بنامه نویسی برد اردوینو پیش اومده می خواستم کمکم کنید.
    این پروژه بر این اساس است که
    دو رله و یک کلید به اردوینو متصل است.
    وقتی کلید فشار داده شد باید رله ی اول وصل شود
    و بعد از 1 ثانیه رله ی دوم وصل شود
    و بعد از 0.1 ثانیه رله ی دوم قطع شود
    و تا فشار داده شدن دوباره ی کلید قطع بماند
    و رله ی اول وقتی کلید قطع شد بعد از 3 دقیقه قطع شود.

    برنامه نوشتن برای رله ی اول راحت است ولی برای رله ی دوم نمی دانم چطور به برد بفهمانم که وقتی کلید وصل شد فقط برای یک بار رله را به مدت 0.1 ثانیه وصل کند و بعد تا اتصال دوباره ی کلید قطع بماند.
    هرجور کد مینویسم یا ارور می دهد که فلان چیز نباید فلان جا باشد یا ارور کامپایل می دهد در صورتی که برد بهش وصل نیست.
    لطفا اگر میتوانید راهنمایی ام کنید یا یک برنامه بنویسید و در اینجا قرار دهید.جدا از این پروژه این تیکه اش برایم سوال شده که چطور باید برایش برنامه نوشت.
    من ، کد شما رو به چت جی بی تی دادم و پاسخ داد :

    در ادامه کد کامل Arduino Nano را همراه با توضیح فارسی برای هر خط قرار داده‌ام.
    این کد دقیقاً همان عملکردی که می‌خواهید انجام می‌دهد:
    • رله 1 با فشردن کلید روشن می‌شود
    • رله 2 پس از 1 ثانیه روشن می‌شود
    • رله 2 پس از 0.1 ثانیه خاموش می‌شود
    • وقتی کلید رها شود، رله 1 پس از 3 دقیقه خاموش می‌شود
    • هیچ‌گونه delay() استفاده نشده (کد بدون توقف اجرا می‌شود)
    کد:
    // ------------------------ تنظیم شماره پایه‌ها ------------------------
    const int relay1 = 2;      // پایه رله 1
    const int relay2 = 3;      // پایه رله 2
    const int button = 4;      // پایه کلید (فشار لحظه‌ای)
    // ------------------------ متغیرهای وضعیت ------------------------
    bool relay1On = false;         // وضعیت فعلی رله 1 (روشن یا خاموش)
    bool waitingToTurnOffRelay1 = false; // آیا منتظر خاموش کردن رله 1 هستیم؟
    unsigned long relay1OffTime = 0;     // زمانی که رله 1 باید خاموش شود
    bool lastButtonState = HIGH;   // آخرین وضعیت کلید (برای تشخیص لبه)
    bool relay2Sequence = false;   // آیا توالی زمانی رله 2 شروع شده؟
    unsigned long relay2StartTime = 0;   // زمان شروع توالی رله 2
    // ------------------------ تابع setup ------------------------
    void setup() {
      pinMode(relay1, OUTPUT);     // تعریف رله 1 به عنوان خروجی
      pinMode(relay2, OUTPUT);     // تعریف رله 2 به عنوان خروجی
      pinMode(button, INPUT_PULLUP); // استفاده از پول‌آپ داخلی برای کلید
    
      digitalWrite(relay1, LOW);   // رله 1 در شروع خاموش
      digitalWrite(relay2, LOW);   // رله 2 در شروع خاموش
    }
    // ------------------------ تابع loop ------------------------
    void loop() {
    
      bool buttonState = digitalRead(button);  // خواندن وضعیت کلید
      // ==================== تشخیص فشرده شدن کلید ====================
      // اگر کلید از HIGH → LOW تغییر کرد، یعنی فشرده شده است
      if (buttonState == LOW && lastButtonState == HIGH) {
    
        relay1On = true;               // ذخیره اینکه رله 1 روشن است
        digitalWrite(relay1, HIGH);    // روشن کردن رله 1
    
        relay2Sequence = true;         // شروع توالی فعال‌سازی رله 2
        relay2StartTime = millis();    // ثبت زمان شروع توالی
    
        waitingToTurnOffRelay1 = false; // اگر تایمر قبلی فعال بود، لغو شود
      }
      // ==================== تشخیص رها شدن کلید ====================
      // اگر کلید از LOW → HIGH تغییر کرد، یعنی رها شده است
      if (buttonState == HIGH && lastButtonState == LOW) {
    
        if (relay1On) {                             // اگر رله 1 روشن است
          waitingToTurnOffRelay1 = true;            // باید بعداً خاموش شود
          relay1OffTime = millis() + 180000UL;      // خاموشی بعد از 3 دقیقه (180000 میلی‌ثانیه)
        }
      }
      lastButtonState = buttonState;   // ذخیره وضعیت کلید برای بررسی تغییر لبه
      // ==================== توالی زمانی رله 2 ====================
      if (relay2Sequence) {
        unsigned long t = millis() - relay2StartTime;  // محاسبه زمان سپری شده
        if (t >= 1000 && t < 1100) {   // بعد از 1 ثانیه (1000ms)
          digitalWrite(relay2, HIGH);  // رله 2 روشن شود
        }
        if (t >= 1100) {               // 100ms بعد از روشن شدن (1.1 ثانیه از شروع)
          digitalWrite(relay2, LOW);   // رله 2 خاموش شود
          relay2Sequence = false;      // پایان توالی
        }
      }
      // ==================== خاموش کردن رله 1 بعد از 3 دقیقه ====================
      if (waitingToTurnOffRelay1 && millis() >= relay1OffTime) {
        digitalWrite(relay1, LOW);     // خاموش کردن رله 1
        relay1On = false;              // ثبت وضعیت جدید
        waitingToTurnOffRelay1 = false; // پایان تایمر
      }
    }
    ​
    کد رو در نرم افزار WOKWI تست کردم ،ظاهرا درست کار میکنه.

    تست کنید .


    04-09-15

    دیدگاه


      #3
      سلام.
      خیلی ممنون سپاسگزارم.

      دیدگاه

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