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 ตรวจผล