โครงสร้างใน sketch
ที่แตกต่างจากรูปแบบมาตราฐานคือ ใน sketch จะมี ฟังก์ชั่นเพิ่มเติมสองส่วน ได้แก่
ฟังก์ชั่น Setup() ทุกครั้งของการทำงาน ตั้งแต่จ่ายไฟ arduino จะทำงานตามคำสั่งที่อยู่ใน setup()
เป็นส่วนแรก และ ทุกคำสั่งใน setup() ทำงานแค่ครั้งเดียวเท่านั้น ส่วนนี้จึงตั้งชื่อว่า setup หรือเอาไว้ตั้งค่านี้เอง
Void Setup() {
// the setup() method runs once ,when starts
// setup() ทำงาน แค่ครั้งแรก ครั้งเดียว ในใช้ในการ initial ค่าตัวแปร
}
ฟังก์ชั่น loop() หลังจากที่ทำงานส่วน setup() ,โปรแกรมใน sketch จะทำงานในฟังก์ชั่น loop()
ตามชื่อ ตลอดการจ่ายไฟ arduino จะทำงานทุกคำสั่งที่อยู่ใน loop() วนไปเรื่อยๆ
Void Loop(){
// the loop() method runs again and again ,as long as arduino have a power.
// loop() หลังจากรันส่วน setup ,โปรแกรมจะทำงาน เฉพาะคำสั่งที่อยู่ใน loop() และ วนอยู่ลูป เท่านั้น
}
เมื่อจ่ายไฟ โปรแกรมจะทำงานในส่วนของ setup()
ก่อน โดยเราได้กำหนดว่าจะใช้ขาไหนว่าเป็น Output เพื่อจ่ายไฟให้ LED ไว้โดยใช้คำสั่ง pinMode()
โดยที่ขา LED บนบอร์ด Arduino จะต่อกับ D13 ครับ จากตัวอย่างเราจึงสร้างตัวแปรชื่อ ledPin ซึ่งมีค่า 13 ไว้ เพื่อใช้แทนกำหนด ตัวเลข 13 ลงไปในโปรแกรม
int ledPin = 13; // LED connected to digital pin 13
// The setup() method runs once, when the sketch starts
void setup() {
// initialize the digital pin as an output:
pinMode(ledPin, OUTPUT);
}
มาถึงฟังก์ชั่น Loop() เราได้ใส่คำสั่ง digitalWrite() เป็นคำสั่งให้ขา Digital ของ Arduino จ่ายไฟ หรือ
หยุดจ่ายไฟ คิดง่ายๆว่า Arduino เหมือนสวิตส์ที่เราสั่งเปิดปิดไฟ ได้โดยการโปรแกรมคำสั่ง การสร้างไฟกระพริบ
ก้อเป็นการจ่ายไฟ และ หยุดจ่ายไฟ ที่เป็นจังหวะเท่ากัน ดูในคำสั่งข้างล่าง ผมใส่ digitalWrite() แล้วจะต่อท้าย delay()
เพื่อให้ไฟติด และหน่วงเวลาไว้ เพื่อให้มันยังติดหรือดับอยู่
// the loop() method runs over and over again, as long as Arduino has power
void loop()
{
digitalWrite(ledPin, HIGH); // set the LED on
delay(500); // wait for a second
digitalWrite(ledPin,LOW); // set the LED off
delay(500); // wait for a second
}
// ไฟกระพริบ เทพ ๆ
digitalWrite( ledPin, HIGH ); // set the LED on
delay(500); // wait for a second
digitalWrite( ledPin, LOW ); // set the LED off
delay(500); // wait for a second
เขาจึงใช้ฟังก์ชั่นเข้าช่วย ให้การออกแบบโปรแกรม ดูดี เข้าใจง่าย ดูสะอาด ฟังก์ชั่นใช้งานซ้ำๆ ได้ง่ายอีกด้วย
ทดสอบบอร์ดอานู่โน่ ได้ดีเยี่ยม
// Blinking Testing Program
int ledPin = 13; // LED connected to digital pin 13
// The setup() method runs once, when starts
void setup() {
// initialize the digital pin as an output:
pinMode(ledPin, OUTPUT);
}
// the loop() method runs again and again
// as long as Arduino has power
void loop()
{
digitalWrite(ledPin, HIGH); // set the LED on
delay(1000); // wait for a second
digitalWrite(ledPin, LOW); // set the LED off
delay(1000); // wait for a second
}
ไฟกระพริบ ช้าๆ และ เร็วๆ สลับกัน
int ledPin = 13; // LED connected to digital pin 13
// The setup() method runs once, when the sketch starts
void setup() {
// initialize the digital pin as an output:
pinMode(ledPin, OUTPUT);
}
// the loop() method runs over and over again,
void loop()
{
Blinky(1000);
Blinky(250);
}
void Blinky(int time)
{
digitalWrite(ledPin, HIGH); // set the LED on
delay(time); // wait for a second
digitalWrite(ledPin, LOW); // set the LED off
delay(time); // wait for a second
}
จาก Sketch ข้างต้น เราจะทำไฟกระพริบ ช้าๆ และ เร็วๆ สลับกัน
อย่างสบายมาก และ sketch ที่สร้างดูดี และเรายังแก้ไขได้ง่ายยิ่งขึ้น
อีกด้วยครับ แค่แก้ไข คำสั่งตัวแปรที่ส่งไปกับ Blinky() เท่านั้นเอง
ประยุกต์ การควบคุมเปิดปิดไฟเลี้ยวด้วย Arduino
การควบคุมเปิดปิดไฟเลี้ยวด้วย Arduino สามารถทำได้โดยใช้ รีเลย์ (Relay Module)
เพื่อเป็นสวิตช์ควบคุมการเปิด/ปิดไฟเลี้ยวจริงที่มีแรงดันและกระแสสูงกว่าที่ Arduino จะจ่ายได้โดยตรง
หลักการทำงานเบื้องต้น:
อุปกรณ์ที่จำเป็น
บอร์ด Arduino (เช่น Arduino Uno, Nano)
โมดูลรีเลย์ (Relay Module) 1 หรือ 2 ช่อง (สำหรับควบคุมไฟเลี้ยวซ้ายและขวา)
แหล่งจ่ายไฟ 12V (สำหรับไฟเลี้ยว)
หลอดไฟเลี้ยว (12V) หรือ LED ที่มีกำลังไฟเหมาะสม
สวิตช์ (สำหรับสั่งงานเลี้ยวซ้าย/ขวา)
สายไฟ/สายจัมเปอร์
การเชื่อมต่อ
เชื่อมต่อ ขาควบคุม (IN) ของรีเลย์เข้ากับ ขา Digital Output ของ Arduino
ต่อไฟเลี้ยง VCC และ GND ของรีเลย์เข้ากับแหล่งจ่ายไฟ 5V (จาก Arduino หรือแยก)
ต่อวงจรไฟเลี้ยว: ตัดสายไฟที่จ่ายไฟเข้าหลอดไฟเลี้ยว แล้วต่อผ่านหน้าสัมผัสของรีเลย์
(มักใช้ขา Common (COM) และ Normally Open (NO)) โดยให้ Arduino สั่งงานรีเลย์เพื่อจ่ายไฟ 12V ไปที่หลอดไฟเลี้ยว
การเขียนโปรแกรม (Code)
กำหนดขา Digital Pin ที่ใช้เชื่อมต่อกับรีเลย์เป็น OUTPUT
ใช้คำสั่ง digitalWrite(pin, HIGH); หรือ digitalWrite(pin, LOW); เพื่อสั่งให้รีเลย์ทำงาน (เปิดหรือปิด)
ใช้ฟังก์ชัน delay() หรือการจัดการเวลาแบบ millis() เพื่อสร้างจังหวะ ไฟกระพริบ ของไฟเลี้ยว (เช่น เปิด 500ms, ปิด 500ms)
สำหรับโปรเจกต์ที่ซับซ้อนขึ้น เช่น ระบบไฟเลี้ยวอัตโนมัติยกเลิกเอง (Self-Canceling Turn Signals)
ที่ใช้กับรถยนต์หรือจักรยานยนต์ อาจต้องมีการใช้เซนเซอร์ตรวจจับการหมุนของพวงมาลัยหรือแฮนด์เพิ่มเติม




