หน้าเว็บ

วันเสาร์ที่ 10 กันยายน พ.ศ. 2559

[IPST-SE] แนวการเขียนโปรแกรม STEM FESTIVAL 2016 EP.1

ตอนที่ 1 การอ่านบาร์โค้ด

STEM_Fes01

STEM_Fes02

บาร์โค้ดประกอบไปด้วย สี 3 สีคือ สีดำ สีน้ำตาลและสีขาว โดยแผ่นบาร์โค้ดออกแบบให้สีน้ำตาลเป็นพื้น สีดำ แทนลอจิก “1” สีขาวแทนลอจิก “0”  แถบบาร์โค้ดมีทั้งหมด 3 แถบ แทนตัวเลขฐานสอง 3 บิต ให้ค่าเท่ากับ 0 ถึง 7

STEM-Barcode

แถบสีที่ 3

แถบสีที่ 2

แถบสีที่ 1

ค่าที่ได้

สีขาว สีขาว สีขาว 0
สีขาว สีขาว สีดำ 1
สีขาว สีดำ สีขาว 2
สีขาว สีดำ สีดำ 3
สีดำ สีขาว สีขาว 4
สีดำ สีขาว สีดำ 5
สีดำ สีดำ สีขาว 6
สีดำ สีดำ สีดำ

7

การอ่านค่าแถบสีน้ำตาลด้วย ZX-03

ZX-03 For Brown

โดยปกติ ZX-03 จะอ่านค่าได้เฉพาะสีในช่วงโทนสีเทา คือไล่ลำดับตั้งแต่สีขาวไปจนถึงสีดำเท่านั้น  แต่ถ้าติดตั้งเซนเซอร์ให้สูงจากพื้นมากขึ้น ดังรูป ZX-03 จะสามารถแยกโทนสีอื่นๆ ได้ด้วย ซึ่งในที่นี้ใช้สีน้ำตาล โดยการอ่านค่าแสดงที่หน้าจอ GLCD ให้ค่าดังนี้

i-BOT-With-ZX-03-On-Black-Brown-White

ในการอ่านค่าบาร์โค้ด เราจะเลือกใช้เซนเซอร์ด้านใดด้านหนึ่งเท่านั้น ในที่นี้เลือกใช้เซนเซอร์ด้านขวา

จากรูปค่าที่อ่านได้ พอสรุปได้ว่า จะต้องสร้างค่าอ้างอิงขึ้นมา 2 ช่วง คือ
ค่าอ้างอิงระหว่างสีขาวกับสีน้ำตาล เท่ากับ (890+440)/2   = 665

ค่าอ้างอิงสร้างเป็นตัวแปรได้เป็น word whiteBrown=665 ;

ค่าอ้างอิงระหว่างสีน้ำตาลกับดำ เท่ากับ (440+90)/2 = 265

ค่าอ้างอิงสร้างเป็นตัวแปรได้เป็น word blackBrown=265 ;

การเขียนโปรแกรม โดยใช้คำสั่ง while

   คำสั่ง while จะวนลูปทำงาน โดยดูเงื่อนไขในวงเล็บ ถ้าเงื่อนไขในวงเล็บยังเป็นจริง จะทำงานตามคำสั่งต่อไปเรื่อยๆ   เมื่อนำมาใช้กับการอ่านบาร์โค้ดคือ เป็นการเขียนโปรแกรมให้หุ่นยนต์เคลื่อนที่ไปจนกระทั่งถึงแถบสีต่างๆ นั่นเอง เมื่อถึงแถบสีที่ต้องการ (เงื่อนไขเป็นเท็จ ) ก็ให้หยุดทำงาน

ตัวอย่าง

การเคลื่อนที่จากพื้นสนาม "สีดำ" ไปหยุดที่บาร์โค้ด "สีน้ำตาล"  ก็เขียนโปรแกรมได้ว่า
"ให้หุ่นยนต์เคลื่อนที่ไปเรื่อยๆ จนกระทั่งเจอสีน้ำตาลแล้วหยุด"

while (analog(1)<blackBrown) {
      fd(40);delay(12);    
}    
ao(); delay(100);

หมายเหตุ ค่า delay(100); ที่ตามมาเพื่อให้เห็นว่าหุ่นยนต์หยุดจริงๆ ก่อนไปทำงานส่วนถัดไป

การตรวจสอบแถบสีขาวหรือดำ

ปัญหาอยู่ตรงที่ เมื่อเดินผ่านสีน้ำตาลมาแล้ว ไม่แน่ใจว่าสีต่อไปเป็นสีขาวหรือสีดำ  จึงต้องเขียนเงื่อนไข while ดักไว้สองกรณีคือ มีค่ามากกว่าสีน้ำตาล (ขาว) และ มีค่าน้อยกว่าสีน้ำตาล (ดำ)  โดยใช้ AND (&&) มาช่วย  โดยให้เงื่อนไขเป็นเท็จ เมื่อเจอสีขาวหรือสีดำ และค่อยแยกแยะว่า สีที่ตรวจพบเป็นสีขาวหรือดำ

ตัวอย่าง

เดินผ่านสีน้ำตาลจนเงื่อนไขเป็นเท็จแล้ว จึงใช้คำสั่ง if ตรวจสอบว่าเป็นสีขาวหรือดำ จากนั้นนำค่าแสดงที่หน้าจอ

while (analog(1)>blackBrown&&analog(1)<whiteBrown) {

fd(40);delay(12);

}

ao(); delay(100);
if (analog(1)<blackBrown){
       glcd(2,0,"BLACK");     
}    
else if (analog(1)>whiteBrown){
      glcd(2, 0, "WHITE");    
}

 

การอ่านค่าบาร์โค้ด 3 แถบก็คือการเคลื่อนที่ลักษณะนี้ซ้ำ 3 ครั้ง แล้วนำค่าที่อ่านได้ทั้ง 3 บิต มารวมกัน สรุปเป็นโค้ดได้ดังนี้

เราสามารถนำค่าบาร์โค้ดจากตัวแปร BAR ไปใช้เพื่อตรวจสอบเส้นทางการเดินในขั้นตอนต่อไปได้