โปรแกรมภาษาโลโก้เบื้องต้นprasit.sirin.ac.th/elearning/logo/mswlogo.pdf ·...
TRANSCRIPT
โปรแกรมภาษาโลโกเบองตน
การตดตงโปรแกรม MSWLogo 1. น าแผน CD โปรแกรมภาษา MSWLogo ใสในเครองเลน CD-ROM
2. น าเมาสมาคลก 1 ครงทไอคอน My Computer 3. จากนนน าเมาสมาดบเบลคลกทไอคอน CD-ROM
4. จะปรากฏดงรป ในแผน CD นจะม mswlogo ซงจะเปนเวอรชนเดยวกบ mswlogo ทใชกนอยในปจจบน หากระบบปฏบตการของเครองคอมพวเตอรเปน Windows ทต ากวา XP เชน Windows 98 หรอ Windows ME ผ
เรยนรสามารถดบเบลคลกท mswlogo เพอตดตงไดเลย ดงรป
5. หากระบบปฏบตการของคอมพวเตอรเปน Windows XP หรอ Windows 2000 ผเรยนรตองตดตงโดยการดบเบล
คลกทไอคอน SetupLogo ดงรป
การตดตงโดยดบเบลคลกทไอคอน SetupLogo ซงเปน BAT file จะด าเนนการตดตง mswlogo และตดตง UserPort ใหโดยอตโนมต UserPort เปนโปรแกรมเปดพอรตใหค าสงตดตอพอรตของโลโกสามารถใชงานเพอ
ตดตอกบพอรตของคอมพวเตอรได บน Windows XP และ Windows 2000
6. จะปรากฏหนาตางดงรป
7. จากนนกจะขนหนาตาง ใหคลกทปม Next ไปเรอย ๆ จนกวาเครอง
จะลงโปรแกรมเสรจ 8. เมอเสรจแลวจะกลบมาสหนาตาง CD-ROM ใหคลกปดหนาตางน
จากนนใหสงเกตทหนา Desktop จะปรากฏไอคอน Microsoft Windows Logo และไอคอน UserPort ดวยในกรณตดตงบน
Windows XP หรอ Windows 2000 ซงแสดงวาไดท าการตดตง
เสรจเรยบรอยแลว
9. ในกรณมไอคอน UserPort ปรากฏอย กอนจะใชงานใหน าเมาสมาคลก 1 ครงทไอคอน UserPort ซงเมอ
หลงจากทคลกแลวกจะปรากฏหนาตางดงรป ใหยอหนาตางน แลวคอยเรยกโปรแกรม Microsoft Windows Logo ขนมาใชงาน
สวนประกอบของโปรแกรม MSWLogo 32
ภาพท 1.3 ภาพแสดงสวนประกอบของโปรแกรม
หนาจอหลก แสดงผลแบบกราฟฟกสของโปรแกรมภาษาโลโก
สวนทแสดงค าสงและผลของค าสง (Re-Call Box)
สวนทไวปอนค าสง (Input Box)
สวนหวโปรแกรม (Title Bar)
แถบค าสง ( Menu Bar)
เตา (Turtle)
ปมค าสง (Command Buttons)
แนะน าสวนประกอบของโปรแกรม จากรปภาพสวนประกอบของโปรแกรมมอยหลายสวน เรมจากสวนบนสด
เรยกวา สวนหวของโปรแกรม (Title Bar) จะเปนสวนแสดงชอโปรแกรมซงผใชสามารถใชสวนนเพอท าการยอขยายหนาตาง และค าการเคลอนยายหนาตางไปตามต าแหนงทตองการ
ล าดบท 2 จะเปนสวนแถบค าสง (Menu Bar) จะเปนแถบรายการค าสงเพอความสะดวกในการท างานตาง ๆ
ภาพท 1.4 ภาพแสดงเมน File
เมน File จะมรายการ
New เพอท าการเปดแฟมขอมลเพอท างานใหม
Load ใชส าหรบเปดแฟมขอมลเกาเพอน ามาใชงานหรอแกไขตอ Save ใชเพอบนทกแฟมในหนวยความจ าลงสแฟมขอมลเกาทตงไว
SaveAs ใชเพอบนทกลงในแฟมขอมลทตงขนใหมหรอยานไปลงสแฟมขอมลใหม Edit ใชเพอท าการบนทกและแกไขชดค าสง ในการท างานโดยเปรยบเสมอนโปรแกรม หรอชดค าสงยอยซงในสวน
นเหมอนกบโปรแกรม Editor ทว ๆไป
Erase ใชเพอลบค าสงยอยทไมตองการออกจากแฟมขอมลหรอหนวยความจ า Exit ใชเพอออกจากโปรแกรมภาษาโลโก
ภาพท 1.5 ภาพแสดงเมน Bitmap
เมน Bitmap ใชส าหรบจดการรปภาพทอยในแฟม หรอทอยบนพนทท างานในหนาจอหลกของภาษาโลโก โดยอาจจะท า
การบนทกรปหนาจอลงภาพ หรอวา เรยกรปภาพจากแฟมขอมลขนมาใช
ภาพท 1.6 ภาพแสดงเมน Set
เมน Set ใชส าหรบการปรบแตงองคประกอบของโปรแกรมโดยใช
PenSize ใชส าหรบขนาดปากกาทท าการลากเสนบนจอภาพ
Label Font ใชปรบชอตวอกษรและขนาดตวอกษรเวลาพมพ ลงบนจอภาพ Commander Font ใชส าหรบปรบขนาดและประเภทตวอกษรทพมพ ลงในชองปอนชดค าสง
Pen Color ใชส าหรบปรบสของเสนทจะลากหรอวาดบนจอภาพ Flood Color ใชส าหรบปรบสพนหลงของจอภาพพนทท างาน แตจ าเปนตองใชค าสงเทสดวย และจะท าการเท
สลงในพนทปดคลายกบโปรแกรม Paint
Screen Color ใชปรบสพนหลงของหนาจอหลกของโปรแกรมภาษาโลโก
ภาพท 1.7 ภาพเมน Zoom
เมน Zoom ใชส าหรบยอและขยายขนาดภาพบนหนาจอหลกของโปรแกรมภาษาโลโก
In เปนการขยายเขาใหใหญขน Out เปนการยอขนาดภาพใหเลกลง
Normal เปนการสงใหปรบเปนขนาดมาตรฐาน
ภาพท 1.8 ภาพเมน Help
เมน Help ใชเพอสนบสนนการใชงานภาษาโลโก เชน Index เปนสารบญตวอยางค าสงเพอใหคนค าอธบาย ชดค าสงพรอมตวอยาง Demo เปนตวอยางโปรแกรมทเขยนไวให
ในภาษาโลโกน เราจะเหนรปสามเหลยมตรงกลางบนพนทของหนาจอหลกของโปรแกรมนน เดมทใน MSWLOGO เวอรชนแรก ๆจะเปนรปเตา แตในเวอรชนใหมกลายเปนรปสามเหลยม แตเรากยงเรยกสามเหลยมสวนนวา
"เตา" ในพนทบรเวณน โลโกจะใชเปนพนทแสดงผลทางกราฟฟกส ดงนนผลของการวาดรป ลากเสน และการโหลดภาพ
จากไฟลทเปนรปภาพตาง ๆ จะแสดงบรเวณพนทของหนาจอหลก
อกสวนหนงทอยดานลาง คอหนาตาง Commander แบงออกเปน 3 สวนคอ Input Box คอพนทบรรทดเดยวดานลางใชปอนค าสงเขาไปทละบรรทด
Re-Call Box คอพนทดานบนของ Input Box โดยพนทตรงนจะใชแสดงค าสงทโปรแกรมประมวลผลไปแลว พรอมกบ
แสดงผลของค าสงทเปนผลทางคณตศาสตร และผลของคารจสเตอรตาง ๆ ผเรยนสามารถใชเมาสไปคลก หรอ กด Tab ไปทค าสงเดมทประมวลผลไปแลวมาใชใหมได กจะปรากฏใน Input Box ท าใหไม
ตองพมพใหม
Command Buttons คอกลมของปมค าสงมรายละเอยดดงน
Halt ใชหยดการท างานของโปรแกรมขณะทก าลงท างานตามค าสงอยอยางไมมเงอนไข Trace ใชแสดงค าสงแตละบรรทดบนพนทของ Re-Call Box ขณะทท าการประมวลค าสงในสวนปลกยอยไป
จนครบทงหมด เมอคลกทหนงแลวกจะม Untrace ซงกจะตรงกนขาม Trace คอจะไมเหนการประมวลค าสงในแตละบรรทด
Pause ใชหยดการท างานของโปรแกรมเชนกนแตเปนแบบชวคราว
Status ใชดสถานะของโปรแกรม หลง จากคลกปมนไปแลว ปมจะแสดงเปน UnStatus แทนทซงเปนค าสงตรงกนขามกน
Step ใชสงท างานอยางเปนขนตอน ม UnStep เปนค าสงตรงกนขามกน Reset ใชเซตการท างานทงหมดใหมสภาพเรมการท างานใหม
Execute เปนค าสงใหโปรแกรมเรมท างาน ซงใหผลเชนเดยวกนกบการกดปม Enter
Edall หมายถง Edit All เปนปมส าหรบตองการเขาไปแกไขโปรแกรมในไฟลทเราสรางขนมา โดยจะแสดงทกโปรแกรมทมอยในไฟลนน ๆ ซงจะใหผลเชนเดยวกบการเขาเมน Edit แลว ตามดวย All
แบบฝกหดบทท 1 1. ใหผเรยนท าแบบฝกหดดงน
1.1 ใหผเรยนทดลองตดตงโปรแกรมภาษาโลโก
1.2 ใหผเรยนทดลองเรยกโปรแกรมภาษาโลโกแลวทดลองใชแถบค าสง (Menu Bar) 1.3 ใหผเรยนไปยงแถบค าสง Help แลวเรยกเมน Index ทอยในค าสง Help หลงจากนน ใหผเรยนทดลองเรยก
ค าสงตาง ๆ มาทดลองใชด
ค าสงพนฐานภาษาโลโก
กลมค าสงเกยวกบปากกาและการเคลอนทของเตา
ค าสงพนฐานทแสดงผลลพธบนหนาจอแสดงผลหลกทเปนกราฟฟกส เชน FD, RT, LT, BK, PU, PD ฯลฯ fd หรอ forward หมายถงการลากเสนเดนไปขางหนา มรปแบบค าสงดงตอไปน
fd ระยะในการเดน เชน fd 100 หมายถงเดนไปขางหนา 100 กาว ผลกคอ เราจะเหนรปสามเหลยมเลอนขนไป
ขางบนเปนเสนตรงตามระยะทเราก าหนดดงรป จรง ๆ แลว 100 กาวคอ 100 จดพกเซลของจอภาพนนเอง
ภาพท 2.1 ภาพแสดงผลการท างานของค าสงการเดนไปขางหนา
จากตวอยางดงกลาวสามารถทจะพมพค าสงอยางเตมหรอวาค าสงอยางยอกจะแสดงผลลพธเหมอนกน ใหท าการ
ทดสอบพมพ forward 100 หรอ fd 100 เพอเทยบผลทแสดงบนจอภาพ
bk หรอ back คอการเดนถอยหลง รปแบบค าสงเปนดงน
bk ระยะในการเดน เชน bk 50 คอการถอยหลง 50 กาว เตาจะเดนถอยหลงทบเสนทางเดมเปนระยะทาง 50 กาว rt หรอ right คอการเลยวขวา รปแบบค าสงเปนดงน
rt องศาในการเลยว เชน rt 90 หมายถงเลยวขวาเปนมม 90 องศา ใหสงเกตวาเตาจะเพยงแตหนหว ถาจะใหเดนตองเพมค าสงอน ๆ ลงไปหลงจากน
lt หรอ left คอการเลยวซาย รปแบบค าสงเปนดงน lt องศาในการเลยว เชน lt 90 หมายถงเลยวซายเปนมม 90 องศา จะใหผลคลาย ๆ กบ rt แตจะหมนวนไปทางซาย
จ าไวเสมอวาในภาษาโลโก ค าสงและคาทใส
ตอจากค าสงนนๆ จะตองมวรรคคนกลางเสมอ
ค าสง circle คอการวาดรปวงกลม มรปแบบค าสงดงน circle รศมของวงกลม เชน circle 50 หมายถงวาดรปวงกลมทมรศมเทากบ 50
ตวอยางค าสง
Circle 50
ภาพท 2.2 ภาพแสดงผลการท างานของค าสง circle 50
ค าสง ellipse คอค าสงวาดรปวงร มรปแบบค าสงดงน
ellipse เสนผาศนยกลางแนวตง เสนผาศนยกลางแนวนอน เชน ellipse 30 70 จะไดรปวงรทมเสนผาศนยกลางในแนวตงเทากบ 30 และม
ผาศนยกลางในแนวนอนเทากบ 70
ค าสง arc คอค าสงในการวาดเสนโคง มรปแบบค าสงดงน arc มมของเสนโคง รศมของเสนโคง เชน arc 180 100 ผลคอจะไดเสนโคงทมรศม 100 และถกลากออกไปเปน
มม 90 องศา ตวอยาง ค าสง
Arc 180 100
ภาพท 2.3 ภาพแสดงผลการท างานของค าสง arc 180 100
Ø แนวนอน
Ø แนวตง
ค าสง pu หรอ penup คอค าสงยกปากกา รปแบบค าสงเพยงพมพค าวา pu จากนนเมอมการใชค าสงอน ๆ ตอไปเรา
จะไมเหนเสนทเกดขนจากการลาก หรอวาดอกเลย
ค าสง pd หรอ pendown คอค าสงวางปากกาหรอ จรดปากกาลง เพอใหเหนเส นในการใชค าสงอน ๆ เพอลากหรอวาดเสนตอไป
ค าสง cs หรอ clearscreen คอค าสงลางหนาจอบรเวณหนาจอหลก ผลของค าสงคอ จะลบทกอยางบนหนาจอหลก แลวรปสามเหลยมหรอเตาจะกลบมาอยต าแหนงเรมตนเสมอ
ตวอยาง ค าสง pu pd cs
Cs
Fd 100 Rt 90
Pu Fd 50
Pd
Fd 50 Rt 90
Fd 100 Rt 90
Fd 50 Rt 90
Fd 100
Pu Home
ภาพท 2.4 ภาพแสดงผลการท างานของค าสง pu pd cs
ค าสง clean คอค าสงลางหนาจอบรเวณหนาจอหลก เชนเดยวกนกบ clearscreen เพยงแตหลงจากใชค าสง clean แลว
รปสามเหลยมหรอเตาจะอยกบท ณ ต าแหนงทมนอยในปจจบน ไมกลบไปเรมตนทจดเรมตนอก
ค าสง cleartext คอค าสงลางขอมลบรเวณหนาตางของ Commander รปแบบค าสงเพยงพมพค าวา cleartext แลว Enter กจะสามารถลางขอมลทหนาตาง Commander ไดแลว
ค าสง home คอค าสงทก าหนดใหสามเหลยมหรอเตากลบมาอยทต าแหนงเรมตนเสมอแตจะไมลบใด ๆ เหมอนกบ
clearscreen โดยการใชค าสง home อาจจะตองใชคกบค าสง penup เพอใหการกลบสต าแหนงเร มตนไมมเสนทท าใหเกดการรบกวนภายในหนาจอหลก ทดลองพมพค าสงเปรยบเทยบค าสงระหวางสองชดค าสงดงตอไปน
ชดค าสงท 1 ชดค าสงท 2
ค าสง pe หรอ penerase คอค าสงส าหรบการลบเสนทเขยนไปแลว โดยการใชค าสง pe แลวตามดวยค าสงอน ๆ ท
ลากเสนเพอทบต าแหนงเสนทตองการลบ เชน
แลวพมพค าสงเพมดงตอไปน
ผลคอท าการลบเสนตามค าสงเดมทงหมด หลงจากนถามค าสงใด ๆ เกยวกบการลากเสน จะไมสามารถมองเหนเสนอก
ถงแมเราจะใชค าสง pd เพอวางปากกากตาม เนองจากค าสงนไมใชค าสง pu
หากตองการใหเหนการลากเสนอกครงตองใชค าสงดงตอไปน
ค าสง ppt หรอ penpaint คอค าสงทตองการใหเหนเสนอกครงหลงจากใชค าสง penerase ไปแลว
ค าสง setpensize คอค าสงในการก าหนดความหนาของลายเสนปากกา มรปแบบค าสงดงน
ค าสง setpensize [ความกวางของเสน ความสงของเสน] แตใน MSWLOGO ความกวางของเสนไมมผลตอขนาดของเสนเลย ดงนนขนาดของเสนปากกาจะอยทการก าหนดขนาดความสงของเสนเปนหลกแต จ าเปนตองใสคาใด ๆไวท
ความกวางของเสนเพอใหเปนไปตามรปแบบของค าสงดวย มฉะนนจะเกดความผดพลาดขน เชน setpensize [1 5]
ตวอยาง ค าสง to bamboo
cs
setpensize [20 20] fd 20 setpensize [18 18] fd 20
setpensize [16 16] fd 20 setpensize [14 14] fd 20
setpensize [12 12] fd 20
setpensize [10 10] fd 20 setpensize [8 8] fd 20
setpensize [6 6] fd 20 setpensize [4 4] fd 20
setpensize [2 2] fd 20 setpensize [1 1] fd 20
End
ภาพท 2.5 ภาพแสดงผลการท างานของโปรแกรม ชอ bamboo
fd 100
rt 90
fd 100 pu
home
fd 100
rt 90
fd 100 home
fd 100 rt 90
fd 100
home
pe fd 100
rt 90
fd 100 home
ค าสง ht หรอ hideturtle คอค าสงซอนสามเหลยมหรอเตานนเอง บางครงในการวาดรปหรอการแสดงผลบนหนาจอ
หลก รปสามเหลยมดงกลาวอาจสรางความร าคาญ เรากสามารถใชค าสง ht เพอซอนไวไมใหเหน
ค าสง st หรอ showturtle คอค าสงแสดงรปสามเหลยมหรอเตานนเอง ค าสง setxy คอค าสงยายสามเหลยมหรอเตาไปยงต าแหนงแกน x และ y ตามทก าหนด มรปแบบค าสงดงน
setxy ต าแหนงแกนx ต าแหนงแกนy โดยใหมองหนาจอหลกถกแบงดวยแกน x และแกน y ดงรป
ภาพท 2.6 ภาพแสดงต าแหนง การใชค าสง setxy
โดยปกตรปสามเหลยมหรอเตาจะเรมตนทแกน x = 0 และแกน y = 0 (0,0) แกน x จะมระยะออกไปทงแกนทางบวกและทางลบขางละ 500 จด นนคอ -500 จนถง +500 ขณะเดยวกนแกน y กจะมระยะจากจดต าสดจนถงจดสงทสด -500
จนถง +500 เชนเดยวกน
ตวอยางค าสงเชน
Example (draw a sine wave):
repeat 360 [setxy repcount 100*sin repcount]
ภาพท 2.7 กอนการใชค าสง setxy
-x x
-y
y
ภาพท 2.8 ใชค าสง setxy จาก ตวอยาง (draw a sine wave):
repeat 360 [setxy repcount 100*sin repcount] ค าสง setx คอค าสงในการเคลอนทเตาไปในแนวแกน x โดยไมสนในแกน y มรปแบบดงน
setx ต าแหนงแกนx ซงคาแกน x จะมระยะจากจดเรมตนไปทางซายสงสด = -500 และสามารถไปทางขวา สงสด = 500 เชน setx -300 คอการเลอนเตาไปตามแกนx = -300 กาว
ค าสง sety คอค าสงในการเคลอนทเตาไปในแนวแกน y โดยไมสนในแกน x มรปแบบดงน sety ต าแหนงแกนy ซงคาแกนy จะมระยะจากจดเรมตนไปทางดานลางตามแนวแกนy สงสด = -500 และสามารถ
ไปทางดานบนตามแนวแกนy สงสด = 500 เชน sety 400 คอการเลอนเตาขนไปดานบนตามแนวแกน y = 400 กาว
กลมค าสงเกยวกบการก าหนดส
ค าสง setpencolor คอค าสงในการก าหนดสของเสนปากกา มรปแบบดงน setpencolor [ แมสแดง แมสเขยว แมสน าเงน] โดยสของเสนปากกาเปนสทเกดจากการผสมสของแมสแดง เขยว
และน าเงน แมสแตละสสามารถก าหนดใหมคาตงแต 0-255 เชน setpencolor [255 255 0] เสนของปากกาจะเปนสทเกดจากกาผสมกนระหวางสแดงกบสเขยวตามน าหนกสทให จากตวอยางจะไดสเหลอง
ตวอยาง ค าสง setpencolor
Home setpencolor [255 255 0]
fd 100
ภาพท 2.9 ใชค าสง setpencolor
setpencolor [255 255 0] fd 100
อยางไรกตามเพอใหเ กดความสะดวกในการก าหนดสของเสนปากกา ใน MSWLOGO มการก าหนดคาสมาใหแลวพอให
ค าสงสนลง โดยเราอาจจะก าหนดคาสตามตางทก าหนดมาใหเลยแทนการใสค าสงแบบผสมส เชน setpencolor 6 กจะมคาสเชนเดยวกบค าสง setpencolor [255 255 0]
ค าสง setfloodcolor คอค าสงในการก าหนดสทจะเทลงในพนททมกรอบ โดยมรปแบบค าสงดงน
setfloodcolor [แมสแดง แมสเขยว แมสน าเงน] การก าหนดสเปนการก าหนดน าหนกในการผสมแมสเชนเดยวกนกบค าสง setpencolor เพยงแตเปนการก าหนดสทจะเทลงในกรอบทตองการ เชน setfloodcolor [255 0 0] คอ
ก าหนดสเปนสแดงเขม เมอตองการเทลงในกรอบพนทใด ๆ ตองใชค าสงดงตอไปนเพอการเทส
ค าสง fill คอค าสงทใชในการเทสลงในกรอบทตองการ กอนท าการเทส เราตองเลอนสามเหลยมหรอเตาไปอยในกรอบ
พนททเราจะเทสเสยกอนแลวจงพมพค าวา fill มฉะนนสอาจถกเทในพนทอนทเราไมตองการได ตวอยางเชน
ภาพท 2.10 การใชค าสง fill
คาส คาทสงไปจรง คาส คาทสงไปจรง
0 [ 0 0 0] 8 [155 96 59]
1 [ 0 0 255] 9 [197 136 18]
2 [ 0 255 0] 10 [100 162 64]
3 [ 0 255 255] 11 [120 187 187]
4 [255 0 0] 12 [255 149 119]
5 [255 0 255] 13 [144 113 208]
6 [255 255 0] 14 [255 163 0]
7 [255 255 255] 15 [183 183 183]
cs ;ลางหนาจอ
fd 100 rt 90 ; สรางรปสเหลยม fd 100 rt 90
fd 100 rt 90 fd 100 rt 125 ;ใหสามเหลยมหนหนาเขาภายในกรอบ
pu ;ยกปากกาเพอไมใหเกดสน fd 5 ;เดนเขาไปในกรอบสเหลยม
setfloodcolor [255 0 0] ;ก าหนดสทจะเทเปนสแดง
fill ;เทส
setxy [200 0]
ค าสง setscreencolor คอค าสงในการก าหนดสพนหลงของหนาจอหลก โดยมรปแบบค าสงดงน
setscreencolor [แมสแดง แมสเขยว แมสน าเงน] เชน setscreencolor [255 255 0] คอการผสมแสงสแดงกบแสงสเขยวทน าหนกส ๆ 255 จะไดพนหลงของหนาจอหลกเปนสเหลอง
ภาพท 2.11 การใชค าสง setscreencolor
ใหทดลองพมพค าสง ขางลางเพอดผล
to bee setfloodcolor [0 0 0]
repeat 45 [fd 1 lt 8] rt 90 repeat 20 [fd 1 rt 6] rt 25 repeat 25 [fd 1 rt 5]
pu fd 2 lt 90 fd 2 ppt repeat 18 [fd 1 rt 20] pu bk 7
ppt repeat 18 [fd 1 rt 20] pu rt 90 fd 1 fill lt 90 fd 9 fill
pu fd 2 rt 90 fd 6 lt 90 ppt repeat 12 [fd 1 rt 9] rt 40 repeat 25 [fd 1 rt 4] lt 110
repeat 20 [fd 1 rt 4] repeat 10 [fd 1 rt 10]
rt 30 repeat 12 [fd 1 rt 1] lt 100 repeat 22 [fd 1 rt 6]
pu rt 80 fd 3 lt 105 ppt repeat 18 [lt 6 bk 1] pu fd 5 ppt
end
to beel setfloodcolor [0 0 0]
repeat 45 [fd 1 rt 8] lt 90 repeat 20 [fd 1 lt 6] lt 25 repeat 25 [fd 1 lt 5]
pu fd 2 rt 90 fd 2 ppt repeat 18 [fd 1 lt 20] pu bk 7
ppt repeat 18 [fd 1 lt 20] pu lt 90 fd 1 fill rt 90 fd 9 fill
pu fd 2 lt 90 fd 6 rt 90 ppt repeat 12 [fd 1 lt 9] lt 40 repeat 25 [fd 1 lt 4] rt 110
repeat 20 [fd 1 lt 4] repeat 10 [fd 1 lt 10]
lt 30 repeat 12 [fd 1 lt 1] rt 100 repeat 22 [fd 1 lt 6]
pu lt 80 fd 3 rt 105 ppt repeat 18 [rt 6 bk 1] pu fd 5 ppt
end
to flower cs repeat 5 [ppt ellipsearc 218 50 50 125 pu fd 60 rt 72]
bk 100 rt 90 ppt ellipsearc 90 155 65 125 lt 90 pu bk 90 rt 90 ppt repeat 2 [fd 105 rt 90 fd 5 rt 90]
lt 90 bk 10 lt 90 bk 10 rt 90 bk 45 rt 90 fd 85 lt 90 fd 45 rt 90 fd 10 lt 90 fd 10
end
to flower1
cs ht setfloodcolor [255 255 255] ppt repeat 5 [repeat 2 [repeat 50 [ fd 2 rt 2] rt 80] rt 10 fd 5 setfloodcolor [255 0 0] fill bk 5
rt 15 fd 15 fill bk 15 rt 47]
rt 150 repeat 40 [fd 5 rt 1] rt 80 fd 40
repeat 2 [lt 90 fd 5 lt 90 fd 80] lt 90 fd 5 lt 90 fd 10
rt 90 fd 40 lt 90 fd 60 lt 90 fd 40
setfloodcolor [0 0 0] pu lt 100 fd 25 fill
rt 100 fd 8 fill fd 45 lt 115 ppt
repeat 2 [repeat 50 [fd 2 rt 2] rt 80] rt 115 pu bk 10 rt 15 ppt
repeat 2 [repeat 50 [fd 2 rt 2] rt 80]
pu rt 10 fd 10 setfloodcolor [0 255 0] fill bk 10 lt 35 fd 10 lt 70 fd 20 fill
pu home fd 100 ppt bee fill pu home rt 90 fd 100 lt 90 fd 40 ppt bee fill
pu home lt 90 fd 100 rt 90 ppt beel fill
ht
end
ภาพท 2.12 ภาพแสดงผลการวาดรปดอกไมดวยภาษาโลโก
การเขยนโปรแกรมโดยใช Editor
จากการทดลองค าสงตาง ๆ ทผานมาเราจะพบวาการพมพค าสงทละบรรทดเรมสรางปญหาใหเราในกรณทมค าสงหลาย ๆ ค าสงรวมกนเพอใหไดผลตามทเราตองการ มความผดพลาดง าย หาจดทตองแกไขยาก และไมสามารถน า
กลบมาใชใหมได ดงนนใน MSWLOGO จงมหนาตางทเราสามารถเขยนค าสงไดอยางงาย สะดวก และเรยกกลบมาใชไดตลอดเวลานนคอการเขยนโปรแกรมแบบเปนขนตอน (Procedure) โดยใช Editor
ดวยการคลกเมาสทเมน File แลวเลอนแถบแสงเลอกเมน Edit แลวคลก ดงรป
ภาพท 2.13 การคลกเมาสทเมน File แลวเลอนแถบแสงเลอกเมน Edit
เมอเขาไปท Edit จะมหนาจอใหพมพชอโปรแกรมทเราตองการสราง
ภาพท 2.14 ไปท Edit จะมหนาจอใหพมพชอโปรแกรมทเราตองการสราง
การตงชอโปรแกรมมขอก าหนดดงนคอ ชอโปรแกรมตองเปนภาษาองกฤษเทานน
ชอจะตองไมมวรรคในชอ
ชอจะตองมตวพยญชนะอยดวยเสมอ ไมสามารถตงชอทมแตตวเลขเพยงอยางเดยว ชอจะตองไมตรงกบฟงกชน หรอค าสงหลกของโลโก
เมอตงชอไดแลว กท าการคลกท OK จะมหนาตางของโปรแกรม Editor ขนมาใหเขยนโปรแกรมทตองการลงไป
ภาพท 2.15 แสดงหนาตาง Editor
จากรปขางบนน แสดงหนาตาง Editor ทมชอโปรแกรมทตงไว โดยช อโปรแกรมจะอยหลง to และปดทาย
โปรแกรมดวย end เสมอ การเขยนค าสงตาง ๆ จะตองเขยนใสไวระหวาง to และ end ดงตอไปน
ภาพท 2.16 แสดงการเขยนค าสงลงในโปรแกรม Editor
เมอเขยนโปรแกรมเสรจแลวตองท าการเกบไวใน Memory แบบชวคราวแลวออกจากหนาจอ Editor ดวยการเลอกเมน Save and Exit ดงรปตอไปน
ภาพท 2.17 แสดงการ save ค าสงลงในโปรแกรม Editor
เมอท าการ Save and Exit แลว จะกลบออกมาสหนาจอหลกจากนนใหพมพชอโปรแกรมทเราเขยนไวทชองปอนค าสง ดงรป
ภาพท 2.18 แสดงพมพชอโปรแกรมทเราเขยนไวทชองปอนค าสง
จากนนท าการ Run โปรแกรมทเราเขยนไวดวยการกด Enter หรอใชเมาสคลกทปม Execute โปรแกรมกจะท างานตามขนตอนทเราเขยนไวตงแตตนจนจบ โปรแกรมตวอยางนเปนโปรแกรมวาดรปสเหลยมจตรสใหผลดงรป
ภาพท 2.19 แสดงโปรแกรมทเราเขยนไว
การบนทกดวยเมน Save and Exit เปนการบนทกเพอใชงานชวคราวเทานนเมอปดโปรแกรม MSWLOGO ลง
แลวเปดใหม เราจะพบวาโปรแกรมทเราสรางไวใน Editor หายไปทงหมด หากตองการเกบไวอยางถาวรจะตองท าการ
บนทกทตวโปรแกรมหลกอกครงดงภาพขางลาง
ภาพท 2.20 การใชค าสง SaveAs
เมอเลอกคลกท Save As จะไดหนาตางเพอใหเลอกต าแหนงปลายทางทจะบนทกในชอง Save in และตงชอแฟมในช อง File name แลวคลกทปม Save เพอยนยนการบนทก
ภาพท 2.21 การใชค าสง SaveAs
ขอสงเกต ผเขยนตงชอไฟลเปน bamboo ขณะท ชอโปรแกรมทเราสรางไวท Editor ชอ bamboo1 นนหมายถงชอไฟลท
เราเกบไมจ า เปนตองมชอเหมอนกบชอโปรแกรมทเราเขยนไว ขณะเดยวกนไฟลหนงไฟลอาจจะมหลายโปรแกรมอย
ภายใน เชน ผเขยนอาจจะสรางโปรแกรมเพมเตมชอ bamboo2 , bamboo3 และอน ๆ เพอใ หท างานรวมกบโปรแกรม bamboo1 แลวเกบไวในไฟลเดมชอ bamboo ได คราวนโปรแกรมของเราจะถกเกบไวอยางถาวร ถงแมจะมการปดการใช
งาน MSWLOGO ไปแลว เมอตองการเรยกโปรแกรมมาใชงานกเพยงแตเขาโปรแกรม MSWLOGO อกครงหนง แลวเลอกเมน Load ดงรป
ภาพท 2.22 การใชค าสง Load
เมอคลกทเมน Load จะเปนการดงไฟลทเกบไวมาใช โดยแสดงไฟลทมนามสกล .lgo ดงรปขางลางน จากนนเลอก
ไฟลทตองการ ในทนคอ ไฟลชอ bamboo คลกเมาสทปม Open กจะไดไฟลดงกลาวไปใชงานตอไป
ภาพท 2.23 การใชค าสง Load
ใหผเรยนคยตวอยางโปรแกรม ขางลาง
ตวอยางท 1 : โปรแกรมสรางรป 5 เหลยม (ควรสรางไวทหนาตางของ Editor)
to 5Angle fd 100 rt 72
fd 100 rt 72 fd 100 rt 72
fd 100 rt 72
fd 100 end
ตวอยางท 2 : โปรแกรมสรางรป 5 เหลยมหลายรปตอกน
to 5Angles
fd 100 rt 72 fd 100 rt 72 fd 100 rt 72 fd 100 rt 72 fd 100 fd 100 rt 72 fd 100 rt 72 fd 100 rt 72 fd 100 rt 72 fd 100
fd 100 rt 72 fd 100 rt 72 fd 100 rt 72 fd 100 rt 72 fd 100
fd 100 rt 72 fd 100 rt 72 fd 100 rt 72 fd 100 rt 72 fd 100 fd 100 rt 72 fd 100 rt 72 fd 100 rt 72 fd 100 rt 72 fd 100
end
ผลทได
ผลทได
ตวอยางท 3 : โปรแกรมสรางรปวงรซอนกนหลายรป
to wow
ellipse 30 200 rt 15 ellipse 30 200 rt 15
ellipse 30 200 rt 15
ellipse 30 200 rt 15 ellipse 30 200 rt 15
ellipse 30 200 rt 15 ellipse 30 200 rt 15
ellipse 30 200 rt 15 ellipse 30 200 rt 15
ellipse 30 200 rt 15
ellipse 30 200 rt 15 ellipse 30 200 rt 15
ellipse 30 200 rt 15 ellipse 30 200 rt 15
ellipse 30 200 rt 15
ellipse 30 200 rt 15 ellipse 30 200 rt 15
ellipse 30 200 rt 15 ellipse 30 200 rt 15
ellipse 30 200 rt 15 ellipse 30 200 rt 15
ellipse 30 200 rt 15
ellipse 30 200 rt 15 ellipse 30 200 rt 15
end
กลมค าสงเกยวกบการท างานโดยทวไป ในภาษาโลโก ยงมค าสงอนๆ อกมากมายทจะชวยใหเขยนโปรแกรมเปนไปอยางมประสทธภาพ และใชงาน
โปรแกรมไดอยางหลากหลาย ดงตอไปน
repeat เปนค าสงทตองการท าสงใดๆ ซ าตามจ านวนรอบทก าหนดไว โดยมรปแบบค าสงด งน
repeat จ านวนรอบ [ สงทตองการท าซ า ] เชน repeat 4 [ fd 100 rt 90 ] ผลกคอจะไดรปสเหลยม โดยค าสง repeat สามารถชวยลดจ านวนบรรทดของการเขยนโปรแกรมได ชวยใหโปรแกรมมความสนกระชบ
ผลทได
fd 100 rt 90 fd 100 rt 90
fd 100 rt 90
fd 100 rt 90
repeat 4 [ fd 100 rt 90 ] ลดรป
จากตวอยางท 3 เราสามารถลดรปของโปรแกรมใหสนลงดวยค าสง repeat ซงจะไดผลออกมาเชนเดยวกนดงน
to wow
repeat 24 [ ellipse 30 200 rt 15] end
wait คอค าสงเพอหนวงเวลาใหโปรแกรมแสดงผลตามระยะเวลาทเราก าหนด มรปแบบค าสงดงน wait ระยะเวลาในการหนวง โดยระยะเวลาในการหนวงถกก าหนดมาวา 60 = 1 วนาท เชน wait 120 ผลของ
โปรแกรมจะเกดการหนวงเวลา 2 วนาท
จากตวอยางท 1 เมอเราท าการ Run โปรแกรม เราจะไดรป 5 เหลยมทนท โดยไมทนเหนการวงลากเสนของรป
สามเหลยมหรอเตาเนองจากคอมพว เตอรท างานดวยความเรวสง ดงนนหากตองการเหนการลากเสนของเตา เราตองใชค าสง wait เขามาชวย ดงน
ตวอยางทใช wait รวมกบ repeat
ตวอยางทใช wait
เราจะเหนเตาวงทละ 100 กาวแลวหมน 72 องศา อยางชดเจน
make คอการก าหนดคาใหตวแปร เพอประโยชนในการกระท าทางคณตศาสตร การอางองคา และการเปรยบเทยบ
โดยมรปแบบดงน make “ตวแปร คาตวแปร เชน make “x 25 คอการก าหนดใหตวแปรชอ x มคาเทากบ 25
คาของตวแปรมอย 3 ชนด โดยมรปแบบการก าหนดท
แตกตางกนออกไปดงน
1. ตวแปรแบบตวเลขจ านวนเตม (Integer) การก าหนดคาหลงตวแปรเพยงใสคาของเลขจ านวนเตมลงไปโดยไมม
สญลกษณใด ๆ ตดอยดวย เชน make “bamboo 100 นนคอตวแปรชอ bamboo มคาเทากบ 100
2. ตวแปรแบบค าพด (word) คอตวแปรทมลกษณะ
เปนตวเลขหรอพยญชนะรวมกนเปนค า ๆ โดยไมมวรรค แบงระหวางพยญชนะ การก าหนดคาหลงตวแปรตองม
เครองหมายฟนหน ( “ ) ตดอยกบคาของมนเชนกน เชน make “project “groups นนคอตวแปรชอ
project มค าวา groups อยภายใน 3. ตวแปรแบบประโยคค าพด (list) คอตวแปรทน าประโยคค าพดมาเรยงตอกนโดยมวรรคแบงระหวาง word การ
ก าหนดคาหลงตวแปร จะตองมเครองหมายกามป [ ] ครอมคาตวแปรทงหมด เชน make “y [Hi how are you ?]
ผลทไดคอตวแปรชอ y มประโยคค าวา Hi how are you ? อยภายใน สงเกตวาประโยคดงกลาวจะม word อย 5 ชด ดวยกนโดยมวรรคคน
ผลทได
to 5Angless
fd 100 wait 40 rt 72 wait 40 fd 100 wait 40 rt 72 wait 40
fd 100 wait 40 rt 72 wait 40 fd 100 wait 40 rt 72 wait 40
fd 100 end
to 5Anglesss
repeat 4 [fd 100 wait 40 rt 72 wait 40] fd 100
end
จงจ าไวเสมอวาการ make ตวแปรชอตว
แปร จะตองม
เครองหมา ยฟนหน ( “ ) ตดอยกบตว
แปรเสมอ
show เปนค าสงเพอแสดงผลออกทางหนาตางของ Commander บรเวณ Re-Call Box โดยสวนมากจะแสดงผลคาของ
ตวแปร ผลทางคณตศาสตร ผลทางตรรกศาสตร โดยมรปแบบค าสงดงน show คาทตองการแสดงออก โดยคาทจะแสดงออกทางหนาตาง Commander นมลกษณะเชนเดยวกบการก าหนด
ตวแปร คอคาทเปน ค าพด (word) คาทเปน ประโยคค าพด (list) และคาในตวแปร เชน show “Thailand ผลทหนาตาง Commander จะแสดงค าวา Thailand
show [Good Morning Thailand] ผลทหนาตาง Commander จะแสดงค าวา [Good Morning Thailand]
make “x “bamboo show :x ผลทหนาตาง Commander จะแสดงค าวา bamboo
print เปนค าสงทใหผลเชนเดยวกบ show แตการแสดงผลคาแบบ ประโยคค าพดจะน าเอาเฉพาะคาภายในวงเลบกามปออกมาแสดงเทานน ตางจาก show ทแสดงเครองหมายวงเลบ
กามปตดมาดวย เชน
print [Are you OK ?] ผลทแสดงออกมาคอ Are you OK ?
show [Are you OK ?] ผลทแสดงออกมาคอ [Are you OK ?]
Label เปนค าสงเพอแสดงผลออกทางหนาจอหลก จะมลกษณะค าสงคลายกบ show และ print เพยงแตแสดงผลบรเวณ
หนาจอหลก (กราฟฟกส) ทศทางของการแสดงผลจะขนอยกบทศทางของเตา เชน
rt 90
label [Hello… Are you happy?]
จะไดผลดงรปตอไปน
ภาพท 2.24 การใชค าสง Label
การกระท าใดๆกบตวแปร จะตองมเครองหมายโคลอน ( : ) ตดกบตวแปรเสมอ ยกเวนการ make ตวแปรเทานนทใชฟนหน ( “ )
เราสามารถก าหนดขนาดของตวอกษรทจะแสดงรวมสของตวอกษรได โดยการก าหนดทเมนดงรปตอไปน
เลอกเมน Set แลวเลอนแถบแสงไปท
Label Font… แลวคลก จะปรากฏเมนใหมใหก าหนดชนดของตวอกษร และ
ขนาดของตวอกษร
เมอปรากฏเมนใหมดงรป เรากจะสามารถเลอกชนด และขนาดของตวอกษร แลว
คลกทปม OK
สวนสของตวอกษรสามารถก าหนดทสของปากกา ดงรป
เมอเลอกสของปากกากคอการเลอกสของตวอกษรทจะ label นนเอง แลวคลก
random คอค าสงสมคาจากขอบเขตทก าหนด มรปแบบค าสงดงน
random ขอบเขตของคาทตองการสม โดยค าสง random จะตองใชรวมกบค าสงอนเพอแสดงผล เชน
show random 10 คอการสมคาออกมาแสดงจากตวเลขจ านวนเตมจาก 0 – 10
repeat 20 [show random 100 ] คอการสมแสดงคาตวเลขภายในขอบเขต 0 – 100 จ านวน 20 คา
กลมค าสงเกยวกบการสรางเสยง
soundon คอค าสงในการแสดงเสยงออกทางล าโพงของคอมพวเตอร มรปแบบดงน soundon ความถเสยง โดยความถเสยงมหนวยเปนเฮรซ (Hz) มคาตงแต 20 Hz – 2000 Hz แตล าโพงของ
คอมพวเตอร สามารถตอบสนองความถไดดเพยงตงแต 200 Hz – 4000 Hz เทานน หากใชคาต าหรอมากกวาน จะไดยนเสยงเบามากจนถงไมไดยนเลย เชน soundon 1500 จะใหผลเปนเสยงออกทางล าโพงของคอมพวเตอรทความถ 1500
Hz
soundoff คอค าสงในการหยดเสยงหลงจากสง soundon ออกไปแลว รปแบบค าสงเพยงพมพค าวา soundoff แลว Enter เสยงกจะหยดดงทนท
sound คอค าสงในการแสดงเสยงทคลายกบ soundon เพยงแตมการก าหนดความยาวนานลงไปดวยเพอใหหยดแสดงเสยงหลงจากถงเวลาทก าหนดโดยไมตองใชค าสง soundoff หลงจากน โดยมรปแบบดงน
sound [ความถเสยง ความยาวนาน] โดยความถเสยงมหนวยเปนเฮรซ (Hz) มคาตงแต 20 Hz – 2000 Hz แตล าโพงของคอมพวเตอร สามารถตอบสนองความถไดดเพยงตงแต 200 Hz – 4000 Hz เทานน หากใชคาต าหรอมากกวา
น จะไดยนเสยงเบามากจนถงไมไดยนเลย สวนคาความยาวนานมไมแนนอนขนอยกบความเรวของคอมพวเตอรเครอง
นน ๆ ตวอยางเชน sound [2000 1000] ไดมการก าหนดความถมาตรฐานเพอสรางเสยงตามโนตดนตรไวแลวดงตารางตอไปน
ตวโนต ความถ ตวโนต ความถ ตวโนต ความถ
C (โด) 262 C (โด) 523 C (โด) 1047
C# 277 C# 554 C# 1109
D (เร) 294 D (เร) 587 D (เร) 1175
D# 311 D# 622 D# 1245
E (ม) 330 E (ม) 659 E (ม) 1319
F (ฟา) 349 F (ฟา) 698 F (ฟา) 1397
F# 370 F# 740 F# 1480
G (ซอล) 392 G (ซอล) 748 G (ซอล) 1568
G# 415 G# 831 G# 1661
A (ลา) 440 A (ลา) 880 A (ลา) 1760
A# 466 A# 932 A# 1865
B (ท) 494 B (ท) 988 B (ท) 1975
ดงนนหากผเรยนมความรทางดานดนตร กจะสามารถสรางเพลงดวยค าสง sound นไดอยางไมยากเยน playwave คอค าสงเกยวกบเสยงอกชนดหนง แตเปนการแสดงเสยงออกทางการดเสยงของคอมพวเตอร (Sound Card)
ดงนนเครองคอมพวเตอรทม sound card และมล าโพงทต อกบ sound card เทานนทแสดงผลของค าสงนได โดยม
รปแบบค าสงดงน playwave “ต าแหนงทมไฟลเสยงทมนามสกล .wavอย flag เชน playwave “c:\\windows\\bird.wav 1
ไฟลเสยงชนดนเราสามารถหาไดหรอสรางขนมาไดงาย ๆ เชนจากการใช Voice Recorder ทมใน Windows ทก ๆ เวอรชน
flag เปนคาตวเลขทตองใสเพอควบคมลกษณะการเลนของเสยง โดยมคาดงน
0 : การเลนไฟลเสยงจะไมหยด และคอมพวเตอรจะไมตอบสนอง คยบอรด และ เมาส หรอค าสงอนใด
เลย จนกวา จะเลนไฟลเสยงเสรจสน 1 : คอมพวเตอรสามารถตอบสนอง คยบอรด เมาส และค าสงอน ๆ ไดขณะทเลนไฟลเสยงน
2 : ไมมใช
4 : ไมมใช 8 : เปนการเลนเสยงซ าอยางตอเนอง โดยจะตองมการใชงานรวมกบ flag 1 โดยการใสเครองหมาย +
รวม เขาไป เชน playwave “c:\\windows\\bird.wav 8+1 ท าใหการเลนไฟล bird.wav จะเลนวนซ าแลวซ าเลา จนกวาจะเลนไฟลเสยงใหมเขามา โดยขณะทเลนไฟลเสยงอยน เรา กยงคงสามารถ
ใชคยบอรด เมาส และค าสงอนใดตอไปได เพราะม flag 1 ก ากบอย 16 : จะคลายกบการใช flag 0 คอเลนไฟลเสยงจนเสรจ สนจงจะรบค าสงใหมได แตหากเราก าหนด flag
1 รวมลงไปในค าสง จะท าให คอมพวเตอรสามารถตอบสนองคยบอรด เมาส และค าสงอน ๆได เชน
“c:\\windows\\bird.wav 1 6+1 ขอแตกตางระหวาง flag 1 กบ flag 16+1 คอ ขณะทเราก ากบดวย flag 1 ถาเราเลนไฟล เสยงตวใหมเขาไประหวางทเลนไฟลเกาอยนน โปรแกรมจะหยดไฟลเกา
ทนทแลวเลนไฟลใหมแทน หากเราก ากบการเลนดวย flag 16+1 โปรแกรมจะเลนไฟลเสยงเกาจนเสรจสนกอนเทานนจงจะเลนไฟลเสยงตวใหมได
กลมค าสงเกยวกบการรบคาจากคยบอรด
readchar คอค าสงในการรบคาจากคยบอรด เปนตวอกษรเพยงตวเดยว การใชงาน readchar ไมสามารถใชงานเพยงค าสงเดยวโดด ๆ ได จ าเปนตองมการใชงานรวมกบค าสงอน ๆ เชน
show readchar หรอ make “x readchar เปนตน
ตวอยางการใชค าสง show readchar
หลงจากกด Enter จะเกดหนาตางเลกๆ เพอใหเราปอน
ตวอกษรจากคยบอรดลงไปเพยง 1 ตวอกษร แลวคลก ปม OK โปรแกรมจะแสดงคาทปอนลงในคยบอรดทหนาตางของ
Commander ดงรป ในทนผเขยนปอนอกษร A ลงไปจงแสดงออกมาเปน A
ขอสงเกต หากเราใชค าสง show readchar ซ าเปนครงท 2 เมอกด Enter จะไมเหนหนาตางเลกๆ เกดขนมาเพอใหเรา
ปอนคาอก เนองจากค าสงนจะคาสะทอน (Echo) อยหนงตวอกษร เราจ าเปนตองเรยกค าสง show readchar เปนครงท 3 จงจะเหนหนาตางเพ อปอนขอตวอกษรอกครง ในการเขยนโปรแกรมใชงานบางโปรแกรม หากไมระมดระวงสงเหลาน
จะท าใหโปรแกรมท างานไดไมดพอ
readword คอค าสงในการรบคาจากคยบอรดคลายกบ readchar แตจะเปนการรบคาเปนค าพด (word) เขามา คอสามารถปอนไดมากกวา 1 ตวอกษร การใชงานค าสงนเชนเดยวกบ readchar คอตองใชรวมกบค าสงอน ๆ เชน
print readword show readword
make “x readword
ทก ๆ ค าสงขางบนนจะท าใหเกดหนาตางเลก ๆ ส าหรบการปอนคาทางคยบอรดทงสน ขอสงเกต ค าสง readword ไมมคาสะทอน (Echo) ดงนนหากเราใชค าสง readword ซ าเปนครงท 2 กจะยงคงม
หนาตางเลก ๆ ใหเราปอนคาคยบอรดใหมลงไป readlist คอค าสงในการรบคาจากคยบอรดคลายกบ readchar และ readword แตจะเปนการรบคาแบบประโยคค าพด
การใชค าสงตองใชงานรวมกบค าสงอน ๆ เชนกน และ readlist กไมมผลของคาสะทอน (Echo)
กลมค าสงเกยวกบการท างานตามเงอนไข if คอค าสงทท างานแบบมเงอนไข มรปแบบค าสงดงน
if เงอนไข [สงทตองท าเมอเงอนไขเปนจรง] มความหมายวาเมอโปรแกรมท างานจนถงค าสงน จะท าการตรวจสอบเงอนไขทก าหนดวาเปนจรงหรอไม ถาเปนจรงตามเงอนไข โปรแกรมจะเรมเขาไปท าตามค าสงในวงเลบกามปจนเสรจ
แตหากเงอนไขเปนเทจ โปรแกรมจะไมสนใจและไมท าสงทอยภายในวงเลบกามปเลย เชน if 1=1 [print [Yes it is true]] คอ มเงนไขวาถา 1 มคาเทากบ 1 ใหแสดงประโยควา Yes it is true ท
หนาตาง Commander ในทนจะมการแสดงประโยค Yes it is true เสมอ เพราะ 1 มคาเทากบ 1 เสมอ
if readword = “yes [print [Hello.. I am Thai]] คอ มเงอนไขวาถาคาทรบจากคยบอรดมคาเทากบ yes ใหแสดง
ประโยควา Hello.. I am Thai เมอท าการ Run โปรแกรม จะ
ปรากฏหนาตางเลก ๆ ใหปอนคาลงไป หลงจากกดปม OK แลว โปรแกรมจะน าคาจากคยบอรดมาเปรยบเทยบกบคา
ทก าหนดไวคอ yes ถาตรงกน กจะท างานตามค าสงในวงเลบกามปตอไป ดงรป
ขอสงเกต ในการก าหนดเงอนไข readword = “yes ค าพดวา yes ตองใสเครองหมายฟนหนตดไปดวย เพราะคาทรบ
จากคยบอรดเปนคาแบบ word ดงนนเราตองก าหนดให yes เปนคาแบบ word โดยการใสเครองหมายฟนหนใหนนเอง หากชนดของคาทน ามาเปรยบเทยบไมเหมอนกน ผลทไดจะไมมทางเปนจรงไดเลย
ifelse คอค าสงทท างานแบบมเงอนไข มรปแบบค าสงดงน
ifelse เงอนไข [สงทตองท าเมอเงอนไขเปนจรง ][สงทตองท าเมอเงอนไขเปนเทจ ] มความหมายคลายกบค าสง
if เพยงแต มทางเลอกทโป รแกรมตองท าตามอย 2 ทางคอ ในวงเลบกามปแรกจะท ากตอเมอเงอนไขเปนจรง และในวงเลบกามปท 2 จะท ากตอเมอเงอนไขเปนเทจเทานน ซงเปนการบงคบโปรแกรมใหท าอยางใดอยางหนง เชน
ifelse readword = “Man [print “Pass] [print “Fail] คอ มเงอนไขใหรบคาจากคยบอรดเพอเปรยบเทยบกบค าวา Man หากมการปอนคาตรงกบค าวา Man โปรแกรมจะแสดงค าวา Pass ทหนาตาง Commander หากพมพ
นอกเหนอไปจากค าวา Man จะแสดงค าวา Fail แทนท
for คอค าสงทท างานวนรอบแบบมเงอนไข มรปแบบค าสงดงน for [var start end inc] [สงทตองท าเมอเงอนไขเปนจรง ] โดยเงอนไขเพอควบคมการวนรอบของค าสง for จะ
อยในวงเลบกามปชดแรก มรปแบบทถกก าหนดมาดงน
var = ชอตวแปร (ไมตองมสญลกษณใดๆ ตดกบตวแปรในวงเลบกามปชดน)
start = คาเรมตนของตวแปร end = คาสดทายของตวแปร
inc = คาของตวแปรทเพมขนแตละรอบ เชน for [i 2 7 1.5] [print :i] คอการท างานแบบวนรอบโดยเรมจากตวแปร i มคาเทากบ 2 ในรอบแรก
และมการแสดงคา i ออกมาเทากบ 2 ตามค าสงในวงเลบกามปท 2 จากนนคา I จะเพมขนทละ 1.5 ไปเรอยๆ จนกระทง i มคามากกวา 7 กจะมเงอนไขเปนเทจ และไมท าค าสงในวงเลบกามปท 2 อก แลวหลดออกจากชดค าสงนไปท าค าสงอน
ๆ ตอไป ดงนน ผลของค าสงชดนจะแสดงผลออกมาเปน
2
3.5 5
6.5
while คอค าสงทท างานวนรอบแบบมเงอนไข มรปแบบค าสงดงน
while [เงอนไข][สงทตองท าเมอเงอนไขเปนจรง ] จะมรปแบบคลายกบค าสง for แตเงอนไขของ while ไมมรปแบบตายตว
ตวอยาง for ตวอยางเชน
make “x 0 ; ประกาศตวแปร x = 0
while [:x < 3 ] [ make “x :x+1 print :x] ; เงอนไขถา คาตวแปร x < 3 ใหเพมคา x ขนไปอก 1 แลวแสดงคา x ออกมาทหนาตาง Commander
จากนนโปรแกรมจะวนรอบกลบไปตรวจสอบเงอนไขอกวา x < 3 หรอเปลา ถายงนอยกวา 3 กยงคงเพมคา
x และแสดงคาออกทางหนาตาง Commander ไป
เรอย ๆ จนกระทง x มคาไมนอยกวา 3 จงจะหยดการท างาน
do.while คอค าสงทท างานวนรอบแบบมเงอนไข มรปแบบค าสงดงน
do.while [สงทตองท าเมอเงอนไขเปนจรง ][เงอนไข] จะท างานคลายกบค าสง while เพยงแตตางกนตรงท
do.while จะเรม ท างานในวงเล บกามปแรกกอน แลวจงจะตรวจสอบเงอนไขทหลง ดงนนการพจารณาใชงานวาจะใช while หรอ do.while จะขนอยกบเงอนไขทตองการผลออกมานนเอง ตวอยางเชน
make “x 0
do.while [make “x :x+1 print :x] [:x < 3]
ผลทไดคอ
1 2
3
ผลทไดคอ
1 2
3
do.until คอค าสงทท างานวนรอบแบบมเงอนไข มรปแบบค าสงดงน
do.until [สงทตองท าเมอเงอนไขเปนเทจ ][เงอนไข] จะคลายกบค าสง do.while เพยงแตในการท างานจะท าในวงเลบกามปแรกกตอเมอมเงอนไขเปนเทจเทานน ตวอยางเชน
make “xyz 10 ; ประกาศตวแปร xyz = 10
do.until [ print :xyz ; แสดงผลคา xyz
make “xyz :xyz-2 ; ลดคา xyz ลงครงละ 2 ][:xyz<0] ; ตรวจสอบวา xyz < 0 หรอไม ถาไมใชกจะวนรอบไป
ท าใหม ; สงเกตวา รปแบบการพมพในวงเลบค าสงแรก ค าสง
ตาง ๆ ไมจ าเปนตองอยภ ายในบรรทดเดยวกนกได แตเมอมการปดวงเลบกามปแรกแลวนนตองมวงเลบ
เงอนไขตอกนภายในบรรทดเดยวกนเลย มเชนนน
โปรแกรมจะฟองมความผดพลาดเกดขน
กลมค าสงเกยวกบเวลา
time คอค าสงหรอฟงกชนตวหนงทดงคาออกมาจากฐานเวลาของเคร องคอมพวเตอรเครองนน ๆ ค าสง time ไมสามารถท างานเพยงล าพงได ตองใชงานรวมกบค าสงแสดงผล หรอค าสงเกบคาอน ๆ เชน show time , print time
หรอ make “t time เปนตน
ตวอยางเชน เมอเราใชค าสง show time แลว Enter จะปรากฏผลทหนาตาง Commander ดงรป
Item 1 item 2 item 3 item 4 item 5
จะปรากฏ แสดงวน เดอน วนท เวลาขณะนน ป ค .ศ. ตามล าดบ time มคาแบบประโยคค าพด (list) มทงหมดดวยกน 5 word เราเรยกเสยใหมวาม 5 item แตละ item จะถกคนดวยวร รค ดงนน หากเราตองการแสดงคา
item ใด item หนงเทานน เราสามารถระบ item ในการแสดงผลได เชน
show item 4 time คอ ตองการแสดงผล item 4 ของ time กจะไดเฉพาะคาเวลาออกมา 14:56:11
ฟงกชน time จะมบทบาทมากเมอเราเรมมการเขยนโปรแกรมทใชฐ านเวลาเขามาเกยวของ ซงจะกลาวถงงานประยกตใน บทตอ ๆ ไป
timemilli คอค าสงหรอฟงกชนในการตรวจสอบคาบเวลาจากจดเรมตนจนสนสดโปรแกรม มความละเอยดสงอยในหลก มลลวนาท (1/1000 วนาท) เราสามารถน ามาใชในการตรวจสอบระยะเวลาในการประมวลผลของโป รแกรมทเราเขยนไป
วาใชระยะเวลาในการท างานเทาไร ตวอยางเชน
make "start timemilli ; ก าหนดคาเรมตนใหตวแปรเปนเวลา ณ.ตอนเรมตน
repeat 36 [ellipse 100 200 rt 5] ; ท ารปวงรซอนกน 36 รป show timemilli - :start ; แสดงระยะเวลาในการท างาน โดยน าคาเวลาปจจบน –
คาเวลาทเรมตน หนวยเปน มลลวนาท ผลคอ 8189 แตบางครงจะไดไมเทากนเนองจากคอมพวเตอร
ท างานดวยความเรวสง และการประมวลผลค าสง Logo
จะท างานไดชากวาโปรแกรมอนๆ ท าใหเวลาทเราจบในหลก มลวนาทจะมความผดพลาดบาง
ผลทไดคอ
10 8
6 4
2
0
ใหผเรยนทดลองคยตามตวอยางขางลาง
ตวอยาง โปรแกรมแสดงเวลาบนหนาจอหลก
to timeshow ; ชอโปรแกรม timeshow
cs pu ht ; ลางหนาจอ ยกปากกา ซอนเตา
make "x 0 ; ก าหนดใหตวแปร x = 0 do.until [
make "y item 4 time ; ก าหนดใหตวแปร y = คาเวลาในคอมพวเตอรขณะนน cs setxy -100 0 ; ลางหนาจอ เคลอนทเตาไปยงต าแหนงทจะเรมตนเขยน
rt 90 ; หนหนเตาเพอ label อกษรในแนวนอน label :y ; label คาของเวลาออกทางหนาจอหลก
][:x=1] ; ถาตวแปร x = 1 ใหออกจากการวนรอบ
end ; จบการท างาน
ภาพท 2.25 การใชค าสง แสดงเวลาบนหนาจอหลก
ตวอยาง โปรแกรมแสดงเวลาบนหนาจอหลกพรอมทงการตงเวลา
to timeshow2 ; ชอโปรแกรม timeshow2
cs pu ht ; ลางหนาจอ ยกปากกา ซอนเตา make "x 0 ; ก าหนดใหตวแปร x = 0
do.until [ make "y item 4 time ; ก าหนดใหตวแปร y = คาเวลาในคอมพวเตอรขณะนน
cs setxy -100 0 ; ลางหนาจอ เคลอนทเตาไปยงต าแหนงทจะเรมตนเขยน
rt 90 ; หนหนเตาเพอ label อกษรในแนวนอน label :y ; label คาของเวลาออกทางหนาจอหลก
if :y = “10:30:00 [ clean ; ถาคาเวลา = 10:30:00 ใหลางหนาจอ label [Bye Bye] ; แสดงค าวา Bye Bye
make “x 1 ; ก าหนดคาตวแปร x = 1 เพอใหเงอนไขการวนรอบเปนจรง ; หลงจากเวลาตรงกบคาเวลาทตงไว
]
][:x=1] ; ถาตวแปร x = 1 ใหออกจากการวนรอบ end ; จบการท างาน
ภาพท 2.26 การใชค าสง แสดงเวลาบนหนาจอหลก โปรแกรม timeshow2 แสดงค าวา Bye Bye
ตวอยาง โปรแกรมสรางรปดอกไมเรขาคณต
to flower ; โปรแกรมชอ flower
cs ht ; ลางหนาจอ ซอนเตาเพอไมใหรกสายตา pu ; ยกปากกาเพอไมใหเกดเสนขณะยายเตา
setxy -200 200 ; ยายเตาไปท x = -200 , y = 200
setpencolor [255 0 0] pd ; ก าหนดสปากกาเปนสแดง แลววางปากกา repeat 36 [ ellipse 30 100 rt 10] ; สรางรปดอกไมวงร
pu
setxy -200 -200 setpencolor [0 255 0] pd
repeat 36 [ repeat 4 [fd 100 rt 90] rt 10] ; สรางดอกไมกลบสเหลยม
pu setxy 200 200
setpencolor [0 0 255] pd make "x 10
repeat 36 [ circle :x make "x :x+2] ; สรางดอกไมรปวงกลม
pu setxy 200 -200
setpencolor [255 0 255] pd make "y 10
repeat 200 [fd :y rt 90 make "y :y+1] ; สรางดอกไมรปสเหลยมเขาวงกต pu
setxy 0 0
setpencolor [0 255 255] pd repeat 36 [ ellipse 30 100 rt 10]
setpencolor [255 255 0] make "x 10
repeat 36 [ circle :x make "x :x+2] ; สรางดอกไมวงร ซอนดอกไมวงกลม
end
ภาพท 2.27 โปรแกรมสรางรปดอกไมเรขาคณต
ตวอยาง โปรแกรมสรางรปดอกไมเรขาคณต แบบแสดงการหนวงเวลา
to flower3 ; โปรแกรมชอ flower3
cs ht ; ลางหนาจอ ซอนเตาเพอไมใหรกสายตา pu ; ยกปากกาเพอไมใหเกดเสนขณะยายเตา
setxy -200 200 ; ยายเตาไปท x = -200 , y = 200
setpencolor [255 0 0] pd ; ก าหนดสปากกาเปนสแดง แลววางปากกา repeat 36 [ ellipse 30 100 rt 10 wait 2] ; สรางรปดอกไมวงร โดยม wait
pu setxy -200 -200
setpencolor [0 255 0] pd repeat 36 [ repeat 4 [fd 100 rt 90] rt 10 wait 2] ; สรางดอกไมกลบสเหลยม
pu
setxy 200 200 setpencolor [0 0 255] pd
make "x 10 repeat 36 [ circle :x make "x :x+2 wait 2] ; สรางดอกไมรปวงกลม
pu setxy 200 -200
setpencolor [255 0 255] pd make "y 10
repeat 200 [fd :y rt 90 make "y :y+1 wait 1] ; สรางดอกไมรปสเหลยมเขาวงกต pu
setxy 0 0
setpencolor [0 255 255] pd repeat 36 [ ellipse 30 100 rt 10 wait 2]
setpencolor [255 255 0] make "x 10
repeat 36 [ circle :x make "x :x+2 wait 2] ; สรางดอกไมวงร ซอนดอกไมวงกลม
end
ภาพท 2.28 โปรแกรมสรางรปดอกไมเรขาคณต แบบแสดงการหนวงเวลา
ตวอยาง โปรแกรมสรางรปวงรหมน พรอมเปลยนสแบบ Random
to science ; ชอโปรแกรม science
cs ; ลางหนาจอ setpensize [2 2] ; ก าหนดขนาดเสนปากกา
make "x 0 ; ก าหนด x = 0
do.until [ repeat 36 [ ; ท าซ าสรางวงร 36 รป
make "a random 255 ; สมน าหนกสแดงกบไวใน a make "b random 255 ; สมน าหนกสเขยวเกบไวใน b
make "c random 255 ; สมน าหนกสน าเงนเกบไวใน c setpencolor (list :a :b :c) ; ก าหนดสปากกาแบบสมตามน าหนกส
ellipse 40 150 rt 10 wait 5 ; สรางรปวงร แลวหมนไปเรอยๆ ดวยมม 10 องศา
] ][:x=1]
End
ภาพท 2.29 สรางรปวงรหมน พรอมเปลยนสแบบ Random
ค าสงเกยวกบการสรางปม และการท างานของปม
buttoncreate คอค าสงในการสรางปม เพอน าไปใชงานในการควบคมดวยเงอนไขการกดปม มรปแบบค าสงดงน buttoncreate “parent “name “label xpos ypos width height [callback] อธบายไดดงน
“parent เปนชอของหนาตางทจะใสปมค าสงลงไป
“name เปนชอของปมค าสงทสรางขนมา
“label เปนตวอกษรหรอปายฉลากทจะพมพใสทปมค าสง xpos ต าแหนงของปมทจะสรางในแกน x
ypos ต าแหนงของปมทจะสรางในแกน y width ความกวางของปมค าสง
height ความยาวของปมค าสง [callback] สงทตองการท าเมอมการใชเมาสคลกทปมค าสง
ตวอยางเชน buttoncreate “main “bamboo “Click -20 0 50 30 [sound [1500 100]] ผลทไดแสดงดงรป
ปมค าสงจะมปายฉลากวา Click เมอใชเมาส
คลก ทปมค าส งจะเกดเสยงดงดวยค าสง sound นนเอง เมอตองการลบปมค าสงออก
จากหนาจอหลก เราไมสามารถลบหรอลาง ปมค าสงดวยค าสง cs หรอ clean แตตอง
ลบดวยค าสงดงตอไปน
buttondelete เปนค าสงลบปมค าสงทปรากฏอยหลงจากใชค าสง buttoncreate ไปแลว โดยมรปแบบค าสงดงน
buttondelete “name คอตองเรยกชอของปมค าสงใหตรงกบชอทตงไวในค าสง buttoncreate เชน จากค าสง buttocreate ทกลาวมามชอปมค าสงวา bamboo เมอตองการลบเราจะใชค าสงคอ buttondelete “bamboo แลว Enter
รปปมค าสงกจะหายไป
ตวอยาง โปรแกรมสรางปมค าสง คลกเพอสรางรปวงกลมขนาดตาง ๆ และทต าแหนงตาง ๆ
to clickbutton buttoncreate "window "bamboo "Circle -10 0 70 40 [ ; สรางปมค าสงโดยมปายฉลากวา Circle
pu ; สงทตองท าหลงจากการคลกเมาสทปมค าสงคอ
make "x random 1000 ; การสรางวงกลมขนาดตางๆ ทต าแหนงตางๆ
บนจอ make "y random 1000
setxy :x :y make "z random 200
pd
circle :z ] buttoncreate "window "project "Clear -400 -200 70 40 [ ; สรางปมค าสงส าหรบลางหนาจอ
cs buttondelete "bamboo
buttondelete "project ]
end
ภาพท 2.30 ปมค าสง คลกเพอสรางรปวงกลมขนาดตาง ๆ และทต าแหนงตาง ๆ
แบบฝกหดบทท 2
1. ใหผเรยนทดลองเขยนค าสงพนฐานภาษาโลโกทไดศกษามาจากใบความร FD 100 มลกษณะอยางไร โดยใหท าลงบนเครองคอมพวเตอร
2. ใหผเรยนทดลองใชค าสง CS หรอ ClearScreen แลวใหทดลองใชค าสงบนเครองคอมพวเตอรแลวสงเกตการณท างานหนาจอ
3. ใหผเรยนทดลองใชค าสง LT แลวทดลองท าบนเครองคอมพวเตอรแลวดผลการท างานของค าสง
4. ใหผเรยนท าการปอนโปรแกรมโดยใช Menu Edit ดงน 1. ใชเมาสคลกไปท Edit
2. จะเหนภาพหนาจอ
3. ใหผเรยนเขยนโปรแกรมจากภาพ
4. ใหผเรยนคลกไปท File แลวไปท Save and Exit
5. ใหผเรยนทดลองการบนทกขอมลลงในฮารดดสหรอแผนเกบขอมลหรออปกรณการเกบขอมล (บนทกขอมลอยาง
ถาวร) 1. ใหผเรยนเลอนเคอรเซอรไปท Save
2. ใหคลกท Save เพอเลอกปลายทางทจะบนทกลงใน Save in
3. ใหผเรยนตงชอแฟมลงในชอง File Name และคลกทปม Save เพอยนยนการบนทก
6. ใหผเรยนทดลองใชค าสง PD และ PU แลวใหสงเกตทโปรแกรมภาษาโลโกและใหผเรยนทดลองเขยนค าสงดงน FD 50 PU FD 50 PU FD 50
7. ใหผเรยนทดลองใชค าสง PE และค าสง PPT โดยใหพมพตวอยางขางลางนโดยใชชอวา Exam2_7
To exam2_7 FD 150
RT 90 FD 100
RT 90
FD 150 RT 90
FD 150 PE
BK 50 End
แลวใหผเรยนดในการแสดงผลในภาษาโลโก แลวใหผเรยนเขยนค าสงตอจากภาพทปรากฏบนจอดวยค าสง PPT
แลวใหสงเกตพรอมทงท าความเขาใจ 8. ใหผเรยนทดลองเขยนค าสง PX โดยใชตวอยางค าสง PX FD 100 BK 50 เมอทดลองแลวใหผลทหนาจอ
คอมพวเตอรในภาษาโลโก 9. ใหผเรยนใชค าสงทเหนแลวเตมค าลงในชองวาพรอมทงอธบาย
Right………………………….
อธบายรปทเปน.................................................................................... ........................................................................................................
........................................................................................................ Left…………………………….
อธบายรปทเปน............................................ ........................................ ........................................................................................................
........................................................................................................
10. ใหผเรยนสรางขนบนไดจ านวน 3 ขนแลวใหทดลองใชค าสง FX, PE, PPT เพอหาขอแตกตาง
11. ผเรยนศกษา ค าสง Setpencolor[0 0 0] โดยใหผเรยนทดลองเขยนค าสงลงบนโปรแกรมภาษาโลโกดงน To Exam2_8
FD 100 RT 90
FD 100 RT 90 FD 100 RT 90
FD 100 RT 90 RT 45
PU FD 20
Setfloodcolor[ 0 255 0] Fill
End 12. ใหผเรยนศกษาเรองค าสง Print และ Show พรอมทงใหผเรยนทดลองใชทงสองค าสง โดยใหเขยนค าสงโดยให
เขยนค าสงดงขางลางนแลวใหผเรยนท าความเขาใจ Print [Hello how are you
Make “a 0 print :a
Show [Hello how are you] 13. ใหผเรยนทดลองคยค าสงขางลางดงตอไปน ลงในภาษาโลโก
To Joke Repeat 4 [Fd 100 Rt 90]
End
To Joker
Jokey Wait 10 Clean Rt 10 Joker
End
To Jokey
Repeat 6[Joke Rt 60] End
แลวใหผเรยนพมพค าสง Jokey แลวใหดการท างานของโปรแกรม
14. ใหผเรยนทดลองคยค าสงขางลางตอไปนลงในโปรแกรมภาษาโลโกแลวใหเรยกโปรแกรมทละโปรแกรม
To A Fd 100
Bk 100 Bk 100
Fd 100
Rt 90 Fd 100
Bk 200 Fd 100
End
To B Ht
Cs Repeat 360[Circle 100 RT 5 A Wait 10 C]
Fd 100
Bk 100 Bk 100
Fd 100 Rt 90
Fd 100 Bk 200
Fd 100
End
To C Pe
Fd 100
Bk 100 Bk 100
Fd 100 Rt 90
Fd 100
Bk 200 Fd 100
Ppt End
แลวใหผเรยนสงเกตดการท างานของโปรแกรม
15. ใหผเรยนคยตามค าสงตวซอรสโปรแกรมทใหแลวใหสงเกตการณท างานของโปรแกรม
To Flow : Round
Repeat : Round [Clean Ht Plot Rt 15 Wait 15] End
To Plot
Repeat 6[Square Rt 60] End
To Square Repeat 4[Fd 100 Rt 90]
End
16. ใหผเรยนไดทดลองคยโปรแกรมขางลางตอไปน พรอมทงดผลงาน
to home1 setpensize [3 3]
;go home and clear screen
home cs ;create roof
pu setpos [100 280] ppt setpos [-16 130] setpos [-300 245] setpos [-180 370] setpos [100 280] setpos [190 230] setpos [150 240] setpos [92 270] pu
;create patition wall setpos [0 150] ppt home
setpos [-270 115] setpos [-270 235] pu home
;create door ppt setpos [20 13] setpos [20 133] setpos [70 160] setpos [70 43] setpos [150 90]
setpos [150 240] setpos [0 150] pu setpensize [1 1] setpos [20 13] ppt setpos [70 43] pu setpensize [3 3]
;create left window
setpos [-154 86] ppt setpos [-154 167] setpos [-248 206] setpos [-248 125] setpos [-154 86] pu home
;create right window setpos [-21 29] ppt setpos [-21 110] setpos [-137 161] setpos [-137 80] setpos [-21 29]
pu home ;create fence
setpos [0 -35] ppt setpos [0 -85] setpos [-365 70] setpos [-365 120] setpos [0 -35] pu
setpos [-365 120] ppt setpos [-270 180] pu setpos [-270 130] ppt setpos [-317 100] pu
setpos [0 -35] ppt setpos [60 2] setpos [60 -48] setpos [0 -85] pu setpos [235 110] ppt setpos [108 31] setpos [108 -21] setpos [235 60] setpos [235 110]
setpos [150 145] pu setpos [150 95] ppt setpos [185 81] pu
;create LED setpos [69 10] ppt repeat 72 [fd 1 lt 5] pu
setpos [117 41] ppt repeat 72 [fd 1 lt 5] pu end
to mainpro
outport 888 0 setfloodcolor 7
ht make "ex 0
make "aa 0 make "bb 0
make "cc 0
make "dd 0 home1
;checkmouse buttoncreate "main "quitmenu "EXIT -465 340 50 25 [
home cs buttondelete "quitmenu buttondelete "ledlefton buttondelete "ledleftoff
buttondelete "righton buttondelete "rightoff buttondelete "dooron buttondelete "dooroff
buttondelete "ledon buttondelete "ledoff make "ex 1 st
] buttoncreate "main "ledlefton "OPEN_BATHROOM -465 310 150 25 [
setfloodcolor [120 204 255] pu setpos [-230 150] fill buttonenable "ledleftoff "true
buttonenable "ledlefton "false make "aa 8
outport 888 :aa+:bb+:cc+:dd]
buttoncreate "main "ledleftoff "CLOSE_BATHROOM -465 280 150 25 [
setfloodcolor [255 255 255] pu setpos [-230 150] fill buttonenable "ledleftoff "false buttonenable "ledlefton "true
make "aa 0 outport 888 :aa+:bb+:cc+:dd]
buttoncreate "main "righton "OPEN_LIVINGROOM -465 230 150 25 [
setfloodcolor [255 0 0] pu setpos [-110 90] fill buttonenable "rightoff "true buttonenable "righton "false
make "bb 4 outport 888 :aa+:bb+:cc+:dd]
buttoncreate "main "rightoff "CLOSE_LIVINGROOM -465 200 150 25 [ setfloodcolor [255 255 255] pu setpos [-110 90] fill buttonenable "rightoff "false
buttonenable "righton "true
make "bb 0 outport 888 :aa+:bb+:cc+:dd]
buttonenable "ledleftoff "false buttonenable "rightoff "false
buttoncreate "main "dooron "OPEN_DOOR 230 310 150 25 [
setfloodcolor [0 255 0] pu setpos [40 90] fill buttonenable "dooroff "true buttonenable "dooron "false
make "cc 1 outport 888 :aa+:bb+:cc+:dd]
buttoncreate "main "dooroff "CLOSE_DOOR 230 280 150 25 [ setfloodcolor [255 255 255] pu setpos [40 90] fill buttonenable "dooroff "false
buttonenable "dooron "true
make "cc 0 outport 888 :aa+:bb+:cc+:dd]
buttoncreate "main "ledon "OPEN_FLASHLIGHT 230 230 150 25 [ setfloodcolor [255 255 0] pu setpos [60 10] fill setpos [108 41] fill buttonenable "ledoff "true
buttonenable "ledon "false
make "dd 2 outport 888 :aa+:bb+:cc+:dd]
buttoncreate "main "ledoff "CLOSE_FLASHLIGHT 230 200 150 25 [ setfloodcolor [255 255 255] pu setpos [60 10] fill setpos [108 41] fill buttonenable "ledoff "false
buttonenable "ledon "true
make "dd 0 outport 888 :aa+:bb+:cc+:dd]
buttonenable "dooroff "false buttonenable "ledoff "false
do.until [ wait 5
] [:ex = 1]
outport 888 0 end
การตดตอกบพอรตขนานดวยค าสงภาษาโลโก
ระบบเลขฐานและการแปลงเลขฐาน
เนองจากภาษาทคอมพวเตอรเขาใจคอภาษาทตดตอกนดวยเลขฐานสอง คอ เปน .”1” หรอ “0” เทานน แตเลขฐานสองเปนเลขฐานทมนษยไมคนเคยและมความไมสะดวกในการแปรความหมาย ดงนนเราจงจ า เปนตองแปลงเลข
ฐานจากฐานสองไปสฐานตาง ๆ ทงายตอความเขาใจของมนษยมากกวา ในภาษาโลโกนนเลขฐานทใชคอเลขฐานสบเปน
เลขฐานหลกในการตดตอสอสาร มาทบทวนเรองเลขฐานกนเถอะ
เลขฐานสบ
เลขฐานสบคอเลขทมคาหลกแตละหลกมาจากเลขฐานสบยกก าลงใด ๆ ดง น
ลาน แสน หมน พน รอย สบ หนวย
6
10
5
10
4
10
3
10
2
10
1
10
0
10
หากเราใสตวเลขลงไปในแตละหลก เชน
ลาน แสน หมน พน รอย สบ หนวย
6
10
5
10
4
10
3
10
2
10
1
10
0
10
1
2
5
0
9
0
0
1000000 + 200000 + 50000 + 0 + 900 + 0 + 0 = 1250900
จากคาประจ าหลกของเลขฐานสบทไดและคาตวเลขทก าหนดลงไปในแตละหลกดงตวอยางขางตนน เราจงอานคาไดวา “ หนงลานสองแสนหาหมนเการอย”
0x1 = 0
0x10 = 0
9x100 = 900
0x1000 = 0
5x10000 = 50000 2x100000 = 200000
1x1000000 = 1000000
หลก
หลก
เลขฐานสอง
เลขฐานสองกมลกษณะเชนเดยวกนกบเลขฐานสบ
128 64 32 16 8 4 2 1
7
2
6
2
5
2
4
2
3
2
2
2
1
2
0
2
หากเราใสตวเลขลงไปในแตละหลก เชน
128 64 32 16 8 4 2 1
7 2
6 2
5 2
4 2
3 2
2 2
1 2
0 2
1 0
1
1
0
0
1
0
128 + 0 + 32 + 16 + 0 + 0 + 2 + 0 = 178
จากคาประจ าหลกของเลขฐานสองทไดและคาตวเลขทก าหนดลงไปในแตละหลกดงตวอยางขางตนน จะเปนวธการแปลง
คาจากเลขฐานสองเพอไปเปนคาในเลขฐานสบ ซงการแปลงคาดงกลาวจะมประโยชน อยางยงในการตดตอสอสารกบพอรตขนานของคอมพวเตอรดวยค าสงภาษาโลโก ซงจะกลาวถงในหวขอตอ ๆ ไป
เรยนรพอรตขนานของคอมพวเตอร (Parallel Port)
จดประสงคในการตดตอสอสารกบพอรตขนานของคอมพวเตอรนน เพอใหเราสามารถสงคาใด ๆ ในคอมพวเตอรออกไปควบคมหรอแสดงผลกบอปกรณฮารดแวรภายนอกคอมพวเตอรได หรอการรบคาใด ๆ จากอปกรณฮารดแวร
ภายนอกเพอประมวลผลและแสดงบนจอแสดงผลของคอมพวเตอรได การตดตอสอสารดงกลาวเราเรยกวาการ “อนเตอรเฟส” (Interface) เพอใหเราสามารถใชงานคอมพวเตอรเพ องานควบคมระบบอตโนมตไดอยางกวางขวาง ซง
เราจะพบการใชงานคอมพวเตอรเพอควบคมระบบอตโนมตมากในงานอตสาหกรรม และงานดานวศวกรรม
โครงสรางพอรตขนาน
พอรตขนานมโครงสรางดงรป เราเรยกพอรตขนาน
ชนดนวาพอรตแบบ DB-25 เนองจากมจ านวนขา (PIN) เทา กบ 25 ขา โดยถกออกแบบมาใหใชกบเครองพมพ
(Printer) ในยคแรก ๆ เราจงเรยกอกอยางหนงวาพอรตพรน
เตอร
หลก
หลก
0x1 = 0
1x2 = 2
0x4 = 0
0x8 = 0
1x16 = 16
1x32 = 32
0x64 = 0
1x128 = 128
Pin Description Pin Description
1 Strobe Output 14 Auto LF Output
2 D0 Output 15 Error Input
3 D1 Output 16 Initialize Printer Output
4 D2 Output 17 Select Input Output
5 D3 Output 18 Ground
6 D4 Output 19 Ground
7 D5 Output 20 Ground
8 D6 Output 21 Ground
9 D7 Output 22 Ground
10 ACK Input 23 Ground
11 Busy Input 24 Ground
12 Paper Empty Input 25 Ground
13 Select Input
โครงสรางการตอขาภายในพอรตขนาน
คอมพวเตอรทกรนทกยหอทมพอรตขนานดงกลาวจะมการก าหนดบานเลขทของพอรต (Address) ทเปนมาตราฐ าน
เดยวกนจากผผลตในแตละโรงงาน โดยโครงสรางภายในพอรตขนานจะแบงออกเปน 3 พอรตยอย ดงน
Address # 888 (เลขฐาน 10) 889 (เลขฐาน 10) 890 (เลขฐาน 10)
จะสงเกตไดวาในแตละพอรตจะมขอมลขนาด 8 บท มการตอใชงานทแตกตางกนดงน
พอรตเลขท 888 เปนพอรตส าหรบการสงขอมลออก สงเกตไดจากหวลกษร วงออกจากคอมพวเตอร และม
การตอใชงานครบทง 8 บท ผรเรมออกแบบพอรตใชพอรตเลขท 888 เพอการสงขอมลไปแสดงผลทเครองพมพ จงเรยกพอรตนวา Data Port
พอรตเลขท 889 เปนพอรตส าหรบการรบขอมลจากอปกรณภายนอกเขาสพอรตของคอมพวเตอร เราจงถอวาพอรตนเปนพอรตแบบอนพท มการตอใชงานเพยง 5 บท เทานน จดประสงคในการ
ออกแบบพอรตนเพอแสดงสถานะภาพของเครองพมพวาท างานอยางไร เชน การแจงกล บ
เรองการตดของกระดาษ ความไมพรอม กระดาษหมด และอน ๆ เปนตน เราจงเรยกพอรตนวา Status Port
พอรตเลขท 890 เปนพอรตส าหรบการสงคาเพอการควบคมการท างานของเครองพมพ เชน การรองขอการพมพ การเลอกเครองพมพในกรณทตอในระบบ LAN และม Print Server อยหลายเครอง
การเลอนกระดาษอตโนมต เปนตน มการตอใชงานเพยง 4 บทเทานน
Data Port Status Port Control Port
ค าสงในการสงขอมลออกทางพอรตขนาน
เมอเราเขาใจโครงสรางของพอรตขนานแลว จากนไปเราจะเรมเรยนรการสงคาออกไปทางพอรตขนานดวยค าสงของภาษาโลโกทมอย
outportb เปนค าสงส าหรบการสงขอมลขนาด 8 บทออกทางพอรต มรปแบบดงน outportb เลขทพอรต ขอมล
เลขทพอรต ในทนเราใชค าสง outport กบพอรตเลขท 888 กบ 890 เทานน สวนพอรตเลขท 889 เปนพอรต
ส าหรบรบขอมลเขา เราจะสงออกไปไมได ขอมล เปนขอมลทเปนเลขฐานสบ ทแปลงจากเลขฐานสองขนาด 8 บท
ตวอยางเชน
outportb 888 15
จากค าสงออกพอรตขางบนน เราจะไดขอมลเปนเลขฐานสอง ขนาด 8 บทออกไปทพอรตเลขท 888 ดงตารางขางบนน
จะเหนไดวา คา 15 กคอ มคา “1” ออกไปทบท D0-D3 นนเอง
outportb 888 129
outportb 888 60
outportb 888 255
outport เปนค าสงส าหรบการสงขอมลขนาด 16 ออกทางพอรต มรปแบบดงน outport เลขทพอรต ขอมล จะมรปแบบและผลเหมอนกบ outportb ถงแมขอมลจะมขนาด 16 บท แตในทาง
ฮารดแวรมการตอใชงานเพยง 8 บทเทานน ดงนนคาของขอมลทจะสงออกไปทพอรตเราค าน งเพยง 8 บทเชนเดยวกนกบค าสง outportb รวมถงผลทไดกจะเหมอนกน
128 64 32 16 8 4 2 1
7 2
6 2
5 2
4 2
3 2
2 2
1 2
0 2
0
0
0
0
1
1
1
1
128 64 32 16 8 4 2 1
7
2
6
2
5
2
4
2
3
2
2
2
1
2
0
2
1 0
0
0
0
0
0
1
128 64 32 16 8 4 2 1
7 2
6 2
5 2
4 2
3 2
2 2
1 2
0 2
0 0
1
1
1
1
0
0
128 64 32 16 8 4 2 1
7
2
6
2
5
2
4
2
3
2
2
2
1
2
0
2
1
1
1
1
1
1
1
1
ตวอยางเชน
outport 888 129
การประยกตใชงานขอมลทสงออกทางพอรต
ขอมลทสงออทางพอรตจากตวอยางทผานมาคอ ออกทพอรตเลขท 888 จะแสดงออกไปเปนเลขฐานสอง ถงแมเราสงดวยค าสงเลขฐานสบกตาม ในความเปนจรงเลขฐานสองทปรากฏทพอรตนนจะมคาแรงดนไฟฟาคอ
“0” จะมคาแรงดนไฟฟาเทากบ 0 Volt
“1” จะมคาแรงดนไฟฟาเทากบ 5 Volt
โดยเราสามารถใชประโยชนจากแรงดนไฟฟาดงกลาวไดดวยการประยกตเขากบวงจรไฟฟาและอเลกทรอนกส
ใหเปนโครงงานประยกตตาง ๆ ทสามารถควบคมการท างานไดดวยคอมพวเตอร
ธรรมชาตของไฟฟาจะคลายกบธรรมชาตของน า คอมคาแรงดน มกระแสไหล และม
คาความตานทานกระแส เพยงแตคาทางไฟฟาเราไมสามารถมองเหนไดดวยตาเปลา จงตองมเครองมอวด และ อปกรณแปลงคาพลงงานทางไฟฟาใหไปอยในรปแบบตาง
ๆ ทสามารถจบตองได
กระแสไฟฟาจะสามารถเก ดและไหลไดก
ตอเมอ แรงดนไฟฟาดานหนง สงกวา
แรงดนไฟฟาอกด านหนง จงจะเกดการเทกระแสไหลจากทสงกวา ไปสระดบ
แรงดนไฟฟาทต ากวา ดงรป การไหลของกระแสไฟฟาจะสรางพลงงานเกดขน
จากรปดานซายมอ หากแรงดนไฟฟาทงสองดานมระดบแรงดนเทากน จะไมเกดกระแสไฟฟาไหลจากดานหนงไปอกดานหนง เชนเดยวกบธรรมชาตของ
น าหากระดบน าทงสองดานมความสงเทากน กจะไมเกดการไหลของ กระแสน า
และไมเกดพลงงานทเกดจากการไหลของกระแส
128 64 32 16 8 4 2 1
7
2
6
2
5
2
4
2
3
2
2
2
1
2
0
2
1 0
0
0
0
0
0
1
มารจกธรรมชาตของไฟฟากนเถอะครบ
บอรด Led&7 Segment
บอรด LED & 7 Segment
บอรด LED & 7 Segment เปนบอรดทผลตโดย บรษท แบมบ โปรเจค กรปส จ ากด เพอเปนสอส าหรบการเรยน
การสอนการเขยนโปรแกรมเชงควบคม มรปแบบและโครงสรางดงตอไปน
สายพอรตขนาน บอรด LED & 7 Segment
วงจรและหลกการตดตอบอรด LED & 7 Segment ผานพอรตขนาน
ถาเราขอมลทออกทางพอรตขณะนเปน “0” ทกบท นนคอมแรงดนเทากบ 0 volt ซงจะมระดบแรงดนเทากบแรงดนท Ground ไมท าใหเกดกระแสไฟฟาไหลได หลอดไฟ LED จงไมมพลงงานทท าใหตดสวาง ได ค าสง LOGO
คอ
outportb 888 0
หรอ outport 888 0
หากตองการใหหลอดไฟ LED ดวงใดตดเราตองก าหนด “1” ออกไปทบทนน ๆ จงจะไดระดบแรงดนไฟฟาเทากบ 5 Volt ซงจะท าใหเกดกระแสไฟฟาไหลผานหลอดไฟ LED เมอมกระแสไฟฟาไหลผานหลอดไฟ LED จะไดรบพลงงาน
และตดสวางได
เชน ตองการใหหลอดไฟ LED ดวงท d0 และ d2 ตดสวาง เราเพยงสงดวยคาประจ าบท do (1) และ d2 (4) คอ
1+4 = 5
Ground มแรงดนไฟฟา = 0 volt
0
0
0
0
0
0
0
0
outportb 888 5
หรอ outport 888 5
ผลทไดแสดงดงรป
จากการเรยนรการตดตอพอรตขนานดวยค าสงภาษาโลโก และการประยกตวงจรไฟฟาและ อเลกทรอนกสรวมกบ
การเขยนโปรแกรม ท าใหการเขยนโปรแกรมของเราเปนการเ ขยนโปรแกรมเชงควบคมอยางแทจรง จากบอรดแสดงผล
LED & 7 Segment ของบรษท แบมบ โปรเจค กรปส จ ากด และความรเรองการใชค าสงตาง ๆ ของโลโกทผานมา เราสามารเขยนโปรแกรมตาง ๆ ไดอยางหลากหลาย และสนกสนานได
ตวอยาง โปรแกรมสงงานหลอดไฟ LED วงจาก D0 D7
to runLED1 outport 888 1 wait 40 ; สงหลอด LED ท D0 ใหตดสวาง นาน 40 ตค
outport 888 2 wait 40 ; สงหลอด LED ท D1 ใหตดสวาง นาน 40 ตค outport 888 4 wait 40 ; สงหลอด LED ท D2 ใหตดสวาง นาน 40 ตค
outport 888 8 wait 40 ; สงหลอด LED ท D3 ใหตดสวาง นาน 40 ตค
outport 888 16 wait 40 ; สงหลอด LED ท D4 ใหตดสวาง นาน 40 ตค outport 888 32 wait 40 ; สงหลอด LED ท D5 ใหตดสวาง นาน 40 ตค
outport 888 64 wait 40 ; สงหลอด LED ท D6 ใหตดสวาง นาน 40 ตค outport 888 128 wait 40 ; สงหลอด LED ท D7 ใหตดสวาง นาน 40 ตค
outport 888 0 ; สงหลอด LED ทกดวงดบ
end
ตวอยาง โปรแกรมสงงานหลอดไฟ LED วงจาก D0 D7 ทเขยนโดยใชต วแปรและค าสง repeat ซงจะใหผล
เหมอนกบตวอยางทผานมา to runLED2
make “x 1 repeat 8 [ outport 888 :x wait 40
make “x :x*2
] outport 888 0
end
128 64 32 16 8 4 2 1
7
2
6
2
5
2
4
2
3
2
2
2
1
2
0
2
0
0
0
0
0
1
0
1
Ground มแรงดนไฟฟา = 0 volt
0
0
0
0
0
1 = 5 V
0
1 = 5 V
นอกจากหลอดไฟ LED บนบอรดจะมอปกรณแสดงผลอกชนดหนงเรยกวา 7 Segment ( หมายถงมสวนทแสดงผลทแยก
เปนสวน ๆ จ านวน 7 สวน นนคอ LED ทมรปรางแบบสเหลยมเลก ๆ จ านวน 7 ดวงเรยงตอกนเปนตวเลข )
การเรยงหลอด D0 D7 ใหเปนตวเลขดงรป ดงนน หากตองการใหไฟตดเปนตวเลข
ตาง ๆ เราจงตองมการก าหนดการตดของหลอดไฟ LED ตามต าแหนงดงน
ค าสงคอ outport 888 63 คอ ( 32+16+8+4+2+1) จะไดตวเลขศนย
ค าสงคอ outport 888 5 คอ ( 4+1 ) จะไดตวเลขหนง
ค าสงคอ outport 888 91 คอ ( 64+16+8+2+1 ) จะไดตวเลขสอง
ค าสงคอ outport 888 79 คอ ( 64+8+4+2+1 ) จะไดตวเลขสาม
128 64 32 16 8 4 2 1
7 2
6 2
5 2
4 2
3 2
2 2
1 2
0 2
0 0
1
1
1
1
1
1
128 64 32 16 8 4 2 1
7 2
6 2
5 2
4 2
3 2
2 2
1 2
0 2
0
0
0
0
0
1
0
1
128 64 32 16 8 4 2 1
7
2
6
2
5
2
4
2
3
2
2
2
1
2
0
2
0 1
0
1
1
0
1
1
128 64 32 16 8 4 2 1
7
2
6
2
5
2
4
2
3
2
2
2
1
2
0
2
0
1
0
0
1
1
1
1
ค าสงคอ outport 888 101 คอ ( 64+32+4+1 ) จะไดตวเลขส
ค าสงคอ outport 888 110 คอ ( 64+32+8+4+2 ) จะไดตวเลขหา
ค าสงคอ outport 888 124 คอ ( 64+32+16+8+4 ) จะไดตวเลขหก
ค าสงคอ outport 888 7 คอ ( 4+2+1 ) จะไดตวเลขเจด
ค าสงคอ outport 888 127 คอ ( 64+32+16+8+4+2+1 ) จะไดตวเลขแปด
128 64 32 16 8 4 2 1
7
2
6
2
5
2
4
2
3
2
2
2
1
2
0
2
0
1
1
0
0
1
0
1
128 64 32 16 8 4 2 1
7
2
6
2
5
2
4
2
3
2
2
2
1
2
0
2
0 1
1
0
1
1
1
0
128 64 32 16 8 4 2 1
7 2
6 2
5 2
4 2
3 2
2 2
1 2
0 2
0
1
1
1
1
1
0
0
128 64 32 16 8 4 2 1
7
2
6
2
5
2
4
2
3
2
2
2
1
2
0
2
0
0
0
0
0
1
1
1
128 64 32 16 8 4 2 1
7
2
6
2
5
2
4
2
3
2
2
2
1
2
0
2
0
1
1
1
1
1
1
1
ค าสงคอ outport 888 103 คอ ( 64+32+4+2+1 ) จะไดตวเลขเกา
ตวอยาง โปรแกรมแสดงตวเลขนบถอยหลง จาก 9 0 พรอมแสดงเสยง beep ในการนบเลข
to countdown ; ชอโปรแกรมหลก
outport 888 103 beep ; แสดงเลข 9 แลวเรยกโปรแกรมยอย beep outport 888 127 beep ; แสดงเลข 8 แลวเรยกโปรแกรมยอย beep
outport 888 7 beep ; แสดงเลข 7 แลวเรยกโปรแกรมยอย beep
outport 888 124 beep ; แสดงเลข 6 แลวเรยกโปรแกรมยอย beep outport 888 110 beep ; แสดงเลข 5 แลวเรยกโปรแกรมยอย beep
outport 888 101 beep ; แสดงเลข 4 แลวเรยกโปรแกรมยอย beep outport 888 79 beep ; แสดงเลข 3 แลวเรยกโปรแกรมยอย beep
outport 888 91 beep ; แสดงเลข 2 แลวเรยกโปรแกรมยอย beep
outport 888 5 beep ; แสดงเลข 1 แลวเรยกโปรแกรมยอย beep outport 888 63 beep ; แสดงเลข 0 แลวเรยกโปรแกรมยอย beep
outport 888 0 ; ดบดวงไฟ end
to beep ; ชอโปรแกรมยอย
sound [1500 200] ; แสดงเสยงทความถ 1500 Hz นาน 200 wait 40 ; ระยะเวลาในการเปลยนตวเลข
end
ในภาษาโลโกสามารถเขยนโปรแกรมใหโปรแกรมหลกเรยกใชโปรแกรมยอยได เพยงการก าหนดชอโปรแกรมยอยในโปรแ กรมหลกในต าแหนงทตองการใชงานโปรแกรมยอย จากโปรแกรมขางตนน โปรแกรมหลกชอ countdown
และโปรแกรมยอยชอ beep โดยระหวางการแสดงตวเลขแตละคานนจะเรยกโปรแกรมยอย beep เพอแสดงเสยง และ
หนวงเวลา โดยการเขยนโปรแกรมยอยและการเรยกใชงานดงกลาว จะท าใหโปรแกรมสนกระชบ ไมตองม การเขยนค าสงแบบซ าซอน การ Run โปรแกรม เพยงแตเรยกชอโปรแกรมหลก คอ countdown โปรแกรมจะท างานพรอมทงเรยก
โปรแกรมยอยโดยอตโนมต
ตวอยาง โปรแกรมแสดงตวเลขนบถอยหลง จาก 9 0 พรอมแสดงเสยง beep ในการนบเลข และมตวเลขแสดงออก
จอคอมพวเตอร
to countdown ; ชอโปรแกรมหลก
setlabelfont [[Times New Roman] 80 0 0 400 0 0 0 0 3 2 1 18] cs ht pu ; ลางหนาจอ ซอนเตา ยกปากกา
outport 888 103 ; แสดงเลข 9 make “number 9 ; ก าหนดตวแปรทจะแสดงออกจอเปนเลข 9
beep ; เรยกโปรแกรมยอย beep
outport 888 127 ; แสดงเลข 8 make “number 8 ; ก าหนดตวแปรทจะแสดงออกจอเปนเลข 8
beep ; เรยกโปรแกรมยอย beep outport 888 7 ; แสดงเลข 7
make “number 7 ; ก าหนดตวแปรทจะแสดงออกจอเปนเลข 7
beep ; เรยกโปรแกรมยอย beep
128 64 32 16 8 4 2 1
7
2
6
2
5
2
4
2
3
2
2
2
1
2
0
2
0
1
1
0
0
1
1
1
outport 888 124 ; แสดงเลข 6
make “number 6 ; ก าหนดตวแปรทจะแสดงออกจอเปนเลข 6 beep ; เรยกโปรแกรมยอย beep
outport 888 110 ; แสดงเลข 5 make “number 5 ; ก าหนดตวแปรทจะแสดงออกจอเปนเลข 5
beep ; เรยกโปรแกรมยอย beep
outport 888 101 ; แสดงเลข 4 make “number 4 ; ก าหนดตวแปรทจะแสดงออกจอเปนเลข 4
beep ; เรยกโปรแกรมยอย beep outport 888 79 ; แสดงเลข 3
make “number 3 ; ก าหนดตวแปรทจะแสดงออกจอเปนเลข 3 beep ; เรยกโปรแกรมยอย beep
outport 888 91 ; แสดงเลข 2
make “number 2 ; ก าหนดตวแปรทจะแสดงออกจอเปนเลข 2 beep ; เรยกโปรแกรมยอย beep
outport 888 5 ; แสดงเลข 1 make “number 1 ; ก าหนดตวแปรทจะแสดงออกจอเปนเลข 1
beep ; เรยกโปรแกรมยอย beep
outport 888 63 ; แสดงเลข 0 make “number 0 ; ก าหนดตวแปรทจะแสดงออกจอเปนเลข 1
beep ; เรยกโปรแกรมยอย beep outport 888 0 ; ดบดวงไฟ
end
to beep ; ชอโปรแกรมยอย
cs setxy -50 0 rt 90 ; ลางหนาจอ ก าหนดต าแหนงเตา หมนขวา 90 vองศา wait 30 ; หนวงเวลา 30 ตค
label :number ; แสดงคาตวเลขทางจอคอมพวเตอร sound [1500 200] ; แสดงเสยงทความถ 1500 Hz นาน 200
wait 40 ; ระยะเวลาในการเปลยนตวเลข
end
กจกรรม
การใช Led&7-Segments
1. จดประสงค ผเรยนสามารถ 1.1 รจก Led&7-segments
1.2 ใช Led&7-segments แสดงผลตามความตองการ 1.3 อธบายผลของค าสงในทใชกบ Led&7-segments ได
1.4 ค านวณเลขฐาน 16 เพอก าหนดการแสดงผลใหกบ Led&7-segments ได 1.5 เขยนค าสงภาษาโลโก เพอให Led&7-segments แสดงผลตามต าแหนงทตองการได
1.6 ใชค าสงชะลอ (wait) การท างานได
1.7 ใชค าสงภาษาโลโกทเรยนรผานมาได 2. สออปกรณ
2.1 ความรเรอง Led&7-segments 2.2 ตวอยางค าสง การแสดงผลโดย Led&7-segments&led
2.3 ชดทดลอง
2.4 เครองคอมพวเตอร 3. วธการด าเนนการ(กรณทอปกรณมไมพอ)
3.1 แบงผเรยนเปนกลม ๆ ละ 2-4 คน 3.2 เตรยมใบความรและใบงาน
3.3 เตรยมชดทดลอง 3.4 ขนด าเนนการ
3.4.1 ใหผเรยนแตละกลมนงประจ าโตะ พรอมอปกรณการทดลอง
3.4.2 ใหอานจดประสงคการเรยนร 3.4.3 ใหผเรยนศกษาใบความรเรอง Led&7-segments
3.4.4 ใหผเรยนท าการตดตงอปกรณการเรยนร(Led&7-segments) ตามรปทแสดงไว
3.4.5 ใหผเรยนคยค าสงในตวอยางตามใบงานทใหท า
1. สอ - อปกรณ 1.1
ท เรอง เวลา
1 2
รปการตอเชอมระหวาง Led&7-segments กบพอรตพรนเตอร การตดตงอปกรณพอรตพรนเตอรกบเครองคอมพวเตอร
ภาพท 1 อปกรณ Led&7-Segments ภาพท 2 สายพอรตพรนเตอร
ภาพท 3 AC-DC ADAPTOR ส าหรบจายกระแสไฟ
ขนตอนการตดตงอปกรณ
1. น าสายพรนเตอร(ภาพท 2 ) มาเสยบยงพอรตของอปกรณ Led&7-Segments ดงรป
ภาพการตอสายพอรตพรนเตอรกบอปกรณ Led&7-Segments 2. น าเอาสายพรนเตอรไปเสยบกบชองพอรตพรนเตอรดานหลงชดคอมพวเตอร ดงรปขางลาง
ภาพการน าสายพอรตพรนเตอรตอเขากบชองพอรตพรนเตอรดานหลงชดคอมพวเตอร
3. น าชดอปกรณ Led&7-Segments ตอเขากบชด AC-DC ADAPTOR (ภาพท 3) ดงรปขางลาง
ภาพการน าชดอปกรณตอเขากบ AC-DC ADAPTOR
ภาพเสรจสมบรณในการตออปกรณ
ใบงาน
ความร Led&7-segments
1.ใหผเรยนพมพค าสงดงตอไปนแลวดผลการท างาน ตวอยาง โปรแกรมสงงานหลอดไฟ LED วงจาก D0 D7
to runLED1
outport 888 1 wait 40 outport 888 2 wait 40
outport 888 4 wait 40
outport 888 8 wait 40 outport 888 16 wait 40
outport 888 32 wait 40 outport 888 64 wait 40
outport 888 128 wait 40
outport 888 0 end
2.ใหผเรยนพมพค าสงดงตอไปนแลวดผลการท างาน ตวอยาง โปรแกรมสงงานหลอดไฟ LED วงจาก D0 D7 แตใชค าสง repeat
to runLED2
make “x 1
repeat 8 [ outport 888 :x wait 40
make “x :x*2
]
outport 888 0
end
3.ใหผเรยนพมพตามค าสงขางลางน แลวใหดผลการท างาน
ตวอยาง โปรแกรมแสดงตวเลขนบถอยหลง จาก 9 - 0 พรอมแสดงเสยง beep ในการนบเลข
to countdown
outport 888 103 beep
outport 888 127 beep
outport 888 7 beep
outport 888 124 beep
outport 888 110 beep
outport 888 101 beep
outport 888 79 beep
outport 888 91 beep
outport 888 5 beep
outport 888 63 beep
outport 888 0
end
to beep
sound [1500 200]
wait 40
end
4 .ใหผเรยนพมพตามค าสงขางลางน แลวใหดผลการท างาน
ตวอยาง โปรแกรมแสดงตวเลขนบถอยหลง จาก 9 - 0 พรอมแสดงเสยง beep ในการนบเลข และมตวเลขแสดงออกจอคอมพวเตอร
to countdown2
setlabelfont [[Times New Roman] 80 0 0 400 0 0 0 0 3 2 1 18]
cs ht pu
outport 888 103
make “number 9
beep
outport 888 127
make “number 8
beep
outport 888 7
make “number 7
beep
outport 888 124
make “number 6
beep
outport 888 110
make “number 5
beep
outport 888 101
make “number 4
beep
outport 888 79
make “number 3
beep
outport 888 91
make “number 2
beep
outport 888 5
make “number 1
beep
outport 888 63
make “number 0
beep
outport 888 0
end
to beep
cs setxy -50 0 rt 90
wait 30
label :number
sound [1500 200]
wait 40
end
5. ใหผเรยนทดลองคยค าสงขางลางน แลวใชอปกรณ 7segmet&led ของบรษทแบมบโปรเจค กรปส จ ากด เชอมตอแลว
ดการท างานของอปกรณพรอมทงดหนาจอคอมพวเตอรวามการท างานอยางไร to hello
outport 888 117 fd 50 bk 100 fd 50 rt 90 fd 50 lt 90 fd 50 bk 100
wait 100
pu home
pd outport 888 0
clean wait 50
outport 888 122
fd 50 rt 90 fd 50 bk 50 rt 90 fd 50 lt 90 fd 50 bk 50 rt 90 fd 50 lt 90 fd 50 wait 100
pu home
pd
outport 888 0 clean
wait 50 outport 888 56
fd 100 bk 100 rt 90 fd 100 wait 100
pu
home pd
outport 888 0 clean
wait 50
outport 888 56 fd 100 bk 100 rt 90 fd 100
wait 100 pu
home
pd outport 888 0
clean wait 50
outport 888 63 lt 90 fd 50 rt 90 fd 100 rt 90 fd 100 rt 90 fd 100 rt 90 fd 50
wait 100
pu home
pd outport 888 0
clean
wait 50 end
6. ใหผเรยนทดลองคยค าสงขางลางน แลวใชอปกรณ 7segmet&led ของบรษทแบมบโปรเจค กรปส จ ากด
เชอมตอแลวดการท างานของอปกรณพรอมทงดหนาจอคอมพวเตอรวามการท างานอยางไร
to hello2 outportb 888 117
cs fd 100 bk 50 rt 90 fd 50 lt 90 fd 50 bk 100 rt 90
wait 60 outportb 888 0
wait 15 outportb 888 122
pu fd 50 pd fd 50 bk 50 lt 90 fd 50 rt 90 fd 50 bk 50 lt 90 fd 50 rt 90 fd 50 wait 60
outportb 888 0
wait 15 outportb 888 56
pu fd 50 pd rt 90 fd 100 lt 90 fd 50 wait 60
outportb 888 0
wait 15 outportb 888 56
pu fd 50 pd fd 50 bk 50 lt 90 fd 100 rt 90 wait 60
outportb 888 0 wait 15
outportb 888 63
pu fd 100 pd fd 50 rt 90 fd 100 rt 90 fd 50 rt 90 fd 100 wait 60
end
7. ใหผเรยนคยค าสงภาษาโลโก ขางลางนแลวใหใชอปกรณ 7segmen&led ของบรษทแบมบโปรเจค กรปส จ ากด เปน
เครองมอในการทดลอง เมอท าการ run โปรแกรมแลว ใหสงเกตการท างานของโปรแกรมและอปกรณ to a
outport 888 5 cs
n1
wait 60
outport 888 91 cs
n2 wait 60
outport 888 79
cs n3
wait 60
outport 888 101
cs n4
wait 60
outport 888 110 cs
n5
wait 60
outport 888 126
cs
n6
wait 60 outport 888 7
cs
n7
wait 60 outport 888 127
cs n8
wait 60 outport 888 111
cs n9
wait 60 outport 888 63
cs n0
wait 60
end
to d Outportb 888 1
wait 120
Outportb 888 2 wait 120
Outportb 888 4 wait 120
Outportb 888 8
wait 120 Outportb 888 16
wait 120 Outportb 888 32
wait 120 Outportb 888 64
wait 120
Outportb 888 128 wait 120
end
to n0
setpensize[8 8] fd 100 rt 90 fd 50 rt 90 fd 100
rt 90 fd 50 end
to n1 setpensize [8 8]
fd 100 seth 250 fd 50 pu home pd
rt 90 fd 50 bk 100
pu home pd
end
to n2 rt 90 fd 50 bk 50 seth 0 fd 50
rt 90 fd 50 seth 0 fd 50 lt 90
fd 50 pu home pd
end
to n3 lt 90 fd 50 bk 50 seth 0 fd 100 bk 50 lt 90
fd 50 bk 50 seth 0 fd 50 lt 90 fd 50 pu home pd
end
to n4
fd 100 bk 50 lt 90 bk 10 fd 60 seth 0 fd 50
end
to n5
rt 90 fd 50 seth 0 fd 50 lt 90 fd 50 rt 90 fd 50 rt 90 fd 50 end
to n6
repeat 4 [fd 50 rt 90]
fd 100 rt 90 fd 50 end
to n7
fd 100 lt 90 fd 50 lt 90 fd 30 end
to n8 repeat 4[fd 50 rt 90]
fd 50 repeat 4[fd 50 rt 90]
end
to n9
repeat 4 [fd 50 rt 90] pe fd 50 ppt
repeat 4 [fd 50 rt 90]
end
to pl outportb 888 63
wait 60 outportb 888 5
wait 60
outportb 888 91 wait 60
outportb 888 79 wait 60
outportb 888 101 wait 60
outportb 888 110
wait 60 outportb 888 126
wait 60 outportb 888 39
wait 60
outportb 888 127 wait 60
outportb 888 111 wait 60
end
แบบฝกหด
1. จงเขยนโปรแกรมใหไฟสวาง และดบสลบกน วธท า ใหไฟสวางดวงเวนดวงท าไดโดยสงคาออกไปทางพอรต จากนนหนวงเวลาและสงคา ออกไป
ทางพอรต และหนวงเวลาจากนนท าโปรแกรมซ า ๆ ดงรปขางลางน
2. จงเขยนใหแสดงค าวา Microcomputer
3. จงเขยนชอตวเองใหออกไฟวง
4. จงเขยนโปรแกรมนบเลขลงโดยเรมตนจาก 9 จนถง 0 ซงจะแสดงผลบนวงจรหลอดแสดงผล 7 สวนและบนจอภาพ
Relay ( รเลย )
เปนอปกรณอเลกทรอนกส ทน ามาประยกตใชเพอใหเราสามารถใชสญญาณแรงดนต า
ควบคมอปกรณไฟฟาทใชขนาดแรงดนสง และกนก าลงงานสงๆ ได โดยท แรงดนไฟฟาทแตกตางกนระหวางทงสองดานไมตองสมผสกนเลย
บอรด Relay
บอรด Relay
จากบอรด LED & 7 Segment ทผานมาเปนการเรยนรการสงคาออกมาจากคอมพวเตอร ดวยเลขฐานสบทมการแปลงคาออกมาจากเลขฐาน สอง วธการเขยนโปรแกรมแสดงผลออกมาทบอรดแบบตาง ๆ นอกจากการแสดงผลดวย
หลอดไฟ LED เรายงสามารถประยกตสญญาณจากคอมพวเตอรเพอเปด -ปดอปกรณไฟฟาไดดวย บอรด Relay ท บรษท
แบมบ โปรเจค กรปส จ ากด ไดออกแบบและผลตขนมา
โครงสรางของ Relay จะมอยหลาก หลายชนด ขนอยกบผผลตและ
โมเดล ทจะใชงาน แตโครงสรางพนฐานจะ
ประกอบไปดวยขดลวดดานแรงดน
ต า และมสะพานไฟดานแรงดนสง
กระแสสง แสดงดงรป ตามรป เมอจายแร งดนไฟฟาเขาทขดลวด จะเกดสนามแมเหลกไฟฟาเหนยวน า เปนผลให
สะพานไฟขา Com (Common) ถกดดลงมาแตะหรอตอเขากบสะพานขา NO (Normal Open) เมอหยดจายกระแสไฟฟาทขดลวด สะพานไฟขา Com จะถกดงดวยแรงสปรงกลบไปแตะหรอ
ตอเขากบสะพานขา NC (Normal Close)
จากหลกการท างานดงกลาว เราจงสามารถควบคมอปกรณไฟฟาทใชปรมาณกระแสสง ไดดวยสญญาณ ไฟฟาขนาดเลก ทมแรงดนไฟต า ๆ และกระแสต า ๆ ไดอยางไมยากเยน
สะพานไฟ ดานเอาทพทส าหรบ
ไฟแรงดนสง กระแสสง
ดานอนพทส าหรบไฟแรงดน
ต า 5-24 Vdc NO
NC
Com
i NO
NC
Com
+Vcc
สะพานไฟ ดานเอาทพทส าหรบ
ไฟแรงดนสง กระแสสง
วงจรการท างานของบอรด Relay
Data Port # 888
ในบอรด Relay ทออกแบบมาน มการใชงานเพยง 4 บท คอ D0 D3 ดงนน
การสงงานเพอให Relay ท างานนนจะคลายกบการสงงานควบคมบอรด LED & 7 Segment
เพยงแตเราจะพจารณาเพยงคา 4 บทนเทานน
ตวอยาง โปรแกรมการทดสอบสงงานให Relay ท างานทละชด เปนเวลาชดละ 5 วนาท
to testrelay outport 888 1 wait 300 ; สงให Relay ท D0 ท างานเปนเวลา 5 วนาท
outport 888 2 wait 300 ; สงให Relay ท D1 ท างานเปนเวลา 5 วนาท outport 888 4 wait 300 ; สงให Relay ท D2 ท างานเปนเวลา 5 วนาท
outport 888 8 wait 300 ; สงให Relay ท D3 ท างานเปนเวลา 5 วนาท
outport 888 0 ; สงให Relay หยดท างาน end
128 64 32 16 8 4 2 1
7 2
6 2
5 2
4 2
3 2
2 2
1 2
0 2
x x
x
x
D3
D2
D1
D0
ชดขบ
สญญาณ
D0
D1
D2
D3
ตวอยาง โปรแกรมตงเวลาควบคมการท างานของ Relay ( คอการสงอปกรณไฟฟาท างานตามเวลาทเราตองการนนเอง )
to timer1
cs ht pu ; ลางหนาจอ ซอนเตา ยกปากกา setlabelfont [[Times New Roman] -80 0 0 400 0 0 0 0 3 2 1 18] ; ก าหนดลกษณะตวอกษร
setpencolor [0 0 255] ; ก าหนดสปากกา
make "relay1 "16:32:00 ; ก าหนดตงเวลาให Relay ชดแรกท างาน make "relay2 "16:32:10 ; ก าหนดตงเวลาให Relay ชดท 2 ท างาน
make "relay3 "16:32:20 ; ก าหนดตงเวลาให Relay ชดท 3 ท างาน make "relay4 "16:32:30 ; ก าหนดตงเวลาให Relay ชดท 4 ท างาน
make "off "16:32:40 ; ก าหนดตงเวลาให Relay ทกตวหยดท างาน make "x 0 ; ก าหนดเงอนไขการวนรอบท างาน
do.until [
make "t item 4 time ; อานคาเวลาจากคอมพวเตอรมาเกบไวท ตวแปร t cs setxy -150 0 rt 90 ; เตรยมต าแหนงการแสดงคาเวลาบนจอคอมพวเตอร
label :t ; แสดงเวลาบนจอคอมพวเตอร if :t=:relay1 [outport 888 1] ; ถาเวลาตรงกบคา Relay1 ทตงไวให Relay1 ท างาน
if :t=:relay2 [outport 888 1+2] ; ถาเวลาตรงกบคา Relay/ ทตงไวให Relay2 ท างาน
โดย Relay 1 ยงท างานคางอย if :t=:relay3 [outport 888 1+2+4] ; ถาเวลาตรงกบคา Relay3 ทตงไวให Relay3 ท างาน
โดย Relay 1 และ Relay 2 ยงท างานคางอย if :t=:relay4 [outport 888 1+2+4+8] ; ถาเวลาตรงกบคา Relay4 ทตงไวให Relay4 ท างาน
โดย Relay 1, Relay 2 และ Relay 3 ยงท างานคางอย if :t=:off [make "x 1] ; ถาเวลาตรงกบคาทตองการหยดการท างานของ Relay
ทตงไวให ก าหนดตวแปรใหตรงกบเงอนไขเพอออกจาก
การวนรอบ ][:x=1] ; ก าหนดเงอนไขเพอออกจากการวนรอบ
cs setxy -150 0 rt 90 ; เตรยมพนท และต าแหนงการแสดงหนาจอใหม label [Bye Bye] ; แสดงค าวา Bye Bye กอนจบโปรแกรม
outport 888 0 ; สงให Relay ทกตวหยดการท างาน
end
จะเหนไดวาการเขยนโปรแกรมดงกลาวจะสามารถควบคม Relay ใหท างานตามความตองการของเราไดแลว คราว
นเมอตอสะพานไฟหรอหนาคอนแทค ของ Relay เพอน าไปใชงานผเขยนจะอธบายใหคราว ๆ ดงรปตอไปน
Relay
220Vac
จากรปขางบนน ขณะ Relay ไมท างานต าแหนงสะพานไฟ NO และ Com จะแยกเปดออก ท าใหกระแสไฟฟาจากปลกไฟไมสามารถผานไปได เมอไมมกระแสไฟฟาไหลไปทโคมไฟ โคมไฟจงไมตดสวาง
Relay
220Vac
จากรปขางบนน เมอมการสงงาน Relay ใหท างานดวยโปรแกรมค าสงตาง ๆ ดงทกลาวมาแลวนน จะมกระแสไฟฟา
ดานขดลวดไหลผานขดลวด เกดสนามแมเหลกไฟฟาตามมาและสงผลใหหนาคอแทค หรอสะพานไฟถกแรงแมเหลกไไฟาดดโยกขา Com จากขว NC มาตอเขาทขว NO ท าใหกระแสไฟฟาสามารถไหลผานไปได และไหลเขาสโคมไฟ
แลวกลบไปครบวงจรทปลกไฟอกขวหนงตามหลกของวงจรไฟฟา ดงนนเมอโคมไฟไดรบกระแสไฟฟากจะไดรบพลงงาน
และเปลงแสงออกมาได
จากหลกการท างานดงกลาว เราน า ไปเปด-ปดอปกรณไฟฟาอน ๆ ไดอกมากมาย เชน พดลม ปมน า กรงโรงเรยน แสงสวางตามจดตาง ๆ โดยการเขยนโปรแกรมควบคมท างานตามความตองการ แตทงนตองค านงถงความสามารถในการ
ทนกระแสของ Relay ดวยวา อปกรณไฟฟาดงกลาวจะตองไมกนกระแสไฟฟาเกนควา มสามารถของ Relay ทเราใชอย มเชนนน Relay อาจเสยหาย และอาจเกดไฟไหมได วธทดทสดคอ ใหปรกษากบชางไฟฟาทเราตดตอได หรอชางใกล
บานเพอใหแนใจวามความปลอดภยเพยงพอ
1.ใหผเรยนพมพค าสงดงตอไปนแลวดผลการท างาน
ตวอยาง โปรแกรมการทดสอบสงงานให Relay ท างานทละชด เปนเวลาชดละ 5 วนาท
to testrelay outport 888 1 wait 300
outport 888 2 wait 300 outport 888 4 wait 300
outport 888 8 wait 300
outport 888 0 end
2.ใหผเรยนพมพค าสงดงตอไปนแลวดผลการท างาน ตวอยาง โปรแกรมตงเวลาควบคมการท างานของ Relay ( คอการสงอปกรณไฟฟาท างานตามเวลาทเราตองการนนเอง )
to timer1
cs ht pu
setlabelfont [[Times New Roman] -80 0 0 400 0 0 0 0 3 2 1 18] setpencolor [0 0 255]
make "relay1 "16:32:00 make "relay2 "16:32:10
make "relay3 "16:32:20
make "relay4 "16:32:30 make "off "16:32:40
make "x 0 do.until [
make "t item 4 time cs setxy -150 0 rt 90
label :t
if :t=:relay1 [outport 888 1]
if :t=:relay2 [outport 888 1+2]
if :t=:relay3 [outport 888 1+2+4] if :t=:relay4 [outport 888 1+2+4+8]
if :t=:off [make "x 1 ][:x=1]
cs setxy -150 0 rt 90
label [Bye Bye] outport 888 0
end
3. ใหผเรยนทดลองคยค าสงขางลางน แลวใชอปกรณ Relay ของบรษทแบมบโปรเจค กรปส จ ากด เชอมตอแลวดการท างานของอปกรณพรอมทงดหนาจอคอมพวเตอรวามการท างานอยางไร
To relay Repeat 4 [
Outport 888 1 Wait 50
Outport 888 2
Wait 50 Outport 888 4
Wait 50 Outport 888 8
Wait 50 Outport 888 0
]
end
4. ค าสง ใหผเรยนลองพมพแลวดผลลพธ จากอปกรณทแจกให
ใหผเรยนเขยนชดค าสงดวยภาษาโลโก จากตวอยางขางลางโดยใชค าสงทเรยนรมากอนหนาน แลวเรยกใชงาน
ใหแสดงผล โดยการคลกเลอกตวเลข 1 ถง 4 เพอใหอปกรณท างานตามตองการ คลกเลอก q เพอออกจากโปรแกรมและ
ใหสงเกตดการท างานของอปกรณ Relay (โปรแกรมจากใบงานนม 2 สวนคอ โปรแกรมยอย relay1 และโปรแกรมหลก w )
to relay1
make "c (array 4 0)
make "a (array 4 0) setitem 0 :a 1
setitem 1 :a 2 setitem 2 :a 4
setitem 3 :a 8 make "ch first comboboxgettext "mycombo
if :ch = "q [ windowdelete "mywindow ]
if not :ch = "q [ make "e :b
make "i 0 for [0 4 1] [
make "f modulo :e 2
setitem :i :c :f make "t item :i :c
make "t :e-:t make "e :t / 2
make "i :i+1 ]
if :ch > 0 [
if :ch < 5 [ make "d item :ch-1 :c
make "e item :ch-1 :a
if :d = 0 [make "b :b+:e]
if :d = 1 [make "b :b-:e] print :b
outport 888 :b wait 50
]
] ]
end
to w make "b 0
outport 888 :b
windowcreate "main "mywindow "mytitle 0 0 100 200 [] comboboxcreate "mywindow "mycombo 25 0 50 150
comboboxaddstring "mycombo [1] comboboxaddstring "mycombo [2]
comboboxaddstring "mycombo [3]
comboboxaddstring "mycombo [4] comboboxaddstring "mycombo [q]
buttoncreate "mywindow "mydraw "Action 25 160 50 25 [relay1] end
5. ใหผเรยนเขยนค าอธบายการท างานของชดค าสงทเหนวาท างานอยางไร
------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
6. จากตวอยางโปรแกรมนใหผเรยนเขยนอธบายวาจะสามารถน าไปประยกตใชกบงานอะไรไดบางอยางไร
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------- อธบายการท างานของโปรแกรม
to relay1
make "c (array 4 0) ก าหนด c ใหเปนอารเรย ขนาด 4 โดยเรมตนท 0 make "a (array 4 0) ก าหนด a ใหเปนอารเรย ขนาด 4 โดยเรมตนท 0
setitem 0 :a 1 ก าหนดให อารเรย 0 มคาเปน 1 setitem 1 :a 2 ก าหนดให อารเรย 1 มคาเปน 2
setitem 2 :a 4 ก าหนดให อารเรย 2 มคาเปน 4
setitem 3 :a 8 ก าหนดให อารเรย 3 มคาเปน 8 make "ch first comboboxgettext "mycombo
if :ch = "q [ windowdelete "mywindow ] ถากด q ใหปดหนาตาง windows ทสรางขนมา if not :ch = "q [ ถาไมใช q
make "e :b ให e = b make "i 0 ให i = 0
for [0 4 1] [
make "f modulo :e 2 เอา e หารดวย 2 เกบทคา f setitem :i :c :f แลวน า f มาเกบทอารเรย 0 ของ c
make "t item :i :c น าอารเรยทเกบไวมาไวท item 0 ของ c มาไวท t
make "t :e-:t ลบเศษทง
make "e :t / 2 เอา t หารดวย 2 make "i :i+1
] if :ch > 0 [
if :ch < 5 [
make "d item :ch-1 :c make "e item :ch-1 :a
if :d = 0 [make "b :b+:e] if :d = 1 [make "b :b-:e]
print :b outport 888 :b wait 50
]
] ]
end
อธบายการท างานของโปรแกรม
to w make "b 0 (ก าหนดคา b เทากบ 0 )
outport 888 :b (แสดงคา b ออกทาง relay) windowcreate "main "mywindow "mytitle 0 0 100 200 [] (สรางหนาตาง windows ขนมาตงชอวา mywindows)
comboboxcreate "mywindow "mycombo 25 0 50 150 (สรางcombobox ทหนาตาง windows ทเราสรางทจดx1,y1,x2,y2)
comboboxaddstring "mycombo [1] (ใส 1 ท mycombo)
comboboxaddstring "mycombo [2] (ใส 2 ท mycombo) comboboxaddstring "mycombo [3] (ใส 3 ท mycombo)
comboboxaddstring "mycombo [4] (ใส 4 ท mycombo) comboboxaddstring "mycombo [q] (ใส q ท mycombo)
buttoncreate "mywindow "mydraw "Action 25 160 50 25 [relay1] (สรางปม ชอ Action เพอเรยกใชจาก relay1)
end
อธบายค าสง
windowcreate "main "mywindow "mytitle 0 0 100 200 []
คอค าสงสรางหนาตางห ลก ชอ mywindows โดยใหมหวขอบอกขยายความ mytitle และระบต าแหนงมมบนซาย
(x1,y1) กบต าแหนงลางขวา (x2,y2) ทจะแสดง comboboxcreate "mywindow "mycombo 25 0 50 150
คอค าสงสราง combo ไวในหนาตาง mywindows โดยตงชอวา mycombo และระบต าแหนงวาดในหนาตางทสรางขน คอ มมบนซาย (x1,y1) กบต าแหนงลางขวา (x2,y2)
comboboxaddstring "mycombo [1] คอค าสงในการเพมคาเขาไปไวใน combo ทสรางขน
buttoncreate "mywindow "mydraw "Action 25 160 50 25 [relay1]
คอค าสงสรางปมเพอคลก เมอตองการสงคา โดยตงชอวา mydraw และมขอความแสดงบนปมทสรางวา Action และระบต าแหนงวาดในหนาตางทสรางขน คอ มมบนซาย (x1,y1) กบระบความกวางและความยาวของปม ตอจากนนท าการ
เรยกโปรแกรมยอยทสรางขนไวใหท างาน make "ch first comboboxgettext "mycombo
ท าการสรางตวแปลขนมารบคาจาก combo ทชอ mycombo
บอรด Input Switch
ค าสงในการรบขอมลเขาทางพอรตขนาน
จากบทเรยนเกยวกบการตดตอพอรตขนานทกลาวมาขางตน จะเหนไดวาลวนเปนการสงงานออกจากคอมพวเตอร
เพอแสดงผลท อปกรณปลายทางภายนอกคอมพวเตอรทงสน แตหากการเขยนโปรแกรมเพอการควบคมระบบอตโนมตโดยแทจรงนนตองมการรบคาจากอปกรณภายนอกกลบเขามาทคอมพวเตอรเพอประมวลผลและแสดงผลดวยจงจะเปน
ระบบทสมบรณ ดงนนหวขอดงตอไปน จงมความส าคญอยาง ยงทจะเรยนรและเขาใจหลกการเขยนโปรแกรมรบคาจาก
อปกรณภายนอก
ในเรองการรบขอมลเขาทางพอรตขนาน เราจะใช
Status Port เปนพอรตรบขอมลเขา เนองจากเปนพอรตเดยวทเปนพอรตอนพต
Data Port #888 Status Port #889 Control Port
#890
inportb เปนค าสงในการรบคาจากพอรตทมคา 8 บท มรปแบบค าสงดงน inportb เลขทพอรต เชน inportb 889 แตการรบคาอนพตมาจากอปกรณภายนอกนน เราจ าเปนตองสรางตวแปรรบ
เพอเกบคาดงกลาวไวกอนจะท ากระบวนการอน ๆ ต อไป ดงนนค าสงรบคา inportb 889 ตองท างานรวมกบกบค าสงอน ๆ
ดวย ดงตวอยางตอไปน
make “x inportb 889 ; คอการรบคาจากพอรตเลขท 889 เพอเกบไวในแปรชอ x show :x ; แสดงคาทเกบไวในตวแปร x ออกมา
บอรด Input Switch
บอรด Input Switch ของบรษท แบมบ โปรเจค กรปส จ ากด ถกออกแบบมาเพอเปนสอฮารดแวรในการเรยนรการเขยนโปรแกรมรบคาจากอปกรณภายนอก และการแสดงผล มโครงสรางดงตอไปน
ลมเรองโครงสรางและ
เลขทพอรตหรอยงครบ
วงจร input switch มโครงสรางดงรปดาน
ซายมอน การตอวงจร switch ตอเพยง 5 บทของพอรตเทานน คอ D7 D3 เนองจาก
โครงสรางพอรตไดถกออกแบบมาจากผผลตเพอ
ใชงานเพยง 5 บท
จากวงจร กระแสไฟฟาจะไหลจากแหลงจายไฟไหลผานตวตานทานไฟฟา แลวผาน LED เพอ
จะไปสแรงดนทต ากวาคอกราวด (Ground) แต
กระแสไฟฟาไมสามารถไหลผานไปไดหากไมไดกดสวทซซงท าหนาทเปนสะพานไฟ ดงนน
กระแสไฟ ฟาจงมลกษณะคลายกระแสน าทไหลเขาบทตาง ๆ ของพอรตขนานแทน จนกระทง
ความสงของแรงดนเทากบแหลงจายไฟฟา
( +5Vdc) จงหยดไหลปรากฏการณดงกลาวเกดขนเรวมากเนองจากเปนการท างานของ
กระแสไฟฟา
มาถงตอนนแตละบทของพอรตขนาน ทบานเลขท 889 จะมแรงดนไฟฟาเทากบ 5 Vdc แทน
ความหมายทางดจตอลคอ “1”s
หากมการกดสวทซใด ๆ กระแสไฟฟาจะ
สามารถไหลผานสวทซไปสทต ากวาไดคอกราวดนนเอง ดงนน แรงดนไฟฟาทบททมการกด
สวทซจะตกลงเปน “0” ลองจนตนาการเหมอนน าทถกไขกอกทงระดบน าจะลดลงจนหมด
ตามรปดานซายมอ มการกดสวทซ 2 และ สวทซ
4 ซงตอกบพอรตท D6 และ D4 ตามล าดบ จะกลายเปน “0” ขณะทบทอน ๆ ยงคงเปน “1”
คราวนเราตองเขยนค าสงรบคาจากพอรตขนาน
ตรวจสอบสถานการณกดสวทซ และแสดงผลให ถกตอง โดยใชค าสงทกลาวไปแลวขางตนคอ
make “x inportb 889 ; คอการรบคาจากพอรตเลขท 889 เพอเกบไวในแปรชอ x show :x ; แสดงคาทเกบไวในตวแปร x ออกมา
ผลทไดจะเปนตวเลขขนาดหลกสบทมคาหลกหมนซงจรง ๆ แลวคอมพวเตอรรบคาจากพอรตขนานเปนเลขฐานสองในบทตาง ๆ รวมถงบททเราไมไดตอใชงานดวยมาแปลงเปนเลขฐานสบแลวแสดงใหเราเหนบนจอคอมพวเตอรนนเอง แต
จ านวนตวเลขทแสดงจะตรงกนบางหรอไมตรงกนบางกบเครองอน ๆ เพราะเครองแตละเครองเชนตางยหอ อาจจะมการก าหนดคาบททไมไดตอใชงานตางกน จงท าใหคาทแสดงออกมาไมเทากน อยางไรกตามตวเลขขนาดหลกหมนเราจะมา
นงแปรความหมายคอนขางยากและไมสะดวก ดงนนในทางตรรกศาสตร (คณตศาสตรทวาดวยการกระท ากบตวเลข “0” กบ “1” จงมกระบวนการตาง ๆ ทสามารถน ามาใชงานแลวใหไดผลลพธตามทเราตองการได เราจะพกเรองการรบคา
พอรตไวชวคราว เพอจะเรยนรเรองการกระท าทางตรรกศาสตรกนกอนดงน
#889
เรยนรการการท าทางตรรกศาสตร
การกระท า “และ” (AND) การกระท า “และ” (AND) เปรยบเสมอนวงจรไฟฟาแบบ “อนกรม” แสดงใหเหนดงตอไปน
เราจะสงเกตเหนวาวงจรไฟฟาแบบ “อนกรม” จะใหผลลพธ เปนจรง (ไฟตดสวาง) กตอเมอเงอนไขทง 2 ในทนคอ กดสวทชไฟฟาเปนจรง (สะพานตอ)
ดงนนเราสามารถสรปการกระท าทางตรรกศาสตร “และ” (AND) ไดดงน
AND ผลลพธ
A B Y
0 0 0
0 1 0
1 0 0
1 1 1
ตวอยางท 1
หากเรามตวแปรทมคา 8 บท 2 ตว เชน ตวแปร X = 1010 0101 และตวแปร Y = 0101 1010 เราจะน าคาตวแปรทงสองตวมา AND กน จะไดผลลพธดงน
X = 1 0 1 0 0 1 0 1
Y = 0 1 0 1 1 0 1 0
ผลลพธ = 0 0 0 0 0 0 0 0
กดสวทช A กดสวทช B
แบตเตอรร ผลลพธ
แบตเตอรร
แบตเตอรร แบตเตอรร ผลลพธ
ผลลพธ
ผลลพธ
กดสวทช A ปลอยสวทช B
ปลอยสวทช A กดสวทช B ปลอยสวทช A ปลอยสวทช B
กระแสไฟฟา
ตวอยางท 2
หากตวแปร T = 15 ( 0000 1111 ) และตวแปร U = 17 (0001 0001) จงหาผลลพธของ T “AND” U
T = 0 0 0 0 1 1 1 1 U = 0 0 0 1 0 0 0 1
ผลลพธ = 0 0 0 0 0 0 0 1
ผลลพธ = 1 ในเลขฐานสบ
ค าสง AND ในภาษาโลโก bitand คาตวตง คาตวกระท า เปนการ AND ในต าแหนงบททตรงกนระหวางตวตง และตวกระท า โดยตวตงและตว
กระท าอาจจะอยในเลขจ านวนเตม หรอ ตวแปรกได ค าสง bitand ไมสามารถท างานเพยงล าพงได เราจ าเปนตองมทเกบคาผลลพธ ดงนน bitand มกจะท างานรวมกบ make เพอประกาศคาตวแปรเกบคาผลลพธ
เชน make “Hello bitand 128 129 ; ก าหนดตวแปรชอ Hello เกบผลการ AND ของ 128 กบ 129
show :Hello ; แสดงผลลพธ
ผลลพธจะแสดงคา = 128 ซงมาจาก
128 = 1 0 0 0 0 0 0 0
129 = 1 0 0 0 0 0 0 1 Hello = 1 0 0 0 0 0 0 0
การกระท า “หรอ” (OR) การกระท า “หรอ” (OR) เปรยบเสมอนวงจรไฟฟาแบบ “ขนาน” แสดงใหเหนดงตอไปน
เราจะสงเกตเหนวาวงจรไฟฟาแบบ “ขนาน” จะใหผลลพธ ทเหมอนกบผลลพธทางตรรกศาสตรแบบการกระท าดวย “หรอ” และ วงจรดจตอลแบบ “OR” คอจะใหผลเปนจรง (ไฟตดสวาง) กตอเมอเพยงเงอนไขใดเงอนไขหนง ในทนคอ สะพาน
ไฟฟาเปนจรง (สะพานตอ) ดงนนเราสามารถสรปการกระท าทางตรรกศาสตร “หรอ” (OR) ไดดงน
กดสวทช A
กดสวทช B
ปลอยสวทช A
กดสวทช B
กดสวทช A
ปลอยสวทช B
ปลอยสวทช A
ปลอยสวทช B
กระแสไฟฟา แบตเตอรร แบตเตอรร
แบตเตอรร แบตเตอรร
ผลลพธ ผลลพธ
ผลลพธ ผลลพธ
OR ผลลพธ
A B Y
0 0 0
0 1 1
1 0 1
1 1 1
ตวอยางท 1
หากเรามตวแปรทมคา 8 บท 2 ตว เชน ตวแปร X = 1010 0101 และตวแปร Y = 0101 1010 เราจะน าคาตวแปรทงสองตวมา OR กน จะไดผลลพธดงน
X = 1 0 1 0 0 1 0 1
Y = 0 1 0 1 1 0 1 0
ผลลพธ = 1 1 1 1 1 1 1 1
ตวอยางท 2 หากตวแปร T = 15 ( 0000 1111 ) และตวแปร U = 17 (0001 0001) จงหาผลลพธของ T “OR” U
T = 0 0 0 0 1 1 1 1 U = 0 0 0 1 0 0 0 1
ผลลพธ = 0 0 0 1 1 1 1 1 ผลลพธ = 31 ในเลขฐานสบ
ค าสง OR ในภาษาโลโก
bitor คาตวตง คาตวกระท า เปนการ OR ในต าแหนงบททตรงกนระหวางตวตง และตวกระท า โดยตวตงและตว
กระท าอาจจะอยในเลขจ านวนเตม หรอ ตวแปรกได ค าสง bitor ไมสามารถท างานเพยงล าพงได เราจ าเปนตองมทเกบคาผลลพธ ดงนน bitor มกจะท างานรวมกบ make เพอประกาศคาตวแปรเกบคาผลลพธ
เชน make “Yes bitand 128 129 ; ก าหนดตวแปรชอ Yes เกบผลการ OR ของ
128 กบ 129
show :Yes ; แสดงผลลพธ
ผลลพธจะแสดงคา = 129 ซงมาจาก
128 = 1 0 0 0 0 0 0 0 129 = 1 0 0 0 0 0 0 1
Hello = 1 0 0 0 0 0 0 1
คราวนกลบมาสวงจร Input Switch
จากทเกรนคางไวกอนจะเรยนรเรอง
การกระท าทางตรรกศาสตร เมอเรา
make “x inportb 889
show :x
เราจะไดคาเปนเลขฐานสบทมคาเปนหลกหมนหรอหลกแสนเลยทเดยว นนคอคา ทแปลงมาจากเลขฐานสองจ านวน 16
บท แตพอรตขนานทเราตอรบคาอยนมเพยง 5 บท ดงนนเราจะสนใจเพยง 5 บทนเทานน ดงตารางขางลางน
x = ไมสนใจ คออาจเปน 0 หรอ 1 กได
ถาเราไมกดสวทชใด ๆ จะม “1”
มารอทพอรตขนาน ในทนเราไมกดสวทซ ใด ๆ เลย เราจะได “1” มารอทพอรตขนาน
บานเลขท 889 ทง 5 บทเลย ดงรปดาน
ขวามอนมาถงขนตอนน เราตองใชค าสง inportb ดงทกลาวมาแลวเพอดงคาจาก
พอรตเขาไปยงหนวยความจ าในคอมพวเตอรเพอน าคาไปใชงานตอไป
ใหสงเกตคาท D7 จะมเครองหมาย (-) อยดานบน เครองหมายนคอนเสธ หรอเราเรยกวาบาร (bar) หรอ
อนเวอรเตอร จะท าใหคาทอยภายใตเครองหมายนกลบคา เชน
เมอปอนคา “1” ผานสญลกษณบารน จะใหผลกลบคาออกมาคอ “0”
ในทางกลบกนหากเราปอนคา “0” ผานสญลกษณบารน จะไดผลออกมาเปน “1”
เมอเราใชค าสง make “x inportb 889 โปรแกรมจะน าคาจากพอรตขนานทสวทชตออยมาเกบไวใตวแปรชอ x ภายในคอมพวเตอรแลว จากตวอยางขางตน ถาหากเราไมกดสวทซใด เราจะไดคาดงน
จะสงเกตวา D7 จะใหผลเปน “0” เพราะอยภายใตเครองหมายบาร และมอนพตเปน “1” สวนอก 4 บท (D6,D5,D4
และ D3) จะใหคาตรงกบอนพตทเขามา แต ในความเปนจรงเมอเราตองการแสดงผลโดยการใชค าสง show :x เราจะไมเหนการเรยงบทอยางตารางทแสดงขางตน แตจะใหผลออกมาเปนเลขฐานสบทแปลงมาจากบทตาง ๆ แลว ท าใหเรา
น าไปใชงานยาก และไมรวาบทใดใหผลเปนอะไรบาง เราจงตองใชกระบวนการทางตรรกศาสตรมาชวยเราจะตองมาพจารณาทละบทดงน หากเราสนใจบท D7 วามการกดหรอไม เราเพยงน าคา ประจ าหลกของ D7 มา AND กบคาทรบเขา
มา จะท าใหบทอน ๆ ทเราไมสนใจกลายเปน “0” ทงหมด ดงน
make “x inportb 88 9 x = D7 D6 D5 D4 D3 D2 D1 D0
make “y7 bitand :x 128 128 = 1 0 0 0 0 0 0 0
y7 = D7 0 0 0 0 0 0 0
show :y7
128 64 32 16 8 4 2 1
7
2
6
2
5
2
4
2
3
2
2
2
1
2
0
2
D7
D6
D5
D4
D3 x
x
x
128 64 32 16 8 4 2 1
7
2
6
2
5
2
4
2
3
2
2
2
1
2
0
2
0
1
1
1
1
x
x
x
1
1
1
1
1
ก y7 = 0 แสดงวา D7 = “0” ซงเปนผลมาจากการอานคาพอรตผานสญลกษณ บาร นนคอ อนพตตองเปน “1”
แสดงวาสวทซไมไดมการกด หาก y7 = 128 แสดงวา D7 = “1” แสดงวาคาทรบจากพอรตมอนพตเปน “0” แสดงวามการกดสวทซ
เชนเดยวกนกบบท D7 เราสามารถท ากระบวนการทางตรรกศาสตรกบบทอน ๆ ทเราตองการทราบสถานะของการกดสวทซทบทนน ๆ โดยการ AND คาประจ าหลกของบทนน ๆ และ แสดงคาด เชน เราจะดบทท D5 วามการกดสวทซ
หรอไม
make “x inportb 889 x = D7 D6 D5 D4 D3 D2 D1 D0
make “y5 bitand :x 32 128 = 0 0 1 0 0 0 0 0
y5 = 0 0 D5 0 0 0 0 0
show :y5
หาก y5 = 0 แสดงวา D5 = “0” จะมความแตกตางจาก D7 คอ D5 ไมไดอยภายใตสญลกษณบาร ดงนนคาทอานไดอยางไร คาอนพตทเขามากเปนอยางนน แสดงวาสวทซมการกด
หาก y5 = 32 แสดงวา D5 = “1” แสดงวาคาทรบจากพอรตมอนพตเปน “1” แสดงวาไมมการกดสวทซ
หมายเหต พอรตขนานบานเลขท 889 จะม D7 เพยงบทเดยวเทานนทอยภายใตสญลกษณ บาร (-)
ตวอยาง โปรแกรมรบคา Input Switch จากบอรด Input Switch ของ บรษท แบมบ โปรเจค กรปส จ ากด
to inputSW ; โปรแกรมชอ InpuSW
make “t 0 ; ก าหนดเงอนไขออกจากการวนรอบ
do.until [ make “x inportb 889 ; รบคาจากพอรตเลขท 889 เกบไวทตวแปรชอ x
make “D7 bitand :x 128 ; น าคาทรบเขามา AND กบคาประจ าหลก D7 make “D6 bitand :x 64 ; น าคาทรบเขามา AND กบคาประจ าหลก D6
make “D5 bitand :x 32 ; น าคาทรบเขามา AND กบคาประจ าหลก D5
make “D4 bitand :x 16 ; น าคาทรบเขามา AND กบคาประจ าหลก D4 make “D3 bitand :x 8 ; น าคาทรบเขามา AND กบคาประจ าหลก D3
ifelse :D7=128 [make “D7 “Pressed] [make “D7 “Unpressed] ; หาก D7=128 ก าหนดคาใหมให D7 = Pressed ถา ไมใชให D7 = Unpressed
ifelse :D6=64 [make “D6 “Unpressed] [make “D6 “Pressed] ; หาก D6=64 ก าหนดคาใหมให D6 = Unpressed ถาไมใชให D6 = Pressed
ifelse :D5=32 [make “D5 “Unpressed] [make “D5 “Pressed] ; หาก D5=32
ก าหนดคาใหมให D5 = Unpressed ถาไมใชให D5 = Pressed ifelse :D4=16 [make “D4 “Unpressed] [make “D4 “Pressed] ; หาก D4=16
ก าหนดคาใหมให D4 = Unpressed ถาไมใชให D4 = Pressed ifelse :D3=8 [make “D3 “Unpressed] [make “D3 “Pressed] ; หาก D3=8
ก าหนดคาใหมให D3 = Unpressed ถาไมใชให D3 = Pressed
show “Sw1 ; แสดงค าวา Sw1 show :D7 ; แสดงคา D7
show “Sw2 ; แสดงค าวา Sw2 show :D6 ; แสดงคา D6
show “Sw3 ; แสดงค าวา Sw3
show :D5 ; แสดงคา D5 show “Sw4 ; แสดงค าวา Sw4
show :D4 ; แสดงคา D4 show “Sw5 ; แสดงค าวา Sw3
show :D3 ; แสดงคา D3 ][:t=1] ; ตรวจสอบวา t=1 ? เพอออกจากการวนรอบ
end
ผลของโปรแกรมนเมอ Run โปรแกรมจะแสดงคา Input Switch โดยแสดงสถานการณกดสวทชแตละตว แลววนกลบมา
แสดงแบบไมมวนสนสด เมอเรากดสวทซใด ๆ โปรแกรมจะแสดงการเปลยนแปลงตวนน ๆ การออกจากโปรแกรมน ใหใชเมาสคลกทปม Halt เพอหยดโปรแกรมแบบไมมเงอนไข
จากการเขยนโปรแกรมขางตนน การแสดงผลอาจจะดไมคอยเปนระเบยบและคอนขางดยาก เราจงตองเรยนรค าสง
โลโกทส าคญอกค าสงหนงคอค าสงสรางตวแปร แบบ Array
ตวแปรแบบ Array
ตวแปรแบบ Array สามารถเปรยบไดกบการก าหนดขนาดของลนชก และการใสของลงไปในลนชก ดงนนผเขยนจะเรยกเปนลนชกตลอด เพอใหสามารถจนตนาการไดงาย มรปแบบดงน
make “ชอตวแปร (array ขนาด ชองเรมตน) คอการก าหนดขนาดของลนชกทเราตองการสรางนนเอง และเรมลนชกชองทเทาไร ตวอยางเชน make “bamboo (array 5 0) หมายถงลนชกชอ bamboo มขนาด 5 ชอง และชอง
แรกเรยกวา ชอง 0 ดงนนลนชกนจะม ชองท 0, 1, 2, 3 และ 4 เปนจ านวน 5 ชองพอด ตอไปคอการเอาของใสลนชก
แตละชอง มรปแบบดงน setitem 0 :bamboo 10 ; คอก าหนด Item (ชอง) ท 0 ของลนชกชอ bamboo ใสคา 10 ลงไป
setitem 1 :bamboo 5 ; คอก าหนด Item (ชอง) ท 1 ของลนชกชอ bamboo ใสคา 5 ลงไป setitem 2 :bamboo 3 ; คอก าหนด Item (ชอง) ท 2 ของลนชกชอ bamboo ใสคา 3 ลงไป
setitem 3 :bamboo 20 ; คอก าหนด Item (ชอง) ท 3 ของลนชกชอ bamboo ใสคา 20 ลงไป setitem 4 :bamboo 1 ; คอก าหนด Item (ชอง) ท 4 ของลนชกชอ bamboo ใสคา 1 ลงไป
show :bamboo ; เมอใสคาลงไปครบทกลนชกกท าการแสดง จะไดผลดงน
[ 10 5 3 20 1 ]
ขอสงเกต *** ในภาษาโลโกเราสามารถก าหนดลนชกไดหลายชองแบบไมจ ากด แตก าหนดไดเพยงลนชกแบบชน
เดยว ซงตางจากโปรแกรม อน ๆ เชน C หรอ Pascal ทสามารถก าหนด Array ไดหลายชน
จากโปรแกรมการรบคา Input Switch ขางตน เราสามารถเขยนโปรแกรมรวมกบการก าหนดตวแปรแบบ Array เพอแสดงคาแบบใหมไดดงตวอยางตอไปน
ตวอยาง โปรแกรมรบคา Input Switch จากบอรด Input Switch ของ บรษท แบมบ โปรเจค กรปส จ ากด
to inputSW ; โปรแกรมชอ InpuSW make “t 0 ; ก าหนดเงอนไขออกจากการวนรอบ
do.until [
make “x inportb 889 ; รบคาจากพอรตเลขท 889 เกบไวทตวแปรชอ x make “D7 bitand :x 128 ; น าคาทรบเขามา AND กบคาประจ าหลก D7
make “D6 bitand :x 64 ; น าคาทรบเขามา AND กบคาประจ าหลก D6 make “D5 bitand :x 32 ; น าคาทรบเขามา AND กบคาประจ าหลก D5
make “D4 bitand :x 16 ; น าคาทรบเขามา AND กบคาประจ าหลก D4
make “D3 bitand :x 8 ; น าคาทรบเขามา AND กบคาประจ าหลก D3
ifelse :D7=128 [make “D7 “Pressed] [make “D7 “Unpressed] ; หาก D7=128 ก าหนดคาใหมให D7 = Pressed ถาไมใชให D7 = Unpressed
ifelse :D6=64 [make “D6 “Unpressed] [make “D6 “Pressed]
; หาก D6=64 ก าหนดคาใหมให D6 = Unpressed ถาไมใชให D6 = Pressed ifelse :D5=32 [make “D5 “Unpressed] [make “D5 “Pressed]
; หาก D5=32 ก าหนดคาใหมให D5 = Unpressed ถาไมใชให D5 = Pressed ifelse :D4=16 [make “D4 “Unpressed] [make “D4 “Pressed]
; หาก D4=16 ก าหนดคาใหมให D4 = Unpressed ถาไมใชให D4 = Pressed ifelse :D3=8 [make “D3 “Unpressed] [make “D3 “Pressed]
; หาก D3=8 ก าหนดคาใหมให D3 = Unpressed ถาไมใชให D3 = Pressed
make “bamboo (array 5 0) setitem 0 :bamboo :D7
setitem 1 :bamboo :D6 setitem 2 :bamboo :D5
setitem 3 :bamboo :D4
setitem 4 :bamboo :D3 show :bamboo
][:t=1] end ; ตรวจสอบวา t=1 ? เพอออกจากการวนรอบ
ถงตอนนเราสามารถเขยนโปรแกรมแสดงการ กด หรอ ไมกด สวทซไดแลว ซงเปนประโยชนมากในการไป
ประยกตระบบอตโนมตตาง ๆ ทมทงการรบคา และการแสดงผลรวมถงการควบคมอปกรณในระบบ
1.ใหผเรยนพมพค าสงดงตอไปนแลวดผลการท างาน
ตวอยาง โปรแกรมรบคา Input Switch จากบอรด Input Switch ของ บรษท แบมบ โปรเจค กรปส จ ากด
to inputSW make “t 0
do.until [
make “x inportb 889 make “D7 bitand :x 128
make “D6 bitand :x 64 make “D5 bitand :x 32
make “D4 bitand :x 16 make “D3 bitand :x 8
ifelse :D7=128 [make “D7 “Pressed] [make “D7 “Unpressed]
ifelse :D6=64 [make “D6 “Unpressed] [make “D6 “Pressed] ifelse :D5=32 [make “D5 “Unpressed] [make “D5 “Pressed]
ifelse :D4=16 [make “D4 “Unpressed] [make “D4 “Pressed] show “Sw1
show :D7
show “Sw2 show :D6
show “Sw3 show :D5
show “Sw4 show :D4
show “Sw5
show :D3 ][:t=1]
end
2.ใหผเรยนพมพค าสงดงตอไปนแลวดผลการท างาน
ตวอยาง โปรแกรมรบคา Input Switch จากบอรด Input Switch ของ บรษท แบมบ โปรเจค กรปส จ ากด
to inputSW2 make “t 0
do.until [
make “x inportb 889 make “D7 bitand :x 128
make “D6 bitand :x 64 make “D5 bitand :x 32
make “D4 bitand :x 16 make “D3 bitand :x 8
ifelse :D7=128 [make “D7 “Pressed] [make “D7 “Unpressed]
ifelse :D6=64 [make “D6 “Unpressed] [make “D6 “Pressed] ifelse :D5=32 [make “D5 “Unpressed] [make “D5 “Pressed]
ifelse :D4=16 [make “D4 “Unpressed] [make “D4 “Pressed] ifelse :D3=8 [make “D3 “Unpressed] [make “D3 “Pressed]
make “bamboo (array 5 0)
setitem 0 :bamboo :D7 setitem 1 :bamboo :D6
setitem 2 :bamboo :D5 setitem 3 :bamboo :D4
setitem 4 :bamboo :D3 show :bamboo
][:t=1] end
3. ใหผเรยนทดลองคยค าสงขางลางน แลวใชอปกรณ InputSwitch ของบรษทแบมบโปรเจค กรปส จ ากด เชอมตอแลวดการท างานของอปกรณพรอมทงดหนาจอคอมพวเตอรวามการท างานอยางไร
to inputsw3
make "z 0
do.until [ make "x inportb 889
make "x item 1 :x make "a bitand :x 8 ; ตรวจสอบ bit B3 ดวยการ and กบ 1 ( x x x x x x x x )
; ( 0 0 0 0 1 0 0 0 ) make "b bitand :x 16 ; ตรวจสอบ bit B4 ดวยการ and กบ 1 ( x x x x x x x x )
; ( 0 0 0 1 0 0 0 0 )
make "c bitand :x 32 ; ตรวจสอบ bit B5 make "d bitand :x 64 ; ตรวจสอบ bit B6
make "e bitand :x 128 ; ตรวจสอบ bit B7 ifelse :a = 8 [make "a 0][make "a 1] ; ถามการกด sw 5 (B3 = 0 ) ให a = 1
ifelse :b = 16 [make "b 0][make "b 1] ; ถามการกด sw 4 (B4 = 0 ) ให b = 1
ifelse :c = 32 [make "c 0][make "c 1] ; ถามการกด sw 3 (B5 =0 ) ให c = 1 ifelse :d = 64 [make "d 0][make "d 1] ; ถามการกด sw 2 (B6 = 0) ให d = 1
ifelse :e = 128 [make "e 1][make "e 0] ; ถามการกด sw 1 (B7 = 1) ให e = 1 make "y (array 5 0)
setitem 0 :y :e setitem 1 :y :d
setitem 2 :y :c
setitem 3 :y :b setitem 4 :y :a
show :y make "t :a+:b+:c+:d+:e ; ถากด sw ทกปมจะออกจากโปรแกรม
if :t = 5 [make "z 1]
][:z=1] end
4. ใหผเรยน คย ตวอยางโปรแกรม แสดงคาการกดสวตซ sw0 ถง sw4
to we make "i 0
make "j 0 print [press q to EXIT]
do.until [make "j readchar make "invalue inportb 889
print :invalue
print [press q to EXIT] ] [:j="q]
end
รปท 1 เรยกโปรแกรม we รปท 2 จะมชอง Input ใหใสเลขเขาไป รปท 3 ใสเลข 1
รปท 4 หลงจากนนกใหกดปมสวทซ รปท 5 เปนการท างานของ โปรแกรมทไดผลลพธ เชน ใสเลข 1 แลวกด ปมสวทซ แลวจงกด Enter
ใหสงเกตการท างานของโปรแกรม เมอตองการ ออกจากโปรแกรมใหผเรยนใส อกษร q
5.ใหผเรยนคยตวอยางโปรแกรม โดยตวโปรแกรมจะแสดงต าแหนงของการรบคา InputSwitchs ทไดต าแหนงตาง ๆ ถาตองการออกจากโปรแกรมใหใสอกษา q
to xx
make "sw (array 5 0)
make "i 0 make "j 0
print [press q to EXIT] do.until [make "j readchar
make "invalue inportb 889
print :invalue make "temp 255 - :invalue
setitem 0 :sw 0 setitem 1 :sw 0
setitem 2 :sw 0 setitem 3 :sw 0
setitem 4 :sw 1
if :temp > 127 [ make "temp :temp - 128 setitem 4 :sw 0 ] if :temp > 63 [ make "temp :temp - 64 setitem 3 :sw 1 ]
if :temp > 31 [ make "temp :temp - 32 setitem 2 :sw 1 ] if :temp > 15 [ make "temp :temp - 16 setitem 1 :sw 1 ]
if :temp > 7 [ make "temp :temp - 8 setitem 0 :sw 1 ]
show :sw print [press q to EXIT]
] [:j="q] End
รปท 1 เรยกโปรแกรม xx รปท 2 กดปมสวทซ รปท 3 จะเหนต าแหนงการแสดงการรบ InputSwitchs
ทมา : [DOC]
คมอการใชโปรแกรม โลโก 203.172.164.35/ictcenter/mod/resource/view.php?inpopup=true...