اطلاعیه

Collapse
No announcement yet.

آموزش Arduino + برنامه چهاردهم (HC- 05)

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    #16
    پاسخ : آموزش ARDUINO

    ممنون مهندس جان
    while رو گذاشتم که اون یک بار رو بشمره و تا زمانی که شرط برقراره یعنی دستمون رو باتون هست نشمره ولی وقتی برای اولین بار میزنم میشمره و دفعه های بعدی رو نه
    با اینکه شرط while دیگه برقرار نیست ولی باز میمونه تو حلقه
    با delay اگر دستمون بیشتر از 200 میلی ثانیه روش باشه باز میشمره دیگه درسته؟
    من یه نمونه برنامه پیدا کردم از نت ولی قشنگ نمیتونم درکش کنم.میخوام خودم یه راهی پیدا کنم کپی نباشه
    کد:
    const int buttonPin = 2;
    int previousReading = LOW;
    int counter = 0;
    
    void setup() {
     pinMode(buttonPin, INPUT);
     Serial.begin(9600);
    }
    
    void loop() {
     int reading = digitalRead(buttonPin);
     // If the reading used to be LOW and is now HIGH, that marks the transition of a button being pushed
     // a transition of HIGH to LOW would indicate the button being released, but that's not what we're counting here
     if (previousReading == LOW && reading == HIGH) {
      counter++;
      Serial.print("Button pressed ");
      Serial.print(counter);
      Serial.println(" times");
     }
     previousReading = reading;
    }
    یه سوال دیگه چجوری کدارو تو اون صفحه سفید میذارین؟قشنگتروخواناتره اینجور که من میذارم کوچیک نشون میده
    telgram:09396888049

    دیدگاه


      #17
      پاسخ : آموزش ARDUINO

      شما در پست قبلی شفاف سازی نکرده بودید که اگر دستتون روی Button باشه نباید شمارش انجام بشه . این برنامه همون کاری که شما دوست دارید رو انجام میده . موفق باشید :smile:
      [code=c]const int buttonPin = 2;
      int counter = 0;
      void setup() {
      pinMode(buttonPin, INPUT);
      Serial.begin(9600);
      }
      void loop() {
      int reading = digitalRead(buttonPin);
      if(reading==HIGH){
      counter++;
      Serial.print("Button pressed "
      Serial.print(counter);
      Serial.println(" times"
      }
      while(reading==HIGH){
      reading=digitalRead(buttonPin);
      }
      }[/code]
      چشم ها را باید شست ، جور دیگر باید دید . . .

      دیدگاه


        #18
        پاسخ : آموزش ARDUINO

        خیلی ممنون ازتون :job:
        میشه اون while رو توضیح بدید که چیکار میکنه و چطور از شمارش بیش از یکی جلوگیری میکنه؟
        telgram:09396888049

        دیدگاه


          #19
          پاسخ : آموزش ARDUINO

          دستور While به اینصورت عمل میکنه که ابتدا شرطی رو که براش تعرف کردیم رو چک میکنه اگه شرط درست باشه وارد حلقه میشه و همینطور تکرار میشه تا موقی که شرط صدق نکنه . وقتی که وارد حلقه شد باید یکسری دستورات رو انجام بده بعد دوباره شرط رو چک کنه تا اینجا رو گرفتی چی شد ؟ وقتی که برای بار دوم متغییر چک میشه حلقه نمیدونه جواب True هست یا False واسه همین برنامه قاطی میکنه پس ما باید توی حلقه بهش بگیم که هنوز دستمون روس Button هست اینجوری حلقه میدونه که چی رو باید چک کنه . حالا نمیدونم فهمیدید یا نه ؟ :eek:
          چشم ها را باید شست ، جور دیگر باید دید . . .

          دیدگاه


            #20
            پاسخ : آموزش ARDUINO

            خب درست ما بهش میگیم که هنوز دستمون روی باتون هست اما با این وجود باید تو if بشمره تازمانی که دستمون روشه.
            چرا نمیشمره؟
            telgram:09396888049

            دیدگاه


              #21
              پاسخ : آموزش ARDUINO

              آهان . نه دیگه وقتی بهش میگیم دستمون روی Button هست مدام حلقه While تکرار میشه دیگه به اول برنامه که نمیره بخواد بشمره . توی حلقه While گیر میکنه تا موقعی که شرط برقرار نباشه ( دستمون رو برداریم )
              چشم ها را باید شست ، جور دیگر باید دید . . .

              دیدگاه


                #22
                پاسخ : آموزش ARDUINO

                آها درسته
                پس چرا تو برنامه ای که من نوشته بودم منم همین حلقه while رو گذاشته بودم منتها ماله من بینهایت بود چرا وقتی شرط از بین میرفت یعنی دستمون رو برمیداشتیم از حلقه نمیومد بیرون؟
                telgram:09396888049

                دیدگاه


                  #23
                  پاسخ : آموزش ARDUINO

                  با سلام و تشکر از زحمات شما
                  من قرار است یک پروژه با آردوینو آماده کنم که 0تا10 ولت بصورت آنالوگ اینپوت دریافت کند و بر روی LCD نمایش دهد(یک سیمولاتور و میکروکنترلر).به گفته استادم به یک میکرو با 4DIGITAL INPUT و 2DIGITAL OUTPUT و یک LCD ویک صفحه کلید نیاز دارم.البته صفحه کلید را میگفت برای این میخواهم که اگر چیزی هم تایپ کردم اون را هم روی صفحه LCD نمایش بدهد.من اصلا از آردوینو اطلاعی ندارم وتازه دارم آشنا میشوم.لطفا راهنماییم کنید که بر آردوینو با چه مشخصاتی باید تهیه کنم و از چه سایتی باید خریداری کنم.
                  ممنون از کمکی که خواهید کرد.

                  دیدگاه


                    #24
                    پاسخ : آموزش ARDUINO

                    سلام
                    یک آردوینو uno بخرید.تو فروشگاه سایت هم هست
                    telgram:09396888049

                    دیدگاه


                      #25
                      پاسخ : آموزش ARDUINO

                      نوشته اصلی توسط jumper
                      آها درسته
                      پس چرا تو برنامه ای که من نوشته بودم منم همین حلقه while رو گذاشته بودم منتها ماله من بینهایت بود چرا وقتی شرط از بین میرفت یعنی دستمون رو برمیداشتیم از حلقه نمیومد بیرون؟
                      کسی بخواد کدنویس خوبی بشه باید بیشتر از اینا دقت کنه . 1 - چیزایی رو که گفتم درست بخونین 2 - به کدی که نوشتین دقت کنین همه چی واضحه . اگر نگرفتید چی شده بعد بهتون میگم
                      چشم ها را باید شست ، جور دیگر باید دید . . .

                      دیدگاه


                        #26
                        پاسخ : آموزش ARDUINO

                        من اشکال کدم این بنظرم اومد که while رو داخل if نوشتم و آوردمش بیرون ولی باز فرقی نکرد
                        شاید وقتی میره حلقه بینهایت با از بین رفتن شرط هم اونجا گیر میکنه که اصولا نباید اینجور باشه
                        telgram:09396888049

                        دیدگاه


                          #27
                          پاسخ : آموزش ARDUINO

                          پس بهتره اینجوری بگم که هر متغییر که توی برنامه تعریف می کنیم توی حافظه موقت قرار میگیره اینو که قبول دارید ؟ اینم باید بدونید که برنامه موقع اجرا از خط اول شروع به خواندن میکنه تا به آخرین کد برسه . تا اینجا باید گرفته باشید چی میشه ولی چون شاید براتون باز سوال بشه تا انتها ی برنامه پیش میریم . وقتی ما توی خط هشتم دستور میدیم که مقدار متغییر reading رو برابر مقدار خوانده شده از پین قرار بده این مقدار توی حافظه ذخیره میشه ، برنامه خط به خط اجرا میشه تا به دستور While میرسه شرط رو بررسی میکنه چون شرط درسته وارد حلقه میشه ، وقتی به انتهای حلقه میرسه دوباره برمیگرده تا شرط رو بررسی کنه متغییر توی حافظه ذخیره شده پس شرط هم صدق میکنه توی این فاصله شما دستتون رو هم برداشته باشید ولی دیگه برنامه که به اول خط نرفته تا مقدار جدید متغییر رو ذخیره کنه بنابراین مقدار متغییر همونی هست که برای اولین بار ذخیره شده . پس ما باید توی حلقه باز بگیم که مقدار متغییر در طول برنامه چی میشه تا برنامه درست اجرا بشه ، پس داخل حلقه While باز دستور خواندن از پین رو مینویسیم . خسته شدیم از بس نوشتیم ایشالا که گرفته باشی
                          چشم ها را باید شست ، جور دیگر باید دید . . .

                          دیدگاه


                            #28
                            پاسخ : آموزش ARDUINO

                            خسته نباشید
                            telgram:09396888049

                            دیدگاه


                              #29
                              پاسخ : آموزش ARDUINO

                              برنامه دهم :
                              یکم تاخیر افتاد سرم با کارای دیگه گرم بود . برنامه امروز راه اندازی 7Segment هست . دستور جدیدی نداره همون دستورای قبلی هست فقط یکم بیشتر با آرایه ها و حلقه For کار میکنیم به خاطر همین به نظرم کمی گیج بشید ( ) البته می طلبه که شما هم بیشتر دقت کنید ( :eek . برای بستن مدار هم پایه های 7Segment رو به اینصورت وصل کنید .



                              [code=c]byte seven_seg_digits[10][7] = {
                              { 1,1,1,1,1,1,0 }, // = 0
                              { 0,1,1,0,0,0,0 }, // = 1
                              { 1,1,0,1,1,0,1 }, // = 2
                              { 1,1,1,1,0,0,1 }, // = 3
                              { 0,1,1,0,0,1,1 }, // = 4
                              { 1,0,1,1,0,1,1 }, // = 5
                              { 1,0,1,1,1,1,1 }, // = 6
                              { 1,1,1,0,0,0,0 }, // = 7
                              { 1,1,1,1,1,1,1 }, // = 8
                              { 1,1,1,1,0,1,1 } // = 9
                              };

                              void setup() {
                              for(byte i=2 ; i<9 ; ++i){
                              pinMode(i,OUTPUT);
                              }
                              }


                              void loop() {
                              for (int count =-1; count <10; ++count) {
                              delay(1000);
                              sevenSegWrite(count +1);
                              }
                              }
                              void sevenSegWrite(byte digit) {
                              byte pin = 2;
                              for (byte segCount = 0; segCount < 7; ++segCount) {
                              digitalWrite(pin, seven_seg_digits[digit][segCount]);
                              ++pin;
                              }
                              }

                              [/code]

                              توضیحات :
                              هر چی جلوتر بریم برنامه ها پیچیده تر میشن فکر کنم منم دیگه حوصله تفسیر برنامه رو نداشته باشم . شما هم که همگی استادید البته واسه همین شاید بخش توضیحات رو حذف کنم .
                              از خط 1 تا 12 آرایه ای تعریف می کنیم که نشان دهنده اعداد 0 تا 9 هست یعنی سگمنت هایی که قرار روشن یا خاموش باشند رو نمایش میده (در هر عدد) . اوصولا به این نوع آرایه ، آرایه دو بعدی میگن (کاملا واضحه به چه دلیل ) .
                              در خط 14 تا 18 با استفاده از یک حلقه FOR تمامی پین ها رو خروجی تعریف می کنیم (PIN2....PIN8 ) .
                              از خط 21 تا 33 شاید بشه گفت مهمترین بخش برنامه باشه . اگه بخوام ریز به ریز بگم طولانی میشه در همین حد بگم که خط 22 تا 25 مشخص میکنه که چه عددی باید نمایش داده بشه (بعد اول ) خط 24 تابعی که توی برنامه تعریف کردیم رو فراخوانی میکنه (خط 27 تا 33)
                              خطوط 27 تا 33 مشخص میکنه که پین های خروجی به چه صورتی باشند ( On/Off ) یعنی کدام سگمنت ها روشن و کدامیک خاموش باشند .
                              از این خلاصه تر نمیشد گفت . اگر قابل فهم نبود اطلاع بدبد تا بیشتر توضیح بدم .

                              چشم ها را باید شست ، جور دیگر باید دید . . .

                              دیدگاه


                                #30
                                پاسخ : آموزش ARDUINO

                                چیزی که لازم بود بگم و مدام فراموش میشد اینکه با وجود اینکه بردهای آردوینو خیلی کاربردی هستند متاسفانه هنوز سازندگان برنامه کامل و جامعی نتوانستند ارائه دهند . در حالی که در همین مدت یک ماهه 3 ورژن از نرم افزار به وسیله سایت شرکت ارائه شده و باز هم دارای کاستی هایی است . کتابخانه هایی هستند که با ورژن های پایین نرم افزار اجرا می شوند ولی در ورژن های جدید قابل اجرا نیستند . مثل کتابخانه 7segment یا دیگر کتابخانه ها مانند Keypad و امثال آن و یا در رابطه با ارتباط این برد با نرم افزارهایی همچون LBVIEW . البته برد مشکلی ندارد و بیشتر بحث نرم افزار مطرح می باشد .
                                چشم ها را باید شست ، جور دیگر باید دید . . .

                                دیدگاه

                                لطفا صبر کنید...
                                X