برچسب: coding

جدید کدنویسی تمیز در پایتون با دستورالعمل PEP 8

PEP 8 یا PEP8 یا PEP-8 سندی است که دستورالعمل ها و بهترین شیوه ها را در مورد نحوه نوشتن کد پایتون ارائه می دهد. تمرکز اصلی PEP 8 بهبود خوانایی و سازگاری کد پایتون است. PEP مخفف Python Enhancement Proposal است و چندین نسخه از آنها وجود دارد. در این آموزش دستورالعمل های کلیدی ارائه شده در PEP 8 معرفی می شوند. اصلا چرا به PEP8 نیاز داریم؟ یک کد بیشتر از آنچه نوشته می شود خوانده می شود. مثلا ممکن است چند دقیقه یا یک روز کامل را صرف نوشتن یک کد کنید. وقتی آن را نوشتید، دیگر هرگز آن را نخواهید نوشت. اما مطمئناً باید دوباره آن را بخوانید. آن قطعه کد ممکن است بخشی از پروژه ای باشد که روی آن کار می کنید. هر بار که به آن فایل برمی‌گردید، باید به خاطر داشته باشید که آن کد چه کاری انجام می‌دهد و چرا آن را نوشته‌اید، بنابراین خوانا بودن کد مهم است. همچنین اگر به عنوان یک توسعه دهنده دنبال شغل هستید پیروی از PEP 8 بسیار مهم است. نوشتن کد واضح و خوانا، حرفه ای بودن شما را نشان می دهد و به کارفرما می گوید که می [ . . . ]

  • 109 بازدید
  • 0
  • 6 ژانویه, 2024
ادامه مطلب

جدید ارتباط سریال در پایتون با استفاده از کتابخانه PySerial

PySerial یک کتابخانه کراس پلتفرم است که یک ارتباط سریال برای پایتون فراهم می کند. این کتابخانه به شما امکان می دهد داده ها را از برنامه های پایتون خود در پورت های سریال بخوانید و بنویسید. پورت های سریال معمولاً برای اتصال رایانه ها به تجهیزات جانبی مانند بردهای آردوینو، ماژول های GPS و اسکنر بارکد استفاده می شوند. ماژول pySerial با دستور pip به این صورت نصب می شود: پیدا کردن پورتهای COM برای فهرست کردن پورت های COM موجود با استفاده از Pyserial، می توانید از کد پایتون زیر استفاده کنید: ابتدا ماژول serial.tools.list_ports را وارد می کنیم، که توابعی را برای کار با پورت های سریال ارائه می دهد. تابع list_ports.comports لیستی از پورت های سریال موجود را برمی گرداند. حلقه لیست را پیمایش می کند و نام هر پورت موجود در لیست را چاپ می کند (به عنوان مثال، ‘COM1’، ‘COM2’، و غیره). باز کردن یک پورت: همیشه باید در ابتدای برنامه ماژول را import کنیم: برای باز کردن یک پورت از دستور زیر استفاده می کنیم: پارامترهای مختلفی را می توانیم در این تابع تنظیم کنیم. این پارامترها را در زیر بررسی می کنیم:  port نام پورت می‌تواند رشته‌ای [ . . . ]

  • 293 بازدید
  • 0
  • 30 دسامبر, 2023
ادامه مطلب

جدید تایمرها در آردوینو

ماژول های تایمر در آردوینو عملکرد زمان بندی دقیقی را ارائه می دهند. آنها به ما اجازه می دهند کارهای مختلفی را انجام دهیم، مانند ایجاد تأخیرهای دقیق، ایجاد رویدادهای دوره ای، اندازه گیری فواصل زمانی و برآوردن نیازهای زمانی برنامه مورد نظر. هر برد آردوینو میکروکنترلر مربوط به خودش را دارد که مجموعه ای از تایمرهای سخت افزاری خاص خود را دارد. بنابراین، همیشه باید به دیتاشیت مربوط به میکروکنترلر مورد نظر مراجعه کنیم تا بیشتر با قابلیت های سخت افزاری آن و نحوه استفاده بهینه از آن آشنا شویم. آردوینو UNO  که از میکروکنترلر Atemga328p  استفاده می کند دارای 3 تایمر سخت افزاری است که عبارتند از:      Timer0: تایمر 8 بیتی      Timer1: تایمر 16 بیتی      Timer2: تایمر 8 بیتی این ماژول‌های تایمر برای تولید سیگنال‌های خروجی PWM و ارائه قابلیت‌های زمان‌بندی و ایجاد تاخیر استفاده می‌شوند، و همچنین می‌توانیم از آنها برای اجرا در هر حالتی برای دستیابی به عملکرد مورد نظر استفاده کنیم. هر تایمر سخت افزاری یک رجیستر شمارنده دیجیتال در هسته خود دارد که بر اساس سیگنال کلاک ورودی شمارش می کند. اگر سیگنال ساعت از یک منبع داخلی با فرکانس ثابت بیاید، گفته می شود که [ . . . ]

  • 182 بازدید
  • 0
  • 23 دسامبر, 2023
ادامه مطلب

جدید آموزش وقفه در آردوینو

وقفه چیست؟ فرض کنید در منزل به امور روزمره تان می پردازید. اگر کسی پشت در باشد چطور متوجه می شوید که باید بروید و در را باز کنید؟ جواب ساده است. آن شخص زنگ در را می زند، شما متوجه می شوید که شخصی پشت در است و می روید و در را باز می کنید. قطعا شما برای اینکه متوجه شوید آیا کسی پشت در منتظر هست یا نه هر 5 دقیقه در را باز نمی کنید تا این مساله را بررسی کنید! در این مثال زنگ در نقش وقفه یا Interrupt را بازی می کند.  یعنی شما به کارهای معمول می پردازید تا زمانی که یک وقفه شما را از انجام این کارها باز دارد و شما به وقفه ای که دریافت کردید رسیدگی کنید.  اما به روشی که به طور مرتب در را باز کنید تا ببینید کسی پشت در هست یا خیر polling می گویند. در برنامه نویسی از روش polling در مواردی استفاده می شود که معمولا ساختار برنامه ساده باشد و با بررسی مرتب ورودی ها اختلالی در عملکرد برنامه پیش نیاید. وقفه ها وظایف جانبی هستند که CPU باید به محض دریافت آنها را انجام دهد و [ . . . ]

  • 118 بازدید
  • 0
  • 23 دسامبر, 2023
ادامه مطلب

جدید آشنایی با PWM در آردوینو

PWM  مخفف Pulse Width Modulation است که به فارسی به معنای مدولاسیون پهنای پالس است. این یک تکنیک الکترونیک است که برای کنترل توان الکتریکی یک بار با تغییر زمان روشن بودن و خاموش بودن منبع تغذیه در هر سیکل استفاده می شود. سیگنال PWM یک سیگنال PWM از یک شکل موج مربعی با پهنای پالس متغیر تشکیل شده است.  پهنای پالس به درصد زمانی گفته می شود که سیگنال بالا است. به عنوان مثال، اگر پهنای پالس 50٪ باشد، سیگنال نیمی از زمان بالا و نیمی از زمان پایین است. PWM  با استفاده از یک مدار سوئیچینگ انجام می شود. این مدار با استفاده از یک سیگنال کنترلی، منبع تغذیه را به بار وصل یا قطع می کند. سیگنال کنترلی معمولاً یک سیگنال دیجیتال است که می تواند دو مقدار مختلف داشته باشد:0 یا 1 PWM  برای طیف گسترده ای از کاربردها استفاده می شود، از جمله: PWM  یک تکنیک انعطاف پذیر و پراستفاده است که در بسیاری از دستگاه های الکترونیکی یافت می شود. فرکانس PWM سیگنال PWM دارای چند ویژگی است. اولین مورد فرکانس F است که اساساً معیاری است برای اینکه سیگنال PWM با چه سرعتی بین HIGH و LOW در [ . . . ]

  • 151 بازدید
  • 0
  • 23 دسامبر, 2023
ادامه مطلب

جدید مبدل آنالوگ به دیجیتال ADC در آردوینو

مبدل آنالوگ به دیجیتال (ADC) یک سیستم الکترونیکی است که یک سیگنال آنالوگ، مانند صدای دریافت شده توسط میکروفون یا نور وارد شده به دوربین دیجیتال را به سیگنال دیجیتال تبدیل می کند. ما معمولاً از یک ADC برای اندازه‌گیری/خواندن ولتاژ آنالوگ از منابع یا حسگرهای مختلف استفاده می‌کنیم. ADC معمولاً داخل میکروکنترلرهای مختلف تعبیه می شود یا به عنوان یک آی سی جداگانه ارائه می گردد. آردوینو UNO (میکروکنترلر atmega328p) در مجموع دارای 6 پایه ورودی آنالوگ است که به صورت داخلی به ADC متصل می شوند تا برای خواندن ورودی های ولتاژ آنالوگ استفاده شوند. این پایه ها معمولا با حرف A مشخص می شوند. به عنوان مثال در آردوینو UNO پایه های A0 تا A5 می توانند به عنوان ورودی آنالوگ ADC استفاده شوند. تعداد ADC در سایر بردهای آردوینو ممکن است تفاوت داشته باشد. رزولوشن ADC آردوینو رزولوشن ADC داخلی آردوینو 10 بیت است، به این معنی که محدوده خروجی آن بین  0 تا 1023 است. ولتاژ مرجع آنالوگ برای آردوینو ADC به طور پیش فرض VREF = +5v است، به این معنی که می توانیم ولتاژ ورودی آنالوگ را از 0 تا 5 ولت اندازه گیری کنیم. در صورتی که [ . . . ]

  • 136 بازدید
  • 0
  • 23 دسامبر, 2023
ادامه مطلب

جدید مانیتور سریال در آردوینو

مانیتور سریال آردوینو ابزار بسیار مفیدی است که در خود IDE آردوینو تعبیه شده است. بنابراین برای برقراری ارتباط با آردوینو از طریق پورت سریال نیازی به یک ترمینال خارجی ندارید. فقط مانیتور سریال را باز کنید، باود ریت صحیح را برای ارتباط تنظیم کنید، و برنامه را آپلود نمایید.در اینجا یک برنامه ساده آردوینو را مشاهده می کنید که هر ثانیه یک بار پیام “Hello karakit” را از طریق پورت سریال به ترمینال IDE می فرستد و ما آن را در مانیتور سریال مشاهده خواهیم کرد. تابع setup یک بار زمانی که برد روشن یا ریست می شود فراخوانی می شود. در این کد با استفاده از Serial.begin(115200) ارتباط سریال را با باودریت 115200 مقداردهی اولیه می کند. حلقه loop پس از تکمیل تابع setup به طور مداوم اجرا می شود. این کد عبارت “Hello karakit” را با استفاده از دستور Serial.println (“Hello karakit”) در مانیتور سریال چاپ می کند و سپس قبل از تکرار فرآیند، با استفاده از delay (1000) 1 ثانیه منتظر می ماند. اگر باودریت مانیتور سریال با باودریت تعیین شده در برنامه برابر نبود می توانید آن را تغییر دهید و تنظیم کنید: دریافت ورودی از کاربر در پورت سریال سه نوع داده رشته [ . . . ]

  • 216 بازدید
  • 0
  • 11 دسامبر, 2023
ادامه مطلب

جدید ورودی دیجیتال در آردوینو

قصد داریم برای آشنای با ورودی دیجیتال در آردوینو یک دکمه به یکی از پایه های آن وصل کنیم و برنامه ای بنویسیم که در صورت فشرده شدن دکمه یک LED که به یکی از پایه های خروجی متصل شده روشن شود. وقتی می گوییم ورودی دیجیتال یعنی این ورودی تنها می تواند یکی از دو مقدار High یا Low داشته باشد. دکمه را به پایه 2 و LED را از طریق مقاومت 220 اهم به پایه 8 وصل می کنیم. مدار به شکل زیر است: برنامه به شکل زیر نوشته می شود: کد از دو قسمت تشکیل شده است: setup و loop. قبل از تابع setup سه متغیر led، button و buttonValue را مقداردهی اولیه کرده ایم. در خط اول متغیری به نام led از نوع int با مقدار 8 را مقداردهی اولیه شده است. این متغیر برای ذخیره شماره پین متصل به LED استفاده می شود. سپس دمتغیری به نام button از نوع int با مقدار 2 را مقداردهی اولیه شده است. این متغیر برای ذخیره شماره پین دکمه ای که به برد آردوینو متصل است استفاده می شود. در خط بعد متغیری به نام buttonValue از نوع int با مقدار 0 را مقداردهی اولیه شده است. [ . . . ]

  • 167 بازدید
  • 0
  • 9 دسامبر, 2023
ادامه مطلب

جدید نمایش ویژگی های یک شی در پایتون با استفاده از __repr__

فرض کنید که بخواهیم ویژگی های یک شی را که از روی یک کلاس ایجاد کرده ایم نمایش دهیم. کلاس Person را که در مطالب قبلی استفاده کردیم در نظر بگیرید: اگر یک کارمند جدید با این کلاس ایجاد کنیم و با دستور print بخواهیم مقدارش را نمایش دهیم خروجی به این شکل نمایش داده می شود: <__main__.Person object at 0x000001F327211370> اما این نمایش چیزی از خصوصیات شی Kamran ارایه نمی دهد. اما برای این کار می توانیم از متد خاصی به نام __repr__ استفاده کنیم. متد __repr__ یک متد خاص در کلاس‌های پایتون است که نمایش رشته‌ای از یک شی را برمی‌گرداند. توسط تابع ()repr داخلی فراخوانی می شود و برای ارائه یک نمایش رشته دقیق تر و رسمی از یک شی استفاده می شود. در اینجا مثالی از نحوه تعریف متد __repr__ در کلاس Person آورده شده است: در این مثال، متد __repr__ رشته‌ای را برمی‌گرداند که می‌توان از آن برای ایجاد مجدد شی Person استفاده کرد. این رشته حاوی مقادیر first_name، last_name و IDnumber شیء است. برنامه کامل را در زیر می بینید: این بار با اجرای برنامه خروجی را به این صورت مشاهده خواهید نمود: Person(‘Kamran’, ‘Hamidi’, 1257148) که مقادیر ویژگی [ . . . ]

  • 176 بازدید
  • 0
  • 2 دسامبر, 2023
ادامه مطلب

جدید چند ریختی یا polymorphism در کلاس های پایتون

اصطلاح “چند شکلی” یا “چند ریختی” یا polymorphism از زبان یونانی گرفته شده و به معنای چیزی است که چندین شکل به خود می گیرد.چند ریختی به توانایی یک زیر کلاس برای انطباق متدی که قبلاً در سوپرکلاس آن وجود دارد برای رفع نیازهایش اشاره دارد. به بیان دیگر، یک زیر کلاس می تواند از متدی از سوپرکلاس خود استفاده کند یا در صورت نیاز آن را تغییر دهد.همان کلاس Person که در مطالب قبلی استفاده کردیم را در نظر بگیرید: با استفاده از این کلاس می توان اعضای شاغل در یک شرکت را تعریف نمود و نام و نام خانوادگی و شماره پرسنلی آنها را مشخص کرد. همچنین از طریق متد set_salary می توان در زمان لزوم حقوق هر شخص را نیز معین کرد. حالا فرض کنیم که بعضی کارمندها رتبه بالاتری دارند و حقوق آنها 10 درصد بیشتر از سایر کارمندان است و قصد داریم یک کلاس فرزند برای آنها ایجاد کنیم و بتوانیم حقوق آنها را جداگانه مشخص کنیم. برای ایجاد یک زیر کلاس که از چند شکلی استفاده می کند، می توانیم یک کلاس جدید تعریف کنیم که از کلاس Person به ارث می برد و متد set_salary را دوباره در [ . . . ]

  • 99 بازدید
  • 0
  • 2 دسامبر, 2023
ادامه مطلب