نمایش/عدم نمایش سایدبار
رفتن به بالای صفحه
أَللّهُمَّ ارْزُقْنی شَفاعَةَ الْحُسَیْنِ یَومَ الْوُرُودِ
مهدی دمیرچیلو

آموزش جامع آردوینو جلسه ۷

172

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

آموزش جامع آردوینو جلسه ۷

آموزش جامع آردوینو جلسه ۷

Advanced I/O

Tone و noTone
Tone : این تابع برا ایجاد صدا های مختلف بر روی buzzer هستش ، به این صورت که با ایجاد موج مربعی(۵۰% duty cycle) و تغییر فرکانسش صدا های مختلفی رو ایجاد میکنه؛ pin پایه ای هستش که buzzer قراره بهش وصل بشه و به جای frequency هم فرکانستون رو بر حسب hz قرار بدید.
توجه : نحوه کار این تابع به این صورته که هی پایه ای که buzzer بهش وصله رو ۰ و ۱(منطقی) میکنه و بین هر ۰ و ۱ ایی هم یه تاخیر زمانی میزاره؛ که با تغییر این تاخیر زمانی فرکانس کنترل میشه و زمان صفر و ۱ شدن با هم برابر هستن(۵۰% duty cycle)؛ لذا با تغییر فرکانس صدا های مختلفی بر روی buzzer شنیده میشود.
کد توضیحات بالا یه چیز تو مایه های کد زیر هستش(بدون استفاده از تابع بالا صدای buzzer رو درمیاریم laugh )
noTone : این تابع عکس تابع بالا هستش؛ و صدای بازر رو قطع میکنه(صدایی که توسط تابع Tone ایحاد شده بود.)؛ به جای pin شماره پایه ای رو که Buzzer بهش وصل هستش رو قرار میدیم.
یه مثال از دو تابع بالا : 

پروژه آردوینو

یه پروژه جالب و صدای جالب(!!!) با بازر و دو تابع بالا

شماتیک پروژه
پروژه آردوینو

کدهای پروژه

 

عکس از مدار در عمل crazy (اون چیزی که زیر مداره... laugh )
پروژه آردینو

 

فیلم پروژه :

1.4MB پروژه ایجاد صدا بر روی بازر با آردوینو
0%
00:00  /  00:18
pulseIn

pulseIn : این تابع برای محاسبه زمان پالس اعمال شده به پایه pin (که ما در کد زیر مقدار دهی میکنیم) هستش(زمانی که بر میگردونه بر حسب میکرو ثانیه هستش) و این که حالا این شمارش پالس کی شروع بشه موقع HIGH اون پایه یا LOW شدن ، که این هم در کد زیر توسط قسمت value تعیین میشه.

timeout : توسط این قسمت تعیین میکنیم که چه مقدار باید تابع صبر کنه تا پالس مد نظر ما تموم بشه ( تعیین حداکثر طول پالسمون )؛ تو حالت عادی 1 ثانیه هستش، که توسط تابع دومی میشه این مقدار رو تغییر داد؛ این ورودی بر حسب ms هستش.
pin : پایه مد نظرو انتخاب میکنیم
Value : تعیین میکنیم لبه حساس مد نظر رو که H باشه یا L
مثال برای این قسمت بمونه برا مطلب بعدی، که میخوام  پروژه  SRF05 با آردوینو رو توضیح بدم و اونجا این تابع نقش اساسی در راه اندازی ماژول SRF05 داره. cool
---> پروژه فاصله سنج التراسونیک srf05 با آردینو

خوب از این قسمت دو تابع shiftIn و shiftOut میمونه که برا بحث spi مجازی هستش و بهتره تو جلسات آخر گفته بشه.

 

تا مطلب بعد یا علی.

تعداد مطالب : 367 تا
جنگ ما فتح قدس را به همراه خواهد داشت. [ امام خمینی (ره) ]
بقیه جلسات : آموزش جامع آردوینو
ارسال دیدگاه
54
نظرات این مطلب بسته شده است.
  1. آریا

    مهمان

    آریا

    سلام، من تو دستور pulseInهنوز یه خورده مشکل دارم، ببینید من مثلا یه کلیدو بین GNDو مثلا پایه 2قرار میدم و خود پایه 2رو با یه مقاومت 10کیلو میزنم به VCC اونوقت تابع رو به صورت pulseIn(2,LOW)
    مینویسم، بعدشم مقدارشو میریزم تو مثلا xو بعد میگم xرو روی سریال مانیتور نشون بده، در این صورت اگه من کلیدو فشار بدم پایه 2،LOWمیشه و طبق چیزی که گفتید این تابع باید مدت زمانی که من کلیدو نگه داشتم بهم نشون بده، اما خب من امتحان کردم نشد، میگید چیکار کنم؟

    مشاهده پاسخ ها (1)
    • مهدی دمیرچیلو

      نویسنده این مطلب

      مهدی دمیرچیلو

      سلام
      1) آیا پایه 2 رو به صورت ورودی تعریف کردید؟
      2) به متغییر فوق یه عدد ثابت بدید، ببینید اون عدد طبق کد شما در سریال به درستی نمایش داده میشه یا نه.
      3) یه شرط بزارید تا زمانی که کلید در حالت فشرده قرار داره، یه داده دلخواهی رو به pc ارسال کنه.
      اینکارا رو انجام بدید تا ببینید مشکل کدتون کجاس.

  2. مهدی

    مهمان

    مهدی

    با سلام من برد آردوینو dueخریداری کردم ولی در زمان کامپایل با اروری مبنی بر غیر قابل قبول بودن دستور tone مواجه شدم
    دستوری برای جایگزینی وجود دارد؟ اگر نه باید چه کار کنم؟

    مشاهده پاسخ ها (2)
    • مهدی دمیرچیلو

      نویسنده این مطلب

      مهدی دمیرچیلو

      سلام
      بسته Arduino SAM Boards ( 32-bits ARM Cortex-M3) رو برای آردوینو دانلود کردم و تابع TONE رو که تست کردم مث این که این تابع برای DUE تعریف نشده.
      تو نت خوندم که حذف شده برا این میکرو ( پست ها برا سال 91 بود تقریبا )
      شما باید به کمک تایمر خودتون توابع مورد نیاز رو بنویسید / یا این که تو نت سرچ کنید ببینید کتابخونه خوبی پیدا میکنید برای اینکار یا نه.

      • مهدی

        مهمان

        مهدی

        سلام مرسی از راهنمایی تونستم باdacصوتی با کیفیت تر پلی کنم با کتابخانهAudio

  3. یوسف

    مهمان

    یوسف

    سلام
    فرمودید تابع pulseln برای محاسبه زمان پالس هست حالا اگر ما بخوایم تعداد پالس رو حساب کنیم چی

  4. حمید

    مهمان

    حمید

    ممنون ، متوجه شدم
    یه سوال دیگه
    آیا مثل تابع pulseIn داخل AVR هم داریم؟؟؟

    مشاهده پاسخ ها (1)
    • مهدی دمیرچیلو

      نویسنده این مطلب

      مهدی دمیرچیلو

      نمیدونم – من ندیدم – باید بنویسی.

  5. حمید

    مهمان

    حمید

    اول از زحمات تون تشکر کنم
    بعد یه سوال
    کار تابع pulselnچیه؟
    تعیین زمان هرپالس ؟ یا شمارش پالس ؟ help

    مشاهده پاسخ ها (1)
    • مهدی دمیرچیلو

      نویسنده این مطلب

      مهدی دمیرچیلو

      سلام ( در پاسخ به اون یکی نظرت )
      خب ببین در مطلب گفتم دیگه :
      “این تابع برای محاسبه زمان پالس اعمال شده به پایه pin هستش”
      مثلا شما میخوای فرکانس رو محاسبه کنی – زمان پالس 0 بودن ( یا 1 بودن ) رو که محاسبه کنیم، به سادگی میشه فرکانس رو هم حساب کرد – در عنوان فوق، یک پروژه هم گزاشتم برا این تابع ( پروژه SRF05 ) – پس میشه مورد اولی که گفتید – زمان هر پالس ( سطح 0 یا 1 اش – که به کمک پارامتر های ورودی تابع فوق، قابل تعیین هستش )

  6. h

    مهمان

    h

    سلام
    آقا اگر بخوایم تو اردویونو اجرای ی برانامه متوقف کنیم باید چکار کنیم؟؟؟
    همزمان با اموزشی ک گذاشتین دارم پیش میرم و اون مدار buzzer رو بستم میخواستم بدونم چجوری باید متوقفش کرد؟؟

    مشاهده پاسخ ها (1)
    • مهدی دمیرچیلو

      نویسنده این مطلب

      مهدی دمیرچیلو

      سلام –

      اگر بخوایم تو اردویونو اجرای ی برانامه متوقف کنیم باید چکار کنیم؟؟؟

      برنامه چی؟ یعنی چی که متوقفش کنم؟

      مدار buzzer رو بستم میخواستم بدونم چجوری باید متوقفش کرد؟؟

      خب این مربوطه به کدنویسی ++C
      شما مثلا میای میگی به پایه X یه کلید وصل بشه – اگه پایه X فشرده شد – صدا رو وصل یا قطع کن.
      یا روش های دیگه – به کمک DEALY یا تایمر.
      و…

  7. مهدیار

    مهمان

    مهدیار

    سلام
    ی سوال داشتم اینکه با این تابعی که تو این جلسه معرفی کردید فرکانس های بیشتر از 20kهم میشه تولید کرد در عمل؟

  8. امیرحسین

    مهمان

    امیرحسین

    ممنون از زحماتتون smile

  9. M

    مهمان

    M

    سلام.من متوجه تفاوت بین timeoute , value نشدم؟ چون در هردو گفتین زمان شروع پالس رو تعیین میکنه اگه امکانش هست توضیح بدین

    مشاهده پاسخ ها (3)
    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام
      همچین کلماتی من تو مطلب پیدا نکردم!

      • M

        مهمان

        M

        تو قسمت pulse In ‘ گفتین

        • مهدی دمرچیلو

          نویسنده این مطلب

          مهدی دمرچیلو

          آها – مطلب هم یه مشکلی داشت که تصحیح کردم good
          timeout : توسط این قسمت تعیین میکنیم که چه مقدار باید تابع صبر کنه تا پالس مد نظر ما تموم بشه ( تعیین حداکثر طول پالسمون )؛ تو حالت عادی ۱ ثانیه هستش، که توسط تابع دومی میشه این مقدار رو تغییر داد؛ این ورودی بر حسب ms هستش.
          pin : پایه مد نظرو انتخاب میکنیم
          Value : تعیین میکنیم لبه حساس مد نظر رو که H باشه یا L
          حالا فک کنم فرق این دو مورد مد نظرتو فهمیده باشی.

  10. ABOLFAZL

    مهمان

    ABOLFAZL

    salam man mikham az pluseln () estefade bokonam vali ba in k p va l ro bozorg mizanam bazam kar nemikone va aslan in tabeo nemishnase che konim???

  11. mhsh

    مهمان

    mhsh

    سلام.خیلی جالب بود.فقط یه سوال-میگم اونوقت این تابع tone فقط یه زمان خاص سیگال ایجاد می کنه یا تا وقتی که برسه به دستور notone اون سیگنال رو ایجاد میکنه؟یعنی مثلا میشه این دستور رو توی void setup بنویسیم بعد تا آخر برنامه این همینجور این سیگنال رو ایجاد کنه؟

  12. ali

    مهمان

    ali

    اگه بخواهیم ۲ تا از پایه ها هم زمان فعال بشن و یکیشون ۱ ثانیه delay داشته باشه و اون یکی ۲ ثانیه، یعنی یکیشون ۱ ثانیه بعد از اون یکی غیر فعال بشه اون وقت باید چه کدی بنویسیم؟

    مشاهده پاسخ ها (4)
    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      امکان نوشتن کد وجود ندارد

      • ali

        مهمان

        ali

        فهمیدم چه جوریه!!
        digitalWrite(12,HIGH);
        digitalWrite(13,HIGH);
        delay(1000);
        digitalWrite(12,LOW);
        delay(1000);
        digitalWrite(13,LOW);
        اینجوری ۱۲ و ۱۳ با هم فعال میشن و ۱۲ یک ثانیه زودتر از ۱۳ غیر فعال میشه.
        باور کن از رو ورقه کسی نگاه نکردم laugh
        فقط دیتاشیت بازر رو نتونستم پیدا کنم، چه ولتاژی بهش بدم؟؟؟؟؟؟؟
        به ۵ ولت زدم اون رگولاتوری که روش هست خیلی داغ میکنه

        • مهدی دمرچیلو

          نویسنده این مطلب

          مهدی دمرچیلو

          معمولا ۵ ولته ولی ۱۲ ولتش هم فک کنم هستش

          • ali

            مهمان

            ali

            متشکرم.
            این بهترین سایت آموزشی (از لحاظ کامل و با جزئیات توضیح دادن و بقیه مخلفات) هستش که تاحالا دیدم.
            در ضمن من تاحالا تو هیچ سایتی تو قسمت نظرات سوال نپرسیده بودم چون اصلا امید به این نداشتم که جواب داده بشه یا اگر هم جواب داده بشه امید به این ندارم که جواب به درد بخوری باشه. اما تو این سایت هم سریع جواب داده میشه هم کامل.
            ممنون از شما به خاطر زحماتی که میکشید.

  13. سعید توکلی

    مهمان

    سعید توکلی

    ممنون جناب دمرچیلو عالی بود

  14. نیما

    مهمان

    نیما

    یعنی الان من بخوام یک صدای ساده مثل یک بیپ درست کنم که با پیزو پخش بشه راهی نیست؟الان شما همین کدهای مربوط به همین صدای اژیر که توی فیلم هست رو چطوری پیدا کردین؟

  15. نیما

    مهمان

    نیما

    سلام آقا مهدی خیلی خیلی ممنون بابت این همه آموزش های کاربردی که قرار میدید من که بدجور وابسته سایتتون شدم دوتا سوال دارم
    یک سوال فرق بیزر با پیزر (پیزو) و فرق این دوتا با بلندگو چیه؟
    دوم اینکه اگر بخوام یک صدای دلخوه مثلا مثل یک بیپ درست کنم چطوری باید مقدار دهی دارم . فرض کنید یک فایل دارم 2 ثانیه که میخوام صدای این پخش بشه راهی هست که بشه اون فایل رو تبدیل به کدهای متتاظر یا فرکانس های قابل استفاده توی آردوینو کرد؟

    مشاهده پاسخ ها (2)
    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام
      نمیدونم sorry

    • مهدی زمانی

      نویسنده سایت

      مهدی زمانی

      بیزر داخلش نوسا ساز داره و ولتاژ بدی بهش برات صدا تولید میکنه
      پیزو هم ی جور بلندگو با ابعاد کوچیک و توان کمه
      بلند گو هم که توی همه رنج توان و قیمت داریم برای فرکانس های پایین و فرکانس های بالا و ….
      برای پخش کردن صدای فایل هم میتونید فرمت فایل رو بدست بیارید و ی برنامه بنویسید که برا اسا اون فرمت صدا رو بخونه و عدد متناظر رو روی خروجی به شما بده حالا چجوری رو اردونیو میشه رو نمیدونم چون که الا باهاش کار نکردم

  16. امیر

    مهمان

    امیر

    سلام خیلی ممنون از مطالب مفید
    چند تا سوال داشتم
    مقدار خروجی که pulseIn میده بر حسب میکرو ثانیه است؟ مثلا داده 901238 یعنی 0.9 ثانیه؟
    و timeout هم بر حسب میکرو ثانیه است؟ نهایتش چقدره؟

    مشاهده پاسخ ها (1)
    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام
      microseconds
      برا timeout هم همون طور که تو مطلب گفتم، پروژه SRF05 با آردوینو رو بخون

  17. علیرضا

    مهمان

    علیرضا

    سلام.خیلی خوب بود.ممنون

  18. حمید

    مهمان

    حمید

    تشکر…….تشکر….تشکر……..

  19. اسماعیل

    مهمان

    اسماعیل

    سلام مهدی جان خدا قوت!
    اقا تا حالا بازر SMD راه انداختی ؟ 4تا پایه داره من هرکار میکنم هیچ صدایی ازش در نمیاد. مشکل کجاست ؟؟؟ sad

    مشاهده پاسخ ها (1)
    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام
      نه والا داش، یه لینک بده ازش تا ببینم چطوری هستش کارش

  20. حسین

    مهمان

    حسین

    خیلی هم عالی

  21. نيما

    مهمان

    نيما

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

    مشاهده پاسخ ها (1)
    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام
      good

  22. Hodrin

    مهمان

    Hodrin

    مرسی اوکی شدم
    فقط ما باید اون شیش تا حرف رو دقیقا ۱ساعت ۵ دقیقه (مثلا) ,۱ساعت ۵ دقیقه ای وارد کنیم؟
    یعنی منظورم اینه که ما اگه تو این فاصله ۱۰۰ تا چیز دیگه وارد کنیم اون ۱۰۰ تارو قبول میکنه یا نه؟
    یعنی فقط سر اون ۱ساعت ۵ دقیقه دیتا قبول میکنه؟

    مشاهده پاسخ ها (1)
    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      تا قیامت دیتا قبول میکنه….کایر با این نداریم
      ولی ما ۶ تا عدد مثلا میخوایم و بین هر دو عدد حداکثر ۱ساعت و ۵ دقیقه وقت هستش….بعد از این زمان وارد بشه عدد به عنوان ادامه دیتای قبلی تلقی نمیشه.
      ما میتویم کد ۶ تا دیتا رو تو ۱۰ ثانیه وارد کنیم و میتونید تو ۳۰ دقیقه و میتونیم بین هر دیتا ۱ ساعت فاصله بندایزم که در مجموع میشه ۶ ساعت و…
      تو حالت دیفالت مقدار برابر ۱ ثانیه هستش که ما مثلا میزاریمش رو ۵ ثانیه(که بسته به نیازمون میتونه تغییر کنه.)
      جان خودم تا تست نکنی ok نمیشی….چیز خاصی نداره؛ الکی خودت رو اذیت نکن….الکی گیر نده…..
      جدی میگم…این نظر منه…اگه بخوای سر هر چیز این قدر گیر بدی خودت رو اذیت میکنی فقط
      البته این نظر منه…شاید درست باش شاید غلط
      البته امری باشه بنده دربست درخدمتم…….. yes
      ok?

  23. Hodrin

    مهمان

    Hodrin

    سلام
    بی زحمت میشه یکم بیشتر راجع به timeout توضیح بدی؟

    مشاهده پاسخ ها (3)
    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام
      تو کدوم مطلب اینو گفتم من؟

      • Hodrin

        مهمان

        Hodrin

        فکر میکنم تو جلسه قبل این جلسه

        • مهدی دمرچیلو

          نویسنده این مطلب

          مهدی دمرچیلو

          گرفتم
          ببین همون جا هم گفتم بازم میگم…
          ببین مثلا طرف داره اسمش رو وارد میکنه(تو یه جعبه ای)، اگه الان حرف اول اسمش رو وارد کنه و ساعت بعد بیاد حرف دوم اسمش رو وارد کنه و…(فرض کنید اسمش ۶ تا حرف داره) “اون جعبه هه” laugh فک میکنه که ما ۶ تا اسم مجزا وارد کردیم….چون زمان بین هر چیزی که دریافت میکنه به طور پیش فرض ۱ ثانیه هستش…..حالا به کمک این تابع میایم و میگیم زمان بین وارد شدن هر حرف رو ۱ ساعت و ۵ دقیقه(مثلا)در نظر بگیر تا تمام این ۶ تا حرف به عنوان یه اسم دریافت بشه و نه ۶ تا اسم
          ok???

  24. مهرداد

    مهمان

    مهرداد

    سلام
    انجمن لازم هست

    مشاهده پاسخ ها (1)
    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام
      پول ندارم laugh
      ساختنش کاری نداره و قبلا ساختم

  25. محمد

    مهمان

    محمد

    OK
    مرسی smile

  26. alireza

    مهمان

    alireza

    سلام داداش
    ممنون از زحمتات
    دادا یه سوال؟
    fritzing میتونه آردوینو رو شبیه سازی کنه؟

    مشاهده پاسخ ها (3)
    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      والا چرا دروغ بگم ….من خودم زیاد با این نرم افزاره کار نکردم…..بیشتر پروتئوس کار میکنم و در عمل تست میکنم.

      • ali

        مهمان

        ali

        ممنون
        داداش برا‌سایتت یه انجمن هم بزنی خوبه ها pardon

        • مهدی دمرچیلو

          نویسنده این مطلب

          مهدی دمرچیلو

          پیله میله یوخدی داش

  27. محمد

    مهمان

    محمد

    مثل قسمت های قبلی عالی بود یاشا good
    من یه سوال دارم میشه این قسمت از برنامه رو جوری برای اون قسمت از برنامه پروژه RFID نوشت که فرضا کارت X بیاد کارت بزنه آژیر بزنه سیستم shock یه چیزی تو مایه های فیلما نشون میدن اونجوری laugh

    مشاهده پاسخ ها (1)
    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      خوب کاکو برنامه که کارت رو تشخیص میده، فقط باس یه if بزاری و بگی اگه این کارت سنس شد لامپ رو فلان کن بسال کن عین فیلم ها… laugh
      ok???