اتصال تلگرام به رزبری پای ، استفاده از برد رزبری پای در پروژه‌ها، همواره جذاب و راحت است. معماری قدرت‌مند ARM آن و نیز سیستم عامل منبع باز (open source) مبتنی بر لینوکس آن، به ما کمک کرده است که بسیاری از پروژه‌های خود را به صورت آنلاین و در کمترین زمان دریافت کنیم.
    در این آموزش ما قصد داریم یک روش جالب را برای به اشتراک ‌گذاشتن داده های مختلف (فایل، عکس، ویدئو، متن و صوت) بین برد رزبری‌پای و گوشی موبایل معرفی کنیم که از طریق اپلیکیشن محبوب تلگرام انجام می‌شود.

    اتصال تلگرام به رزبری پای

     

    استفاده از ربات تلگرام در  رزبری پای : به اشتراک گذاشتن متن و فایل

    در ابتدا لازم است برای کسانی که با تلگرام آشنایی ندارند توضیح دهیم که این اپلیکیشن یک اپلیکیشن پیام رسان مانند واتس آپ است که نسخه‌های مختلف آن برای اندروید و آیفون و ویندوز، در پلی استور قابل دسترسی ست. بسیاری از کاربران بر این باور هستند که تلگرام سریع‌تر و کاربردی تر از واتس آپ است.
    یکی از ویژگی‌های تلگرام این است که از ربات‌ها (bot) نیز پشتیبانی می‌کند. به این معنا که نه تنها قابل استفاده توسط افراد انسانی است، بلکه ماشین‌ها نیز می‌توانند از آن استفاده کنند. در پروژه ما، ماشین مورد نظر، برد رزبری‌پای خواهد بود. پس از آن که شما به برد رزبری‌پای خود می‌آموزید که چگونه مانند یک ربات رفتار کند، هر فردی (در صورتی که آن را برای عموم قابل استفاده کنید) خواهد توانست درست مانند زمانی که با یک انسان چت می‌کند، با برد شما نیز چت کند و داده‌ها مختلفی را با آن به اشتراک بگذارد. به این ترتیب می‌توانید برای خودتان یک دستیار پاسخ‌گویی ایجاد کنید! جالب است ، نه؟ بیابید شروع کنیم …

    ابزاری مورد نیاز برای اتصال تلگرام به رزبری پای

    1.  یکی از انواع مختلف بردهای رزبری‌پای که به اینترنت متصل باشد.
    2.  موبایلی که اپلیکیشن تلگرام بر روی آن نصب شده باشد.

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

    آموزش رزبری پای

    توجه کنید که در این جا ما فرض را بر این می‌گذاریم که برد رزبری‌پای شما به اینترنت متصل است و شما با نحوه‌‌ی کار کردن با ترمینال Lx آشنا هستید. پس قبل از شروع دستورات این آموزش، ابتدا از متصل بودن برد خود به اینترنت مطمئن شوید. اگر در جایی از این آموزش مشکل داشتید به قسمت آموزش رزبری مراجعه کنید. اتصال تلگرام به رزبری پای

     

    مرحله ۱ – نصب تلگرام بر روی موبایل

    قدم اول این است که اپلیکیشن تلگرام را بر روی موبایل خود نصب کنید ( البته اگر از قبل نصب نداشته باشید!)
    تلگرام در ورژن های مناسب اندروید، آیفون و دسکتاپ موجود است و شما می‌توانید نسخه‌ی متناسب خود را انتخاب و دانلود کنید. مانند همه‌ی اپلیکیشن‌های دیگر، در اینجا نیز پروسه‌ی کوتاهی برای ثبت‌نام وجود دارد که باید آن را طی کنید. این پروسه را طی کنید تا زمانی که ثبت‌نام کامل شود و به صفحه‌ی شخصی خود در تلگرام دسترسی پیدا کنید.

    مرحله ۲- گفتگو با Bot Father

    قدم بعدی این است که به کمک بات مرجع تلگرام، درخواست ایجاد یک بات جدید شخصی بدهیم.
    در گوشه‌ی بالای سمت راست صفحه‌ی اصلی تلگرام شما، یک آیکون جستجو وجود دارد. از طریق آن کلمه BotFather را جستجو کنید. این ربات به ما کمک می‌کند که بتوانیم ربات مخصوص به خودمان را ایجاد کنیم.
    دکمه start را بزنید و بر روی گزینه /newbot همان‌طور که در تصویر زیر هم مشخص شده است، کلیک کنید. پس از آن، از شما درخواست می‌شود که اطلاعات مختصری نظیر نامی که می‌خواهید برای بات خود انتخاب کنید و username آن را وارد کنید. این اطلاعات را وارد کنید و دقت داشته باشید که ما بعدا با این یوزرنیم انتخابی سر وکار خواهیم داشت.
    اتصال تلگرام به رزبری پای

    مرحله ۳ – دریافت توکن دسترسی

    ما در این جا اسم ربات‌مان را circuitdigest گذاشته‌ایم و یوزرنیم آن را نیز circuitdigestBot انتخاب کرده‌ایم. پس از طی این مراحل، Bot Father به ما یک توکن دسترسی می‌دهد که چیزی شبیه پسورد برای استفاده از ربات ‌‌مان است و هر فردی که به آن دسترسی داشته باشد بوسیله‌ی آن می‌تواند ربات را برنامه‌ریزی و مدیریت کند. بنابراین در حفظ این کد دقت کنید!
    پس از گرفتن توکن دسترسی، به سراغ رزبری‌پای می‌رویم.
    اتصال تلگرام به رزبری پای

    مرحله ۴- استفاده از Telepot برای نصب تلگرام بر روی رزبری‌پای

    استفاده از تلگرام بر روی برد رزبری‌پای با کمک بسته‌ی پایتونی به نام Telepot امکان پذیر شده است. بنابراین باید این بسته‌را از طریق اعمال دستورات زیر بر ترمینال Lx ، بر روی رزبری‌پای نصب کنیم.
    اتصال تلگرام به رزبری پایزمانی که تله‌پات بر روی برد نصب شد، می‌توانیم آن را از طریق برنامه پایتون اجرا کرده و با ربات تلگرم ارتباط برقرار کنیم.

    مرحله ۵ – برنامه نویسی برد رزبری‌پای

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

    قدم اول در کد، فراخوانی تمام توابع مورد نیاز است. یکی از توابعی که قطعا به‌ آن نیاز داریم ، همان Telepot است. همچنین به توابع زمانی نیز نیاز داریم تا رزبری‌پای بتواند زمان جاری را بخواند. پس از آن باید یک پروژه ایجاد کنیم که مقادیر و دستورات در آن ذخیره شوند.
    اتصال تلگرام به رزبری پایقدم بعدی این است که تابعی داشته باشیم که بتواند مبتنی بر دستورات دریافتی از کاربر، عمل متناسب را انجام دهد. در اینجا نام این تابع را action گذاشته‌ایم. ربات تلگرام در اصل در درون این تابع برنامه ریزی می‌شود. باید توجه داشته باشیم ربات تلگرامی ما خودش قادر نیست که ابتدائا مکالمه‌ای را آغاز کند، بلکه فقط می‌تواند به دستورات پاسخ دهد. بنابراین هر زمان که دستوری وجود داشته باشد، chat id بوجود می‌آید. Chat id در واقع چیزی شبیه به یک آدرس است که تنها در صورت وجود آن ربات می‌تواند به دستور کاربرد پاسخ دهد. پس ابتدا باید chat id و پیامی که کاربر ارسال کرده است خوانده شوند. هم‌چنین دستور دریافتی را نیز چاپ می‌کنیم تا در مراحل بعدی که دستور پروسس می‌شود ، آن را در دسترس داشته باشیم.
    اتصال تلگرام به رزبری پایدر ادامه‌ی تابع و به منظور بررسی و پروسس هر دستور، آن را با یک نوشته‌ی از پیش معلوم شده مقایسه می‌کنیم تا در صورت یکی بودن ، اقدامات مشخص تعیین شده انجام شوند.
    دستور اول در اینجا /hi است که از قبل گفتیم که می‌خواهیم با “Hi! CircuitDigest” پاسخ داده شود.
    اتصال تلگرام به رزبری پایدستور بعدی /time است که می‌خواهیم در پاسخ به آن کاربر زمان جاری را دریافت کند. برد رزبری‌پای قابلیت خواندن زمان و تاریخ را در خود دارد. کافی‌ست در اینجا آن مقادیر خوانده شده را به صورت زیر به ثانیه و دقیقه و ساعت تقسیم کنیم.
    اتصال تلگرام به رزبری پایدستور بعدی /logo است که در پاسخ به آن ربات باید تصویری را از url مشخصی که به آن می‌دهیم دریافت کند و برای کاربر ارسال کند. البته تصویر می‌تواند از طریق url یا از طریق هارد دیسک قابل دسترس باشد. ما در اینجا از نوع url استفاده کرده‌ایم.
    اتصال تلگرام به رزبری پایدستور بعد ، دستور /file است . در پاسخ به آن ربات فایلی به نام Aisha.py را که بر روی هارد دیسک قرار دارد، ارسال می‌کند. شما نیز می‌توانید هر فایل دلخواهی را که دوست دارید ربات در پاسخ به این دستور ارسال کند، به جای این فایل، با آدرس مشخص خودتان قرار دهید.
    اتصال تلگرام به رزبری پای

    دستور بعد ، دستور /audio است . ربات با گرفت این دستور مثلا یک فایل mp3 را از هارد دیسک برداشته و ارسال می‌کند. ما در اینجا فایلی به نام test.mp3 را به عنوان نمونه قرار داده‌ایم.
    اتصال تلگرام به رزبری پایو حالا نوبت به مهم‌ترین بخش می‌رسد. جایی که می‌خواهیم برای دستورات پایتون دسترسی لازم به ربات تلگرامی را فراهم کنیم. در اینجا بات تلگرام را با نام telegram_bot فراخوانی می‌کنیم و توکن دسترسی ای را که در مرحله سه دریافت کردیم ، به آن می‌دهیم. در کد زیر همان‌طور که می‌بینید ما چند رقم آخر توکن خود را به منظور امنیت ربات، پنهان کرده‌ایم. هم‌چنین از دستور print نیز به منظور نمایش اتفاقات ربات بر روی صفحه نمایش ، استفاده می‌کنیم.
    اتصال تلگرام به رزبری پایامیدواریم که با این توضیحات به خوبی متوجه نحوه‌ی عملکرد برنامه شده‌ باشید. حال به ادامه مراحل می‌پردازیم.

    مرحله ۶- اجرای برنامه‌ی نوشته شده در رزبری‌پای

    همان‌طور که گفتیم، کد کامل این برنامه در انتهای آموزش قرار داده شده است که می‌توانید دانلود کنید. در صورتی که از این کد آماده استفاده کردید، دقت کنید که در قسمت توکن دسترسی، توکن مربوط به خودتان را جایگزین کنید.
    حال برنامه را در پایتون اجرا کنید و در نتیجه آن باید مشخصات ربات خود را مشابه تصویر زیر روی صفحه ببینید. می‌بینید که در تصویر نشان داده شده، نام ربات ما به درستی circuitdigestBot نشان داده شده است. پس شما نیز اگر نام ربات خود را مشاهده کردید، همه چیز تا این مرحله درست پیش رفته.
    اتصال تلگرام به رزبری پایزمانی که پیغام up and running را دیدید ، به این معناست که ربات شما آماده دریافت دستورات و پاسخ‌گویی است.

    مرحله ۷- از خروجی لذت ببرید!

    حالا فقط این مانده است که چک کنید که آیا بات شما به تمامی دستورات به خوبی پاسخ می‌دهد یا خیر. نام ربات خود را در قسمت جستجوی تلگرام ، جستجو کنید. پس از پیدا کردن، بات خود را باز کنید و start را وارد کنید. سپس دستورات /hi, /time, /file, /logo, or /audio را به ترتیب وارد کنید و پاسخ‌های برنامه ریزی شده را دریافت نمایید.
    (نکته مهم : توجه کنید که در موارد /logo، /audio و /file ، اگر چنان‌چه شما url و آدرس مطابق با هارددیسک برد خودتان را در کد وارد نکرده باشید، به مشکل برخواهید خورد. پس حتما در مورد جایگزینی این موارد در کد دقت داشته باشید.)
    فیلم کامل نحوه‌ی عملکرد را می‌توانید در انتهای آموزش دریافت کنید.
    اتصال تلگرام به رزبری پای اتصال تلگرام به رزبری پای اتصال تلگرام به رزبری پای

    امیدواریم که به خوبی این آموزش را یادگرفته باشید و بتوانید برد رزبری پای و ربات تلگرام خودتان را داشته باشید و به وسیله این آموزش میان آن‌ها ارتباط برقرار می‌کنید. در صورتی که سوالی در این زمینه داشتید در قسمت کامنت ها وارد کنید. هم‌چنین در مورد آموزش‌های دیگری که مایل هستید در این رابطه دریافت کنید، با ما در ارتباط باشید.
    در آموزش‌های بعدی ، روش‌های جالب‌تری نیز در مورد روش های ارتباطی به اشتراک گذاشتن داده ها، ارائه خواهیم داد. با میکرو دیزاینر الکترونیک همراه باشید.

    کد کامل ربات

    import time, datetime
    import telepot
    from telepot.loop import MessageLoop
    
    now = datetime.datetime.now()
    
    def action(msg):
     chat_id = msg['chat']['id']
     command = msg['text']
    
    print 'Received: %s' % command
    
    if command == '/hi':
     telegram_bot.sendMessage (chat_id, str("Hi! CircuitDigest"))
     elif command == '/time':
     telegram_bot.sendMessage(chat_id, str(now.hour)+str(":")+str(now.minute))
     elif command == '/logo':
     telegram_bot.sendPhoto (chat_id, photo = "https://i.pinimg.com/avatars/circuitdigest_1464122100_280.jpg")
     elif command == '/file':
     telegram_bot.sendDocument(chat_id, document=open('/home/pi/Aisha.py'))
     elif command == '/audio':
     telegram_bot.sendAudio(chat_id, audio=open('/home/pi/test.mp3'))
    
    telegram_bot = telepot.Bot('468382312:AAFhURMxpVlMWEdFzbIQLszBPFEUpAeOLFQ')
    print (telegram_bot.getMe())
    
    MessageLoop(telegram_bot, action).run_as_thread()
    print 'Up and Running....'
    
    while 1:
     time.sleep(10)

    ویدئو :



    بعد از آزمایش نسخه بتا در ماه ژانویه، اپل نسخه ۱۱٫۳ سیستم عامل iOS را برای Iphone، Ipad و Ipod Touch منتشر کرد. نسخه جدید ویژگی‌های جدیدی را به کاربر ارائه می‌دهد که شامل شخصیت‌های Animoji جدید برای آیفون X، بهبود ARKit برای واقعیت افزوده پیشرفته‌تر و قابلیت غیرفعال کرده پردازنده برای آیفون‌هایی که باتری قدیمی دارند.

    آخرین قابلیتی که در بالا ذکر کردیم، نتیجه‌ی انتقادهایی شدید از سوی کاربران می‌باشد. قبل از این بروزرسانی، در بعضی آیفون‌های قدیمی، سیستم عامل پردازنده را ضعیف می‌کرد که باعث خاموش شدن ناگهانی گوشی می‌شد. این اتفاق موج شدیدی از انتقادها را بسوی اپل گسترش داد و اپل مجبور شد که بصورت عمومی از کاربران عذرخواهی کند. اکنون با انتشار نسخه جدید iOS، به کاربران این گزینه داده می‌شود که تمامی این اتفاقات را بدون در نظر گرفتن اینکه گوشی آن‌ها چقدر قدیمی است، مهار کنند.

    این اتفاق در نتیجه‌ی نرسیدن قدرت کافی از سوی باتری به بعضی از قسمت‌های پردازنده با وظایف فشرده می‌شد که نتیجه‌ی آن، خاموش شدن گوشی و تنها راه آن تعویض باتری گوشی بود. این قابلیت جدید فعلا در آیفون‌های ۷/۷Plus، SE، ۶S/6SPlus و ۶/۶Plus دیده می‌شود. اما، تمامی کاربران آیفون ۶ و مدل‌های جدیدتر از یک صفحه‌ی عمر باتری بهره می‌برند که مشخص می‌کند ایا باتری نیاز به تعمیر دارد یا خیر.

    iOS 11.3 همچنین ۴ عدد شخصیت Animoji را ارائه می‌دهد که شامل شیر، اژدها، خرس و جمجمه می‌شود.

    برای قسمت واقعیت افزورده، ARKit بهبود یافته است که به برنامه‌های AR اجازه می‌دهد جهان‌های ترکیبی را در سطوح عمودی مانند دیوار و درها گسترش دهند. این بهبود در کنار سطوح افقی هم می‌باشد (مانند کف زمین، میز، صندلی و غیره.) که قبلا توسط ARKit پشتیبانی می‌شد. ARKit همچنین هوشمندتر نیز شده است که قابلیت تشخیص سطوح نامنظم مانند میز‌های گرد را دارا می‌باشد.

    بخش بهداشت و درمان هم به برنامه Health اضافه شده است که به بیماران، دسترسی سریع به مدارک پزشکی را (از دکتر‌ها و مراکز درمانی) بصورت مستقیم، ارائه می‌دهد.

    برای قسمت امنیتی و حریم خصوصی، در نسخه جدید iOS، هر زمانی که اپل از شما اطلاعات خصوصی مانند رمز اپل آیدی را درخواست کند، یک آیکون “حریم خصوصی” نماش داده می‌شود که شما به راحتی می‌توانید تایید کنید که این درخواست قانونی است و جعلی نمی‌باشد.

    همچنین بخش گفت و گوی کسب و کار نیز اضافه شده است که به کاربر اجازه می‌دهد در برنامه Message بصورت مستقیم با مشتریان خود گفت و گو کند.

    iOS 11.3 یک سری باگ‌ها را برطرف می‌کند. یک سری قابلیت‌های منحصر بفرد مانند پیام‌ها در iCloud و Airplay 2 که در نسخه بتا وجود دارد، در نسخه اصلی حذف شده‌اند که ظاهرا این قابلیت‌ها برای نسخه اصلی هنوز آماده نمی‌باشند.

    شماره تابع و توضیحات ۱

    double acos (double __x)

    تابع acos() مقدار آرک کسینوس __x را محاسبه می کند. مقدار بازگشتی تابع بین [۰, pi] رادیان است. در صورتی که ورودی خارج از محدوده [-۱, +۱] باشد خروجی خطا خواهیم داشت.

    ۲

    double asin (double __x)

    تابع asin() مقدار آرک سینوس __x را محاسبه می کند. مقدار بازگشتی تابع بین [-pi/2, pi/2]  رادیان است. در صورتی که ورودی خارج از محدوده [-۱, +۱] باشد خروجی خطا خواهیم داشت.

    ۳

    double atan (double __x)

    تابع atan() مقدار آرک تانژانت __x را محاسبه می کند. مقدار بازگشتی تابع بین [-pi/2, pi/2]  رادیان است.

    ۴

    double atan2 (double __y, double __x)

    تابع atan2() مقدار آرک تانژانت __y / __x را محاسبه می کند و از علامت اعداد ورودی برای تعیین ربع دایره خروجی استفاده می کند. مقدار بازگشتی تابع بین [-pi, pi]  رادیان است.

    ۵

    double cbrt (double __x)

    تابع cbrt() ریشه سوم عدد __x را باز میگرداند.

    ۶

    double ceil (double __x)

    تابع ceil() کوچکترین عدد صحیح بزرگتر یا مساوی یک عدد اعشاری مانند __x را برمیگرداند.

    ۷

    static double copysign (double __x, double __y)

    تابع copysign() مقدار __x را با علامت __y برمیگرداند. این تابع حتی اگر ورودی ها صفر باشند یا عدد نباشند نیز عمل می کند.

    ۸

    double cos(double __x)

    تابع cos() کسینوس __x را برمیگرداند.

    ۹

    double cosh (double __x)

    تابع cosh() کسینوس هایپربولیک __x را برمیگرداند.

    ۱۰

    double exp (double __x)

    تابع exp() مقدار تابع نمایی __x را برمیگرداند.

    ۱۱

    double fabs (double __x)

    تابع fabs() قدرمطلق عدد __x را برمیگرداند.

    ۱۲

    double fdim (double __x, double __y)

    تابع fdim() حداکثر مقدار (__x – __y, 0) را برمیگرداند. اگر ورودی ها عدد نباشند NAN بازمیگرداند.

    ۱۳

    double floor (double __x)

    تابع floor() بزرگترین عدد صحیح کوچکتر یا برابر عدد اعشاری __x را برمیگرداند.

    ۱۴

    double fma (double __x, double __y, double __z)

    تابع fma() بزرگترین عدد صحیح کوچکتر یا برابر عدد اعشاری __x را برمیگرداند.

    ۱۵

    double fmax (double __x, double __y)

    تابع fmax() حاصل عبارت  :

    (__x * __y) + __z

    را برمیگرداند اما خروجی را به نوع اعداد ورودی تبدیل نمی کند. این مسئله گاهی اوقات می تواند به بالا رفتن دقت محاسبات کمک کند.

    ۱۶

    double fmin (double __x, double __y)

    تابع fmin()عدد کوچکتر بین  __x و __y را برمیگرداند. اگر یکی از ورودی ها عدد نباشد، دیگری در خروجی بازگردانده می شود. اگر هر دو ورودی عدد نباشد NaN بازگردانده می شود.

    ۱۷

    double fmod (double __x, double__y)

    تابع fmod() باقی مانده اعشاری حاصل تقسیم __x / __y را برمیگرداند.

    ۱۸

    double frexp (double __x, int * __pexp)

    تابع frexp() یک عدد اعشاری را به یک کسر نرمالیزه شده و توانی از عدد ۲ تبدیل می کند. بخش عدد صحیح در یک مقدار صحیح که توسط __pexp اشاره می شود ذخیره سازی می کند. اگر __x یک عدد اعشاری معمولی باشد، تابع frexp() مقدار v را بازمیگرداند که دارای مقداری در بازه [۱/۲, ۱) یا صفر می باشد و مقدار __x برابر v ضرب در توانی از ۲ توسط متغیر __pexp خواهد بود. اگر __x صفر باشد، هر دو بخش خروجی صفر خواهد بود. اگر __x یک عدد محدود نباشد، در خروجی همان مقدار __x برگردانده می شود و مقدار __pexp صفر بازگردانده می شود.

    نکته : در صورت استفاده از اشاره گر صفر از روی یک عضو ذخیره شده پرش خواهیم کرد.

    ۱۹

    double hypot (double __x, double__y)

    تابع hypot() مقدار sqrt(__x*__x + __y*__y) را برمیگرداند. در واقع خروجی برابر وتر یک مثلث قائم الزاویه با یال های __x و __y خواهد بود یا خروجی فاصله از مبدا تا نقاط (__x, __y) می باشد. استفاده از این تابع به جای استفاده مستقیم از فرمول به کاهش خطاهای حاصله می انجامد. به عنوان مثال در صورت کوچک بودن مقادیر __x و __y ما در محاسبات پاریز نخواهیم داشت یا در محدوده ی سرریز نخواهیم داشت.

    ۲۰

    static int isfinite (double __x)

    تابع isfinite() در صورت محدود بودن __x یک مقدار غیر صفر را بازمیگرداند و در غیراینصورت مثبت با منفی بی نهایت را باز میگرداند.

    ۲۱

    int isinf (double __x)

    تابع isinf() در صورتی که ورودی __x مثبت بی نهایت باشد مقدار ۱ ، در صورتی که برابر منفی بی نهایت باشد مقدار -۱ و در غیر اینصورت مقدار صفر را باز میگرداند.

    نکته : در کامپایلر GCC 4.3 این تابع توسط یک تابع درونی جایگزین خواهد شد که به ازای مثبت و منفی بی نهایت عدد ۱ را بازمی گرداند. (gcc bug #35509)

    ۲۲

    int isnan (double __x)

    تابع isnan() در صورتی که ورودی __x یک عدد نباشد مقدار ۱ را باز می گرداند و در غیر اینصورت صفر را باز میگرداند.

    ۲۳

    double ldexp (double __x, int __exp )

    تابع ldexp() ورودی اعشاری __x را در مقادیری صحیح از توان ۲ ضرب می کند و در خروجی مقدار __x را که در توان هایی از ۲ که توسط __exp تعیین می شود ضرب شده است را باز می گرداند.

    ۲۴

    double log (double __x)

    تابع log() مقدار لگاریتم طبیعی __x را باز میگرداند.

    ۲۵

    double log10(double __x)

    تابع log10() مقدار لگاریتم طبیعی عدد __x را در مبنای ۱۰ باز میگرداند.

    ۲۶

    long lrint (double __x)

    تابع lrint() عدد __x را به نزدیک ترین عدد صحیح رند می کند و اعدادی که در بین دو عدد صحیح باشند را به عدد زوج رند می کند (به عنوان مثال هر دو عدد ۱٫۵ و ۲٫۵ به  عدد ۲ رند می شوند). این تابع مشابه rint() می باشد با تفاوت در نوع خروجی و این که در این تابع امکان سرریز نیز وجود دارد.

    بازگشتی :

    مقدار بازگشتی این تابع از نوع long int می باشد. اگر __x یک عدد محدود نباشد، مقدار معادل ثابت LONG_MIN (0x80000000) باز گردانده می شود.

    ۲۷

    long lround (double __x)

    تابع lround() عدد __x را به نزدیک ترین عدد صحیح رند می کند و اعدادی که در بین دو عدد صحیح قرار دارند را به سمت خارج از محدوده صفر رند می کند (به جای رند کردن به نزدیک ترین عدد زوج). این تابع مشابه تابع round() می باشد با تفاوت در نوع خروجی و امکان اتفاق افتادن سرریز در خروجی.

    بازگشتی :

    مقدار بازگشتی این تابع عدد رند شده می باشد. اگر __x یک عدد محدود نباشد یا سرریز رخ دهد، مقدار معادل ثابت LONG_MIN (0x80000000) باز گردانده می شود.

    ۲۸

    double modf (double __x, double * __iptr )

    تابع modf() عدد ورودی __x را به دو بخش صحیح و کسری تقسیم می کند و هر بخش همان علامت ورودی را خواهد داشت. بخش صحیح به عنوان double  ذخیره می شود و توسط اشاره گر __iptr به آن اشاره می شود.

    ۲۹

    float modff (float __x, float * __iptr)

    نام مستعار تابع modf()

    ۳۰

    double pow (double __x, double __y)

    این تابع مقدار __x را به توان __y می رساند و نتیجه را بازمیگرداند.

    ۳۱

    double round (double __x)

    تابع round() عدد __x را به نزدیک ترین عدد صحیح رند می کند و اعدادی که در بین دو عدد صحیح قرار دارند را به سمت خارج از محدوده صفر رند می کند (به جای رند کردن به نزدیک ترین عدد زوج). سرریز ممکن است اتفاق بیفتد.

    بازگشتی :

    مقدار بازگشتی این تابع عدد رند شده می باشد. اگر __x یک عدد محدود نباشد خودش بازمیگردد و اگر یک عدد نباشد NAN بازمیگردد.

    ۳۲

    int signbit (double __x)

    این تابع اگر __x دارای بیت علامت باشد یک مقدار غیر صفر بازمیگرداند. این تابع با `__x < 0.0′ فرق می کند زیرا طبق استاندارد اعداد اعشاری IEEE 754 برای عدد صفر نیز بیت علامت در نظر گرفته می شود. مقایسه `-۰٫۰ < 0.0′ اشتباه است اما `signbit (-0.0)’ یک مقدار غیرصفر را بازمیگرداند.

    ۳۳

    double sin (double __x)

    توسط این تابع مقدار سینوس __x برحسب رادیان بازگردانده می شود.

    ۳۴

    double sinh (double __x)

    توسط این تابع مقدار سینوس هایپربولیک __x بازگردانده می شود.

    ۳۵

    double sqrt (double __x)

    توسط این تابع مقدار ریشه چهارم غیر منفی __x بازگردانده می شود.

    ۳۶

    double square (double __x)

    توسط این تابع مقدار معادل __x * __x بازگردانده می شود.

    نکته : این تابع جزء توابع استاندارد C نمی باشد.

    ۳۷

    double tan (double __x)

    توسط این تابع مقدار تانژانت __x برحسب رادیان بازگردانده می شود.

    ۳۸

    double tanh ( double __x)

    توسط این تابع مقدار تانژانت هایپربولیک __x بازگردانده می شود.

    ۳۹

    double trunc (double __x)

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



    شرکت اپل امروز اعلام کرد که کاربران آیفون اکنون می‌توانند در بیش از ۱۰۰ بیمارستان و کلینیک در آمریکا به سوابق پزشکی خودشان از طریق برنامه‌ی Health app دسترسی داشته باشند. بخش Health Records (سوابق پزشکی) این برنامه در ماه ژوئیه با iOS 11.3 beta عرضه شد و به‌روز رسانی امروز باعث شد تا همه بتوانند با به‌روز رسانی گوشی خود به آن دسترسی داشته باشند.

    اطلاعات پزشکی شامل آلرژی، شرایط خاص پزشکی، واکسن، تست‌های آزمایشگاهی و سابقه‌ی بیماری در دسترس کاربران آیفون قرار گرفته است و ۳۹ سیستم سلامتی که با اپل کار می‌کنند شامل Stanford Medicine و Johns Hopkins در دسترس هستند. قبل از این به‌روز رسانی، بخش سوابق پزشکی این برنامه تنها برای کسانی در دسترس بود که در نسخه‌ی آزمایشی ثبت نام کرده بودند.

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

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

    مقاله قبلی اپل نسخه ۱۱٫۳ سیستم عامل iOS را منتشر کرد که شامل مدیریت باتری آیفون، Animoji جدید و قابلیت‌های دیگر می‌باشد

    آردوینو – توابع مثلثاتی ، در اغلب موارد در برنامه نویسی نیاز به استفاده از توابع مثلثاتی وجود دارد. به عنوان مثال برای محاسبه مسافت لازم برای جا به جایی اشیاء یا محاسبه سرعت زاویه ای و…

    آردوینو – توابع مثلثاتی

    آردوینو مجموعه ای از توابع مثلثاتی پایه ای را در اختیار ما قرار می دهد (مانند sin ، cos ، tan ، asin ، acos ، atan) که میتوانید از آنها در برنامه خود استفاده کنید. کتابخانه math.h شامل تعریف اولیه این توابع می باشد.

    دستور نگارش توابع مثلثاتی :

    double sin(double x); //returns sine of x radians
    double cos(double y); //returns cosine of y radians
    double tan(double x); //returns the tangent of x radians
    double acos(double x); //returns A, the angle corresponding to cos (A) = x
    double asin(double x); //returns A, the angle corresponding to sin (A) = x
    double atan(double x); //returns A, the angle corresponding to tan (A) = x

    مثال :

    double sine = sin(2); // approximately 0.90929737091
    double cosine = cos(2); // approximately -0.41614685058
    double tangent = tan(2); // approximately -2.18503975868

    جلسات قبلی و بعدی آردوینو را اینجا دنبال کنید.

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



    اینستاگرام از انتشار یک بروزرسانی جدید برای تغییر در بخش Timeline خبر داد. یکی از این تغییرات معرفی گزینه‌” پست‌های جدید” است که به کاربر اجازه می‌دهد بصورت دستی پست‌ها را رفرش کند. این تغییر باعث می‌شود از رفرش کردن اتوماتیک پست‌ها جلوگیری شود. حالا کاربر می‌تواند پست‌ها را بصورت دستی رفرش کند بدون اینکه خود برنامه این کار را بصورت خودکار انجام دهد.

    تغییر بعدی در قسمت ترتیب وقوع زمانی پست‌های Timelineمی‌باشد. اینستاگرام یک الگوریتم جدید به برنامه اضافه کرده است که بوسیله آن، پست‌هایی که برنامه فکر می‌کند کاربر بیشتر به دیدن آن‌ها علاقه دارد در ابتدا نمایش داده می‌شوند تا اینکه بر اساس زمان اشتراک آن‌ها در اینستاگرام نمایش داده شوند. اکنون پس از واکنش‌های منفی نسبت به این موضوع، اینستاگرام هنوز هم بصورت کامل، آنطوری که کاربران درخواست دارند، پست‌ها را بر اساس ترتیب وقوع زمانی مرتب نمی‌کند بلکه هنوز هم کمی غیر مرتب نمایش داده می‌شوند.

    همه‌ی این‌ها نشان دهنده‌ی این است که اینستاگرام به بازخورد کاربران گوش می‌دهد اما بصورت کامل تغییرات را پیاده سازی نمی‌کند یا اینکه برایش فرقی ندارد که تغییرات بدرستی انجام شوند.

    اینستاگرام قول انتشار بروزرسانی جدید با تغییرات زیادتری را در ماه‌ها‌ی آینده داده است، اما بر طبق آمار، این تغییرات احتمال دارد برای بسیاری از کاربران خوش آیند نباشد.

    بردهای آردوینو Due و Zero،  برد آردوینو Due مبتنی بر میکروکنترلرهای خانواده Atmel SAM3X8E ARM Cortex-M3 است. این برد به عنوان اولین برد آردوینو مبتنی بر پردازنده های  ARM 32 بیتی شناخته می شود.امروز در این جلسه از سلسله جلسات آموزش آردوینو قصد داریم این دو برد را برسی کنیم در ادامه با میکرو دیزاینر الکترونیک همراه باشید.

    ویژگی های برد آردوینو Due

    مهم ترین ویژگی های این برد عبارت است از :

    • ۵۴ ورودی/خروجی دیجیتال (۱۲ تا از پایه ها میتوانند به عنوان خروجی PWM استفاده شود)
    • ۱۲ ورودی آنالوگ
    • ۴ پورت UART (پورت سریال سخت افزاری)
    • فرکانس کلاک ۸۴MHz ، پشتیبانی از اتصال USB OTG
    • ۲ مبدل دیجیتال به آنالوگ ،  ۲ واحد TWI ، جک تغذیه، کانکتور SPI ، کانکتور JTAG
    • کلید ریست و پاک کردن

    بردهای آردوینو Due

    مشخصات سخت افزاری برد آردوینو Due :

    ولتاژ کاری

     

    سرعت CPU

     

    پایه های ورودی/

    خروجی آنالوگ

     

    پایه های دیجیتال

    PWM

     

    حافظه EEPROM

    [KB]

    حافظه SRAM

    [KB]

    حافظه FLASH

    [KB]

    USB UART
    ۳٫۳ Volt ۸۴ Mhz ۱۲/۲ ۵۴/۱۲ ۹۶ ۵۱۲ ۲ micro ۴

    ارتباطات :

    • ۴ UART سخت افزاری
    • دو پروتکل I2C
    • یک ارتباط CAN (روتکل ارتباط وسایل نقلیه)
    • یک پروتکل SPI
    • یک ارتباط JTAG (10 پایه)
    • یک میزبان host USB (مشابه Leonardo)
    • یک پورت برنامه ریزی

    برخلاف اکثر بردهای آردوینو، ولتاژ تغذیه برد Due برابر ۳٫۳V است. حداکثر ولتاژی که پایه های ورودی/خروجی میتوانند تحمل کنند ۳٫۳V است. اعمال ولتاژ بالاتر از ۳٫۳V به هریک از پایه های I/O باعث آسیب رسیدن به برد می شود.

    این برد شامل همه امکانات لازم برای استفاده از میکروکنترلر می باشد. به عنوان مثال به راحتی می توانید این برد را توسط یک کانکتور میکرو USB به USB کامپیوتر خود متصل کنید یا برای اعمال تغذیه به برد از آداپتور یا از باتری استفاده کنید. این برد با همه شیلدهایی که با ولتاژ ۳٫۳V کار می کنند مطابقت دارد.

    برد آردوینو Zero

    این برد یک برد توسعه ای قوی ۳۲ بیتی برای UNO است. این برد نسبت به بردهای هم خانواده خود دارای کارایی بالاتر است و قابلیت پیاده سازی کاربرد های گوناگون را فراهم می سازد. از این برد میتوان به عنوان یک برد آموزشی کامل برای میکروکنترلرهای ۳۲ بیتی بهره برد.

    مهم ترین ویژگی های این برد عبارت است از :

    • کاربردهای این برد از تجهیزات IOT (اینترنت اشیا) گرفته تا تکنولوژی های پوشیدنی، اتوماسیون با فناوری بالا تا و کاربردهای رباتیک سرگرم کننده را شامل می شود.
    • میکروکنترلر این برد SAMD21 از شرکت Atmel است که از خانواده هسته های سری ARM Cortex® M0 می باشد.
    • یکی از مهم ترین ویژگی های این برد پیشتیبانی از قابلیت عیب یابی شرکت atmel Atmel’s Embedded Debugger  EDBG است که امکان عیب یابی کامل سخت افزار را بدون استفاده از هیچ قطعه اضافی را می دهد و عیب یابی سخت افزار را بسیار آسان می کند.
    • قابلیت EDBG همچنین از پورت سریال مجازی نیز پشتیبانی می کند و میتوانیم از آن برای برنامه ریزی بوت لدر میکروکنترلر استفاده کنیم.

    برد آردوینو Zero

    مشخصات سخت افزاری برد آردوینو Zero :

    ولتاژ کاری سرعت CPU پایه های ورودی/

    خروجی آنالوگ

    پایه های دیجیتال

    PWM

    حافظه EEPROM
    [KB]
    حافظه SRAM
    [KB]
    حافظه FLASH
    [KB]
    USB UART
    ۳٫۳ Volt ۴۸ Mhz ۶/۱ ۱۴/۱۰ ۳۲ ۲۵۶ ۲ micro ۲

    برخلاف اکثر بردهای Arduino و Genuino ، ولتاژ تغذیه برد Zero برابر ۳٫۳V است. حداکثر ولتاژی که پایه های ورودی/خروجی میتوانند تحمل کنند ۳٫۳V است. اعمال ولتاژ بالاتر از ۳٫۳V به هریک از پایه های I/O باعث آسیب رسیدن به برد می شود.

    این برد شامل همه امکانات لازم برای استفاده از میکروکنترلر می باشد. به عنوان مثال به راحتی می توانید این برد را توسط یک کانکتور میکرو USB به USB کامپیوتر خود متصل کنید یا برای اعمال تغذیه به برد از آداپتور یا از باتری استفاده کنید. این برد با همه شیلدهایی که با ولتاژ ۳٫۳V کار می کنند مطابقت دارد.این جلسه از آموزش آردوینو هم اینجا به پایان رسید برای مطالعه جلسات بعد و قبلی اینجا کلیک کنید.

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



    اکثر ناشران هندی نمی‌توانند کتب صوتی تولید شده را به راحتی در آمازون یا CreateSpace منتشر کنند زیرا یا هزینه اولیه آنها گران است و یا برای نخستین بار، کمی زمانبر.

    به همین دلیل، پلتفرم SmashWords که توانایی نشر کتب صوتی را دارد، با توزیع‌کننده این نوع کتاب‌ها یعنی Findaway Voices همکاری کرده تا ناشران این کشور با قیمت کمتری، کتاب‌های صوتی خود را تولید و منتشر نمایند.

    در آیین افتتاحیه، مدیرعامل Smashwords، آقای مارک کوکر گفت: اقدام امروز ما، قیمت و نحوه توزیع کتب صوتی را به نفع نویسندگان و ناشران کنترل خواهد کرد و این کار را برای آنها اقتصادی و ارزان‌تر می‌کند تا بتوانند کتاب‌های بیشتری تولید و سپس منتشر نمایند. با استفاده از Findaway، نویسندگان و ناشران SmashWords می‌توانند راویان ماهر را سریعتر پیدا کرده و صدای هنرمندان را از تیم پشتیبانی به صورت آنلاین بشنوند. همچنین، می‌توان با این پلتفرم، هزینه تولید و نشر را به صورت ساعتی تخمین زد. احتمالاً این هزینه‌ها از ۱۵۰ تا ۴۰۰ دلار برای هر ساعت، متغیر خواهند بود.

    در هند، تقاضای بسیاری برای تولید و نشر کتب صوتی وجود دارد و با این شیوه ارائه شده توسط SmashWords و Findaway Voices، می‌توان بسیاری از نیازهای تولیدکنندگان این حوزه را برطرف کرد. در سال ۲۰۱۶ و ۲۰۱۷، صنعت تولید کتب صوتی در هند، ۲۹ درصد افزایش یافت و باعث شد ۷۹ هزار کتاب صوتی وارد بازار شود.

    مدولاسیون عرض پالس یا PWM در آردوینو، مدولاسیون عرض پالس یا PWM یکی از تکنیک های متداول به منظور تغییر عرض پالس ها می باشد. PWM کاربردهای زیادی دارد، کنترل سروو موتورها و کنترل کننده های سرعت، تغییر توان موثر موتور و تغییر نور LED ها از جمله این کاربردها هستند.

    اصول اولیه PWM

    در تکنیک مدولاسیون عرض پالس مدت زمان یک و صفر بودن یک شکل موج مربعی را تغییر می دهیم. یک نمونه سیگنال PWM در شکل زیر نشان داده شده است.

    مدولاسیون عرض پالس یا PWM

    اصطلاحاتی که در مورد تکنیک PWM به کار می روند عبارت اند از :

    • زمان روشن بودن (On-Time) : مدت زمان یک (High) بودن سیگنال
    • زمان روشن بودن (Off-Time) : مدت زمان صفر (Low) بودن سیگنال
    • دوره تناوب (Period) : عبارت است از مجموع مدت زمان یک بودن و صفر بودن سیگنال
    • زمان وظیفه (Duty Cycle) : عبارت است از مدت زمان یک بودن سیگنال نسبت به کل دوره تناوب سیگنال برحسب درصد

    دوره تناوب :

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

    Ttotal=Ton+Toff

    دوره وظیفه :

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

    D=TonTon+Toff=TonTtotal

    تابع analogWrite

    تابع analogWrite یک مقدار آنالوگ (شکل PWM) را بر روی یک پایه ایجاد می کند. از این تابع می توان برای تغییر روشنایی LED یا تغییر سرعت یک موتور استفاده نمود.

    پس از فراخوانی تابع analogWrite  ، یک شکل موج مربعی ثابت با نرخ وظیفه مشخص بر روی پایه مورد نظر ایجاد می کند و تا زمانی که مجددا تابع analogWrite  یا توابع digitalRead  یا digitalWrite  بر روی همان پایه فراخوانی نشود این شکل موج بر روی پایه باقی خواهد ماند.

    فرکانس شکل موج PWM تولید شده بر روی اکثر پایه ها برابر ۴۹۰Hz است. در برد Uno و بردهای مشابه، فرکانس شکل موج تولید شده بر روی پایه های ۵ و ۶ حدود ۴۹۰Hz است. همچنین بر روی پایه های ۳ و ۱۱ برد Leonardo این فرکانس برابر ۹۸۰Hz است.

    بر روی اکثر بردهای آردوینو (معمولا مبتنی بر میکروکنترلرهای ATmega168 و ATmega328)، این تابع بر روی پایه های ۳ ، ۵ ، ۶ ، ۹ و ۱۰ کار می کند. در بردهای آردوینو Mega ، این تابع بر روی پایه های ۲ الی ۱۳ و ۴۴ الی ۴۶ کار می کند. بردهای آردوینو قدیمی تر با میکروکنترلرهای ATmega8 فقط بر روی پایه های ۹ ، ۱۰ و ۱۱ از تابع analogWrite  پشتیبانی می کنند.

    مدولاسیون عرض پالس یا PWM در آردوینو

    بردهای آردوینو Due از این تابع بر روی پایه های ۲ تا ۱۳ و پایه های DAC0 و DAC1 پشتیبانی می کند. برخلاف پایه های PWM ، پایه های DAC0 و DAC1 پایه های مبدل دیجیتال به آنالوگ هستند  و به عنوان پایه های خروجی کاملا آنالوگ استفاده می شوند.

    لازم به ذکر است پیش از استفاده از تابع analogWrite  نیازی به فراخوانی تابع pinMode  برای تنظیم پایه بر روی حالت خروجی وجود ندارد.

    دستور نگارش تابع analogWrite :

    analogWrite ( pin , value ) ;

    مقدار (Value) – دوره وظیفه : بین صفر (همیشه خاموش یا صفر) تا ۲۵۵ (همیشه روشن یا یک)

    مثال :

    int ledPin = 9; // LED connected to digital pin 9
    int analogPin = 3; // potentiometer connected to analog pin 3
    int val = 0; // variable to store the read value
    
    void setup() {
     pinMode(ledPin, OUTPUT); // sets the pin as output
    }
    
    void loop() {
     val = analogRead(analogPin); // read the input pin
     analogWrite(ledPin, (val / 4)); // analogRead values go from 0 to 1023, 
     // analogWrite values from 0 to 255
    }

    جلسه PWM در آردوینو از آموزش آردوینو هم در اینجا به پایان رسید برای مطالعه جلسات قبلی و بعدی اینجا کلیک کنید. همچنین با ارسال نظرات خود در قسمت نظرات ما را در بهتر کردن روند آموزش ها یاری کنید.

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



    Tidal قابلیت جدیدی اضافه کرده است که بر اساس آن می‌توان آلبوم‌ها را پس از تولید، در کتابخانه نرم‌افزار ذخیره کرد.

    این قابلیت که pre-save (پیش ذخیره) نام دارد، به کاربران این اپلیکیشن اجازه می‌دهد تا آلبوم‌هایشان را پس از آپلود شدن به سرویس Tidal، به مجموعه‌های خود اضافه کنند.

    اسپاتیفای نیز دارای ویژگی مشابهی است ولی تنها هنرمندان و برندهای اقتصادی می‌توانند از آن استفاده کنند. ضمن اینکه فقط می‌توان با لینک مستقیم، وارد آلبوم شد.

    بنابراین با این ویژگی جدید Tidal، می‌توان آلبومی را امروز ساخت و برای هفته آینده آن را زمانبندی کرد تا منتشر شود.

© تمامی حقوق مطالب برای وبسایت آلفا باکس محفوظ است و هرگونه کپی برداری بدون ذکر منبع ممنوع و شرعا حرام می باشد.
قدرت گرفته از : بک لینکس