نمایش نتایج: از 1 به 6 از 6

موضوع: اجرای قسمتی از برنامه برای مدت زمان معینی و بعد از تمام شدن زمان، اجرا نشه

Threaded View

  1. #1
    Junior Member
    تاریخ عضویت
    Dec 2017
    محل سکونت
    ایران
    نوشته ها
    6

    Question اجرای قسمتی از برنامه برای مدت زمان معینی و بعد از تمام شدن زمان، اجرا نشه

    با سلام.
    من می خواستم سنسور مغناطیس خودم رو کالیبره کنم. برنامه من باید جوری باشه که شامل سه قسمت زیر هستش:
    1: void setup{}
    2: تو این قسمت می خوام دستورات خاصی رو که برای کالیبره دارم رو به مدت مثلا 1 دقیقه انجام بده و خروجی ها که همان آفست ها هستن رو بدست بیاره که بعد تو قسمت بعد ازشون استفاده کنم
    3: این قسمت بیام و از داده های قسمت قبلی که به دست اومدن استفاده کنم. و برنامه اجرا بشه

    هدف من اینه که قسمت دوم در مدت زمان معینی انجام بشه. احتمالا باید از دستور millis استفاده کنم ولی نمیشه. میشه من رو راهنمایی کنین؟
    برنامه مورد نظر رو هم برای شما attach کردم
    ممنون


    #include <Wire.h>
    #include <HMC5883L.h>

    HMC5883L compass;

    int minX = 0;
    int maxX = 0;
    int minY = 0;
    int maxY = 0;
    int offX = 0;
    int offY = 0;
    const unsigned long period = 1 * 60000L; // 1 minutes
    //unsigned long timelastchanged;

    void setup()
    {
    Serial.begin(9600);

    // Initialize Initialize HMC5883L
    while (!compass.begin())
    {
    delay(500);
    }

    // Set measurement range
    compass.setRange(HMC5883L_RANGE_1_3GA);

    // Set measurement mode
    compass.setMeasurementMode(HMC5883L_CONTINOUS);

    // Set data rate
    compass.setDataRate(HMC5883L_DATARATE_75HZ);

    // Set number of samples averaged
    compass.setSamples(HMC5883L_SAMPLES_8);
    }


    void calibrate(){
    bool changed=false;
    Vector mag = compass.readRaw();

    // // Determine Min / Max values
    if (mag.XAxis < minX) minX = mag.XAxis;
    changed = true;
    if (mag.XAxis > maxX) maxX = mag.XAxis;
    changed = true;
    if (mag.YAxis < minY) minY = mag.YAxis;
    changed = true;
    if (mag.YAxis > maxY) maxY = mag.YAxis;
    changed = true;



    if(changed)
    unsigned long timeLastChange = millis(); //Reset timeout counter

    if(millis() > 5000 && millis() - timeLastChange > period) //If the timeout has been reached, exit calibration
    exitCalMode();
    }

    void exitCalMode(){
    //Calculate offsets
    offX = (maxX + minX)/2;
    offY = (maxY + minY)/2;

    x_scale = 1.0/(maxX - minX);
    y_scale = 1.0/(maxY - minY);

    compass.setOffset(offX,offY)
    Serial.print("offX=");
    Serial.print(offX);
    Serial.print(" ");
    Serial.print("offy=");
    Serial.print(offY);
    Serial.println(" ");
    }


    دستورات بالا برای قسمت دوم برنامه هستش. ولی خطایی بصورت زیر نمایش داده میشه: همچنین نمی تونم نمایش کدهای serial.prion رو ببینم. می خوام تغییرات max , min ها رو تا لحظه ست شدن نهایی ببینم.
    timelastchanged was not decleare in this scope
    ویرایش توسط آزیتا : 01-16-2018 در ساعت 08:07 AM

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •  

SEO by vBSEO