ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی «ورود به سایت» کلیک کنید.





اگر فرم ورود برای شما نمایش داده نمیشود، اینجا را کلیک کنید.









اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.






جهت تبلیغ در وب سایت ECA کلیک کنید.

کاربران برچسب زده شده

صفحه 1 از 3 123 آخرین
نمایش نتایج: از 1 به 10 از 23

موضوع: فاصله سنج

  1. #1
    2017/11/10
    18
    0

    Post فاصله سنج

    سلام مهندس
    من برنامه زیر که برای فاصله سنج هست رو گرفتم. یه مدار دیگه میخوام با این برنامه طراحی کنم.مشکلم اینه که تو این حلقه وقتی(if (distance <= 30 به این فاصله میرسهled به طور دایم روشن میمونه.من میخوام تو این فاصله led برای5 ثانیه روشن بمونه. و بعد خاموش بشه.تو مدار من شاید این فاصله یه چند ساعتی ثابت باشه.ولی نمیخوام چراغم ثابت روشن بمونه.فقط 5 ثانیه روشن بمونه.کمکم کنید.نیاز دارم
    اینم کل برنامش.برای if اولش حل کنید.سه led دیگه هم حل میشه
    #define trigPin 7
    #define echoPin 6
    #define led 13
    #define led2 12
    #define led3 11
    #define buzzer 3
    int sound = 250;


    void setup() {
    Serial.begin (9600);
    pinMode(trigPin, OUTPUT);
    pinMode(echoPin, INPUT);
    pinMode(led, OUTPUT);
    pinMode(led2, OUTPUT);
    pinMode(led3, OUTPUT);
    pinMode(buzzer, OUTPUT);
    }


    void loop() {
    long duration, distance;
    digitalWrite(trigPin, LOW);
    delayMicroseconds(2);
    digitalWrite(trigPin, HIGH);
    delayMicroseconds(10);
    digitalWrite(trigPin, LOW);
    duration = pulseIn(echoPin, HIGH);
    distance = (duration/2) / 29.1;


    if (distance <= 30) {
    digitalWrite(led, HIGH);
    sound = 250;
    }
    else {
    digitalWrite(led,LOW);
    }
    if (distance < 25) {
    digitalWrite(led2, HIGH);
    sound = 260;
    }
    else {
    digitalWrite(led2, LOW);
    }
    if (distance < 20) {
    digitalWrite(led3, HIGH);
    sound = 270;
    }
    else {
    digitalWrite(led3, LOW);
    }
    if (distance > 30 || distance <= 0){
    Serial.println("Out of range");
    noTone(buzzer);
    }
    else {
    Serial.print(distance);
    Serial.println(" cm");
    tone(buzzer, sound);
    }
    delay(500);


    }
  2. #2
    2012/05/13
    Planet Earth
    861
    363

    پاسخ : فاصله سنج

    عزیزم شما که اومدید کد رو همین جوری کپی کردید سخته خوندنش بیایید ازتگ ++C در توی نوار ابزار انجمن استفاده کنید تا حداقل بشه خوندش. بعدش بفرمایید سنسورش چیه؟ گویا التراسونیکه
    گویند سنگ لعل شود در مقام صبر اری شود ولی به خون جگر شود
    همیشه آخر همه چیز خوبه، اگر هم هنوز خوب نشده پس هنوز آخرش نشده(چارلی چاپلین)
  3. #3
    2018/02/22
    1,096
    694

    پاسخ : فاصله سنج

    درود ، اولین قدم برنامه مشکل الگوریتمی داره که باید رفع بشه بعد در برنامه جدید بتونیم کار کنیم . فرض کنید فاصله ۱۰ هست ، تمام شرط ها بر قرار هستند . کوچکتر از ۳۰ هست ،کوچکتر از ۲۵ هست کوچکتر از ۲۰ هست !!!
    راه حل که به ذهنم میرسه به این شکل هست ، نوشتنش با شما

    اگر کمتر از ۳۰ بود فلگ = ۳۰
    اگر کمتر از ۲۵ بود فلگ = ۲۵
    اگر کمتر از ۲۰ رود فلگ = ۲۰

    تابع روشن شدن led
    اگر فلگ مخالف فلگ قبل بود
    روشن شدن led
    تایمر ( تابع milis)
    خاموش کردن led

    اگر فلگ برابر فلگ قبل بود
    خاموش led

    نکته اصلی اینه متوجه بشیم هنوز توی بازه قبل هست یا وارد بازه دیگه شده ، اگر همچنان در بازه قبل بود led همچنان خاموش میماند .منظور از فلگ یک متغیر نشانه گذاری هست . امیدوارم خوب توضیح داده باشم ، چون اولین مرحله درک درست الگوریتم هست. برنامه رو تا جای مقدور بنویسید اگر مشکلی بود رفع میکنیم
  4. #4
    2016/08/19
    176
    127

    پاسخ : فاصله سنج

    نقل قول نوشته اصلی توسط mahdi72z

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    برای if اولش حل کنید.سه led دیگه هم حل میشه
    سلام. لطفا به ترتیب if ها دقت کنید:

    if((distance > 30) || (distance <= 0)){
    Serial.println("Out of range");
    noTone(buzzer);
    } else if(distance < 20){
    digitalWrite(led3, HIGH);
    delay(5000);
    digitalWrite(led3, LOW);
    sound = 270;
    } else if (distance < 25) {
    digitalWrite(led2, HIGH);
    delay(5000);
    digitalWrite(led2, LOW);
    sound = 260;
    } else if (distance <= 30) {
    digitalWrite(led, HIGH);
    delay(5000);
    digitalWrite(led, LOW);
    sound = 250;
    }else {
    Serial.print(distance);
    Serial.println(" cm");
    tone(buzzer, sound);
    }


    نیازی به خاموش کردن led ها نیست. چون تایمر دارند.
    ویرایش توسط digi-rx : 2018/11/19 در ساعت 22:44
  5. #5
    2017/11/10
    18
    0

    پاسخ : فاصله سنج

    من طبق فرمایشات شما الگوریتمشو ویرایش کردم.الان طبق کدهای زیر.برنامه وقتی به اون فاصله خودش میرسه.همون چراغ برای همون فاصله روشن میشه و با تعقیر فاصله باز چراغ قبلی خاموش و چراغ فاصله جدید روشن میشه.
    ولی من میخوام که وقتی چراغ مربوط به هر فاصله روشن شد.فقط 5 ثانیه فعال بمونه نه دایم.تو کدا الان فعاله
    لطفا دوستان با کد برام درج کنید
    سنسورشم التراسونیکه.کاری که من میخوام انجام بدم تو یه فاصله شاید یه ساعتی ثابت بمونه.اما ایرادش اینه که چراغ اون فاصله ثابته.اگه بشه تو بازه 5 ثانیه قطع بشه. خیلی خوب میشه


    #define echoPin 6


    #define led 13


    #define led2 12


    #define led3 11


    #define buzzer 3




    int sound = 250;
    void setup() {


    Serial.begin (9600);


    pinMode(trigPin, OUTPUT);


    pinMode(echoPin, INPUT);


    pinMode(led, OUTPUT);


    pinMode(led2, OUTPUT);


    pinMode(led3, OUTPUT);


    pinMode(buzzer, OUTPUT);
    }
    void loop() {


    long duration, distance;


    digitalWrite(trigPin, LOW);


    delayMicroseconds(2);


    digitalWrite(trigPin, HIGH);


    delayMicroseconds(10);


    digitalWrite(trigPin, LOW);


    duration = pulseIn(echoPin, HIGH);


    distance = (duration/2) / 29.1;


    if((distance > 30) || (distance <= 0)){
    Serial.println("Out of range");
    noTone(buzzer);
    } else if(distance < 20){
    digitalWrite(led3, HIGH);
    delay(5000);
    digitalWrite(led3, LOW);
    sound = 270;
    } else if (distance < 25) {
    digitalWrite(led2, HIGH);
    delay(5000);
    digitalWrite(led2, LOW);
    sound = 260;
    } else if (distance <= 30) {
    digitalWrite(led, HIGH);
    delay(5000);
    digitalWrite(led,LOW);
    sound = 250;
    }else {
    Serial.print(distance);
    Serial.println(" cm");
    tone(buzzer, sound);
    }


    دلیل: ادغام دو پست برای جلوگیری از اسپم

    مهندس من ویرایش کردم و کدای زیر رو براتون فرستادم.مشکلو گفتم باز
    ویرایش توسط mahdi72z : 2018/11/20 در ساعت 12:53
  6. #6
    2016/10/10
    179
    108

    پاسخ : فاصله سنج

    درود بر شما
    دوست عزیز دلیلش واضحه... برنامه شما درست کار میکنه.مشکل اینجاست که اون led در یکبار اجرای برنامه 5 ثانیه روشن میمونه و در سیکل بعد دوباره وارد همون حلقه میشه و باز 5 ثانیه دیگه روشن هست و الی آخر. نتیجه اینکه شما led رو همیشه روشن میبینی.
    کاری که آقا مسعود گفتند رو انجام بدید... باید از بازگشت مجدد به یک حلقه تکراری بدون تغییر وضعیت ، جلوگیری کنید.
  7. #7
    2016/10/10
    179
    108

    پاسخ : فاصله سنج

    پیشنهاد :
    بازه های مسافت رو دو شرطی کنید:
    کمتر مساوی 30 و بزرگتر از 25
    کمتر مساوی 25 و بزرگتر از 20
    کمتر مساوی 20 ( یا : کمتر مساوی 20 و بزرگتر از 0)
    اینجوری تداخل بازه ها از بین میره...
  8. #8
    2017/11/10
    18
    0

    پاسخ : فاصله سنج

    سلام.بازم اینکارو کردم و مثل شما بازهارو تعقیر دادم چراغ ثابت روشن میمونه.اگه لطفا با نوشتنش بهم بگین.من بلاخره این مشکلو حل کنم ممنون میشم

    #define trigPin 7


    #define echoPin 6


    #define led 13


    #define led2 12


    #define led3 11


    #define buzzer 3




    int sound = 250;
    void setup() {


    Serial.begin (9600);


    pinMode(trigPin, OUTPUT);


    pinMode(echoPin, INPUT);


    pinMode(led, OUTPUT);


    pinMode(led2, OUTPUT);


    pinMode(led3, OUTPUT);


    pinMode(buzzer, OUTPUT);
    }
    void loop() {


    long duration, distance;


    digitalWrite(trigPin, LOW);


    delayMicroseconds(2);


    digitalWrite(trigPin, HIGH);


    delayMicroseconds(10);


    digitalWrite(trigPin, LOW);


    duration = pulseIn(echoPin, HIGH);


    distance = (duration/2) / 29.1;


    if(distance<=30&&distance>25)
    {
    digitalWrite(led3, HIGH);
    delay(3000);
    digitalWrite(led3, LOW);




    sound = 270;
    } else if(distance<=25&&distance>20)
    {
    digitalWrite(led2, HIGH);
    delay(3000);
    digitalWrite(led2, LOW);


    sound = 250;
    } else if(distance<=20&&distance>0)
    {
    digitalWrite(led, HIGH);
    delay(3000);
    digitalWrite(led,LOW);


    sound = 250;
    }else {
    Serial.print(distance);
    Serial.println(" cm");
    tone(buzzer, sound);
    }
    }


    دلیل: ادغام دو پست برای جلوگیری از اسپم

    من دستورات فاصله رو فهمیدم که آقا مسعود گفتن.ولی باقیشو چجوری بنویسم تا دوباره وارده حلقه نشه و همون یه بار فقط۵ ثانیه فعال بمونه
  9. #9
    2016/08/19
    176
    127

    پاسخ : فاصله سنج

    نقل قول نوشته اصلی توسط mahdi72z

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    من دستورات فاصله رو فهمیدم که آقا مسعود گفتن.ولی باقیشو چجوری بنویسم تا دوباره وارده حلقه نشه و همون یه بار فقط۵ ثانیه فعال بمونه
    برنامه بصورت زیر اصلاح شد. نیازی دو قسمتی کردن شرط ها نیست. همونطور که قبلا هم عرض کردم طوری مرتب شده که تموم بازه هایی که گفته بودید درونش رعایت شده و با اولین حالت صحیح مابقی شرط ها اجرا نمیشوند.

    #define echoPin 6
    #define led 13
    #define led2 12
    #define led3 11
    #define buzzer 3
    int sound = 250;
    long lastDistance = 0;

    void setup() {
    Serial.begin (9600);
    pinMode(trigPin, OUTPUT);
    pinMode(echoPin, INPUT);
    pinMode(led, OUTPUT);
    pinMode(led2, OUTPUT);
    pinMode(led3, OUTPUT);
    pinMode(buzzer, OUTPUT);
    }
    void loop() {
    long duration, distance;
    digitalWrite(trigPin, LOW);
    delayMicroseconds(2);
    digitalWrite(trigPin, HIGH);
    delayMicroseconds(10);
    digitalWrite(trigPin, LOW);
    duration = pulseIn(echoPin, HIGH);
    distance = (duration/2) / 29.1;

    if(distance == lastDistance){
    lastDistance = distance;

    if((distance > 30) || (distance <= 0)){
    Serial.println("Out of range");
    noTone(buzzer);
    } else if(distance < 20){
    digitalWrite(led3, HIGH);
    delay(5000);
    digitalWrite(led3, LOW);
    sound = 270;
    } else if (distance < 25) {
    digitalWrite(led2, HIGH);
    delay(5000);
    digitalWrite(led2, LOW);
    sound = 260;
    } else if (distance <= 30) {
    digitalWrite(led, HIGH);
    delay(5000);
    digitalWrite(led,LOW);
    sound = 250;
    }else {
    Serial.print(distance);
    Serial.println(" cm");
    tone(buzzer, sound);
    }
    }
    }



    دلیل: ادغام دو پست برای جلوگیری از اسپم

    این محیط ارسال کد چرا یک سری از خطوط جدید (enter) رو که برای زیبایی کد نوشتیم حذف میکنه؟!!
  10. #10
    2016/10/10
    179
    108

    پاسخ : فاصله سنج

    نقل قول نوشته اصلی توسط digi-rx

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    برنامه بصورت زیر اصلاح شد. نیازی دو قسمتی کردن شرط ها نیست. همونطور که قبلا هم عرض کردم طوری مرتب شده که تموم بازه هایی که گفته بودید درونش رعایت شده و با اولین حالت صحیح مابقی شرط ها اجرا نمیشوند.


    دلیل: ادغام دو پست برای جلوگیری از اسپم

    این محیط ارسال کد چرا یک سری از خطوط جدید (enter) رو که برای زیبایی کد نوشتیم حذف میکنه؟!!
    این کد هم واضح هست که مشکل داره.
    به ازاء هر تغییر جزئی در فاصله هرچند که در یک محدوده باشه باز led روشن میشه. مثلا یک بار برای فاصله 30 روشن میشه اگر فاصله شد 29 ( که بخاطر خطای سنسور و ... احتمالش هست ) باز led روشن میشه در صورتی که تا فاصله کمتر از 25 نشده نباید led دوباره روشن بشه.
صفحه 1 از 3 123 آخرین
نمایش نتایج: از 1 به 10 از 23

موضوعات مشابه

  1. سلف با فاصله هوایی و بدون فاصله
    توسط seyed saeed در انجمن منابع تغذيه
    پاسخ: 2
    آخرين نوشته: 2017/08/27, 06:36
  2. استفاده از چند سنسور تشخیص فاصله برای جسم های با فاصله 1 تا 60 سانتی
    توسط xsx-vbs در انجمن سایر مطالب مرتبط با ميکرو ها و پروسسورها
    پاسخ: 3
    آخرين نوشته: 2011/10/09, 23:44
  3. فاصله ی LED
    توسط agape در انجمن میکروکنترلرهای AVR
    پاسخ: 2
    آخرين نوشته: 2009/09/25, 11:35
  4. پاسخ: 1
    آخرين نوشته: 2009/01/31, 23:20
  5. فاصله بین چند جزء
    توسط saadatfar در انجمن نرم افزار Protel
    پاسخ: 9
    آخرين نوشته: 2009/01/12, 07:57

کلمات کلیدی این موضوع

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

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

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