บทที่ 8 while กับ do while |
|||
[วิดีโอประจำบท] | |||
ในบทที่ผ่านมาเราได้รู้เกี่ยวกับคำสั่ง for ให้โปรแกรมทำอะไรซ้ำๆกัน แต่ข้อจำกัดของ for คือเราต้องรู้รอบที่แน่นอนที่จะให้โปรแกรมทำงาน 5 รอบ 10 รอบ ก็กำหนดลงไป แต่หากว่าเราไม่รู้ว่าเมื่อไรจะถึงจุดที่เรากำหนดล่ะ เช่น ทำซ้ำไปเรื่อยๆเมื่ออุณหภูมิมากกว่า 25 องศา, หยุดทำเมื่อมีการตรวจพบว่าฝนตก แบบนี้ for ทำไม่ได้แน่นอนครับ เพราะเราไม่รู้ว่าอุณหภูมิจะถึง 25 องศาเมื่อไร หรือฝนจะตกในอีกกี่นาทีกี่วินาที ในเมื่อ for ทำงานไม่ได้แล้วจะสั่งมันยังไง ไม่หมดทางหรอกครับ while กับ do while ช่วยได้ บอกแล้วไงว่าไมโครคอนโทรเลอร์มันทำได้ทุกอย่าง (แต่เราต้องสั่งมันก่อนโดยการเขียนโปรแกรมนะครับ) |
|||
while กับ do while สองอันนี้ทำงานเหมือนกันครับ คือทำจนกว่าจะเกิดเงื่อนไข... หรือทำเมื่อมีเงื่อนไข... แล้วแต่ที่เราจะออกแบบโปรแกรม แต่ที่ต่างกันคือ while จะทำการตรวจสอบเงื่อนไขก่อนที่จะทำงาน ถ้าเป็นจริงก็จะทำตามคำสั่ง เมื่อจบคำสั่งก็จะตรวจสอบเงื่อนไขเป็นจริงทำต่อ เป็นเท็จก็ออกจากคำสั่งไป ส่วน do while จะตรวจเงื่อนไขหลังจากทำงานแล้ว คือมันจะทำตามคำสั่งก่อน เมื่อจบคำสั่งก็จะตรวจสองเงื่อนไข ถ้าเป็นจริงก็จะวนกลับขึ้นไปทำคำสั่งเดิมซ้ำ ถ้าเป็นเท็จก็จะออกจากคำสั่งไป โดยรูปแบบของคำสั่ง while จะเป็นตามนี้
ส่วนรูปแบบของคำสั่ง do while จะตามนี้
มาถึงบทนี้ผู้เขียนคิดว่าทุกท่านน่าจะพอเข้าใจเรื่องโค้ดต่างๆกันแล้ว ไม่ขออธิบายมากครับ ดูตัวอย่างกันเลยดีกว่า |
|||
![]() |
|||
เขียนโปรแกรม while กันดีกว่า
อัพโหลดโปรแกรมแล้วลองเล่นดูครับ หลอด LED ดับอยู่ใช่มั๊ยครับ ลองกดปุ่มทีนึงแล้วไฟติดใช่มั๊ยครับ เพราะเราเขียนโปรแกรมว่า เมื่อขา 7 ที่ต่อกับปุ่มมีสถานะ HIGH (คือการกดปุ่มให้ไฟฟ้าไหลผ่าน) ก็ให้ขา 13 ที่มีหลอด LED มีสถานะเป็น HIGH ไฟไหลไปหลอดจึงติดไง ทีนี้เพิ่มโค้ดนิดหน่อย
โค้ดนี้ลองกดปุ่มค้าง LED จะติด ปล่อยเมื่อไรก็ดับเมื่อนั้น เพราะเราสั่งให้มันดับก่อน แล้วดูว่ากดรึเปล่า ถ้าไม่กดก็ดับต่อ ถ้ากดก็สว่าง แล้ววนลูปไปดับ กดอยู่ก็สว่างขึ้นมาอีก ใช่ครับ กดค้างมันก็ดับและสว่างกระพริบสลับกัน แต่เพราะความเร็วของไมโครคอนโทรเลอร์ ATmega328P คือ 16MHz ก็ 16 ล้านครั้งต่อวินาที ตาเรามองไม่ทันก็เลยเห็นมันสว่างตลอดนั่นเองครับ |
|||
ในส่วนของ do while นั้นผู้เขียนขอผ่านนะครับ เนื่องจากบทความยาวพอสมควรแล้ว และการทำงานก็ไม่ได้ซับซ้อนใดๆ ก็ทำงานเหมือน while ต่างกันแค่ที่บอกไว้ตอนต้นคือ while ตรวจเงื่อนไขก่อน จริงค่อยทำ แล้ววนกลับไปตรวจเงื่อนไขใหม่ จริงก็ทำซ้ำไม่จริงก็หยุด แต่ do while นั้น ทำก่อน ทำเสร็จแล้วจึงตรวจเงื่อนไข ถ้าเป็นจริงก็กลับไปทำซ้ำจนเสร็จ แล้วตรวจสอบ จริงวนไปทำใหม่ ไม่จริงก็หยุด ผู้เขียนจะจำแบบโหดๆนิดนึง while คือถามก่อนยิง do while คือยิงก่อนถาม ฉะนั้น while ถ้าผิดตัวก็จะไม่มีใครเจ็บตัวเพราะถามก่อน ใช่ก็ยิงไม่ใช่ก็ไม่ยิง แต่ do while นี่มีคนเจ็บตัวแน่นอน เพราะยิงก่อนแล้วค่อยถาม ถ้าถูกตัวยิงซ้ำ ผิดตัวขึ้นมาหยุดยิง แต่ก็มีคนเจ็บเพราะยิงไปก่อนแล้วนัดนึงนั่นเองครับ พอจะได้แนวๆกันบ้างรึเปล่า ยังไงก็ลองเขียนเล่น ลองทำความเข้าใจดูนะครับ ไมโครคอนโทรเลอร์มันเบิร์นโปรแกรมซ้ำได้เป็นแสนครั้ง ไม่ต้องกลัวว่าเบิร์นซ้ำๆบ่อยๆแล้วมันจะพังง่ายๆหรอกครับ |
|||
[ดาวน์โหลด] [กลับหน้าหลักของคอร์ส] |