วันศุกร์ที่ 20 มีนาคม พ.ศ. 2558

Aeduino note 17/3/15

Aeduino note 17/3/15

                   สิ่งที่ได้รู้: เรียนรู้เรื่องของSerial communication การติดต่อระหว่างบอร์ดกับคอมพิวเตอร์
                                    -ความสำคัญของ baud rate หรืออัตราการรับ-ส่งข้อมูล ซึ่งหากอัตราการรับส่งที่ตั้งไว้ของคอมกับบอร์ดไม่เท่ากันข้อมมูลลที่ส่งไปมาจะไม่สาารถประมาวลผลได้
                                    -ความหมายของคำสั่งต่างๆ  
                                     begin(...) เป็นคำสั่งประกศเริ่มต้นการใช้งานSerial โดยในช่องเราต้องใส่                                       ค่าอัตราการรับส่งข้อมูลเพื่อsetค่าให้ตรงกับ computer  
                                     print(...) และ println(...) เป็นคำสั่งให้Serial ทำการพิมพ์ข้อมูลส่งกลับเข้ามาหา                            เรา ซึ่งทั้งสองคำสั่งมีส่วนต่างกันคือ print()จะไม่เว้นบรรทัดให้เรา ส่วน println()จะเว้น                            บรทัดให้             
                                     read(...)เป็นการให้บอร์ดอ่านค่าที่เราส่งเข้าไปให้เพื่อใช้ในการประมวลผลต่อไป
                                     available()เป็นคำสั่งที่ให้นับข้อมูลที่Serialเก็บอยู่ทั้งหมด

Exercise from P'ไทร

                  Ex1. สร้าง digit ที่เเสดงผลเมื่อเรากดตัวเลขส่งค่าจากคอมไปบอร์ด เช่น กดเลข1บนคีย์บอร์ด ได้displayเลขหนึ่งบน7segment 
                   Ex2.1 เมื่อใส่ค่า2ค่า คือหลักและตัวเลขให้แสดงผลตัวเลขในหลักๆนั้น เช่นกด'A1' displayที่ได้ออกมาจะขึ้นเลขหนึ่งในหลักแรก
                   Ex2.2 ใส่ค่า3ค่าเป็นตัวเลข ให้แสดงผลออกมาเป้นเลขที่เรียงกันตามหลัก เช่นกด'145' displayที่ออกมาจะได้เลข1เลข4และเลข5ตามลำดับหลัก
                   Ex3.ใส่ค่า3ค่าเป็นองศาที่ให้Servoหมุนไป เช่นเมื่อกด'227' Servoจะหมุนไปที่ตำแหน่ง227องศา

       Ex1.plan: 1. สร้างฟังก์ชั่นแสดงค่าpatternของตัวเลขขึ้นมา
                        2.กำหนดbaud rateเป็น9600ด้วย Serial.begin(9600);ในส่วนของvoid setup()
                        3.สร้างตัวแปรที่ใช้ในการเก็่าที่รับมาจากคอม inByte และสร้างตัวแปรที่ไว้บ่งบอกตัวเลขpatternของฟังก์ชั่น
                        4.เขียนคำสั่งinByte=Serial.read()ให้เก็บค่าเข้าไปในตัวแปรinByte และสั่งให้ส่งค่ากลับมาด้วยSerial.println() 
                        5.เนื่องจากตัวเลขที่เราพิมพ์ในคอมถูกส่งไปในรูปแบบเลขASCIIทำให้เราต้องเปลี่นแปลงค่า เช่นเมื่อเรากดเลข 1ลงไป บอร์ดจะได้รับค่า49เข้ามา ดังนั้นเราจึงสั่งให้ pattern = inByte-48 ;เพื่อให้เหลือค่า 1 จริงๆ 
                         6.เรียกใช้ฟังก์ชั่นpatternของตัวเลขโดยให้เอาค่าตัวเลขของตัวแปรpatternเป็นตัวกำหนดเลือกpatternของตัวเลข number(pattern) ;
                         7.รันprogram และทดสอบ 


     Ex2.1plan : 1.สร้างฟังก์ชั่นpatternตัวเลขเช่นเดิม และสร้างฟังก์ชั่นที่กำหนดหลักอีกฟังก์ชั่นนึง
                       2.กำหนดค่าbaud rate
                       3.เนื่องจากมีค่าที่รับเข้า2ตัวให้เราสร้างตัวแปร inByte1 กับ inByte2 จากนั้นสร้างตัวแปรที่จะเป็นตัวเลขกำหนดpattern และหลักของตัวเลข pattern digits 
                       4.ในส่วนvoid loop() เราต้องสร้างเงื่อนไขให้เริ่มเก็บค่าได้เมื่อมีข้อมูลอยู่ในSerialแล้ว2ตัวด้วยคำสั่ง if(Serial.available()==2){}
                       5.สั่งให้อ่านและเก็บข้อมูลไว้ในตัวแปรแรกก่อน ซึง่ตัวแปรแรกจะเป็นตัวระบุหลัก ได้แก่ Aหลักร้อย  Bหลักสิบ  C หลักหน่วย  และABC มีค่าในเลขASCIIตั้งแต่97-99 ดังนั้นเราจึงสร้างเงื่อนไขก่อนะทำการเก็บตัวแปรบอกหลักว่า if(inByte1>=97&&inByte1<=99) จากนั้นสร้างคำสั่งให้นำค่าไปเก็บไว้ในตัวเเปรdigits= inByte1-96; 
                       6.ให้อ่านข้อมูลอีกครั้งและเก็บไว้ในตัวแปรinByte2 ตัวเเปรนี้จะมีค่าเป็นตัวเลขที่ใช้กำหนดpatternเช่นเดียวกับEx.1 ให้นำไปลบ48ก่อนเก็บไว้ในตัวแปรpatternเข่นเดิม
          pattern=(inByte2-48); 
                       7.จากนั้นเรียกใช้ฟังก์ชั่นทั้งสองตัวขึ้นมาและใส่ค่าpatternและdigitsเป็นตัวกำหนด 
                    number(pattern);
                    digitnum(digits );
                    delay(1000);
                        8.รันprogramส่งเข้าบอร์ดและตรวจสอบผล

Ex.2.2plan:    1.สร้างฟังก์ชั่นpatternตัวเลขเช่นเดิม และสร้างฟังก์ชั่นที่กำหนดหลักอีกฟังก์ชั่นนึง
                       2.กำหนดค่าbaud rate
                       3.เนื่องจากมีค่าที่รับเข้า3ตัวให้เราสร้างตัวแปร inByte1 inByte2  กับ inByte3จากนั้นสร้างตัวแปรที่จะเป็นตัวเลขกำหนดpatternทั้ง3หลัก ได้แก่ patterndig1 patterndig2 และpatterndig3
                       4.สร้างเงื่อนไขให้เริ่มทำงานได้เมื่อมีค่าในSerial3ค่าแล้วด้วยคำสั่ง  if(Serial.available()==3){}
                        5.สั่งให้อ่านค่าทีละตัวและเก็บใส่ตัวแปรทีละอันตามลำดับ
                        6.จากนั้นลบตัวแปรทุกตัวด้วย48เช่นเดิม
                        7.เรียกฟังก์ชั่นขึ้นมาโดยกำหนดให้แต่ละคร้งdelay 5 ms  และฟังก์ชั่นกำหยดหลักให้ใส่ค่าเรียงกันหลัก1 2 3ตามไปเลย
                                 number(patterndig1);
                                 digitnum(1);
                                 delay(5);
                                 number(patterndig2);
                                 digitnum(2);
                                 delay(5);
                                 number(patterndig3);
                                 digitnum(3);
                                 delay(5);

                           8.รันprogramและตรวจสอบผล

Ex3.plan: 1.เรียกlibary Servoมาก่อนด้วยคำสั่ง #include<servo.h>
                 2.สร้างตัวแปรposในการเก็บค่าตำแหน่งที่ให้Servoหมุนไป และสร้างตัวแปรที่ไว้เก็บค่าจากSerialเป็นหลักหน่วย สิบ ร้อย =>int digit ,tens,hundreds;
                 3.ตั้งชื่อServoเพื่อเรีกใช้ด้วย =>Servo myservo;
                 4.กำหนดค่าbaud rate 
                 5.เชื่อมชื่อของservoและขาที่ต่อservoเข้าดว้ยคำสั่ง   myservo.attach(A5);
                 6.สร้างเงื่อนไขให้เริ่มทำงานได้เมื่อมีค่าในSerial3ค่าแล้วด้วยคำสั่ง  if(Serial.available()==3)
                 7.สั่งให้อ่านค่าทีละตัวและเก็บใส่ตัวแปรทีละอันตามลำดับ โดยค่าเเรกเก็บไว้ในตัวแปรhundredsและx100เข้าไปในหลักด้วย ค่าที่สองเก็บในtensและคูณ10เข้า และค่าที่สามเก็บในdigit
                 8.นำค่าทั้ง3หลักมาบวกกันและเก็บในตัวแปรpos ด้วยคำสั่ง pos=hundreds+tens+digit;
                 7.ป้อนคำสั่งให้Servoหมุนไปตามตำแหน่งด้วยคำสั่ง myservo.write(pos); 
                 9.ทดสอบprogram ตรวจผล 


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

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