توصیه شده, پروژه رزبری پای, دوره آموزش رزبری پای با پایتون, رزبری پای, مینی کامپیوتر ها

چالش تولید رنگ زرد با LED های سبز و قرمز – آموزش رزبری پای با پایتون – قسمت چهارم –

رزبری پای

سلام به همه.

بعدازاینکه من چالش LED قسمت قبل آموزش رزبری پای با پایتون رو حل کردم زئوس یه چالش باحال تر برام گذاشت. چالش به این صورت بود که من باید با دوتا LED به رنگ‌های قرمز و سبز یه نور زرد تولید می‌کردم. یعنی طوری که باید از کاربر سؤال می‌شد میخواد چه رنگی رو انتخاب کنه؟ و کاربر ۳ حق انتخاب داشته باشه: حالت اول رنگ قرمز، حالت دوم رنگ سبز و حالت سوم رنگ زرد.

وسایلی که حق داشتم انتخاب کنم:

  • رزبری پای (من یدونه نسخه ۴ انتخاب کردم)
  • برد بورد ( کوچیک یا بزرگش فرقی نداره)
  • دو تکه سیم نر و ماده (ترجیحاً در ۲ رنگ متفاوت من خودم از قهوه‌ای و قرمز استفاده کردم)
  • سه تکه سیم دوسر نر (ترجیحاً با رنگ‌های متفاوت)
  • دوتا LED (یکی قرمز و دیگری سبز)
  • یدونه مقاومت ۱۰ اهم

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

چالش تولید رنگ زرد با LED های سبز و قرمز - آموزش رزبری پای با پایتون - قسمت چهارم -

حالا با این مدار من ۳ تا نور میتونم تولید کنم. حتماً می‌پرسید چطور؟‌

جواب خیلی راحته. اگه هرکدوم از ورودی‌های ما ۰ و دیگری ۱ باشه ما میتونیم یه نور رو ببینیم. حالا اگه هرکدوم از ورودی و خروجی‌ها رو توی بازه ۵۰ هرتز یا بیشتر ۰ و ۱ کنیم چی؟ چشم ما نمیتونه این حجم از روشن و خاموش شدن رو درک کنه و به نظرش دوتا LED ها روشنه. منطق برنامه رو درست گفتم. حالا باید برم و پیاده سازی کنم.

شاید برای شما مفید باشد: آموزش رزبری پای از 0 تا 100 از مقدماتی تا پیشرفته

 

اتصالات سخت افزاری

تو قدم اول مداری که تو عکس می‌بینید رو روی برد بورد وصل کردم. پس با توجه به این عکس:

Raspberry pi 4 GPIO Pinout

سیم قهوه‌ای رو به پین شماره ۷ رزبری و پورت مثبت سمت چپ برد بورد وصل کردم. سیم قرمز رو هم به پین شماره ۸ رزبری و پورت مثبت ستون سمت راست وصل کردم.

یدونه از سیم‌های دوسر نر رو از ستون مثبت سمت راست برد بورد به پورت شماره J۷ وصل کردم. مقاومت رو برداشتم و یه سر اون رو به پورت شماره I۷ و سر دیگه اون رو به پورت شماره E۱۲ وصل کردم. دوتا سیم‌های دوسر نر رو از ستون مثبت سمت چپ به ترتیب یکی رو به پورت شماره A۱۰ و A۱۵ وصل کردم. LED قرمز رو برداشتم و سر منفی اون رو به پورت شماره C۱۵ و سر مثبت رو به پورت شماره C12 وصل کردم. LED سبز رو برداشتم و سر مثبت اون رو به پورت D۱۲ و سر منفی اون رو به پورت D۱۰ وصل کردم.

 

قسمت برنامه نویسی

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

طبق روال قبل کتابخانه‌های مورد نظر رو فراخانی کردم:

 

تنظیمات پورت‌ها رو هم مثل قبل اینجا تعریف کردم:

 

الآن من به ۳ تا تابع نیاز داشتم برای رنگ قرمز، سبز، زرد. اینم اینجا تعریف کردم:

اگه به تابع yellow دقت کنید می‌بینید که داخل یه حلقه بی نهایت داره توابع مربوط به رنگ‌های قرمز و سبز رو به ترتیب با ۰/۱۳ ثانیه داره فراخانی میکنه. در این سرعت چشم انسان نمیتونه تشخیص بده که الان LED ها داره خاموش و روشن میشه، پس مغز ما فکر میکنه الآن روشنه.

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

کاربر اگه g رو وارد کنه LED سبز براش روشن میشه. اگه r رو وارد کنه LED قرمز براش روشن میشه. اگه هم r_g رو وارد کنه براش نور زرد تولید میشه. که با این کدها ادامه ماجرا براش در پشت صحنه انجام میشه:

تا اینجا درست پیشرفته بودم که ناگهان زئوس گفت: “باید تا برنامه اجرا میشه هربار از کاربر سؤال بشه الآن میخوای چه عملیاتی انجام بدی و با وارد کردن دستور، کار قبلی متوقف و کار جدید شروع بشه.”

من که ۸۰٪ راه رو رفتم، یکم فکر کردم دیدم خب تابع‌های red و green که برای led اصن چالش خاصی نداره اما تابع مربوط به yellow چون داره توی حلقه بی نهایت میره نمیشه همین طوری به صورت عادی باهاش برخورد کرد. به خودم گفتم اگه تو thread بزارمش ممکنه درست کارکنه؟

امتحان کردم و جواب گرفتم:

حالا یه چیزی هم برای اینکه اون thread متوقف بشه باید بزارم:

اون سه تا تابع رو هم به این صورت تغییر دادم:

 

کد کامل چالش LED

به همین راحتی این چالش هم حل شد. شما میتونید کد کامل برنامه رو اینجا ببینید:

 

author-avatar

درباره xander karimi

گونه ای از برنامه نویس های نادر و کم یاب. در بر گیرنده انواع و اقسام باگ های ناشناخته. مدافع حقوق این روی سیستم من کار می‌کنه. ابداع کننده انواع روش های سامورایی در برنامه نویسی

انتشار مطالب با ذکر نام و آدرس وب سایت سیسوگ، بلامانع است.

شما نیز میتوانید یکی از نویسندگان سیسوگ باشید.   همکاری با سیسوگ

6 دیدگاه در “چالش تولید رنگ زرد با LED های سبز و قرمز – آموزش رزبری پای با پایتون – قسمت چهارم –

  1. Avatar for سپهر راد سپهر راد گفت:

    مطلب جالبی بود.
    ظاهرا به علت یه سری سو تفاهم ها برخی دوستان بی مهری کردن.

  2. Avatar for صادق صادق گفت:

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

    1. Avatar for Sisoog Os Sisoog Os گفت:

      دوست عزیز
      سایت سیسوگ نویسنده های زیادی داره که سعی دارند تجربه های خودشون در حوزه های مختلف را ارائه بدند
      این که یک نفر از دنیای نرم افزار سعی کرده با هیجان خودش یک کار ساده را انجام بده شاید برای خیلی پیش پا افتاده باشه ولی زرد محسوب نمیشه
      ما هم یک بستر هستیم و از اینکه دوستی با هر میزان اطلاعات سعی در انتقال دانسته هاش برای عده ای دیگه میکنه از نظر ما پسندیده و قابل احترام هست

  3. Avatar for حسام حسام گفت:

    من یه ربعه فقققط دارم نفس میکشم
    چرا این قدر چرت و پررت نوشتید واقعا؟ مگه مجبوری؟ سرم درد گرفته
    از همون اول مقاله که
    • دو تکه سیم نر و ماده (ترجیحاً در ۲ رنگ متفاوت من خودم از قهوه‌ای و قرمز استفاده کردم)
    • سه تکه سیم دوسر نر (ترجیحاً با رنگ‌های متفاوت)
    مگه کفن میته؟ خوب بنویس مقداری سیم برد بوردی مثلا و سیم نری به مادگی
    بعد اون مداری که کشیدید منبع متناوب داره چه ربطی داره اصلا به رزبری پای؟ چجوری به رزبری وصل شده؟ ورودی هاش کجاس؟ رزبری ولتاژ متناوب تولید میکنه؟ اگه میتونه ولتاژ منفی تولید میکنه بگید ما که 20 ساله کار الکترونیک میکنیم یاد بگیریم. اگه منظورت سیگنال مربعیه اون علامت که گذاشتی داری اشتباه میزنی داداش
    بعد یجا تو ادامه نوشتید منطق برنامه رو درست گفتم، حالا دیگه باید کدشو بزنم
    من الآن نمیدونم کلمو به طاق بکوبم، بخندم، سکته کنم؟
    به نظرم من بیشتر ##### تا منطق درست بنویسی!!
    آخه مردمومن سه تا حالت صفر و یکی بیشتر نیست من نمی فهمم چرا این همه لقمه رو دور سرت پیچوندی آخه.
    میتونستی یه متغیر ساده تعریف کنی هربار دکمه رو زد یکی بشماره و وقتی هم به 3 رسید دوباره صفر بشه یعنی از 0 تا 2
    بگی اگه حالت 0 شد، فقط LED قرمز اگه 1 شد فقط سبز اگه دو شد دو تاش! تازه میتونستی حالت چهارمی هم تعریف کنی همش خاموش باشه
    کاری داشت؟ تازه یه کوچولو هم نشستی فکر کردی
    مگه جلسه قبلی با کلید این کارو نکری پس چرا از سریال خوندی
    بابا مرد روز های سخت!!!
    از روزی که این پایتون اومد همه برنامه نویس شدن همینه
    دیگه بقیه مقاله هم اصابم نکشید بخونم تا همینجاش بسمه
    الحق که به قول خودت نایابی

    1. Avatar photo xander karimi گفت:

      سلام. ممنون از اینکه وقت گذاشتید و مطالعه کردید.
      دوست عزیز شما خودتون دارید میگید ۲۰ ساله الکترونیک کار میکنید. اگه تیتر این نوشته رو بخونید میبینید که نوشته :آموزش رزبری پای با پایتون – قسمت چهارم. یعنی این این نوشته برای کساییه که تازه میخوان وارد دنیای الکترونیک و برنامه نویسی بشن. این که من رنگ سیم ها رو هم نوشتم یا تعداد سیم ها رو نوشتم خب دلم خواسته این طوری بنویسم و شما اگه باب میلتون نیست میتونید آروم از کنارش رد بشد یا اگه خیلی اذیت شدید میتونید باب دل خودتون مطلب بنویسید و منتشر کنید.
      این که دارید این طور جاج میکنید به نظرم خیلی عجیبه. بعدشم کسی که داره آشنا میشه دوست داره برنامه ای که مینویسه کار کنه، براش مهم نیست که چطور نوشته میشه، ایا بهینه نوشته شده یا نه و…

      1. Avatar for سمنانی سمنانی گفت:

        لحن تند ایشون رو اگر فاکتور بگیریم، یه سری نقد ها رو هم درست دارن میگن. الآن اون مداری که کشیدید من هم واقعا درک نکردم. اصلا رزبری کجای این مداره؟ بعد شما اگه سیگنال مربعی بدی به LED فقط یکیش روشن میشه چون یکیش بایاس معکوسه. اگرم متناوب بهش بدی که خوب باز به اندازه همون زمانی که LED بالایی روشنه پایینی هم روشنه. اصلا منطق رو من هیچ درک نکردم. رزبری هم که متناوب نیست. ضمن اینکه نکته خوبی هم اشاره کردن. چالش مگه این نبوده که دکمه رو زد کاربر یا زرد یا قرمز یا دوتاش روشن بشه همزمان؟ اصلا صورت مساله هم نامفهومه. ایشون به نظر من نقد وقعا درستی کردن، بماند که حالا یکم واقعا تند و عصبی بودن. در ضمن کلمات انگلیسی مثل جاج و… رو هم خواهشا استفاده نکنیم و نزاریم این فرهنگ اشاعه پیدا کنه. ما پارسی زبان هستیم و خودمون باید به فکر زنده موندن این زبان باشیم.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *