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


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

แถบสีที่ 3 | แถบสีที่ 2 | แถบสีที่ 1 | ค่าที่ได้ |
สีขาว | สีขาว | สีขาว | 0 |
สีขาว | สีขาว | สีดำ | 1 |
สีขาว | สีดำ | สีขาว | 2 |
สีขาว | สีดำ | สีดำ | 3 |
สีดำ | สีขาว | สีขาว | 4 |
สีดำ | สีขาว | สีดำ | 5 |
สีดำ | สีดำ | สีขาว | 6 |
สีดำ | สีดำ | สีดำ | 7 |
การอ่านค่าแถบสีน้ำตาลด้วย ZX-03

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

ในการอ่านค่าบาร์โค้ด เราจะเลือกใช้เซนเซอร์ด้านใดด้านหนึ่งเท่านั้น ในที่นี้เลือกใช้เซนเซอร์ด้านขวา
จากรูปค่าที่อ่านได้ พอสรุปได้ว่า จะต้องสร้างค่าอ้างอิงขึ้นมา 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 ไปใช้เพื่อตรวจสอบเส้นทางการเดินในขั้นตอนต่อไปได้