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เป้นฐาน10Ex.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
เป้นต้น
ไม่มีความคิดเห็น:
แสดงความคิดเห็น