برنامه ریموت کنترل

استاد سوال دیگه این که من میخوام مقدار داخل پارانتز Serial.println(results,value, HEX); در یه متغییر مثلا x ذخیره کنم تا بعد ازش استفاده کنم چطور اینکارو کنم چون int x=results,value, HEX میذارم ارور میده
;

سلام دوست عزیز، ضمن اینکه مجدد پیشنهاد میکنم آموزش ها رو از ابتدای فصل دوم با دقت ببینید، جواب سوالتون به صورت زیر است:
در کامپیوتر ها، فقط 0 ها و 1 ها معنی دارن و اعداد دیگه و کاراکتر ها و عکس و ... همه با همین 0 ها و 1 ها ساخته میشن.
بنابراین وقتی که شما یک مقدار هگز دارید، این مقدار در واقع عدد هست و کاراکتر نیست. برای مثال 0x01 عدد ۱ هست. 0x09 عدد ۹ و همچنین 0x0A عدد ۱۰ هست و 0x0F عدد ۱۵ . در واقع این نحوه نمایش اعداد همون نمایش در مبنای ۱۶ هست. (لطفا برای اطلاعات بیشتر در مورد مبناها به دروس ریاضی دبیرستان مبحث مبناهای اعداد رجوع کنید.)
بنابراین شما می تونید مقادیر هگز رو مثل اعداد ذخیره کنید. حالا با توجه به اینکه این عدد چقدر بزرگ هست و چند بایت هست، میتونید متغیر مورد نظر خودتون رو انتخاب کنید. برای مثال، مقدار هگز 0xFFCA35 برابر مقدار عددی 16763445 هست. (میتونید با ماشین حساب ویندوز این تبدیل ها رو انجام بدید) این مقدار در ۳ بایت جا میشه بنابراین بهتر هست که متغیری رو انتخاب کنید که ۴ بایت جا داشته باشه (متغیر ۳ بایتی نداریم، ۱ بایت، ۲ بایت، ۴ بایت، ۸ بایت و ... داریم که توان های ۲ هستن)
در میکروی AVR که آردوینو هم از اون استفاده میکنه، متغیر از نوع int میتونه 4 بایت رو در خودش جا بده. بنابراین میتونید به راحتی این مقدار رو داخل int ذخیره کنید. پس میشه:
int x = 0xFFCA35

در بالاتر گفتم که حتی کاراکتر ها هم وجود خارجی ندارن و اعداد هستن. مثلا کاراکتر a معادل مقدار عددی 97 هست که معادل هگز 0x61 هست. درواقع کاراکتر ها، توافقی هست که طبق جدول ascii انجام شده که هر عدد معادل چه کاراکتری باشد.

سلام دوست عزیز، لطفا برای سوال های جدید، پست جدید ایجاد نمایید. با تشکر.

سلام استاد ممنون بابت توضیحاتتون
من الان استپر موتور یونیپولار که 5 سیم هس رو رو طبق برنامه شما راه اندازی میکنم اما برنامه که اپلود میشه حس میکنم توی موتور داره تخ تخ تو دستم میچرخه اما پیچ بیرونیش نمیچرخه علت چی میتونه باشه از ولتاژ یا جریان کم میتونه باشه؟ مقاومت ترانزیستورها رو کم کنم
یا موتورم خرابه؟ ممنون

استاد البته یه جواب پیدا کردم بعد چن ساعت 🤣
اونم اینکه باید اول FFCA35 بذارم 0X اما سوال پیش میاد که چرا شما ریموت میزدید ترمینال 0x807FC03F نشون میداد و 0X اولش بود اما من دوتا کنترل امتحان کردم هیچ کدوم اولش OX نداشت برا همین ارور میداد برنامه؟

سلام استاد تا جایی متوجه شدم که اولش 0ي بدم حل شد فقط جواب سوالم رو نگرفتم من الان میخوام کد هگزی که تولید میشه و تو پرینت نشون داده میشهSerial.println(results.value, HEX); میخوام اون رو یه جایی مثل x ذخیره کنم اما نمیدونم نوع اون متغییر چی باید باشه چون کد هگز هم عدد داره هم حروف داره برا همین چه متغییری میتونه اونو ذخیره کنه int-char که نمیتونن ایا متغییری وجود داره که این کد هگز را داخل خودش بتونه نگه داره؟؟؟

سلام دوست عزیز، شما وقتی در کد می نویسید FFCA35، کامپایلر نمیفهمه که منظور شما یک عدد هگز هست و فکر میکنه که اسم یک متغیر هست. یعنی مثل اینکه بنویسید x و انتظار میره که اسم یک متغیر باشه. بنابراین باید اولش یک 0x بذارید که کامپایلر بفهمه که منظور شما عدد هگز هست. پس میشه 0xFFCA35
من فکر میکنم که یک غلط تایپی داره کد شما. در این خط : Serial.println(results,value, HEX); شما دارید ۳ تا متغیر رو به تابع println پاس میدید با اینکه این تابع فقط ۲ تا ورودی میگیره. اون کاما (,) بین results و value اشتباه هست و باید به نقطه (.) تبدیل بشه. پس کد درست میشه Serial.println(results.value, HEX);
درواقع شما در این خط دارید مقدار results.value (یعنی مقدار value از یک object به اسم results) رو به صورت HEX چاپ میکنید.
حالا برای اینکه اون مقدار رو داخل یک متغیر قرار بدید فقط کافیه results.value رو داخل یک متغیر بریزید. پس میشه x = results.value
یک نکته نهایی:
دستور int x=results,value, HEX با توجه به اینکه داخلش کاما داره و ... بی معنی هست و به نظر میاد شاید شما قسمت های ابتدایی آموزش رو رد کرده باشید. با اینکه میدونم که آموزش های ابتدایی میتونن خسته کننده باشن و انجام دادن پروژه عملی خیلی جذاب تر هست ولی اکیدا بهتون پیشنهاد میکنم که فصل های ابتدایی برنامه نویسی رو با دقت بگذرونید که بتونید آموزش رو بدون مشکل ادامه بدید.

سلام و ادب

-

  • - #include <ir_Lego_PF_BitStreamEncoder.h>
  • - #include <boarddefs.h>
  • - #include <IRremoteInt.h>
  • - #include <IRremote.h>
    -
  • - const int RECV_PIN = 7;
  • - IRrecv irrecv(RECV_PIN);
  • - decode_results results;
    -
  • - int ledState = 0;
    -
  • - void setup() {
  • - // put your setup code here, to run once:
  • - Serial.begin(9600);
  • - irrecv.enableIRIn();
  • - // irrecv.blink13(true);
  • - pinMode(10, OUTPUT);
  • - digitalWrite(10, LOW);
  • - }
  • - //0x807FE01F
  • - void loop() {
  • - // put your main code here, to run repeatedly:
  • - if(irrecv.decode(&results)){
  • - Serial.println(results,value, HEX);
  • - delay(100);
  • - if(results.value == FFCA35){
  • - if(ledState == 0){
  • - digitalWrite(10, HIGH);
  • - ledState = 1;
  • - }else{
  • - digitalWrite(10, LOW);
  • - ledState = 0;
  • - }
  • - }
  • - if(results.value == FFCA35){
  • - digitalWrite(10, HIGH);
  • - delay(100);
  • - digitalWrite(10, LOW);
  • - delay(100);
  • - }
    -
  • - irrecv.resume();
  • - }
  • - }
  • - }
    -
  • استاد این کد مربوط به پکیج هست برای روشن و خاموش کردن چراغ با ریموت
    سوال اول:
    #include <ir_Lego_PF_BitStreamEncoder.h>
    #include <boarddefs.h>
    #include <IRremoteInt.h>
    این کتابخانه ها مربوط به چی هستن تو اینترنت جوابی نیافتم؟

    سوال دوم:
    من از یه کد استفاده کردم و کد هگز ریموت موجودم رو خوندم (FFCA35) حالا اینو تو دقیقا تو کد شما(بالایی) به جای عددی که تو کد شما بود میذارم اما ارور میگیریم که میگه FFCA35 was not declared in this scope
    باید بگم همین کد رو veify که میکنم ارور نمیده اما وقتی به جای عدد هگز شما هگز خودم رو جا گذاری میکنم ارور میده مشکل چیه؟؟؟؟
    باید بگم با کنترل ال جی هم امتحان کردم و کد دیگه هم زدم باز ارور میده
    ممنون از وقتی که میذارید