โค้ดเชื่อมต่อเอาท์พุทด้วย LED 4 ดวง
เนื้อหาเชิงทฤษฎี
ในการทดลองนี้ ผู้ศึกษาจะได้ต่อบอร์ดกับอุปกรณ์เอาต์พุตเพื่อขับให้อุปกรณ์ทำงานการต่อวงจรเพื่อใช้งานขาต่างๆ ในโหมดการทำงานแบบเอาท์พุตมีอยู่ด้วยกันสองแบบ แบบแรกจะทำงานเมื่อส่งแรงดันไฟฟ้าขาออก 5 V หรือที่เรียกว่า ลอจิก HIGH (‘1’) และแบบที่สองจะทำงานเมื่อส่งแรงดันไฟฟ้าขาออก 0 V หรือลอจิก LOW (‘0’) โดยในการทดลองจะได้กล่าวถึงวิธีการเขียนโปรแกรมว่าจะสามารถสั่งงานให้ทำงานในโหมด Digital Output ได้อย่างไร
เบื้องต้นขออธิบายวิธีการต่อวงจรเพื่อใช้งาน Digital Output ในการเปิดปิดหลอดไฟ LED ซึ่งมีอยู่ด้วยกันสองวิธีดังแสดงในภาพวิธีแรกเรียกว่า Active High กล่าวคือเมื่อเราส่งลอจิก HIGH จากบอร์ดหลอด LED จะติด และหากบอร์ดส่งลอจิก LOW หลอด LED จะดับส่วนวิธีที่สองเรียกว่า Active Low จะได้ผลลัพธ์ที่กลับกันทั้งนี้บอร์ด Arduino Mega 2560 จะมี LED ติดมาด้วยอยู่แล้ว 1 ดวงที่ขาหมายเลข 13 โดยต่อแบบ Active High
เบื้องต้นขออธิบายวิธีการต่อวงจรเพื่อใช้งาน Digital Output ในการเปิดปิดหลอดไฟ LED ซึ่งมีอยู่ด้วยกันสองวิธีดังแสดงในภาพวิธีแรกเรียกว่า Active High กล่าวคือเมื่อเราส่งลอจิก HIGH จากบอร์ดหลอด LED จะติด และหากบอร์ดส่งลอจิก LOW หลอด LED จะดับส่วนวิธีที่สองเรียกว่า Active Low จะได้ผลลัพธ์ที่กลับกันทั้งนี้บอร์ด Arduino Mega 2560 จะมี LED ติดมาด้วยอยู่แล้ว 1 ดวงที่ขาหมายเลข 13 โดยต่อแบบ Active High
ฟังก์ชั่นของโปรแกรมที่ควรทราบ
• pinMode
pinMode เป็นฟังก์ชั่นที่ใช้ในการตั้งค่าโหมดการทำงานให้กับขาของบอร์ด Arduino
Syntax:
pinMode\(pin, mode\)
Parameter:
pin: หมายเลขขาที่ต้องการตั้งค่าใช้งาน
mode:INPUT :ตั้งขาเป็นอินพุต โดยต่อแบบ Pull Down
INPUT_PULLUP :ตั้งขาเป็นอินพุตที่ต่อแบบ Pull Up และใช้ตัวต้านทาน Pull Up ภายในของบอร์ด
OUTPUT :ตั้งขาให้เป็นเอาท์พุต
• digitalWrite
digitalWrite เป็นฟังก์ชั่นที่ใช้ในการเขียนค่าลอจิกไปที่ขาของบอร์ด Arduino
Syntax:
digitalWrite\(pin, logic\)
Parameter:
pin: หมายเลขขาที่ต้องการเขียนค่า
logic: ลอจิกที่ต้องการส่งออกเป็น HIGH หรือ LOW
ขั้นตอนการทดลอง
1.ต่อตัวต้านทานและหลอด LED ภายนอกเพิ่มเติมเข้ากับบอร์ดให้ทำงานแบบ Active High ดังภาพ
2.เปิดโปรแกรม Arduino IDE แล้วไปที่ File -> New File
3.เขียนโค้ดลงในสเก็ตช์ดังต่อไปนี้
#define LED 13
voidsetup()
{
pinMode(LED,OUTPUT); // Setup output pin
}
voidloop()
{
digitalWrite(LED,HIGH); // Pin 13 is HIGH
delay(250);
digitalWrite(LED,LOW); // Pin 13 is LOW
delay(250);
}
คำอธิบายโปรแกรม
การกำหนด #define เพื่อให้เรียกขาหมายเลข 13 ที่ต่อกับหลอด LED ของบอร์ดอยู่แล้วว่า LED
ส่วนภายในฟังก์ชั่น setup() เป็นการตั้งค่าให้ขา LED เป็น Digital Output
ส่วนภายในฟังก์ชั่น loop() เริ่มจากสั่งให้เขียนลอจิก HIGH ไปยังขา LED และหน่วงเวลา 250 ms จากนั้นสั่งให้เขียนลอจิก LOW ไปที่ขา LED และหน่วงเวลาอีก 250 ms จากนั้นวนซ้ำคำสั่งในลูปไปเรื่อยๆ
4.คอมไพล์โค้ดและบันทึกไฟล์ไว้บน Desktop ในตัวอย่างนี้เราตั้งชื่อไฟล์ว่า “test” จากนั้นอัพโหลดไฟล์ลงในบอร์ด
5.สังเกตผลลัพธ์ที่หลอดไฟ LED บนบอร์ดและที่ต่อจากภายนอก หลอดทั้งสองดวงจะกระพริบติดดับพร้อมๆ กัน
สรุปผล
ในการทดลองนี้ ผู้ศึกษาได้ทดลองใช้งาน Digital Output ของบอร์ด Arduino Mega 2560 ด้วยการสั่งเปิดปิดไฟหลอด LED ที่มีการต่อวงจรแบบ Active High
แบบฝึกหัดทดสอบความเข้าใจ
- คำสั่งอะไรที่ใช้ในการสั่งเขียนค่าลอจิก ‘1’ ไปที่ขา 13 องบอร์ด Arduino
- คำสั่งอะไรที่ใช้ในการสั่งเขียนค่าลอจิก ‘0’ ไปที่ขา 13 ของบอร์ด Arduino
- หากต่อวงจรหลอด LED แบบ Active High จะต้องส่งลอจิกอะไรเพื่อให้หลอด LED นั้นติด
- หากต่อวงจรหลอด LED แบบ Active Low จะต้องส่งลอจิกอะไรเพื่อให้หลอด LED นั้นติด
- เขียนโค้ดโดยประยุกต์จากโค้ดในการทดลอง เพื่อให้หลอดไฟ LED สีแดงที่ต่อเพิ่มภายนอกที่ขาหมายเลข 7 กระพริบสามครั้งและให้หลอดไฟ LED สีเขียวที่ต่อเพิ่มจากภายนอกที่ขาหมายเลข 8 กระพริบห้าครั้งและวนซ้ำเช่นนี้ไปเรื่อยๆ โดยหลอดไฟทั้งสองดวงต่อแบบ Active High
เฉลย-แบบฝึกหัดทดสอบความเข้าใจ
1.digitalWrite(13, HIGH);
2.digitalWrite(13, LOW);
3.ลอจิก ‘1’ หรือ HIGH
4.ลอจิก ‘0’ หรือ LOW
5.เขียนโค้ดได้ดังนี้
#defineLED_Red 7
#defineLED_Green 8
voidsetup()
{
pinMode(LED_Red,OUTPUT); // setup Red LED as output
pinMode(LED_Green,OUTPUT); // setup Green LED as output
}
voidloop()
{
for(int count = 1 ; count <= 3 ; count++)
{
digitalWrite(LED_Red,HIGH); // Turn On Red LED
delay(250);
digitalWrite(LED_Red,LOW); // Turn Off Red LED
delay(250);
}
for(int count = 1 ; count <= 5 ; count++)
{
digitalWrite(LED_Green,HIGH); // Turn On Green LED
delay(250);
digitalWrite(LED_Green,LOW); // Turn Off Green LED
delay(250);
}
}