วันศุกร์ที่ 27 พฤศจิกายน พ.ศ. 2558

week 10 Lab 3

การทำงานและแนวคิดของโค้ด
       - ในโค้ดนี้เราเขียนฟังก์ชันของโหมดที่ 1 ไว้ก่อนเพื่อให้สะดวกแก่การทำงาน และในฟังก์ชัน main จะแสดงข้อความบอกว่าโหมดไหนทำอะไรและต้องส่งค่าอะไรเพื่อเข้าโหมดนั้น จากนั้นจึงรอรับค่าเพื่อทำงานต่อไป โดยหากค่าที่ส่งมาไม่ตรงกับโหมดใดเลยก็จะแสดงเมนูใหม่อีกครั้ง 
       - โหมด 1 จะเป็นการเปิด LED ใน pattern ต่าง ๆ โดยในโปรแกรมนี้จะมีอยู่ 2 pattern โดยจะเลือกโหมดโดยการส่งค่าตัวอักษร a หรือ d และถ้าหากส่งค่าตัวอักษร s จะทำการปิด LED ทั้งหมดและกลับไปหน้า menu
       - โหมด 2 จะแสดงค่าของสวิตซ์ตัวซ้ายของบอร์ด Nx-100 ว่าเป็น logic 0 หรือ 1 แล้วจึงกลับไปหน้า menu

***********************************


VDO แสดงการทำงานของโปรแกรม

       - เมื่อเริ่มทำงาน Serial Monitor จะแสดงหน้า menu ขึ้นมา โดยจะมีให้เลือกโหมดการทำงาน 2 โหมด ขึ่นอยู่กับค่าที่ส่งไปทาง Serial Monitor 
       - โหมด 1 เริ่มทำงานเมื่อส่งค่าเลข 1 ไปทาง Serial Monitor โดยจะเป็นการเปิด LED ใน pattern ต่าง ๆ ในโปรแกรมนี้จะมีอยู่ 2 pattern เลือกได้โดยการส่งต่าตัวอักษร a หรือ d ไปทาง Serial Monitor และหากส่งตัวอักษร s จะเป็นการปิดไฟ LED และกลับไปที่หน้า menu
       - โหมด 2 จะทำงานเมื่อส่งค่าเลข 2 ไปทาง Serial Monitor โดยจะเป็นการอ่านค่าของสวิตซ์ตัวซ้ายสุดบนบอร์ด NX100 ว่าเป็น logic 0 หรือ 1 แล้วจึงแสดงผลเป็นเลข 0 หรือ 1 ออกมาทางหน้าจอ Serial Monitor และเมื่อแสดงผลเสร็จแล้ว จะกลับไปที่หน้า menu
      

************************************

week 11 Lab 4

การทำงานและแนวคิดของโค้ด

       - .ในโปรแกรมจะใช้การวนลูปไปเรื่อย ๆ และเนื่องจากค่าที่ส่งไปได้มากสุดอยู่ที่ 4095 และค่า sine จะวนครบรอบที่รอบละ 2*pi เรเดียน ในการวนลูปแต่ละรอบจึงส่งค่า sine ไป 4095 ครั้ง โดยแต่ละครั้งจะเพิ่มค่ามุมขึ้น pi/2047 เรเดียนแล้วจึงคูณค่าที่ได้ด้วย 2047 เพื่อขยายสัญญาณ และเมื่อส่งครบแต่ละรอบจะตั้งค่ามุมกลับไปเป็น 0 แล้วจึงเริ่มส่งค่ารอบใหม่

     การรับ-ส่งค่ามนที่นี้ จะคล้าย ๆ กับการพล็อตกราฟ โดยเมื่อเราต้องการรูปของกราฟ sine เราจึงวนลูปค่าของ i (เปรียบเสมือนแกน x) ให้วนตั้งแต่ 0 ไปจนถึง 4094 ซึ่งเป็นค่าสูงสุดที่เราจะส่งค่าไปได้ แล้วจึงนำค่า i ไปแปลงให้อยู่ในรูปของกราฟ sine (ซึ่งเปรียบเสมือนแกน y) โดยใช้สมการคือ (sin(i*(2*pi)/4094)*(4094/2))
     ป.ล. ที่ต้องคูณด้วย 2pi/4094 เนื่องจากกราฟ sine จะมีการวนครบ 1 รอบเมื่อองศาเปลี่ยนไปตั้งแต่ 0-2pi และที่ต้องหารด้วย 4094 เนื่องจาก i มีค่าอยู่ในช่วง 0-4095 จึงต้องการแบ่งสัญญาณของกราฟ sine ออกเป็นช่วงเล็ก ๆ
     ป.ล.2 ที่ต้องนำสมการ sine ไปคูณกับ (4094/2) เนื่องจากต้องการขยายกราฟ sine ให้มีสัญญาณใหญ่ขึ้น จะได้ง่ายต่อการมองเห็น

***********************************


VDO แสดงการทำงานของโปรแกรม




************************************

week 12 Lab 5

การทำงานและแนวคิดของโค้ด

       - ในโค้ดนี้การรับสถานะของสวิตซ์จะใช้ DigitalIn แบบ array เช่นเดียวกันกับการส่ง DigitalOut ไปเป็นสัญญาณเปิดปิด LED 
       - ในการควบคุมโหมดการทำงานของโค้ดนี้ จะใช้ค่าสถานะของสวิตซ์ 2 ตัว และตัวแปรอีกหนึ่งตัวจะเป็นตัวช่วยควบคุมให้โปรแกรมทำคำสั่งเพียงครั้งเดียวต่อการกดสวิตซ์ 1 ครั้ง
       - สำหรับโหมดที่ 1 ซึ่งเป็นการเขียนข้อมูลลงไปบน eeprom จะใช้ array 1 ตัวรับค่าสถานะของสวิตซ์ของบอร์ด NX100 จากนั้นจึงใช้การรันลูป 7 ครั้งเพื่อเขียนข้อมูลลงไปบน eeprom 7 ตำแหน่ง (เขียนทีละตำแหน่ง แต่ละตำแหน่งใช้ loop 1รอบ) โดยหากมีการบันทึกข้อมูลเพิ่มขึ้น address ที่ใช้บันทึกก็จะเลื่อนไปทีละ 7 ตำแหน่งเรื่อย ๆ ด้วย หรือก็คือ หากบันทึกข้อมูลแล้วจะทำการเลื่อน address ไปยังตำแหน่งที่ว่างตำแหน่งถัดไปเพื่อไม่ให้เกิดการซ้อนทับกันของข้อมูล
       - โหมดที่ 2 เป็นการอ่านข้อมูลจากใน eeprom 7 ตำแหน่ง โดยจะใช้การวนลูป 7 รอบเพื่อรับข้อมูลมาเก็บไว้ในตัวแปร array (รับข้อมูลจาก eeprom มาเก็บไว้ใน array ทีละตำแหน่ง) จากนั้นจึงใช้ค่าในตัวแปรนั้นไปควบคุมสถานะของหลอด LED แต่ละหลอด


***********************************


VDO แสดงการทำงานของโปรแกรม

       - โปรแกรมนี้เป็นการใช้บอร์ด nucleo ติดต่อกับ eeprom โดยโปรแกรมจะมีโหมดการทำงาน 2 โหมดซึ่งสามารถเลือกโหมดได้โดยสวิตซ์ทางซ้ายสุดบนบอร์ด NX100 โดยหากสวิตซ์อยู่ที่ logic 1 จะเป็นการบันทึกค่าสถานะของสวิตซ์อีก 7 ตัวที่เหลือลงไปบน address 7 ตัวแหน่งของ eeprom และหากสวิตซ์ตัวซ้ายสุดอยู่ที่ logic 0 จะเป็นการอ่านค่าที่บันทึกอยู่ให eeprom มาแสดงผ่านทางหลอด LED 7 หลอด โดยการทำงานแต่ละรอบจะต้องกดสวิตซ์ User_Button บนบอร์ด nucleo ก่อน


       
************************************