บทที่ 3 Digital Input & if ... else |
||||
[วิดีโอประจำบท] | ||||
ใน 2 บทที่ผ่านมา เราได้เรียนรู้เรื่องการให้บอร์ดแสดงอะไรซักอย่างออกมาตามที่เราต้องการไปแล้ว แต่ในการใช้งานจริงๆบางครั้งเราไม่สามารถเขียนโปรแกรมให้ทำงานตายตัวแบบนี้ได้ และเราก็ไม่สามารถต่อบอร์ดกับคอมพิวเตอร์ตลอดเวลาเพื่อการแก้โปรแกรม การใช้งานบางอย่างต้องมีการรับค่าอะไรบางอย่างเพื่อเป็นข้อมูลที่ใช้ในการทำงาน หรือเพื่อให้เราสามารถควบคุมการทำงานต่างๆตามที่เราต้องการได้ในขณะที่บอร์ดตั้งอยู่เดี่ยวๆไม่ได้ต่อกับคอมพิวเตอร์ | ||||
การรับค่าดิจิตอล Digital Input |
||||
เงื่อนไข if … else เนื่องจากเรื่องการรับค่าที่ผมจะพูดต่อไปนี้มีคำสั่ง if … else ของภาษาซีมาเกี่ยวข้องด้วย จึงขอพูดถึง if … else ก่อนที่จะเริ่มไปต่อกันครับ if … else มันก็แปลตรงๆดัวเลยว่า “ถ้า” ... “ไม่งั้นก็” อะไรประมาณนั้น เช่น ถ้าคุณเห็นไฟสีแดงให้หยุดรถ ถ้าเห็นไฟสีเขียวให้ไป, ถ้ามีที่กั้นห้ามไป หรือถ้ามีคนยืนโบกห้ามไป ส่วนถ้าเจออื่นๆ(ที่ไม่ใช่สองเหตุการณ์ที่ว่ามา)ให้ไปได้เลย เป็นต้น การเขียนโปรแกรมสั่งงานก็เหมือน คือ ถ้า (อะไรบางอย่าง) ให้ (อะไรบางอย่าง) เช่น ถ้ามีคนแตะให้เปิดไฟ, ถ้าตรวจจับพบวัตถุให้เสียงดัง หรือถ้าประตูเปิดให้เสียงดัง เจออื่นๆให้เสียงเงียบ เป็นต้น โดยโครงสร้างคำสั่ง if … else มีดังนี้
เงื่อนไขต่างๆนั้นเราจะมีกี่เงื่อนไขก็ได้ เราแค่ใส่ else if ต่อไปเรื่อยๆ(เริ่มแรกสุด if ต่อๆไป else if) ตัวอย่าง if … else
ตัวอย่างแรกง่ายๆก่อนครับ คือให้เงื่อนไขว่า ถ้า x+y=1 ให้แสดงขอความว่า x หรือ y ตัวใดตัวหนึ่งมันต้องเป็นเลข 0 (เราว่ากันแค่ 1+0=1 นะครับ อย่าเพิ่งไปคิดไกลถึงทศนิยม) ต่อไปหากมีหลายเงื่อนไขบ้าง สมมติว่าเราให้โปรแกรมมันขับรถอยู่
ง่ายๆเช่นเคยครับ ถ้าโปรแกรมมันตรวจพบสีแดง(ไฟแดง)มันจะเหยียบเบรก ตรวจพบสีเหลืองมันก็จะชลอ ถ้าเจอสีอื่นๆก็เหยียบคันเร่งต่อไป ขั้นตอนการทำงานของมันคือ สมมติมันเจอไฟแดง ตรวจสอบตรงกับเงื่อนไขที่ 1 มันก็จะทำตามคำสั่งเงื่อนไขที่ 1 คือเหยียบ ทีนี้ถ้าสมมติมันเจอไฟเหลือง มันตรวจสอบกับเงื่อนไขที่ 1 พบว่าไม่ตรงเงื่อนไข มันก็จะข้ามคำสั่งมาตรวจสอบที่เงื่อนไขที่สอง ปรากฏว่าตรงเงื่อนไขที่สองนี่คือเจอไฟเหลือง มันก็จะทำตามคำสั่งของเงื่อนไขที่สองคือยกคันเร่งชลอความเร็ว เช่นกันหากมันเจอไฟสีน้ำเงิน สีเขียว สีชมพู ฯลฯ ไม่ตรงเงื่อนไข 1 ข้ามมาตรวจเงื่อนไข 2 ก็ยังไม่ตรงอีก มาเจอ else ซึ่งก็คือถ้าไม่มีในเงื่อนไข ใช่เลยสีน้ำเงินมันไม่มีในเงื่อนไขนี่ มันก็ทำตามคำสั่งที่สั่งให้มันเหยียบคันเร่งไปเรื่อยๆ |
||||
พอจะเข้าใจเรื่อง if … else กันบ้างมั๊ยครับ ต่อไปผมขอย้อนกลับมาที่ digital input นิดนึงนะครับ อย่างที่บอกครับ(ย้ำอีกทีให้จำ)ว่าดิจิตอลมันมีแค่ LOW กับ HIGH ดังนั้นหากเราจะเอาค่าดิจิตอลใส่ค่าให้กับตัวบอร์ด มันก็มีแค่ LOW กับ HIGH สองค่าแค่นั้นแหละครับ |
||||
เรามาเริ่มกันเลยดีกว่า digital input และ if … else พร้อมๆกัน เตรียมต่อวงจรตามรูป |
||||
จากนั้นเปิด Arduino IDE ขึ้นมา เขียนโปรแกรมตามนี้
จัดการอัพโหลดโปรแกรมลงบอร์ดแล้วลองกดปุ่มดูครับ เมื่อเรากดปุ่มค้างไว้ ไฟฟ้าแรงดัน 5V ที่ต่อไว้ก็จะผ่านปุ่มไปเข้าที่ขา ซึ่งแรงดัน 5V นี่มันก็คือค่า HIGH หลอด LED บนบอร์ดมันก็จะติดสว่างขึ้นมา ก็เพราะเราเขียนโปรแกรมไว้แล้วไงครับว่าถ้าขา 7 ได้รับค่า HIGH ให้ LED สว่างขึ้น ทีนี้ลองปล่อยปุ่ม ไฟก็จะดับลงเนื่องจากแรงดัน 5V นั้นถูกสวิตช์กั้นไว้แล้ว ทำให้แรงดันที่ไปเข้าขา มีค่า 0V ซึ่งมันก็คือค่า LOW ก็ตามที่เราเขียนโปรแกรมไว้อีกครับ ถ้าค่าที่ได้เป็นอื่นๆที่ไม่ใช่ HIGH ให้หลอดดับ ง่ายๆตามนี้ |
||||
ต่อไปเรามาทำให้วุ่นวายกันอีกนิดดีกว่า ต่อวงจรตามรูป |
||||
เขียนโค้ดดังนี้ครับ
อัพโหลดโปรแกรมแล้วลองเล่นดูครับ ก็จะเห็นได้ว่ามันก็คือตัวอย่างที่ผ่านมานี่เอง เพียงแค่ผมก็ได้กำหนดชื่อให้ขาต่างๆไว้กันงงเวลาเขียนโปรแกรม (เรื่องนี้แบบละเอียดอยู่ในคอร์ส Basic Arduino นะครับ) และเพิ่มมันขึ้นมาเป็นสองชุด คือชุดแรก button_1 ควบคุม LED_1 และชุดที่สอง button_2 ควบคุม LED_2 |
||||
ต่อไปใช้วงจรเดิม เพิ่มเติมโค้ดนิดนึง โค้ดที่จะเล่นกันมีตามนี้ครับ
มาแนวเดิมเลยครับ หมดมุกจะเล่นแล้ว(ฮ่าๆๆ) ส่วนที่เพิ่มเข้ามาคือ ถ้าปุ่ม 1 และปุ่ม 2 รับค่า HIGH พร้อมกัน (&& อันนี้แปลว่า “และ” ครับ) ตรงนี้ถ้าลองกดสองปุ่มพร้อมกัน หลอด LED ก็จะกระพริบสลับกัน ใช้ปุ่มแค่ 2 ปุ่มแต่ควบคุม LED ได้ถึง 3 แบบกันเลย |
||||
ก็น่าจะพอเข้าใจกันนะครับ เรื่อง digital input กับ if…else ผมได้แอบแทรกเรื่องการเขียนภาษาซีไปด้วยนะครับ ดังตัวอย่างที่ผ่านๆมา ปีกกาไม่จำเป็นต้องอยู่คนละบรรทัด ขอให้มันมีปีกกาเปิดปิด ทำนองเดียวกันคำสั่งเดียวจะมีหลายบรรทัดหรือบรรทัดเดียวมีหลายคำสั่งก็ได้ เพราะภาษาซีมันดูเครื่องหมาย ; เป็นหลัก ถ้าตัวนี้โผล่มาแสดงว่าจบคำสั่ง ถ้ายังไม่เจอก็ยังไม่จบ ตรงนี้แล้วแต่บุคคลครับ ที่ผมย่อที่นี้เพื่อไม่ให้เปลืองเนื้อที่มากนัก ส่วนใครจะพิมพ์แบบไหน ชอบแบบไหนถนัดแบบไหน ทำแบบไหนให้สวยเป็นระเบียบก็เป็นเรื่องของแต่ละคน สุดท้ายก็ขอให้ทุกท่านไปลองเล่น แก้นู่นนี่ อย่างถ้ากดไฟติดปล่อยไฟดับ, กดหลอดแรกติดหลอดสองดับ พอปล่อยหลอดแรกดับหลอดสองติด หรือลองแก้ปรับนู่นเพิ่มนี่ลดนั่นตามแต่ใจคิด จากประสบการณ์ของผู้เขียนการลองเล่นแบบนี้มันจะทำให้เราเข้าใจมากขึ้นครับ แบบไหนได้แบบไหนไม่ได้ ผิดก็ไม่เป็นไรครับไม่มีใครด่าเรา ลองแล้วมันไม่ทำงานก็ไม่เป็นไรครับไม่ได้ทำให้ใครเจ็บป่วย จะมีก็แต่ความเข้าใจและประสบการณ์ สกิลต่างๆที่จะได้ติดตัวท่านนั่นเองครับ บทต่อไปสนุกกว่านี้แน่นอน |
||||
[ดาวน์โหลด] [กลับหน้าหลักของคอร์ส] |