วันจันทร์ที่ 9 มีนาคม พ.ศ. 2558

Arduino note 9/3/15



Arduino note 9/3/15
               
          สิ่งที่ได้วันนี้ -ลองเอาcode 7-segment มาใส่ในboardจริง พบปัญหาคือ
                         1.ไม่ทราบpinแต่ละอันของsegmentทำให้ต้องทดลองไล่ขาแต่ละอันไปเรื่อยๆจนครบ
                         2.แถบsegmentขึ้นพร้อมกันทั้ง2หลัก เมื่อรันโปรแกรม (ต้นเหตุเดียวกับข้อเเรก)
                            (ปล.วันนี้ไม่ได้ถ่ายวิดีโอไว้ ครั้งหน้าผมจะลงตามให้5555)

                         -เริ่มลองเขียนโค้ดการใช้LDR โดยวางแผนไว้2แบบคือ
                 แบบแรกให้ LDR รับค่าเข้ามา โดยกำหนดความเร็วในการรับข้อมูลเข้าด้วย Serial.begin(9600); และเก็บเข้าที่ตัวแปรvalue ด้วยSerial.println(value); จากนั้นให้ปรับค่าที่รับมาลดลง4เท่า โดยใช้ value/=4 และให้แสดงผลความสว่างของไฟoutput โดยใช้ ==>analogWrite(led,value);
                 แบบที่สอง ให้LDRรับค่าเข้ามาและเก็บที่ตัวแปรvalueด้วยวิธีเดียวกับแบบแรก และสร้างตัวเเปรbaseขึ้นมาเพื่อใช้เป็นเกณฑ์ในการตรวสอบค่าที่รับเข้า และสร้างเงื่อนไขแรก if(value<base){} และให้คำสั่ง digitalWrite(led,HIGH);
              delay(value);
              digitalWrite(led,LOW);
              delay(value);
ในวงเล็บเงื่อนไขของif ซึ่งผมได้ลองใช้หลอดไฟ3ดวงในการเช็คความถี่ เมื่อค่าที่รับมาเปลี่ยนไปเรื่อยๆ
และกำหนดเงื่อนไขที่อื่นๆที่มากกว่าเกณฑ์ของbase ด้วย else{} และให้คำสั่ง digitalWrite(led,HIGH);
ในวงเล็บเงื่อนไขกับหลอดLEDทั้ง3ดวงเพื่อเป็นตัวบอกว่า ในขณะนี้ค่าทีรับมามากกว่าเกณฑ์baseแล้ว

                  ซึ่งผลที่ออกมาพบว่าแผนที่วางไว้แบบแรกค่อนข้างไม่ตรงกับีท่คาดหวังมากเนื่องจากค่าขนาดใส่เข้าไปในanalogWriteใกล้กันมากผลที่สังเกตไฟได้จึงค่อนข้างแยกออกจากกันได้ยาก
                  ส่วนผลของแบบที่สองนั้นได้ผลออกมาตรงกับที่คาดไว้คือเมื่อลดความสว่างของแสง ไฟ3ดวงจะวิ่งด้วยความเร็วที่เพิ่มขึ้น และเมื่อให้แสงสว่างเต็มที่(ให้ความสว่างสูงกว่าเกณฑ์base) ไฟทั้งสามดวงจะสว่างพร้อมกัน
http://123d.circuits.io/circuits/635574-ldr-frequence-of-led


                   -เมือได้ทดลองในsimulatorเรียบร้อยแล้ว ผมจึงลองเอาcodeของแบบที่สองมาcompliedใส่กับบอร์ดจริงดู  ในตอนแรกพบว่าเกิดความผิดพลาดขึ้นคือไฟทั้ง3วิ่งช้าและเร็วสลับกันไปเอง และเมื่อเช็คค่าที่รับเข้ามาโดยSerial Monitorดุพบว่า ค่าที่รับเข้านั้นไม่คงที่และสลับมากน้อยไปเรื่อยๆ เมื่อลองถามพี่ๆในห้องดุพี่เค้าก็มาช่วยดู หลังจากเช็คได้ก็พบว่าผมใส่pinรับเข้าของsensorผิดตัว(ปัญหาคือboardบอกขาของLDRกับsensorวัดอุณหภูมิใกล้กัน เลยดูผิดนั้นเอง)
                   -เมื่อแก้ไขเสร็จแล้วพบว่าสามารถทำงานตามที่programได้จริงเหมือนกับที่ทดสอบในsimulatorเช่นกัน

                        -  Number base คืออะไร?
             ยกตัวอย่างเลขฐานสิบ==> คือเลขที่มีสัญลักษณ์แทนตัวเลขทั้งหมด10จำนวนคือ 0 1 2 3 4 5 6 7 8 9 ซึ่งเราใช้และพบเจอกันทุกๆวันนี้นั่นเอง
         เลขฐาน16 ก็จะเป็น  0 1 2 3 4 5 6 7 8 9 A B C D E F เช่นกัน
 ซึ่งเมื่อเลขฐานแทนสัญลักษณ์ในตัวที่มากที่สุดของเลขฐานนั้นแล้ว จะทำให้ขึ้นหลักใหม่ คือรีเซ็ตเลขในหลักแรกให้เป้นค่าที่น้อยที่สุดและเพิ่ม+1ค่าในหลักต่อไป
เช่น 1010  11102 เป็นต้น

การแปลงค่าเลขฐาน

แปลงฐาน16เป้นฐาน10
Ex.1
  1916 =(1x16^1)+(9x16^0)
         = (16)+(9) = 2510

Ex.2
A316  = (10x 16^1)+(3x16^0 )
         = 160+3 =16310
โดยเมื่อเรานำเลขฐานมาใช้กับการprogramming ส่วนใหญ่ภาษาคอมพิวเตอร์จะเป็นเลขฐานสอง ข้อมูลที่เป็นขาไฟที่จ่ายออก8ขาจะมีข้อมูล8บิต พอแปลงเป็นฐานสองจะได้เลขทั้งหมด8หลัก
เช่น
FF16 = 11111111
A116 = 10110001
เป้นต้น

ไม่มีความคิดเห็น:

แสดงความคิดเห็น