56
หน่วยที่ 4 ฟังก์ช่นพื้นฐานของ Arduino และการควบคุมหลอดไฟ LED เรียบเรียงโดยครูทันพงษ์ ภู่รักษ์ 1 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์เบื้องต้น หน่วยที4 ฟังก์ช่นพื้นฐานของ ARDUINO และการควบคุมหลอดไฟ LED สาระสาคัญ โปรแกรม Arduino IDE ได้จัดเตรียมฟังก์ช่นพื้นฐาน เช่นฟังก์ช่นเกี่ยวกับขาพอร์ตอินพุตเอาต์พุตดิจิตอล, อินพุตเอาต์พุตแอนะล็อกเป็นต้น ดังนั้นในการเขียนโปรแกรมจึงเรียกใช้ฟังก์ช่นเหล่านี้ได้ทันทีโดยไม่ต้องใช้คาสั่ง #include เพื่อผนวกไฟล์เพิ่มเติมแต่อย่างใด นอกจากฟังก์ช่นพื้นฐานเหล่านี้แล้ว นักพัฒนาท่านอื่นๆ ที่ร่วมในโครงการ Arduino นี้ก็ได้เพิ่มไลบรารีอื่นๆ เช่นไลบรารีควบคุมมอเตอร์ , การติดต่อกับอุปกรณ์บัส I 2C ฯลฯ ในการเรียกใช้งาน ต้องเพิ่มบรรทัด #include เพื่อผนวกไฟล์ที่เหมาะสมก่อน จึงจะเรียกใช้ฟังก์ช่นได้ เนื้อหาสาระการเรียนรู4.1 ฟังก์ช่นอินพุต เอาต์พุตดิจิตอล (Digital l/0) 4.2 ฟังก์ช่นเกี่ยวกับการสื่อสารผ่านพอร์ตอนุกรม 4.3 ฟังก์ช่นอินพุตเอ้าต์พุตแอนะล็อก 4.4 ฟังก์ช่นเกี่ยวกับเวลา 4.5 ฟังก์ช่นเกี่ยวกับอินเตอร์รัปต์ภายนอก 4.6 ฟังก์ช่นทางคณิตศาสตร์ 4.7 ฟังก์ช่นเกี่ยวกับเลขสุ่ม จุดประสงค์การเรียนรูจุดประสงค์ทั่วไป 1. เพื่อให้มีความรู้ความเข้าใจเกี่ยวกับลักษณะฟังก์ช่นและกระบวนการทางานของ Arduino 2. เพื่อให้สามารถนาความรู้ไปประยุกต์ใช้ในการเขียนโปรแกรมกาหนดการทางานพื้นฐานของ Arduino 3. เพื่อให้ตระหนักถึงความสาคัญของลักษณะฟังก์ช่นและกระบวนการทางานของ Arduino

หน่วยที่ 4 ฟังก์ชั่นพื้นฐานของ ARDUINO และการควบคุมหลอดไฟ LED · ในตัวอย่างนี้จะน

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: หน่วยที่ 4 ฟังก์ชั่นพื้นฐานของ ARDUINO และการควบคุมหลอดไฟ LED · ในตัวอย่างนี้จะน

หนวยท 4 ฟงกชนพนฐานของ Arduino และการควบคมหลอดไฟ LED เรยบเรยงโดยครทนพงษ ภรกษ

1 เอกสารประกอบการสอนวชาไมโครคอนโทรลเลอรเบองตน

หนวยท 4 ฟงกชนพนฐานของ ARDUINO และการควบคมหลอดไฟ LED

สาระส าคญ

โปรแกรม Arduino IDE ไดจดเตรยมฟงกชนพนฐาน เชนฟงกชนเกยวกบขาพอรตอนพตเอาตพตดจตอล, อนพตเอาตพตแอนะลอกเปนตน ดงนนในการเขยนโปรแกรมจงเรยกใชฟงกชนเหลานไดทนทโดยไมตองใชค าสง #include เพอผนวกไฟลเพมเตมแตอยางใด นอกจากฟงกชนพนฐานเหลานแลว นกพฒนาทานอนๆ ทรวมในโครงการ Arduino นกไดเพมไลบรารอนๆ เชนไลบรารควบคมมอเตอร, การตดตอกบอปกรณบส I2C ฯลฯ ในการเรยกใชงานตองเพมบรรทด #include เพอผนวกไฟลทเหมาะสมกอน จงจะเรยกใชฟงกชนได

เนอหาสาระการเรยนร 4.1 ฟงกชนอนพต เอาตพตดจตอล (Digital l/0) 4.2 ฟงกชนเกยวกบการสอสารผานพอรตอนกรม 4.3 ฟงกชนอนพตเอาตพตแอนะลอก 4.4 ฟงกชนเกยวกบเวลา 4.5 ฟงกชนเกยวกบอนเตอรรปตภายนอก 4.6 ฟงกชนทางคณตศาสตร 4.7 ฟงกชนเกยวกบเลขสม

จดประสงคการเรยนร

จดประสงคทวไป 1. เพอใหมความรความเขาใจเกยวกบลกษณะฟงกชนและกระบวนการท างานของ Arduino 2. เพอใหสามารถน าความรไปประยกตใชในการเขยนโปรแกรมก าหนดการท างานพนฐานของ Arduino 3. เพอใหตระหนกถงความส าคญของลกษณะฟงกชนและกระบวนการท างานของ Arduino

Page 2: หน่วยที่ 4 ฟังก์ชั่นพื้นฐานของ ARDUINO และการควบคุมหลอดไฟ LED · ในตัวอย่างนี้จะน

หนวยท 4 ฟงกชนพนฐานของ Arduino และการควบคมหลอดไฟ LED เรยบเรยงโดยครทนพงษ ภรกษ

2 เอกสารประกอบการสอนวชาไมโครคอนโทรลเลอรเบองตน

จดประสงคเชงพฤตกรรม 1. ใชฟงกชนอนพต เอาตพตดจตอล (Digital l/0) ได 2. ใชฟงกชนเกยวกบการสอสารผานพอรตอนกรมได 3. ใชฟงกชนอนพตเอาตพตแอนะลอกได 4. ใชฟงกชนเกยวกบเวลาได 5. ใชฟงกชนเกยวกบอนเตอรรปตภายนอกได 6. ใชฟงกชนทางคณตศาสตรได 7. ใชฟงกชนเกยวกบเลขสมได

Page 3: หน่วยที่ 4 ฟังก์ชั่นพื้นฐานของ ARDUINO และการควบคุมหลอดไฟ LED · ในตัวอย่างนี้จะน

หนวยท 4 ฟงกชนพนฐานของ Arduino และการควบคมหลอดไฟ LED เรยบเรยงโดยครทนพงษ ภรกษ

3 เอกสารประกอบการสอนวชาไมโครคอนโทรลเลอรเบองตน

**********************************************************************************

เรอง ฟงกชนพนฐานของ Arduino ใชเวลา 20 นาท วชา ไมโครคอนโทรลเลอรเบองตน รหสวชา (2127-2107) ระดบชน ประกาศนยบตรวชาชพ (ปวช.) สาขาวชา เมคคาทรอนกส ค าชแจง 1. แบบทดสอบมทงหมด 10 ขอ (10 คะแนน) 2. ใหผเรยนเลอกค าตอบทถกทสดแลวกาเครองหมายกากบาท () ลงในกระดาษค าตอบ 1. โปรแกรม Arduino IDE สามารถเรยกใชฟงกชนพนฐานไดทนทโดยไมตอง ก. ใชค าสง #include เพอผนวกไฟลเพม ข. ใชค าสง #plus เพอผนวกไฟลเพม ค. ใชค าสง #add เพอผนวกไฟลเพม ง. ใชค าสง #defile เพอผนวกไฟลเพม 2. ฟงกชน digitalWrite (pin, value) ท างานอยางไร ก. ใชเลอกโหมดการท างานเปน OUTPUT ข. ใชเลอกโหมดการท างานเปน INPUT ค. ใชก าหนดขาพอรต INPUT ใหมสถานะเปนลอจกสงหรอลอจกต า ง. ใชก าหนดขาพอรต OUTPUT ใหมสถานะเปนลอจกสงหรอลอจกต า 3. ฟงกชนเกยวกบการสอสารผานพอรตอนกรมคอขอใด ก. Serial .begin (int datarate) ข. digitalWrite ค. pinMode ง. digitalRead 4. ฟงกชน int Serial .available ( ) ใชส าหรบ ก. ใชแจงวาไดรบขอมลตวอกษร และพรอมส าหรบการอานไปใชงาน ข. ใชแจงวาไดรบสญญาณแลว และพรอมส าหรบการอานไปใชงาน ค. สงคากลบจากฟงกชน และพรอมส าหรบการอานไปใชงาน ง. เปนการเลอกอตราบอดเทากบ 9600 บตตอวนาท

แบบทดสอบกอนเรยน หนวยท 4 เรอง ฟงกชนพนฐานของ Arduino

Page 4: หน่วยที่ 4 ฟังก์ชั่นพื้นฐานของ ARDUINO และการควบคุมหลอดไฟ LED · ในตัวอย่างนี้จะน

หนวยท 4 ฟงกชนพนฐานของ Arduino และการควบคมหลอดไฟ LED เรยบเรยงโดยครทนพงษ ภรกษ

4 เอกสารประกอบการสอนวชาไมโครคอนโทรลเลอรเบองตน

5. ฟงกชน int Serial .read ( ) ใชส าหรบ ก. อานคาขอมลทไดรบจากพอรตอนกรม ข. อานคาขอมลทไดรบจากพอรตขนาน ค. ใชเขยนแจงวาก าลงลบค าสง ง. ใชเขยนแจงวาก าลงอานค าสง 6. . ถาตองการก าหนดขาอนพตแอนะลอกตองก าหนดดวยฟงกชน

ก. AnalogRead ข. AnalogWrite ค. ModePin

ง. digitalRead 7. ฟงกชน unsigned long millis() คนคาเปนคาเวลาในหนวยมลลวนาท ไดประมาณกชวโมง ก. ประมาณ 9 ชวโมง ข. ประมาณ 8 ชวโมง

ค. ประมาณ 7 ชวโมง ง. ประมาณ 6 ชวโมง

8. ฟงกชน detachInterrupt(interrupt) ใชส าหรบ ก. ยกเลกการอนเตอรรปตภายนอก ข. เรมการอนเตอรรปตภายนอก ค. เลอกประเภทสญญาณทใชกระตนใหเกดการอนเตอรรปต ง. ฟงกชนกระโดดไปท างานเมอเกดอนเตอรรปต

9. ฟงกชน constrain(x, a, b) ท างานอยางไร ก. หาคาสมบรณของตวเลข ข. หาคาตวเลขทมากทสดของตวเลขสองตว ค. หาคาตวเลขทนอยทสดของตวเลขสองตว ง. ปดคาตวเลขทนอยกวาหรอมากกวาใหอยในชวงทก าหนด 10. randomSeed(seed) คอฟงกชนอะไร ก. ใชก าหนดตวแปรส าหรบสรางตวเลขแบบสม ข. ใชหาคาสมบรณของตวเลขแบบสม

ค. ใชหาคาทนอยทสดของตวเลขสองตวแบบสม ง. ใชสรางตวเลขเสมอนแบบสม

Page 5: หน่วยที่ 4 ฟังก์ชั่นพื้นฐานของ ARDUINO และการควบคุมหลอดไฟ LED · ในตัวอย่างนี้จะน

หนวยท 4 ฟงกชนพนฐานของ Arduino และการควบคมหลอดไฟ LED เรยบเรยงโดยครทนพงษ ภรกษ

5 เอกสารประกอบการสอนวชาไมโครคอนโทรลเลอรเบองตน

โปรแกรม Arduino IDE ไดจดเตรยมฟงกชนพนฐาน เชนฟงกชนเกยวกบขาพอรตอนพตเอาตพตดจตอล, อนพตเอาตพตแอนะลอกเปนตน ดงนนในการเขยนโปรแกรมจงเรยกใชฟงกชนเหลานไดทนทโดยไมตองใชค าสง #include เพอผนวกไฟลเพมเตมแตอยางใด นอกจากฟงกชนพนฐานเหลานแลว นกพฒนาทานอนๆ ทรวมในโครงการ Arduino นกไดเพมไลบรารอนๆ เชน ไลบรารควบคมมอเตอร, การตดตอกบอปกรณบส I2C ฯลฯ ในการเรยกใชงานตองเพมบรรทด #include เพอผนวกไฟลทเหมาะสมกอน จงจะเรยกใชฟงกชนได ในบทนจะอธบายถงการเรยกใชฟงกชนและตวอยางโปรแกรมส าหรบท าการทดลอง โดยใชบอรด Arduino Uno ส าหรบวธการทดลองสามารถดไดจากหนวยท 2

4.1 ฟงกชนอนพต เอาตพตดจตอล (Digital l/0) ค าอธบายและการเรยกใชฟงกชน

4.1.1 pinMode (pin,mode) ใชก าหนดขาพอรตใดๆใหเปนพอรตดจตอล

พารามเตอร pin – ใชก าหนดขาพอรตใดๆ mode – โหมดการท างานเปน INPUT หรอ OUTPUT (คาเปน int) ตวอยางท 4.1 int ledPin = 13; / / LED connected to Di pin 13 void setup ( ) pinMode ( ledPin, OUTPUT) ; / / sets as output void loop ( ) digitalWrite(ledpin, HIGH); / / LED on delay (1000); / / waits for a second digitalWrite (ledPin, LOW); / / LED off delay (1000);

หนวยท 4ฟงกชนพนฐานของ Arduino และการควบคมหลอดไฟ LED

Page 6: หน่วยที่ 4 ฟังก์ชั่นพื้นฐานของ ARDUINO และการควบคุมหลอดไฟ LED · ในตัวอย่างนี้จะน

หนวยท 4 ฟงกชนพนฐานของ Arduino และการควบคมหลอดไฟ LED เรยบเรยงโดยครทนพงษ ภรกษ

6 เอกสารประกอบการสอนวชาไมโครคอนโทรลเลอรเบองตน

4.1.2 digitalWrite (pin, value) สงงานใหขาพอรทระบไวมคาสถานะเปนลอจกสง (HIGH หรอ 1) หรอลอจกต า (LOW หรอ 0)

พารามเตอร pin – ขาพอรของโมดล value – มคา HIGH หรอ LOW ตวอยางท 4.2 int ledpin = 13; / / LED connected to Di pin 13 void setup () pinMode (ledPin, OUTPUT) / / sets as output void loop () digitalWrite(ledPin, HIGH); / / LED on delay (300); / / waits for 0.3 second digitalWrite(ledPin, LOW); / / LED off delay (300); / / waits for 0.3 second ก าหนดใหขา 13 เปน HIGH (มลอจกเปน 1) หนวงเวลา 1 วนาท แลวจงสงใหขา 13 กลบเปน LOW มลอจกเปน 0 อกครง

4.1.3 digitalRead (pin) อานคาสถานะของขาทระบไววามคาเปน HIGH หรอ LOW พารามเตอร pin – ขาพอรตทตองการอานคา ซงตองเปนขาพอรตดจตอล ท าใหมคาไดจาก 0 ถง 13 หรอเปนตวแปรทมคาอยในชวง 0 ถง 13 กได

คาทสงกลบ เปน HIGH หรอ LOW

ตวอยางท 4.3 Int ledPin = 13; / / LED connected to Di pin 13 int inPin = 7; / / pushbutton connected to digital pin 7 int val = 0; / / variable to store the read value

Page 7: หน่วยที่ 4 ฟังก์ชั่นพื้นฐานของ ARDUINO และการควบคุมหลอดไฟ LED · ในตัวอย่างนี้จะน

หนวยท 4 ฟงกชนพนฐานของ Arduino และการควบคมหลอดไฟ LED เรยบเรยงโดยครทนพงษ ภรกษ

7 เอกสารประกอบการสอนวชาไมโครคอนโทรลเลอรเบองตน

void setup ()

pinMode (ledPin, OUTPUT); / / sets Di 31 as output pinMode (inPin, INPUT); / / sets Di 7 as input

Void loop ()

val = digitalRead(inPin) / / read input pin

digitalWrite(ledPin, val); / / seta LED to the button’s value

ก าหนดใหขา 7 เปนอนพต สถานะของ LED ทขา 13 จะเปลยนแปลงตามสถานะของอนพตขา 7 4.1.4 การก าหนดโหมดของขาพอรต

กอนใชงานตองก าหนดโหมดการท างานของขาพอรตดจตอล ใหเปนอนพตหรอเอาตพตก าหนด จากฟงกชน pinMode() มรปแบบดงน

pinmode(pin,mode); เมอ pin คอ หมายเลขขาทตองการ Mode คอ โหมดการท างาน (INPUT หรอ OUTPUT)

หลงจากทก าหนดใหเปนเอาตพตแลวเมอตองการเขยนคาไปยงขานนๆ ใหเรยกใชฟงกชน digitalWrite() โดยมรปแบบดงน

digitalWrite(pin,value); เมอ pin คอหมายเลขขาทตองการ value สถานะลอจกทตองการ (HIGH หร อ LOW)

4.1.5 โปรแกรมสงให LED กะพรบ ในการทดลองเกยวกบไมโครคอนโทรลเลอร เรองแรกกคอการส งใหพอรตท างานเปนเอาตพต และสงใหม

คาเปน HIGH หรอ LOW ไดตามทต องการ โดยจะตอกบ LED และสงให LED ตดดบตอเนองกนตลอดเวลาเรยกวา ไฟกะพรบ ในการทดลองขบ LED อยางงายไดยกตวอยางไฟล Blink ซงมตวอยางในโปรแกรมArduino IDE อยแลว

ในตวอยางนจะน าโปรแกรม Blink.ino มาประยกตสงเอาตพตควบคม LED สองดวงใหตดดบสลบกนเรมตนดวยการตอวงจรสวนของ LED จะตอวงจรให LED ท างานทลอจก 1 คอเมอสงใหขาเปน HIGH จะท าให LED ตด เมอสงใหขาเปน LOW หลอดจะดบ ในการตอ LED ส าหรบบอรดสามารถใชแผงวงจรตอตรงกบจดตอของพอรตไดทนท เมอตออปกรณแลวใหเขยนโปรแกรมตามโปรแกรมท 4.1 ทดลองคอมไพลและอปโหลดลงบอรด ศกษาผลการท างานวงจรทดลองดจตอลเอาตพตสงให LED 2 ดวงกะพรบสลบกน

Page 8: หน่วยที่ 4 ฟังก์ชั่นพื้นฐานของ ARDUINO และการควบคุมหลอดไฟ LED · ในตัวอย่างนี้จะน

หนวยท 4 ฟงกชนพนฐานของ Arduino และการควบคมหลอดไฟ LED เรยบเรยงโดยครทนพงษ ภรกษ

8 เอกสารประกอบการสอนวชาไมโครคอนโทรลเลอรเบองตน

โปรแกรมท 4.1 ไฟล TwoLED_Blink.ino โปรแกรมภาษา C ของ Arduino ควบคมใหบอรดขบ LED 2 ดวงกะพรบ

สลบกน /* Basic code for turn on LED1 and turn off LED2 for 1 second, * then off LED1 and on LED2 for one second, and so on... * File : TwoLED_Blink.ino */

#define LED1_PIN 11 // LED1 connected to digital pin 11 #define LED2_PIN 13 // LED2 connected to digital pin 13

void setup() // Run once at startup pinMode(LED1_PIN, OUTPUT); // Call function pinMode to set Di 11 as OUTPUT pinMode(LED2_PIN, OUTPUT); // Call function pinMode to set Di 13 as OUTPUT

void loop() // run over and over again digitalWrite(LED1_PIN, HIGH); // Turn on LED1 digitalWrite(LED2_PIN, LOW); // Turn off LED2 delay(1000); // wait 1 second (1000 milisecond) digitalWrite(LED1_PIN, LOW); // Turn off LED1 digitalWrite(LED2_PIN, HIGH); // Turn on LED2

ในโปรแกรมตวอยางท 4.1 บรรทด #define LED1_PIN 11 คอการก าหนดคาคงทใหขอความ LED1_PIN มคาเทากบ 11 หลงจากบรรทดน ในโปรแกรมเมอพบขอความ LED1_PIN ใหน าคา 11 ไปแทนท แลวจงคอมไพลโปรแกรม

เมอโปรแกรมท างานไดแลว ทดลองแกไขโปรแกรมเพอเปลยนต าแหนงขาเอาตพตทตอก บ LED โดย เปลยนคาตวเลขของบรรทด #define LED1_PIN 11 เปนคาอนๆ ระหวาง 1 ถง 13 บรรทด delay(1000); เปนการเรยกใชฟงกชน delay() โดยสงคา 1000 ใหกบฟงกชนเพอใหเกดการหนวงเวลา 1000 มลลวนาท (ms) หรอ 1 วนาท ถาตองการปรบให LED กะพรบเรวขนหรอชาลง สามารถเปลยนคาในวงเลบเปนคาอนๆ ไดโดยคา ยงมาก LED ยงกะพรบชาลง

4.1.6 โปรแกรมไฟวง LED 4 ดวง ในตวอยางนจะน าบอรด Arduino มาตอควบคม LED จ านวน 4 ตว โดยสงให LED ตดตามล าดบ

เรมจากLED1 ไปยง LED4 แลววนกลบมาเรมท LED1 ตอเนองตลอดเวลา

Page 9: หน่วยที่ 4 ฟังก์ชั่นพื้นฐานของ ARDUINO และการควบคุมหลอดไฟ LED · ในตัวอย่างนี้จะน

หนวยท 4 ฟงกชนพนฐานของ Arduino และการควบคมหลอดไฟ LED เรยบเรยงโดยครทนพงษ ภรกษ

9 เอกสารประกอบการสอนวชาไมโครคอนโทรลเลอรเบองตน

โปรแกรมท 4.2 /* * Code for turn on and off LED1, LED2, LED3, LED4, and so on.. * File : FourLED_Moving.ino */

ไฟล FourLED_Moving.ino โปรแกรมภาษา C/C++ ของ Arduino เพอควบคมไฟวง LED 4 ดวง #define LED1_PIN 10 // LED1 connected to digital pin 10 #define LED2_PIN 11 // LED2 connected to digital pin 11 #define LED3_PIN 12 // LED3 connected to digital pin 12 #define LED4_PIN 13 // LED4 connected to digital pin 13

void setup() // Run once at startup pinMode(LED1_PIN, OUTPUT); // Set Digital pin 14 as OUTPUT pinMode(LED2_PIN, OUTPUT); // Set Digital pin 15 as OUTPUT pinMode(LED3_PIN, OUTPUT); // Set Digital pin 16 as OUTPUT pinMode(LED4_PIN, OUTPUT); // Set Digital pin 17 as OUTPUT

void loop() // run over and over again digitalWrite(LED1_PIN, HIGH); // Turn on LED1 delay(200); // wait for a 0.2 second. (200 ms) digitalWrite(LED1_PIN, LOW); // Turn off LED1 delay(200); // wait for a 0.2 second. (200 ms) digitalWrite(LED2_PIN, HIGH); // Turn on LED2 delay(200); // wait for a 0.2 second. (200 ms) digitalWrite(LED2_PIN, LOW); // Turn off LED2 delay(200); // wait for a 0.2 second. (200 ms) digitalWrite(LED3_PIN, HIGH); // Turn on LED3 delay(200); // wait for a 0.2 second. (200 ms) digitalWrite(LED3_PIN, LOW); // Turn off LED3 delay(200); // wait for a 0.2 second. (200 ms) digitalWrite(LED4_PIN, HIGH); // Turn on LED1

Page 10: หน่วยที่ 4 ฟังก์ชั่นพื้นฐานของ ARDUINO และการควบคุมหลอดไฟ LED · ในตัวอย่างนี้จะน

หนวยท 4 ฟงกชนพนฐานของ Arduino และการควบคมหลอดไฟ LED เรยบเรยงโดยครทนพงษ ภรกษ

10 เอกสารประกอบการสอนวชาไมโครคอนโทรลเลอรเบองตน

delay(200); // wait for a 0.2 second. (200 ms) digitalWrite(LED4_PIN, LOW); // Turn off LED1 delay(200); // wait for a 0.2 second. (200 ms)

การท างานของโปรแกรมนเรมดวยการสงให LED1 ตด 0.2 วนาทดบ 0.2 วนาท แลวสงให LED2 ตด 0.2

วนาท ดบ 0.2 วนาท ตามดวย LED3 และ LED4 ตดและดบเปนล าดบวนตอเนองตลอดเวลา จากโปรแกรมสงให

LED ตดตามล าดบดงโปรแกรมท 4.2 น ามาเขยนใหมโดยใชตวแปรอะเรยจะไดเปน

โปรแกรมท 4.3

ผลการท างานเหมอนกนแตโปรแกรมท 4.3 จะกระชบและเมอคอมไพล แลวไดไฟลภาษา

เครองทมขนาดเลกกวา

/*

* Code for turn on and off LED1, LED2, LED3, LED4, and so on..

* Same as MovingLED1 but used array.

* File : MovingLED_Array.ino

*/

#define DELAY_TIME 200

int led_pin[ ]=10,11,12,13;

int count;

void setup() // Run once at startup

for(count=0; count<4; count++)

pinMode(led_pin[count], OUTPUT);

// Call function pinMode to set Digital pin 14,15,16,17 as OUTPUT

void loop() // run over and over again

for(count=0; count<4; count++)

digitalWrite(led_pin[count], HIGH); // Turn on LED

delay(DELAY_TIME); // wait for a 0.2 second. (200 ms)

Page 11: หน่วยที่ 4 ฟังก์ชั่นพื้นฐานของ ARDUINO และการควบคุมหลอดไฟ LED · ในตัวอย่างนี้จะน

หนวยท 4 ฟงกชนพนฐานของ Arduino และการควบคมหลอดไฟ LED เรยบเรยงโดยครทนพงษ ภรกษ

11 เอกสารประกอบการสอนวชาไมโครคอนโทรลเลอรเบองตน

digitalWrite(led_pin[count], LOW); // Turn off LED

delay(DELAY_TIME);

โปรแกรมท 4.3 ไฟล MovingLED_Array.ino โปรแกรมภาษา C/C++ ของ Arduino เพอควบคมไฟวง

LED แบบใชตวแปรอะเรย

4.1.7 การทดลองอนพตดจตอลของ Arduino Uno

คณสมบตของขาพอรตอนพต

ขาพอรตของ Arduino Uno จะถกก าหนดเปนอนพตตงแตเรมตน จงไมจ าเปนตองใชฟงกชน pinMode ()

ในการก าหนดใหเปนอนพต ขาพอรตทถกก าหนดเปนอนพตจะมสถานะเปนอมพแดนซสง ท าใหมความตองการ

กระแสไฟฟาจากอปกรณทตองการอานคาอนพตนอยมาก ท าใหไมสามารถรบหรอจายกระแสใหกบวงจรภายนอก

ท าใหเขาทเปนอนพตนไปใชงานบางประเภท เชนสรางตวตรวจจบการสมผสทอาศยการวดคาความจไฟฟา

ส าหรบขาอนพต เมอไมมอนพตปอนจะตองก าหนดคาแรงดนใหแนนอน ท าไดโดยตอตวตานทานพลอป

(Pull-up Resistor) โดยตอขาของตวตานทานขาหนงไปยงไฟเลยง หรอตอพลดาวน (Pull-down) ซงตอขาหนง

ของตวตานทานจากขาพอรตลงกราวด คาตวตานทานทใชทวไปคอ 10kΩ ดงรปท 4.1

Arduino Uno มขาพอรตดจตอลทก าหนดใหเปนอนพตหรอเอาตพตจ านวน 13 ขา ถาตองการก าหนด

เปนอนพตตองก าหนดดวยฟงกชน pinMode และอานคาอนพตไดจากฟงกชน digitalRead ซงมรปแบบดงน

digitalRead (pin);

เมอ pin คอหมายเลขขาทตองการอานคาสถานะ

เมอฟงกชนท างานคาเปน LOW (คาเปน “0”) หรอ HIGH (คาเปน “1”)

รปท 4.1 แสดงการตอตวตานทานเพอก าหนดสภาวะของขาพอรตอนพตในขณะทยงไมมอนพตสงเขามา

Page 12: หน่วยที่ 4 ฟังก์ชั่นพื้นฐานของ ARDUINO และการควบคุมหลอดไฟ LED · ในตัวอย่างนี้จะน

หนวยท 4 ฟงกชนพนฐานของ Arduino และการควบคมหลอดไฟ LED เรยบเรยงโดยครทนพงษ ภรกษ

12 เอกสารประกอบการสอนวชาไมโครคอนโทรลเลอรเบองตน

รปท 4.2 แสดงการตอตวทานทานพลอปภายในทขาพอรตอนพตดจตอลซงควบคมไดดวยกระบวนการทาง

ซอฟตแวร

ภายในขาพอรตของไมโครคอนโทรลเลอร ATmega ซงเปนไมโครคอนโทรลเลอรหลกการ Arduino Uno

จะมการตอตวตานทานพลอปคา 20kΩ เตรยมไวให ซงสามารถสงตอใชงานผานทางซอฟตแวร ดงในรปท 4.2

ส าหรบตวอยางโปรแกรมเพอใชงานทมดงน

ตวอยางท 4.4

pinMode (pin, INPUT); // set pin to input

digitalWrite (pin, HIGH); // turn on pullup resistors

4.1.8 การรบคาสวตซอยางงาย

ในการทดลองนจะทดลองอานคาสถานะของสวตชแบบกดตดปลอยดบ เพอควบคมหลอด LED เมอกด

สวตช S1 ท าให LED ตดสวาง เมอปลอยสวตช LED1 จะดบและเขยนเปนโปรแกรมไดดงน

โปรแกรมท 4.4

ในการใชงานขาอนพตดจตอลตองตอตวตานทานพลอป (ตอตวตานทานจากไฟเลยง +5V มายงขาอนพต)

เพอก าหนดสถานะทแนนอนใหกบขาอนพตในภาวะทไมมการกดสวตช ดงวงจรในรปท 4.5 โดยตอขา 7 ผานตว

ตานทานคา 10kΩ ไปยงไฟเลยง +5V เมอไมไดกดสวตช SW1 ทขา 7 จะมสถานะเปนลอจกสง HIGH หรอ “1”

เมอกดสวตชจะท าใหขา 7 ตอลงกราวด อานคาสถานะเปนลอจกต า LOW หรอ “0”

/*

* Read input from push button for control status of LED.

* Modify from button (http://www.arduino.cc/en/Tutorial/button)

* File : Button_LED. Ino

Page 13: หน่วยที่ 4 ฟังก์ชั่นพื้นฐานของ ARDUINO และการควบคุมหลอดไฟ LED · ในตัวอย่างนี้จะน

หนวยท 4 ฟงกชนพนฐานของ Arduino และการควบคมหลอดไฟ LED เรยบเรยงโดยครทนพงษ ภรกษ

13 เอกสารประกอบการสอนวชาไมโครคอนโทรลเลอรเบองตน

*/

#define LED_PIN 11 // choose the pin for the LED

#define IN_PIN 7 // choose the input pin (for a pushbutton)

int val = 0;

void setup ()

pinMode (LED_PIN, OUTPUT); // declare LED as output

pinMode (IN_PIN, INPUT); // declare pushbutton as input

void loop ()

val = digitalRead (IN_PIN); // read input value

if (val == LOW) // check the input as LOW (button pushed)

digitalWrite (LED_PIN, HIGH); // turn LED ON

else

digitalWrite (LED_PIN, LOW); // turn LED OFF

โปรแกรมท 4.4 ไฟล button_LED.ino โปรแกรมภาษา C ของ Arduino ส าหรบอานคาอนพตจากสวตช

แบบปมกดเพอควบคม LED

การท างานของ LED1 จะตรงขามกบสถานะของสวตช คอเมอไมกดสวตช จะอานสถานะของขา 7 ได

ลอจกสง จงตองสงใหขา 11 เปนลอจกต าหรอ “0” เพอท าให LED1 ดบ เมอกดสวตช อานคาสถานะของขา 7 ได

ลอจก “0” ตองสงใหขา 11 เปน “1” เพอขบ LED1 ตดสวาง

เมอโปรแกรมท างานไดผลตามทตองการแลวใหทดลองตวตานทานพลอปคา 10kΩ ออก เพอใหขา 7 ลอย

สงเกตกรณน เมอยงไมมการกดสวตช LED1 อาจตดกะพรบดวยความเรวสง เหน LED สวางเรอยๆ เนองจาก

สถานะของขา Di7 เปน “0” และ “1” สลบกนไมแนนอน

Page 14: หน่วยที่ 4 ฟังก์ชั่นพื้นฐานของ ARDUINO และการควบคุมหลอดไฟ LED · ในตัวอย่างนี้จะน

หนวยท 4 ฟงกชนพนฐานของ Arduino และการควบคมหลอดไฟ LED เรยบเรยงโดยครทนพงษ ภรกษ

14 เอกสารประกอบการสอนวชาไมโครคอนโทรลเลอรเบองตน

4.1.9 โปรแกรมแกปญหาสญญาณรบกวนในการกดสวตชโดยใชซอฟตแวร

ในหวขอนจะทดลองเขยนโปรแกรมรบคาของสวตช ซงเปนแบบกดตดปลอยดบ ใหมการท างานเปนแบบ

กดตดกดดบ คอเมอเรมตนโปรมแกรม LED ดบอย เมอกดสวตช LED จะตดสวางเมอกดสวตชอกครง LED จะดบ

สลบกนไปมาตลอดเวลา

โดยทวไปแลว สวตชทใชจะเปนสวตชทางกลทประกอบดวยหนาสมผสโลหะ ในการกดสวตชใหตอวงจร

พบวาหนาสมผสของสวตชจะไมสมผสกนสนททนท โดยมชวงเวลาทเรมสมผส และหลดเปนชวงเวลาสนๆ กอนท

หนาสมผสของสวตชจะตออยางสมบรณ และเมอวดสญญาณทไดจากสวตชพบวาระดบสญญาณมการสน

รปท 4.3 แสดงการเกดสญญาณรบกวนเมอมการกดและปลอยสวตชในวงจรดจตอล

การสนทเรยกวาเบาซ (Bounce) อยชวขณะดงแสดงในรปท 4.3 โดยระยะเวลาทสญญาณเกดการเบาวซน

มระยะเวลาตงแตไมกมลลวนาท (ms) ไปจนถงหลายสบมลลวนาท ขนกบประเภทของสวตชทใช

การแกปญหาทระดบสญญาณเกดการสนนเรยกวาการดเบาซ (Debounce) หลกการแกไขสญญาณรบกวน

แบบบนคอ หนวงเวลาการเกดขนของสญญาณพลสเลกนอย เพอใหวงจรไมสนใจสญญาณทเกดขนในชวงเรมตนกด

สวตช ซงท าไดหลายวธ เชนวธการแรกท าไดโดยใชอปกรณอเลกทรอนกสพนฐาน อยางตวตานทานและตวเกบ

ประจ โดยตอกนในลกษณะวงจร RC อนตเกรเตอรดงในรปท 4.4 ดวยวธการนจะชวยลดผลของสญญาณรบกวนท

เกดขนจากการกดสวตชไดในระดบหนง โดยประสทธภาพของวงจรจะขนกบการเลอกคาของตวตานทานและตวเกบ

ประจ หากเลอกคาของตวเกบประจนอยเกนไป อาจไมสามารถลดสญญาณรบกวนได แตถาเลอกคามากเกนไป

จะท าใหความไวในการตรวจจบการกดสวตชลดลง นนคออาจตองกดสวตชมากกวา 1 ครงเพอใหไดสญญาณท

ตองการ

Page 15: หน่วยที่ 4 ฟังก์ชั่นพื้นฐานของ ARDUINO และการควบคุมหลอดไฟ LED · ในตัวอย่างนี้จะน

หนวยท 4 ฟงกชนพนฐานของ Arduino และการควบคมหลอดไฟ LED เรยบเรยงโดยครทนพงษ ภรกษ

15 เอกสารประกอบการสอนวชาไมโครคอนโทรลเลอรเบองตน

รปท 4.4 การตอวงจร RC อนตเกรเตอร เพอแกไขปญหาสญญาณรบกวนจากการกดสวตช

หรอถาแกโดยใชไมโครคอนโทรลเลอร จะสามารถแกไขไดดวยกระบวนการทางซอฟตแวร โดยเขยน

โปรแกรมใหตรวจจบการเปลยนแปลงระดบลอจกของสวตช ถาพบวามการเรมกดสวตช กคอระดบลอจกเปลยน

จาก “1” เปน “0” โปรแกรมจะหนวงเวลารอจนเลยชวงเวลาเกดเบาซของสวตช เมอเลยเวลาแลวใหท าการอานคา

สถานะของสวตชอกครงถายงคงเปน “0” แสดงวากดสวตชสมบรณแลว

ระยะเวลาทตองหนวงเวลาหาไดจากการใชออสซลโลสโคปวดระดบสญญาณ หรอใชการทดลองปอนคา

หนวงเวลาแลวปรบคาจนกระทงไดคาทแกปญหาการเบาวซของสวตชไดอยางสมบรณ ในโปรแกรมทดลองท 4.5

ไดทดลองโดยใชคาของการหนวงเวลาเทากบ 10 มลลวนาท ซงสามารถเปลยนไดทบรรทด

#define Debounce 10

โปรแกรมท 4.5

ไฟล DebounceSW.ino โปรแกรมภาษา C ของ Arduino อานคาสวตชเพอควบคม LED แบบมการ

แกสญญาณรบกวนจากการกดสวตชหรอดเบาซ

/*

* Read input from push button for control status of LED.

* Change operation of push button to togle switch.

* File : DebouncedSW.ino */

#define IN_PIN 7 // the number of the input pin

#define OUT_PIN 11 // the number of the output pin

#define Debounce 10 // debounce time = 10 ms

int state = HIGH; // the current state of the output pin

int reading; // the current reading from the input pin

int previous = HIGH; // the previous reading from the input pin

Page 16: หน่วยที่ 4 ฟังก์ชั่นพื้นฐานของ ARDUINO และการควบคุมหลอดไฟ LED · ในตัวอย่างนี้จะน

หนวยท 4 ฟงกชนพนฐานของ Arduino และการควบคมหลอดไฟ LED เรยบเรยงโดยครทนพงษ ภรกษ

16 เอกสารประกอบการสอนวชาไมโครคอนโทรลเลอรเบองตน

void setup()

pinMode(IN_PIN, INPUT);

pinMode(OUT_PIN, OUTPUT);

digitalWrite(OUT_PIN, state);

void loop()

reading = digitalRead(IN_PIN);

// if we just pressed the button (i.e. the input went from HIGH to LOW.

if (reading == LOW && previous == HIGH)

delay(Debounce); // wait for decounce

if(digitalRead(IN_PIN) == LOW) // if the input remain LOW

state = !state; // invert the state of output LED

digitalWrite(OUT_PIN, state);

previous = reading;

4.2 ฟงกชนเกยวกบการสอสารผานพอรตอนกรม

ใชส าหรบสอสารขอมลระหวางฮารดแวร Arduino กบคอมพวเตอร หรออปกรณอนๆ โดยจะแบง

พอรตส าหรบเชอมตอออกเปน 2 สวนคอ สวนแรกตดตอพอรตอนกรมเสมอน (Virtual Com Port) จากการท า

งานของสวนเชอมตอพอรต USB ฟงกชนทใชคอ Serial

อกสวนหนงคอ ขาพอรตสอสารขอมลอนกรมโดยใชขา0 (RxD) และ 1 (TxD) ฟงกชนของ Arduino ทใช

คอ Serial1 ดงนนเมอเลอกใชงานเปนขาพอรตสอสารขอมลอนกรมแลวจะไมสามารถใชขาพอรต 0 และ 1 เปน

พอรตดจตอลได

4.2.1 Serial .begin (int datarate)

ก าหนดคาอตราบอดของการรบสงขอมลอนกรมในหนวยบตตอวนาท (bits per second : bps) ใชคา

ตอไปน 300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600 หรอ 115200

พารามเตอร

Int datarate ในหนวยบตตอวนาท (baud หรอ bps)

Page 17: หน่วยที่ 4 ฟังก์ชั่นพื้นฐานของ ARDUINO และการควบคุมหลอดไฟ LED · ในตัวอย่างนี้จะน

หนวยท 4 ฟงกชนพนฐานของ Arduino และการควบคมหลอดไฟ LED เรยบเรยงโดยครทนพงษ ภรกษ

17 เอกสารประกอบการสอนวชาไมโครคอนโทรลเลอรเบองตน

ตวอยางท 4.5

void setup ( )

Serial .begin (9600) ; / / opens serial port, baudrate 9600 bps

เปนการเลอกอตราบอดเทากบ 9600 บตตอวนาท

4.2.2 Serial .available ( )

ใชแจงวาไดรบขอมลตวอกษร (characters) แลว และพรอมส าหรบการอานไปใชงาน

คาทสงกลบจากฟงกชน

จ านวนไบตทพรอมส าหรบการอานคา โดยเกบขอมลในบฟเฟอรตวรบ ถาไมมขอมลจะมคาเปน 0 ถาม

ขอมลฟงกชนจะคนคาทมากวา 0 โดยบฟเฟอรสามารถเกบขอมลไดสงสด 128 ไบต

ตวอยางท 4.6

int incomingByte = 0 ; / / for incoming serial data

void setup ( )

Serial . begin (9600) ; / / opens serial port, baud rate 9600 bps

delay (5000) ;

void loop ( )

if (Serial .available ( ) > 0) / / send data only when you receive data :

incomingByte = Serial .read ( ) ; / / read the incoming byte :

Serial .print (“I received : “) ; / / say what you got :

Serial .println (incomingByte, DEC) ;

ในตวอยางน ใชอตราบอด 9,600 บตตอวนาท เมอรนโปรแกรมจะตองเปดหนาตาง Serial Monitor เพอ

ปอนขอมลมายงบอรด Arduino Uno ดวย ถามขอมลเขามาจะเกบไวในตวแปร incomingByte แลวน าไปแสดงท

หนาตาง Serial Monitor โดยตอทายขอความ I received : คาทแสดงจะเปนคาขอมลในรปของเลขฐานสบ

Page 18: หน่วยที่ 4 ฟังก์ชั่นพื้นฐานของ ARDUINO และการควบคุมหลอดไฟ LED · ในตัวอย่างนี้จะน

หนวยท 4 ฟงกชนพนฐานของ Arduino และการควบคมหลอดไฟ LED เรยบเรยงโดยครทนพงษ ภรกษ

18 เอกสารประกอบการสอนวชาไมโครคอนโทรลเลอรเบองตน

ยกตวอยางหากปอนเลข 2 เขามาจะแสดงขอความ I received : 50 เนองจากรหสแอสกของ 2 คอ 32 ฐานสบหก

เทากบ 50 ฐานสบ

4.2.3 Serial .read ( )

ใชอานคาขอมลทไดรบจากพอรตอนกรม

คาทสงกลบจากฟงกชน

เปนเลข int ทเปนไบตแรกของขอมลทไดรบ (หรอเปน -1 ถาไมมขอมล)

ตวอยางท 4.7

int incomingByte = 0 ; / / for incoming serial data

void setup ( )

Serial .begin (9600) ; / / opens serial port, baud rate 9600 bps

delay (5000) ;

void loop ( )

if (Serial .available ( ) > 0 ) / / send data only when you receive data ;

incomingByte = Serial .read ( ) ; / / read the incoming byte :

Serial .print ( “I received : ”) : / / say what you got :

Serial .println (incomingByte, DEC ) ;

4.2.4 Serial .flush ( )

ใชลางบฟเฟอรตวรบขอมลพอรตอนกรมใหวาง

4.2.5 Serial .print (data)

ใชสงขอมลออกทางพอรตอนกรรม

พารามเตอร

Data – เปนขอมลเลขจ านวนเตมไดแก char, int หรอเลขทศนยมทตดเศษออกเปนจ านวนเตม

Page 19: หน่วยที่ 4 ฟังก์ชั่นพื้นฐานของ ARDUINO และการควบคุมหลอดไฟ LED · ในตัวอย่างนี้จะน

หนวยท 4 ฟงกชนพนฐานของ Arduino และการควบคมหลอดไฟ LED เรยบเรยงโดยครทนพงษ ภรกษ

19 เอกสารประกอบการสอนวชาไมโครคอนโทรลเลอรเบองตน

รปแบบฟงกชน

ค าสงนสามารถเขยนไดหลายรปแบบ

Serial .print (b) เปนการเขยนค าสงแบบไมไดระบรปแบบ จะพมพคาตวแปร b เปนเลขฐานสบ โดยพมพ

ตวอกษรรหส ASCII

ตวอยางท 4.8

int b = 79 ;

Serial .print (b) ;

Serial .print (b, DEC)

เปนค าสงพมพคาตวแปร b เปนตวเลขฐานสบ โดยพมพตวอกษรตามรหส ASCII ดงตวอยาง

int b = 79 ;

Serial .print (b) ;

Serial .print (b, HEX)

เปนค าสงพมพคาแปร b เปนตวเลขฐานสบหก โดยพมพตวอกษรตามรหส ASCII ดงตวอยาง

int b = 79 ;

Serial .print (b, HEX)

Serial .print (b, OCT) ;

เปนค าสงพมพคาตวแปร b เปนตวเลขฐานแปด โดยพมพตวอกษรตามรหส ASCII ดงตวอยาง

int b = 79 ;

serial .print (b, OCT) ;

Serial .print (b, BIN)

เปนค าสงพมพคาตวแปร b เปนตวเลขฐานสอง โดยพมพตวอกษรตามรหส ASCII ดงตวอยาง

int b = 79 ;

Serial .print (b, BIN) ;

Serial .print (b, BYTE)

เปนค าสงพมพคาตวแปร b ขนาด 1 ไบต ดงตวอยาง

int b = 79 ;

Serial .print (b, BYTE) ;

Serial .print (str)

เปนค าสงพมพคาขอความในวงเลบ หรอขอความทเกบในตวแปร str ดงตวอยาง

Serial .print (“Hello World”) ;

Page 20: หน่วยที่ 4 ฟังก์ชั่นพื้นฐานของ ARDUINO และการควบคุมหลอดไฟ LED · ในตัวอย่างนี้จะน

หนวยท 4 ฟงกชนพนฐานของ Arduino และการควบคมหลอดไฟ LED เรยบเรยงโดยครทนพงษ ภรกษ

20 เอกสารประกอบการสอนวชาไมโครคอนโทรลเลอรเบองตน

พารามเตอร

b – ไบตขอมลทตองการพมพออกทางพอรตอนกรรม

str – ตวแปรสตรงทเกบขอความส าหรบสงออกพอรตอนกรม

ตวอยางท 4.9

/* Analog input reads an analog input on analog in 0 , prints the value out.

created by Tom Igoe */

int analogValue = 0 ; // variable to hold the analog value

void setup ( )

Serial .begin (9600) ; // open the serial port at 9600 bps :

delay (5000) ;

void loop ( )

analogValue = analogRead (0) ; // read the analog input on pin 0 :

Serial .print (analogValue) ; // print it out in many formats :

// print as an ASCII – encoded decimal

Serial .print (“\ t”) ; // print a tad character

Serial .print (analogValue, DEC) ; // print as an ASCII – encoded decimal

Serial .print (“\ t”) ; // print a tab character

Serial .print (analogValue, HEX) ; // print as an ASCII – encoded hexadecimal

Serial .print (“\ t”) ; // print a tab character

Serial .print (analogValue, OCT) ; // print as an ASCII – encoded octal

Serial .print (“\ t”) ; // print a tab character

Serial .print (analogValue, BIN) ; // print as an ASCLL – encoded binary

Serial .print (“\ t”) ; // print a tab character

Serial .write (analogValue/4) ;

// print as a raw byte value (divide the value by 4 because

// analogRead ( ) returns numbers from 0 to 1023,

// but a byte can only hold values up to 255)

Page 21: หน่วยที่ 4 ฟังก์ชั่นพื้นฐานของ ARDUINO และการควบคุมหลอดไฟ LED · ในตัวอย่างนี้จะน

หนวยท 4 ฟงกชนพนฐานของ Arduino และการควบคมหลอดไฟ LED เรยบเรยงโดยครทนพงษ ภรกษ

21 เอกสารประกอบการสอนวชาไมโครคอนโทรลเลอรเบองตน

Serial .print (“\ t”) ; // print a tab character

Serial.printIn(); // print a linefeed character

Delay(10); // delay 10 milliseconds before the next reading

ตวอยางนแสดงการพมพขอมลจากฟงกชน Serial. print() และ Serial. write() ในรปแบบตางๆ แสดงผาน

ทางหนาตาง Serial Monitor

เทคนคส าหรบการเขยนโปรแกรม Serial. print()

จะตดเศษเลขทศนยมเหลอเปนเลขจ านวนเตม ทางแกไขทางหนงคอ คณเลขทศนยมดวย 10, 100, 1000

ฯลฯ ขนอยกบจ านวนหลกของเลขทศนยม เพอแปลงเลขทศนยมเปนจ านวนเตมกอน แลวจงสงออกพอรตอนกรม

จากนนทฝงภาครบใหท าการหารคาทรบไดเพอแปลงกลบเปนเลขทศนยม

4.2.6 Serial.println(data)

เปนฟงกชนพมพ (หรอสง) ขอมลออกทางพอรตอนกรมตามดวยรหส carriage return (รหส ASCII

หมายเลข 13 หรอ \r) และ linefeed (รหส ASCII หมายเลข 10 หรอ \n) เพอใหเกดการเลอนบรรดและขนบรรทด

ใหม หลงจากพมพขอความมรปแบบเหมอนค าสง Serial.print()

รปแบบฟงกชน

Serial.println(b)

เปนค าสงพมพขอมลแบบไมไดระบรปแบบจะพมพ คาตวแปรเปนเลขฐานสบ ตามดวยรหสอกษร carriage

return และ linefeed

Serial.println(b, DEC) เปนค าสงพมพคาตวแปร b เปนตวเลขฐานสบ ตามดวยรหสอกษร carriage

return และ linefeed

Serial.println(b, HEX) เปนค าสงพมพคาตวแปร b เปนตวเลขฐานสบหก ตามดวยรหสอกษร carriage

return และ linefeed

Serial.println(b, OCT) เปนค าสงพมพคาตวแปร b เปนตวเลขฐานแปด ตามดวยรหสอกษร carriage

return และ linefeed

Serial.println(b, BIN) เปนค าสงพมพคาตวแปร b เปนตวเลขฐานสอง ตามดวยรหสอกษร carriage

return และ linefeed

Serial.println(str) พมพคาในวงเลบหรอขอความท เกบในตวแปร str ตามดวยรหสอกษร carriage

return และ linefeed

Serial.println() เปนค าสงพมพรหส carriage return และ linefeed

Page 22: หน่วยที่ 4 ฟังก์ชั่นพื้นฐานของ ARDUINO และการควบคุมหลอดไฟ LED · ในตัวอย่างนี้จะน

หนวยท 4 ฟงกชนพนฐานของ Arduino และการควบคมหลอดไฟ LED เรยบเรยงโดยครทนพงษ ภรกษ

22 เอกสารประกอบการสอนวชาไมโครคอนโทรลเลอรเบองตน

พารามเตอร

b - ไบตขอมลทตองการพมพ ออกทางพอรตอนกรม

str - ตวแปรสตรงทเกบขอความส าหรบสงออกพอรตอนกรม

ตวอยางท 4.10

int analogValue = 0; // variable to hold the analog value

void setup()

Serial. begin(9600); // open the serial port at 9600 bps:

delay(5000);

void loop()

analogValue = analogRead(0); // read the analog input on pin 0:

Serial. println(analogValue); // print it out in many formats:

Serial. println(analogValue, DEC); // print as an ASCII-encoded decimal

Serial. println(analogValue, HEX); // print as an hexadecimal

Serial. println(analogValue, OCT); // print as an ASCII-encoded octal

Serial. println(analogValue, BIN); // print as an ASCII-encoded binary

delay(10);

4.2.7 การทดลองใชงาน UART เพอตดตอกบคอมพวเตอร

บอรด Arduino ตดตอกบคอมพวเตอรเพอสอสารขอมลอนกรมผานพอรต USB โดยใชพอรตอนกรม

เสมอนหรอ Virtual COM Port ทเกดขนจากการท างานของสวนเชอมตอพอรต USB ของไมโครคอนโทรลเลอร

ATmega32U4 และไดรเวอร โดยปกตแลวจะเชอมตอพอรตอนกรมเสมอนผานทางพอรต USB เพอตดตอกบ

คอมพวเตอรในการอปโหลดโปรแกรมเปนหลก แตน ามาใชรบสงขอมลจากโปรแกรมของผใชงานกบคอมพวเตอรได

4.2.8 ฟงกชนทเกยวของกบการรบสงขอมลผานพอรตอนกรม

ArduinoIDE มฟงกชนเกยวกบการรบสงขอมลผานพอรตอนกรมมาพรอมใชงาน ดงน

Serial. begin(speed) ใชก าหนดอตราเรวของการถายทอดขอมลหรออตราบอดหรอบอดเรต

Serial. available() ใชตรวจสอบวามขอมลดานรบหรอไมโดยคนคาเปน int ตามจ านวนไบตขอมลทรบเขา

Serial. read(data) ใชอานคาขอมลจากพอรตอนกรม

Serial. write(data) ใชเขยนขอมลไบตไปยงพอรตอนกรม

Page 23: หน่วยที่ 4 ฟังก์ชั่นพื้นฐานของ ARDUINO และการควบคุมหลอดไฟ LED · ในตัวอย่างนี้จะน

หนวยท 4 ฟงกชนพนฐานของ Arduino และการควบคมหลอดไฟ LED เรยบเรยงโดยครทนพงษ ภรกษ

23 เอกสารประกอบการสอนวชาไมโครคอนโทรลเลอรเบองตน

Serial. flush() ใชลางบฟเฟอรทงดานรบและสง

Serial. print(data) ใชสงขอมลออกพอรตอนกรม

Serial. println(data) ใชสงขอมลออกพอรตอนกรมพรอมกบขนบรรทดใหม

4.2.9 โปรแกรมสงขอมลออกพอรตอนกรม

เรมตนดวยการใชฟงกชน Serial. begin() เพอสงเปดพอรตอนกรมและก าหนดอตราถายทอดขอมลทใชใน

การสอสารขอมลหรออตราบอด มรปแบบการเขยนโปรแกรมดงน

Serial. begin(speed);

เมอ speed คออตราบอดมคา 300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400,57600

หรอ 115200 บตตอวนาท ปกตทใชคอ 9600

หลงจากเปดพอรต เมอตองการสงขอมลใหใชฟงกชน Serial. print() หร อ Serial. println()

ฟงกชนทงสองตวท างานใหผลคลายกน ตางกนเมอ Serial. println() สงขอมลแลวจะขนบรรทดใหมใหอตโนมต

ฟงกชน Serial. print() และ Serial. println() มรปแบบดงน

Serial. print(b,FORMAT); กบ Serial. println(b,FORMAT);

โดยท b คอคาตวแปรประเภทเลขจ านวนเตมทตองการสงออกทางพอรตอนกรม ถาไมระบรปแบบจะพมพ

ออกเปนรหส ASCII ของคาตวแปร

FORMAT เปนรปแบบของการพมพม DEC (เลขฐานสบ), HEX (เลขฐานสบหก), OCT (เลขฐานแปด)

และ BIN (เลขฐานสอง)

โปรแกรมท 4.6

ไฟล Serial01.ino โปรแกรมทดสอบการสงขอมลออกพอรตอนกรมเสมอนผานทางพอรต USB

/* Code for send out data to serial port

* File : Serial01.pde

*/

void setup()

Serial. begin(9600); // Set serial port to 9600 bit per second

void loop()

int data = 2345; // print string to serial port

Serial. println("Welcome to Arduino Programming"); // print title

Page 24: หน่วยที่ 4 ฟังก์ชั่นพื้นฐานของ ARDUINO และการควบคุมหลอดไฟ LED · ในตัวอย่างนี้จะน

หนวยท 4 ฟงกชนพนฐานของ Arduino และการควบคมหลอดไฟ LED เรยบเรยงโดยครทนพงษ ภรกษ

24 เอกสารประกอบการสอนวชาไมโครคอนโทรลเลอรเบองตน

Serial. print(data, DEC); // print as an ASCII-encoded decimal

Serial. print("\t"); // print a tab character

Serial. print(data, HEX); // print as an ASCII-encoded hexadecimal

Serial. print("\t"); // print a tab character

Serial. print(data, OCT); // print as an ASCII-encoded octal

Serial. print("\t"); // print a tab character

Serial. print(data, BIN); // print as an ASCII-encoded binary

Serial. print("\t"); // print a tab character

Serial. write(data); // print as a raw byte value

Serial. println(); // print a line feed character

delay(1000); // Wait 1 second

โปรแกรมท 4.6 เปนโปรแกรมทดลองสงขอมลออกพอรตอนกรม โดยสงขอความและคาของตวแปรในการ

ทดลองสงคาตวแปร จะมการก าหนดรปแบบหรอ FORMAT ของค าสง Serial. print() ไวหลายๆแบบในการ

ทดสอบการท างานโปรแกรม Arduino IDE จะมหนาตาง Serial Monitor เพออ านวยความสะดวกในการรบและสง

ขอมลผานพอรตอนกรม ซงจะใชพนทรวมกบพนทแสดงขอมล (Text area) ซงอยทางดานลางของหนาตาง

โปรแกรม Arduino

การเปดหนาตางนท าไดโดยคลกทปม Serial Monitor ดงแสดงในรปท 4.7 ในรปท 4.8 แสดงผลการ

ท างานของโปรแกรมท 4.6 หลงจากทอปโหลดโปรแกรมไปยงบอรด Arduino ในโปรแกรมก าหนดคาตวแปร

data=2345 ซงกคอ

2,345 แปลงเปนเลขฐาน 16 คอ 929 เปนเลขฐาน 8 คอ 4451 เปนเลขฐานสองคอ 100100101001

กรณทสงพมพโดยใชค าสง Serial. write(data); จะสงคาเปนเลขฐานสอง 8 บตลาง 00101001 ซงกคอ 41 ฐานสบ

เทยบเปนรหส ASCII คออกขระ ทหนาตางของ Serial Monitor จงแสดงเปนเครองหมาย ) หรอวงเลบปดนนเอง

Page 25: หน่วยที่ 4 ฟังก์ชั่นพื้นฐานของ ARDUINO และการควบคุมหลอดไฟ LED · ในตัวอย่างนี้จะน

หนวยท 4 ฟงกชนพนฐานของ Arduino และการควบคมหลอดไฟ LED เรยบเรยงโดยครทนพงษ ภรกษ

25 เอกสารประกอบการสอนวชาไมโครคอนโทรลเลอรเบองตน

รปท 4.7 แสดงการเลอกเปดหนาตาง Serial Monitor

รปท 4.8 ผลการท างานของโปรแกรมท 4.6 เมอดคาผานทาง Serial Monitor

Page 26: หน่วยที่ 4 ฟังก์ชั่นพื้นฐานของ ARDUINO และการควบคุมหลอดไฟ LED · ในตัวอย่างนี้จะน

หนวยท 4 ฟงกชนพนฐานของ Arduino และการควบคมหลอดไฟ LED เรยบเรยงโดยครทนพงษ ภรกษ

26 เอกสารประกอบการสอนวชาไมโครคอนโทรลเลอรเบองตน

4.2.10 โปรแกรมรบคาจากพอรตอนกรมเพอก าหนดความเรวในการกระพรบของ LED

ในการรบคาจากพอรตอนกรมจะใชฟงกชน 2 ตวคอ Serial. avaliable() และ Serial. read() โดยเรมจาก

ใชฟงกชน Serial. avaliable() เพอตรวจสอบวามขอมลหรอไม ฟงกชนจะคนคาเปนเลขจ านวนเตม แสดงจ านวน

ขอมลในบฟเฟอรตวรบของพอรตอนกรม ถาอานคาไดเทากบ 0 แสดงวาไมมขอมล

เมอทดสอบพบวาฟงกชน Serial. avaliable() คนคาไมเทากบ 0 ถดมาใหใชฟงกชน Serial. read() เพอ

อานคาจากบฟเฟอร ตวรบฟงกชนคนคาเปนเลขจ านวนเตมทเปนไบตแรกของขอมล (หรอเปน -1 ถาไมมขอมล)

ตวอยางการรบคาจากพอรตอนกรม เพอน าคาทรบไดไปควบคมอตราการกระพรบของ LED มโปรแกรมดง

แสดงในโปรแกรมท 4.7 มสวนของโปรแกรมทควรทราบอยแหงหนงคอ หากผพฒนาโปรแกรมตองการใหมการ

แสดงขอความบนหนาตาง Serial monitor ของ Arduino1.0 ในทกครงทเรมตนท างานใหม จะตองหนวงเวลารอ

ใหวงจร USB ภายใน Aธmega16U2 ของ Arduino เตรยมความพรอมในการท างาน หรออนมเมอเรชนใหเสรจ

สมบรณเสยกอนดวยการแทรกค าสง delay(5000); กอนใช ค าสง Serial. print();

โปรแกรมท 4.7

ไฟล Serial02.ino โปรแกรมภาษา C ของ Arduino ส าหรบทดสอบการรบคาจากพอรตอนกรมเพอ

ก าหนดความเรวในการกะพรบของ LED

/*

* Code for blinking LED that is received data from serial port

* to control rate of blinking. Receive keyboard button 1-5 only.

* File : Serial02.pde

*/

#define LED1_PIN 11 // LED pin as pin 11

int incomingByte = 0; // for incoming serial data.

int delayTime = 100; // Initial value of delay time.

void setup()

pinMode(LED1_PIN, OUTPUT); // set pin 11 as OUTPUT

Serial.begin(9600); // opens serial port at 9600 bps

delay(5000); // Delay for USB enumeration

Serial.print("Press 1-5 for control speed of LED :");

Page 27: หน่วยที่ 4 ฟังก์ชั่นพื้นฐานของ ARDUINO และการควบคุมหลอดไฟ LED · ในตัวอย่างนี้จะน

หนวยท 4 ฟงกชนพนฐานของ Arduino และการควบคมหลอดไฟ LED เรยบเรยงโดยครทนพงษ ภรกษ

27 เอกสารประกอบการสอนวชาไมโครคอนโทรลเลอรเบองตน

void loop()

if (Serial.available() > 0)

incomingByte = Serial.read(); // read the incoming byte:

// ASCII '1'=49, '2'=50, '3'=51, '4'=52 and '5'=53

// calculate new delay time

If (incomingByte >= 49 && incomingByte <=53)

// echo to user

Serial.write(incomingByte);

Serial.println();

delayTime=(incomingByte-48)*100;

Serial.print("Press 1-5 for control speed of LED :");

digitalWrite(LED1_PIN, HIGH); // Turn on LED1

delay(delayTime); // wait for delayTime

digitalWrite(LED1_PIN, LOW); // Turn off LED1

delay(delayTime); // wait for delayTime

ผลการท างานของโปรแกรมท 4.7 แสดงไดดงรปท 4.8 โปรแกรมนจะพมพขอความ Press 1-5 for

control speed of LED ออกทางพอรตอนกรมแลวรอใหผทดลองกดปม 1 ถง 5 ทแปนคยบอรด โดยกด 1 คอให

LED ตด 0.1 วนาท และดบ 0.1 วนาท และถากด 5 จะท าให LED ตด 0.5 วนาท และดบ 0.5 วนาท ถาไมใชปม 1

ถง 5 โปรแกรมจะไมตอบสนอง เมอกดแลวโปรแกรมจะสงรหส ASCII ของปมนกลบคนเพอแจงผทดลอง แลวน า

คาทไดไปค านวณคาหนวงเวลาการตดดบของ LED

Page 28: หน่วยที่ 4 ฟังก์ชั่นพื้นฐานของ ARDUINO และการควบคุมหลอดไฟ LED · ในตัวอย่างนี้จะน

หนวยท 4 ฟงกชนพนฐานของ Arduino และการควบคมหลอดไฟ LED เรยบเรยงโดยครทนพงษ ภรกษ

28 เอกสารประกอบการสอนวชาไมโครคอนโทรลเลอรเบองตน

รปท 4.8 ผลการท างานของโปรแกรมท 4.7

ทหนาตาง Serial Monitor ของ Arduino เมอตองการสงขอความใหพมพขอความทตองการในชองวาง

ดานบน เมอพมพเสรจใหคลกปม Send คารหส ASCII ของตวอกษร 1,2,3,4 และ 5 คอ 49,50,51,52 และ 53

ตามล าดบ ในการค านวณคาหนวงเวลาของฟงกชน delay() ท าไดโดยน าคารหส ASCII ของตวอกษรลบดวย 48

แลวน าคาทไดคณดวย 100 ซงมสตรดงน

delayTime=(incomingByte-48)*100; การตรวจจบอนพตจากการกดปม 1 ถง 5 ของผใชงานท าไดโดย

ใชค าสง if โดยก าหนดเงอนไขดงน

if(incomingByte >= 49 && incomingByte <=53) เงอนไขของค าสงนจะเปนจรงเมอคาของ

ขอมลทรบไดมากกวาหรอเทากบ 49 และตองนอยกวาหรอเทากบ 53 จงจะค านวณคาหนวงเวลาใหม ถาเปนปม

อนเงอนไขของค าสง if เปนเทจ จะก าหนดใหขามสวนค านวณคาหนวงเวลาไป

4.3 ฟงกชนอนพตเอาตพตแอนะลอก

ค าอธบายและการเรยกใชฟงกชน

4.3.1 analogRead(pin)

อานคาจากขาพอรตทก าหนดใหเปนอนพตแอนะลอก Arduino มวงจรแปลงสญญาณแอนะลอกเปน

ดจตอลความละเอยด 10 บต ท าใหแปลงคาแรงดนอนพต 0 ถง +5V ใหเปนขอมลตวเลขจ านวนเตมระหวาง 0 ถง

1,023

พารามเตอร

pin - หมายเลขของขาอนพตแอนะลอก มคา 0 ถง 11 หรอเปนตวแปรทใชแทนคา 0 ถง 11

Page 29: หน่วยที่ 4 ฟังก์ชั่นพื้นฐานของ ARDUINO และการควบคุมหลอดไฟ LED · ในตัวอย่างนี้จะน

หนวยท 4 ฟงกชนพนฐานของ Arduino และการควบคมหลอดไฟ LED เรยบเรยงโดยครทนพงษ ภรกษ

29 เอกสารประกอบการสอนวชาไมโครคอนโทรลเลอรเบองตน

คาทสงกลบ

เลขจ านวนเตมจาก 0 ถง 1023

หมายเหต

ส าหรบขาทเปนอนพตแอนะลอกไมจ าเปนตองประกาศแจงวาเปนอนพตหรอเอาตพต

ตวอยางท 4.11

int ledPin = 13; // LED connected to digital pin 13

int analogPin = 3; // potentiometer connected to analog pin 3

int val = 0; // variable to store the read value

int threshold = 512; // threshold

void setup()

pinMode(ledPin, OUTPUT); // sets the digital pin 13 as output

void loop()

val = analogRead(analogPin); // read the input pin

if (val >= threshold)

digitalWrite(ledPin, HIGH); // LED on

else

digitalWrite(ledPin, LOW); // LED off

ตวอยางนจะสงใหขา 13 เปน HIGH เมออานคาจากขา analogPin แลวมคามากกวาหรอเทากบคา

เงอนไขทก าหนดไว (ในตวอยางคาเงอนไขหรอ threshold = 255) ท าให LED ทตออยตดสวาง แตถามคานอยกวา

ขา 13 จะเปน LOW ท าให LED ดบ

Page 30: หน่วยที่ 4 ฟังก์ชั่นพื้นฐานของ ARDUINO และการควบคุมหลอดไฟ LED · ในตัวอย่างนี้จะน

หนวยท 4 ฟงกชนพนฐานของ Arduino และการควบคมหลอดไฟ LED เรยบเรยงโดยครทนพงษ ภรกษ

30 เอกสารประกอบการสอนวชาไมโครคอนโทรลเลอรเบองตน

4.3.2 analogWrite(pin, value)

ใชในการเขยนคาแอนะลอกไปยงขาพอรตทก าหนดไวเพอสรางสญญาณ PWM

พารามเตอร

pin - หมายเลขขาพอรตของ MCU

value - เปนคาดวตไซเกลมคาระหวาง 0 ถ ง 255

เมอคาเปน 0 แรงดนของขาพอรตทก าหนดจะเปน 0V เมอมคาเปน 255 แรงดนทขาพอรตจะเปน +5V

ส าหรบคาระหวาง 0 ถง 255 จะท าใหขาพอรตทก าหนดไวมคาแรงดนเปลยนแปลงในยาน 0 ถ ง 5V คาทสง

กลบจากฟงกชนเลขจ านวนเตมจาก 0 ถง 255

หมายเหต

ขาพอรตทใชสรางสญญาณ PWM ดวยฟงกชน analogWrite () ซงกคอขา 3, 5, 9, 10 และ 11 จะพเศษ

จากขาทเปนพอรตดจตอลปกต คอไมตองก าหนดคาเพอเลอกเปน INPUT หรอOUTPUT คาความถของสญญาณ

PWM มคาประมาณ 490Hz ค าสง analogWrite ท างานกบขา 3, 5, 9, 10, 11 เทานน ส าหรบขาอนๆ จะตอง

เขยนคาดจตอลก าหนดเปน 0 หรอ 5V

ผใชงานสามารถน าสญญาณทไดจากค าสงนไปใชในการปรบความสวางของ LED หรอตอขยายกระแส

เพอตอปรบความเรวของมอเตอรได หลงจากเรยกใชค าสงนทขาพอรตทก าหนดจะมสญญาณ PWM สงออกมาอยาง

ตอเนองจนกวาจะเรยกใช analogWrite (หรอเรยกค าสง digitalRead หรอ digitalWrite ทขาเดยวกน)

ตวอยางท 4.12

int ledPin = 11; // LED connected to digital pin 11

int analogPin = 0; // potentiometer connected to analog pin 0

int val = 0; // variable to store the read value

void setup()

pinMode(ledPin, OUTPUT); // sets the pin as output

void loop()

val = analogRead(analogPin); // read the input pin

analogWrite(ledPin, val / 4); // analogRead values go from 0 to 1023,

// analogWrite values from 0 to 255

Page 31: หน่วยที่ 4 ฟังก์ชั่นพื้นฐานของ ARDUINO และการควบคุมหลอดไฟ LED · ในตัวอย่างนี้จะน

หนวยท 4 ฟงกชนพนฐานของ Arduino และการควบคมหลอดไฟ LED เรยบเรยงโดยครทนพงษ ภรกษ

31 เอกสารประกอบการสอนวชาไมโครคอนโทรลเลอรเบองตน

ตวอยางนจะควบคมความสวางของ LED ทตอกบขา 11 ใหเปนไปตามคาทอานไดจากตวตานทานปรบคา

ไดทตอกบขา A0

4.3.3 การทดลองอนพตแอนะลอกของ Arduino

ภายในไมโครคอนโทรลเลอร Aธmega328 บนบอรด Arduino มวงจรแปลงส ญญาณแอนะลอกเปน

ดจตอล ความละเอยด 10 บตจ านวน 6 ชอง ซงไดก าหนดขาตอเปน A0 ถง A6 วงจรแปลงสญญาณแอนะลอก

เปนดจตอลมความละเอยด 10 บตท าหนาทแปลงแรงดนอนพต 0 ถง 5V เปนคาเลขจ านวนเตม 0 ถง 1023

ฟงกชนส าหรบอานคาจากอนพตแอนะลอกคอ analogRead() โดยคาในวงเลบคอหมายเลขของชอง

สญญาณทตองการอานคา (0 ถง 6) เมอฟงกชนท างานเสรจจะคนคาเปนเลขจ านวนเตม (int) จาก 0 ถง 1,023

ถาตองการค านวณเปนคาแรงดนทมหนวยเปนโวลต (Volt : V) กระท าไดจากความสมพนธดงน

volt = คาทอานได x 5 /1023

4.4 ฟงกชนเกยวกบเวลา

4.4.1 unsigned long millis()

คนคาเปนคาเวลาในหนวยมลลวนาท นบตงแตเรมรนโปรแกรมปจจบน

คาทสงกลบจากฟงกชน

คาเวลาในหนวยเปนมลลวนาท ตงแตเรมรนโปรแกรมปจจบนคนคาเปน unsigned long คา

ตวเลขจะเกดการโอเวอรโฟลว (คาเกนแลวกลบเปนศนย) เมอเวลาผานไปประมาณ 9 ชวโมง

ตวอยางท 4.12

long time;

void setup()

Serial.begin(9600);

void loop()

Serial.print("Time: ");

time = millis();

Serial.println(time); //prints time since program started

delay(1000);

// wait a second so as not to send massive amounts of data

Page 32: หน่วยที่ 4 ฟังก์ชั่นพื้นฐานของ ARDUINO และการควบคุมหลอดไฟ LED · ในตัวอย่างนี้จะน

หนวยท 4 ฟงกชนพนฐานของ Arduino และการควบคมหลอดไฟ LED เรยบเรยงโดยครทนพงษ ภรกษ

32 เอกสารประกอบการสอนวชาไมโครคอนโทรลเลอรเบองตน

4.4.2 delay(ms)

เปนฟงกชนชะลอการท างานหรอหนวงเวลาของโปรแกรมตามเวลาทก าหนดในหนวยมลลวนาท

พารามเตอร

ms - ระยะเวลาทตองการหนวงเวลาหนวยเปนมลลวนาท (1000 ms เทากบ 1 วนาท )

ตวอยางท 4.13

int ledPin = 13; // LED connected to pin 13

void setup()

pinMode(ledPin, OUTPUT); // sets as output

void loop()

digitalWrite(ledPin, HIGH); // LED on

delay(1000); // waits for a second

digitalWrite(ledPin, LOW); // LED off

delay(1000); // waits for a second

จากตวอยางนก าหนดให pin หมายเลข 13 เปนเอาตพต สงใหเปน HIGH (LED ตด) หยดรอ 1000

มลลวนาท (1 วนาท) แลวสงเปน LOW (LED ดบ) แลวหยดรอ 1000 มลลวนาท

4.4.3 delayMicroseconds(us)

เปนฟงกชนชะลอการท างานหรอหนวงเวลาของโปรแกรมตามเวลาทก าหนด ในหนวยไมโครวนาท

พารามเตอร

us - คาหนวงเวลาในหนวยไมโครวนาท

(1000 ไมโครวนาท = 1 มลลวนาท และหนงลานไมโครวนาท = 1 วนาท)

ตวอยางท 4.13

int outPin = 11; // digital pin 11

void setup()

pinMode(outPin, OUTPUT); // sets as output

Page 33: หน่วยที่ 4 ฟังก์ชั่นพื้นฐานของ ARDUINO และการควบคุมหลอดไฟ LED · ในตัวอย่างนี้จะน

หนวยท 4 ฟงกชนพนฐานของ Arduino และการควบคมหลอดไฟ LED เรยบเรยงโดยครทนพงษ ภรกษ

33 เอกสารประกอบการสอนวชาไมโครคอนโทรลเลอรเบองตน

void loop()

digitalWrite(outPin, HIGH); // sets the pin on

delayMicroseconds(50); // pauses for 50 microseconds

digitalWrite(outPin, LOW); // sets the pin off

delayMicroseconds(50); // pauses for 50 microseconds

จากตวอยางนก าหนดใหขา 11 ท างานเปนเอาตพต เพอสงสญญาณพลสทมคาบเวลา 100 ไมโครวนาท

ตอเนองตลอดเวลา

4.5 ฟงกชนเกยวกบอนเตอรรปตภายนอก

4.5.1 attachInterrupt(interrupt, function, mode)

ใชระบวาเมอขาอนพตทรบสญญาณอนเตอรรปตจากภายนอก มการเปลยนแปลงเกดขนจะก าหนดให

ซพยกระโดดไปยงฟงกชนใด โดยมขาอนพตรบสญญาณอนเตอรรปตจากภายนอก 2 ขาคอ D2 และ D3 ซงตรง

หมายเหต

ฟงกชนทท างานเมอการอนเตอรรปต จะไมสามารถเรยกใชฟงกชน milis() และ delay() ไดเมอเกดการ

ตอบสนองอนเตอรรปตแลว ดงนนขอมลทเขามาทางขา serial data อาจสญหายได

พารามเตอร

Interrupt - หมายเลขของชองอนพตอนเตอรรปต (เปน int)

function – ฟงกชนทจะกระโดดไปท างานเมอเกดอนเตอรรปต ฟงกชนนตองไมรบคาพารามเตอร

และไมมการคนคา

mode - เลอกประเภทสญญาณทใชกระตนใหเกดการอนเตอรรปต

LOW เกดอนเตอรรปตเมอขาสญญาณเปนลอจก “0”

CHANGE เกดอนเตอรรปตเมอมการเปลยนแปลงลอจก

RISING เกดอนเตอรรปตเมอมการเปลยนลอจก “0” เปน “1”

FALLING เกดอนเตอรรปตเมอเปลยนลอจก “1” เปน “0”

ตวอยางท 4.14

int pin = 13;

volatile int state = LOW;

Page 34: หน่วยที่ 4 ฟังก์ชั่นพื้นฐานของ ARDUINO และการควบคุมหลอดไฟ LED · ในตัวอย่างนี้จะน

หนวยท 4 ฟงกชนพนฐานของ Arduino และการควบคมหลอดไฟ LED เรยบเรยงโดยครทนพงษ ภรกษ

34 เอกสารประกอบการสอนวชาไมโครคอนโทรลเลอรเบองตน

void setup()

pinMode(pin, OUTPUT);

attachInterrupt(3, blink, CHANGE);

void loop()

digitalWrite(pin, state);

void blink()

state = !state;

ตวอยางนเลอกอนพตอนเตอรรปตชอง 0 ก าหนดใหกระโดดไปท างานทฟงกชน blink เพอเปลยนสถานะ

ลอจกทขา 13 เมอเกดการอนเตอรรปตจากการเปลยนแปลงลอจกทขา 3

4.5.2 detachInterrupt(interrupt)

ยกเลกการอนเตอรรปต

พารามเตอร

Interrupt - หมายเลขของชองอนพตอนเตอรรปตทตองการยกเลก (คาเปน 0 หรอ 1)

4.6 ฟงกชนทางคณตศาสตร

4.6.1 min(x, y)

หาคาตวเลขทนอยทสดของตวเลขสองตว

พารามเตอร

x - ตวเลขตวแรกเปนขอมลประเภทใดกได

y - ตวเลขตวทสองเปนขอมลประเภทใดกได

คาทสงกลบจากฟงกชน

คาทนอยทสดของตวเลขสองตวทให

ตวอยางท 4.15

sensVal = min(sensVal, 100);

Page 35: หน่วยที่ 4 ฟังก์ชั่นพื้นฐานของ ARDUINO และการควบคุมหลอดไฟ LED · ในตัวอย่างนี้จะน

หนวยท 4 ฟงกชนพนฐานของ Arduino และการควบคมหลอดไฟ LED เรยบเรยงโดยครทนพงษ ภรกษ

35 เอกสารประกอบการสอนวชาไมโครคอนโทรลเลอรเบองตน

// assigns sensVal to the smaller of sensVal or 100.

// ensuring that it never gets above 100.

ตวอยางนจะไดคาของ sensVal ทไมเกน 100 กลบจากฟงกชน

4.6.2 max(x, y)

หาคาตวเลขทมากทสดของตวเลขสองตว

พารามเตอร

x - ตวเลขตวแรกเปนขอมลประเภทใดกได

y - ตวเลขตวทสองเปนขอมลประเภทใดกได

คาทสงกลบจากฟงกชน

คาทมากทสดของตวเลขสองตวทให

ตวอยางท 4.16

sensVal = max(senVal, 20);

// assigns sensVal to the bigger of sensVal

// or 20 (effectively ensuring that it is at least 20)

จากตวอยางนคาของ sensVal จะมคาอยางนอย 20

4.6.3 abs(x)

หาคาสมบรณ (absolute) ของตวเลขเปนการท าใหคาของตวแปรเปนคาจ านวนเตมบวก

พารามเตอร

x - ตวเลขคาทสงกลบจากฟงกชน x มคามากกวาหรอเทากบศนย ( x มคาเปนบวกหรอศนย )

-x - เมอ x มคานอยกวาศนย ( x มคาตดลบ)

4.6.4 constrain(x, a, b)

ปดคาตวเลขทนอยกวาหรอมากกวาใหอยในชวงทก าหนด

พารามเตอร

x - ตวเลขทตองการปดคาใหอยในชวงทก าหนดสามารถเปนขอมลชนดใดกได

a - คาต าสดของชวงทก าหนด

b - คาสงสดของชวงทก าหนด

คาทสงกลบจากฟงกชน

x เมอ x มคาอยระหวาง a และ b

a เมอ x มคานอยกวา a

b เมอ x ม คามากกวา b

Page 36: หน่วยที่ 4 ฟังก์ชั่นพื้นฐานของ ARDUINO และการควบคุมหลอดไฟ LED · ในตัวอย่างนี้จะน

หนวยท 4 ฟงกชนพนฐานของ Arduino และการควบคมหลอดไฟ LED เรยบเรยงโดยครทนพงษ ภรกษ

36 เอกสารประกอบการสอนวชาไมโครคอนโทรลเลอรเบองตน

ตวอยางท 4.17

sensVal = constrain(sensVal, 10, 150);

// limits range of sensor values to between 10 and 150

จากตวอยางนคาของ sensVal จะอย ในชวง 10 ถ ง 150

4.7 ฟงกชนเกยวกบเลขสม

4.7.1 randomSeed(seed)

ใชก าหนดตวแปรส าหรบสรางตวเลขสมโดยสามารถใชตวแปรไดหลากหลายรปแบบ โดยทวไปจะ

ใชคาเวลาปจจบน (จากฟงกชน milis()) แตสามารถใชคาอยางอนได เชนคาทไดเมอผใชกดสวชหรอคา

สญญาณรบกวนทอานไดจากขาอนพตแอนะลอก

พารามเตอร

seed เปนคาตวเลขแบบ long int

ตวอยางท 4.18

long randNumber;

void setup()

Serial.begin(19200);

void loop()

randomSeed(analogRead(0));

randNumber = random(300);

Serial.println(randNumber);

ในตวอยางนก าหนดใหเกดการสมตวเลขขนเมออานคาจากอนพตแอนะลอกชอง 0 (A0) ยานของ

ตวเลขสมคอ 0 ถง 300 เมอท าการสมตวเลขแลวใหแสดงคานนทหนาตาง Serial Monitor

4.7.2 long random(max), long random (min, max)

ใชสรางตวเลขสมเสมอน (pseudo-random numbers) เพอน าไปใชในโปรแกรมกอนใชฟงก

ชนนจะตองเรยกใชฟงกชน randomSeed() กอน

Page 37: หน่วยที่ 4 ฟังก์ชั่นพื้นฐานของ ARDUINO และการควบคุมหลอดไฟ LED · ในตัวอย่างนี้จะน

หนวยท 4 ฟงกชนพนฐานของ Arduino และการควบคมหลอดไฟ LED เรยบเรยงโดยครทนพงษ ภรกษ

37 เอกสารประกอบการสอนวชาไมโครคอนโทรลเลอรเบองตน

พารามเตอร

min ก าหนดคาตวเลขสมไมนอยกวาคาน (เปนออปชนเพมเตม)

max ก าหนดคาสงสดของตวเลขสม

คาทสงกลบจากฟงกชน

คนคาเปนตวเลขสมในชวงทก าหนด (เปนตวแปร long int)

ตวอยางท 4.19

long randNumber;

void setup()

Serial.begin(19200);

void loop()

randomSeed(analogRead(2)); // return a random number from 50 - 300

randNumber = random(50,300);

Serial.println(randNumber);

ในตวอยางนก าหนดใหสมตวเลข เมออานคาจากอนพตแอนะลอกชอง 2 (A2) ยานของตวเลขสม

คอ 50 ถง 300 เมอท าการสมตวเลขแลว ใหแสดงคานนทหนาตาง Serial Monitor

Page 38: หน่วยที่ 4 ฟังก์ชั่นพื้นฐานของ ARDUINO และการควบคุมหลอดไฟ LED · ในตัวอย่างนี้จะน

หนวยท 4 ฟงกชนพนฐานของ Arduino และการควบคมหลอดไฟ LED เรยบเรยงโดยครทนพงษ ภรกษ

38 เอกสารประกอบการสอนวชาไมโครคอนโทรลเลอรเบองตน

สรปเนอหาสาระส าคญ

Arduino เปนภาษาอตาล โดยเปนชอโครงการพฒนาไมโครคอนโทรลเลอรตระกล AVR ในรปแบบ Open Source คอวธการในการออกแบบ พฒนา และแจกจายส าหรบตนฉบบของสนคาหรอความร โดยเฉพาะซอฟตแวร โดยโอเพนซอรซถกพจารณาวาเปนทงรปแบบหนงในการออกแบบ และแผนการในการด าเนนการ โดยโอเพนซอรซเปดโอกาสใหบคคลอนน าเอาระบบนนไปพฒนาไดตอไป พฒนามาจากโครงการ Open Source เดมของ AVR ทชอ Wiring โดยโครงการ Wiring ใชไมโครคอนโทรลเลอร AVR เบอร ATmega128 ซงมขอจ ากดหลายดาน เชน เปนชปทมตวถงแบบ SMD ท าใหน ามาใชงานยากเพราะตวไมโครคอนโทรลเลอรมขนาดเลกเกนไป ท าใหไมสะดวกในการตอใชงานจรง มขาอนพทและเอาทพทจ านวนมากเกนไป ตวบอรดมขนาดใหญเกนไป ไมเหมาะสมส าหรบผทเรมตนเรยนรดานไมโครคอนโทรลเลอร ดวยเหตผลขางตนจงท าใหไมไดรบความนยม ระยะตอมาทมงาน Arduino จงไดน าโครงการ Wiring มาพฒนาใหมโดยใชไมโครคอนโทรลเลอร AVR ขนาดเลก คอ Mega8 และ Mega168 ท าใหไดรบความนยมจนถงปจจบนน

Page 39: หน่วยที่ 4 ฟังก์ชั่นพื้นฐานของ ARDUINO และการควบคุมหลอดไฟ LED · ในตัวอย่างนี้จะน

หนวยท 4 ฟงกชนพนฐานของ Arduino และการควบคมหลอดไฟ LED เรยบเรยงโดยครทนพงษ ภรกษ

39 เอกสารประกอบการสอนวชาไมโครคอนโทรลเลอรเบองตน

เรอง ฟงกชนพนฐานของ Arduino และการควบคมหลอดไฟ LED ใชเวลา 20 นาท ******************************************************************************************************* ค าชแจง แบบฝกหดมทงหมด 2 ตอน ประกอบดวยตอนท 1 และตอนท 2 (20 คะแนน) 2. แบบฝกหดตอนท 1 เปนค าถามแบบถก-ผด มทงหมด 20 ขอ (10 คะแนน) 3. แบบฝกหดตอนท 2 เปนค าถามแบบปรนย มทงหมด 10 ขอ (10 คะแนน)

ค าชแจง ใหผเรยนกาเครองหมายถก ในขอทคดวาถก และกาเครองหมายผด ในขอทคดวาผด 1. Serial.begin(speed) ใชก าหนดอตราเรวของการถายทอดขอมลหรออตราบตหรอบตเรต 2. Serial.available() ใชตรวจสอบวามขอมลดานรบหรอไมโดยคนคาเปน int ตามขอมลทรบเขา 3. Serial.read(data) ใชอานคาขอมลจากพอรตขนาน 4. Serial.write(data) ใชเขยนขอมลไบตไปยงพอรตอนกรม 5. Serial.flush() ใชลางบฟเฟอรทงดานรบและสง 6. Serial.print(data) ใชสงขอมลออกพอรตขนาน 7. Serial.println(data) ใชสงขอมลออกพอรตอนกรมพรอมกบขนบรรทดใหม 8. min(x, y) หาคาตวเลขทนอยทสดของตวเลขสองตว 9. max(x, y)หาคาตวเลขทมากทสดของตวเลขสองตว _______10. Serial.println(b, DEC) เปนค าสงพมพคาตวแปร b เปนตวเลขฐานสบ ตามดวยรหสอกษร carriage return และ linefeed

แบบฝกหดหนวยท 4

แบบฝกหดตอนท 1

Page 40: หน่วยที่ 4 ฟังก์ชั่นพื้นฐานของ ARDUINO และการควบคุมหลอดไฟ LED · ในตัวอย่างนี้จะน

หนวยท 4 ฟงกชนพนฐานของ Arduino และการควบคมหลอดไฟ LED เรยบเรยงโดยครทนพงษ ภรกษ

40 เอกสารประกอบการสอนวชาไมโครคอนโทรลเลอรเบองตน

ค าชแจง ใหผเรยนเลอกค าตอบทถกทสดแลวกาเครองหมายกากบาท () ใหครบทกขอ 1. ฟงกชน pinMode (pin,mode) ท างานอยางไร ก. pin – ใชก าหนดขาพอรตใดๆ / mode – โหมดการท างานเปน INPUT หรอ OUTPUT ข. pin – ใชก าหนดขาพอรตใดๆ / mode – โหมดการท างานเปน INPUT ค. pin – ใชก าหนดขาพอรตใดๆ / mode – โหมดการท างานเปน OUTPUT ง. pin – ใชก าหนดขาเปน INPUT / mode – โหมดการท างานเปน INPUT หรอ OUTPUT 2. ฟงกชน int digitalRead (pin) ท างานอยางไร ก. อานคาสถานะของขาทระบไววามคาเปน HIGH หรอ LOW ข. อานคาสถานะของขาทระบไววามคาเปน ON หรอ OFF ค. อานคาสถานะของขาทระบไววามคาเปน INPUT หรอ OUTPUT ง. อานคาสถานะของขาทระบไววามคาเปนจรง หรอ เทจ 3. ถาตองการปรบให LED กะพรบเรวขนหรอชาลง ท าอยางไร ก. เปลยนคาในฟงกชน delay() เปนคาอนๆ โดยคายงมาก LED ยงกะพรบเรว ข. เปลยนคาในฟงกชน delay() เปนคาอนๆ โดยคายงมาก LED ยงกะพรบชา ค. เปลยนคาในฟงกชน delay() เปนคาอนๆ โดยคายงมาก LED ยงกะพรบคงท ง. เปลยนคาในฟงกชน delay() เปนคาอนๆ โดยคายงมาก LED ยงกะพรบไมคงท 4. ฟงกชน Serial.print() และ Serial.println() มรปแบบอยางไร ก. Serial.print(b,FORMAT); ข. Serial.println(b,FORMAT); ค. initialization; condition; ง. Serial.print(b,FORMAT); กบ Serial.println(b,FORMAT); 5. อานคาอนพตไดจากฟงกชน ก. Readdigital ข. digitalRead ค. Modepin ง. pinMode

แบบฝกหดตอนท 2

Page 41: หน่วยที่ 4 ฟังก์ชั่นพื้นฐานของ ARDUINO และการควบคุมหลอดไฟ LED · ในตัวอย่างนี้จะน

หนวยท 4 ฟงกชนพนฐานของ Arduino และการควบคมหลอดไฟ LED เรยบเรยงโดยครทนพงษ ภรกษ

41 เอกสารประกอบการสอนวชาไมโครคอนโทรลเลอรเบองตน

6. สญญาณรบกวนในการกดสวตชเรยกวา ก. bounce ข. debounce ค. boun ง. deboun 7. หลกการแกไขสญญาณรบกวนท าไดหลายแบบ เชนตอกนในลกษณะวงจร ก. วงจร RL อนตเกรเตอร

ข. วงจร RLC อนตเกรเตอร ค. วงจร LC อนตเกรเตอร

ง. วงจร RC อนตเกรเตอร 8. อตราบอดของการรบสงขอมลอนกรมมหนวยเปน ก. บตตอวนาท ข. บตตอนาท ค. บตตอครงชวโมง ง. บตตอชวโมง 9. ฟงกชน delayMicroseconds(us) คอ ก. ฟงกชนชะลอการท างานในหนวยไมโครวนาท ข. ฟงกชนชะลอการท างานในหนวยวนาท ค. ฟงกชนชะลอการท างานในหนวยนาท ง. ฟงกชนชะลอการท างานในหนวยนาโนวนาท 10. constrain(x, a, b) คอฟงกชนอะไร ก. คาต าสดของชวงทก าหนด

ข. คาสงสดของชวงทก าหนด ค. ปดคาตวเลขทนอยกวาหรอมากกวาใหอยในชวงทก าหนด ง. ตวแปรจ านวนเตม 64 บต แบบไมคดเครองหมาย

Page 42: หน่วยที่ 4 ฟังก์ชั่นพื้นฐานของ ARDUINO และการควบคุมหลอดไฟ LED · ในตัวอย่างนี้จะน

หนวยท 4 ฟงกชนพนฐานของ Arduino และการควบคมหลอดไฟ LED เรยบเรยงโดยครทนพงษ ภรกษ

42 เอกสารประกอบการสอนวชาไมโครคอนโทรลเลอรเบองตน

***************************************************************************************************ค าชแจง ใหผเรยนทกคนท าการทดลองตามปฎบตการทดลองหนวยท 4 เรอง ฟงกชนพนฐานของ Arduino และการควบคมหลอดไฟ LED โดยใชเวลา 180 นาท ( 20 คะแนน)

จดประสงคเชงพฤตกรรม 1. สามารถใชฟงกชนพนฐานของ Arduino ไดถกตอง 2. สามารถควบคมหลอดไฟ LED ไดถกตอง 3. สามารถแกปญหาในการท างานของบอรด Arduino Uno R3 ได 4. สามารถตอใชงานและอพโหลดโปรแกรมของบอรด Arduino Uno R3 ได

อปกรณ การทดลอง

1. เครองคอมพวเตอรและโปรแกรม Arduino IDE 1.6.9 1 ชด 2. USB Cable Arduino Uno R3 1 เสน 3. Arduino Uno R3 Board 1 บอรด

6. Hook-up Wires 10 เสน 7. Breadboard 1 แผง 8. LED 6 ตว 9. Pushbutton Switch 2 ตว 10. 10K Ohm Resistor 2 ตว 11. 220 Ohm Resistor 6 ตว

ขอควรระวง 1. ควรระวงไมวางบอรด Arduino Uno R3 หรอชลตางๆ บนโตะโลหะหรอทวางทเปนโลหะเพราะอาจเกดการลดวงจรของภาคจายไฟได

2. ไมควรตอสายตอวงจรในบอรด Arduino Uno R3 ทงไว ควรถอดสายตอวงจรออกใหหมด เพราะผลการทดลองอาจเกดการผดพลาดไมเปนไปตามทฤษฎได

3. ไมควรถอดสายสายโหลด USB เขาออกตลอดเวลา เพราะอาจท าให Arduino Uno R3 เสยหายได

ปฏบตการทดลองหนวยท 4 เรอง ฟงกชนพนฐานของ Arduino และการควบคมหลอดไฟ LED

Page 43: หน่วยที่ 4 ฟังก์ชั่นพื้นฐานของ ARDUINO และการควบคุมหลอดไฟ LED · ในตัวอย่างนี้จะน

หนวยท 4 ฟงกชนพนฐานของ Arduino และการควบคมหลอดไฟ LED เรยบเรยงโดยครทนพงษ ภรกษ

43 เอกสารประกอบการสอนวชาไมโครคอนโทรลเลอรเบองตน

การทดลองท 4.1 เอาตพตดจตอลของ Arduino Uno โปรแกรมสงให LED กะพรบ 5 ดวง ฟงกชน pinmode(pin,mode);

เมอ pin คอ หมายเลขขาทตองการ Mode คอ โหมดการท างาน (INPUT หรอ OUTPUT)

หลงจากทก าหนดใหเปนเอาตพตแลวเมอตองการเขยนคาไปยงขานนๆ ใหเรยกใชฟงกชน digitalWrite() โดยมรปแบบดงน

digitalWrite(pin,value); เมอ pin คอหมายเลขขาทตองการ value สถานะลอจกทตองการ (HIGH หร อ LOW)

ในตวอยางนจะน าบอรด Arduino มาตอควบคม LED จ านวน 5 ตว โดยสงให LED ตดตามล าดบ เรมจาก LED1 ไปยง LED5 แลววนกลบมาเรมท LED1 ตอเนองตลอดเวลา

Hardware Required

1. Arduino Uno Board 2. 220 ohm resistor 5 PCS 3. hook-up wires 4. breadboard 5. LED 6 PCS

Circuit

Page 44: หน่วยที่ 4 ฟังก์ชั่นพื้นฐานของ ARDUINO และการควบคุมหลอดไฟ LED · ในตัวอย่างนี้จะน

หนวยท 4 ฟงกชนพนฐานของ Arduino และการควบคมหลอดไฟ LED เรยบเรยงโดยครทนพงษ ภรกษ

44 เอกสารประกอบการสอนวชาไมโครคอนโทรลเลอรเบองตน

Schematic

Code #define DELAY_TIME 200 Int led_pin[ ]=2,3,4,5,6; int count; void setup() // Run once at startup for(count=0; count<5; count++) pinMode(led_pin[count], OUTPUT); // Call function pinMode to set Digital pin 2,3,4,5,6 as OUTPUT void loop() // run over and over again for(count=0; count<5; count++) digitalWrite(led_pin[count], HIGH); // Turn on LED delay(DELAY_TIME); // wait for a 0.2 second. (200 ms) digitalWrite(led_pin[count], LOW); // Turn off LED delay(DELAY_TIME);

Page 45: หน่วยที่ 4 ฟังก์ชั่นพื้นฐานของ ARDUINO และการควบคุมหลอดไฟ LED · ในตัวอย่างนี้จะน

หนวยท 4 ฟงกชนพนฐานของ Arduino และการควบคมหลอดไฟ LED เรยบเรยงโดยครทนพงษ ภรกษ

45 เอกสารประกอบการสอนวชาไมโครคอนโทรลเลอรเบองตน

ผลการทดลอง............................................................................................................................ ............................................................................................................................................................................ ........................................................................................................................................................................... ..................................................................................................................... ................................................................................................................................................................................................................................. ........................................................................................................................................................................... ............................................. ...................................................................... .................................................................................................................................................................................................................................. ........................................................................................................................................................................... ................................................................................................................... ................................................................................................................................................................................................................................... ........................................................................................................................................................................... ............................................ . การทดลองท 4.2 อนพตดจตอลของ Arduino Uno Arduino Uno มขาพอรตดจตอลทก าหนดใหเปนอนพตหรอเอาตพตจ านวน 13 ขา ถาตองการก าหนดเปนอนพตตองก าหนดดวยฟงกชน pinMode และอานคาอนพตไดจากฟงกชน digitalRead ซงมรปแบบดงน digitalRead (pin); เมอ pin คอหมายเลขขาทตองการอานคาสถานะ เมอฟงกชนท างาน คอคาเปนสถานะของขาทตองการอานคา โดยคอคาเปน LOW (คาเปน “0”) หรอ HIGH (คาเปน “1”) ในการใชงานขาอนพตดจตอลตองตอตวตานทานพลอป (ตอตวตานทานจากไฟเลยง +5V มายงขาอนพต) เพอก าหนดสถานะทแนนอนใหกบขาอนพตในภาวะทไมมการกดสวตช ดงวงจรในรปท 4.5 โดยตอขา 7 ผานตวตานทานคา 10kΩ ไปยงไฟเลยง +5V เมอไมไดกดสวตช SW1 ทขา 7 จะมสถานะเปนลอจกสงหรอ HIGH หรอ “1” เมอกดสวตช จะท าใหขา 7 ตอลงกราวด อานคาสถานะเปนลอจกต าหรอ LOW หรอ “0”

Page 46: หน่วยที่ 4 ฟังก์ชั่นพื้นฐานของ ARDUINO และการควบคุมหลอดไฟ LED · ในตัวอย่างนี้จะน

หนวยท 4 ฟงกชนพนฐานของ Arduino และการควบคมหลอดไฟ LED เรยบเรยงโดยครทนพงษ ภรกษ

46 เอกสารประกอบการสอนวชาไมโครคอนโทรลเลอรเบองตน

ภายในขาพอรตของไมโครคอนโทรลเลอร Arduino Uno จะมการตอตวตานทานพลอปคา 20kΩ เตรยมไวให Hardware Required

1. Arduino uno Board 2. button or Switch 3. 10K ohm resistor 4. hook-up wires 5. breadboard

Page 47: หน่วยที่ 4 ฟังก์ชั่นพื้นฐานของ ARDUINO และการควบคุมหลอดไฟ LED · ในตัวอย่างนี้จะน

หนวยท 4 ฟงกชนพนฐานของ Arduino และการควบคมหลอดไฟ LED เรยบเรยงโดยครทนพงษ ภรกษ

47 เอกสารประกอบการสอนวชาไมโครคอนโทรลเลอรเบองตน

Circuit

Schematic

Code /* * Read input from push button for control status of LED. * Modify from button (http://www.arduino.cc/en/Tutorial/button) * File : Button_LED. Ino */

#define LED_PIN 11 // choose the pin for the LED #define IN_PIN 7 // choose the input pin (for a pushbutton)

int val = 0; void setup ()

Page 48: หน่วยที่ 4 ฟังก์ชั่นพื้นฐานของ ARDUINO และการควบคุมหลอดไฟ LED · ในตัวอย่างนี้จะน

หนวยท 4 ฟงกชนพนฐานของ Arduino และการควบคมหลอดไฟ LED เรยบเรยงโดยครทนพงษ ภรกษ

48 เอกสารประกอบการสอนวชาไมโครคอนโทรลเลอรเบองตน

pinMode (LED_PIN, OUTPUT); // declare LED as output pinMode (IN_PIN, INPUT); // declare pushbutton as input

void loop ()

val = digitalRead (IN_PIN); // read input value if (val == LOW) // check the input as LOW (button pushed) digitalWrite (LED_PIN, HIGH); // turn LED ON else digitalWrite (LED_PIN, LOW); // turn LED OFF ผลการทดลอง............................................................................................................................. ................................................................................................................................... ..................................................................................... ……......................................................................................................................................................................................................................................................................................................................................... การทดลองท 4.3 การสงขอมลออกพอรตอนกรม เรมตนดวยการใชฟงกชน Serial.begin() เพอสงเปดพอรตอนกรมและก าหนดอตราถายทอดขอมลทใชใน

การสอสารขอมลหรออตราบอด มรปแบบการเขยนโปรแกรม ดงน

Serial.begin(speed);

เมอ speed คออตราบอดมคา 300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400,57600

หรอ 115200 บตตอวนาท ปกตทใชคอ 9600

หลงจากเปดพอรต เมอตองการสงขอมลใหใชฟงกชน Serial.print() หร อ Serial.println()

ฟงกชนทงสองตวท างานใหผลคลายกน ตางกนเมอฟงก Serial.println() สงขอมลแลวจะขนบรรทดใหมใหอตโนมต

ฟงกชน Serial.print() และ Serial.println() มรปแบบดงน

Serial.print(b,FORMAT); กบ Serial.println(b,FORMAT);

Page 49: หน่วยที่ 4 ฟังก์ชั่นพื้นฐานของ ARDUINO และการควบคุมหลอดไฟ LED · ในตัวอย่างนี้จะน

หนวยท 4 ฟงกชนพนฐานของ Arduino และการควบคมหลอดไฟ LED เรยบเรยงโดยครทนพงษ ภรกษ

49 เอกสารประกอบการสอนวชาไมโครคอนโทรลเลอรเบองตน

โดยท b คอคาตวแปรประเภทเลขจ านวนเตมทตองการสงออกทางพอรตอนกรม ถาไมระบรปแบบจะพมพ

ออกเปนรหส ASCII ของคาตวแปร

FORMAT เปนรปแบบของการพมพม DEC (เลขฐานสบ), HEX (เลขฐานสบหก), OCT (เลขฐานแปด)

และ BIN (เลขฐานสอง)

Page 50: หน่วยที่ 4 ฟังก์ชั่นพื้นฐานของ ARDUINO และการควบคุมหลอดไฟ LED · ในตัวอย่างนี้จะน

หนวยท 4 ฟงกชนพนฐานของ Arduino และการควบคมหลอดไฟ LED เรยบเรยงโดยครทนพงษ ภรกษ

50 เอกสารประกอบการสอนวชาไมโครคอนโทรลเลอรเบองตน

Hardware Required 1. Arduino uno Board

Code ไฟล Serial01.ino โปรแกรมทดสอบการสงขอมลออกพอรตอนกรมเสมอนผานทางพอรต USB

/* Code for send out data to serial port * File : Serial01.pde */ void setup() Serial.begin(9600); // Set serial port to 9600 bit per second void loop() int data = 2345; // print string to serial port Serial.println("Welcome to Arduino Programming"); // print title Serial.print(data, DEC); // print as an ASCII-encoded decimal Serial.print("\t"); // print a tab character Serial.print(data, HEX); // print as an ASCII-encoded hexadecimal Serial.print("\t"); // print a tab character Serial.print(data, OCT); // print as an ASCII-encoded octal Serial.print("\t"); // print a tab character Serial.print(data, BIN); // print as an ASCII-encoded binary

Page 51: หน่วยที่ 4 ฟังก์ชั่นพื้นฐานของ ARDUINO และการควบคุมหลอดไฟ LED · ในตัวอย่างนี้จะน

หนวยท 4 ฟงกชนพนฐานของ Arduino และการควบคมหลอดไฟ LED เรยบเรยงโดยครทนพงษ ภรกษ

51 เอกสารประกอบการสอนวชาไมโครคอนโทรลเลอรเบองตน

Serial.print("\t"); // print a tab character Serial.write(data); // print as a raw byte value Serial.println(); // print a line feed character delay(1000); // Wait 1 second

ผลการทดลอง............................................................................................................................. ................................................................................................................................... .......................................................................... ............................................................................................................................. ..................................................................................................................................................................................... ........................ .......................................................................................................... ........................................................................................................................................................................................ ........................................

การทดลองท 4.4 ฟงกเกยวกบเวลา delayMicroseconds(us)

เปนฟงกชนชะลอการท างานหรอหนวงเวลาของโปรแกรมตามเวลาทก าหนด ในหนวยไมโครวนาท

พารามเตอร us - คาหนวงเวลาในหนวยไมโครวนาท (1000 ไมโครวนาท = 1 มลลวนาท และหนงลาน

ไมโครวนาท = 1 ว นาท )

Hardware Required

• Arduino uno Board • 220 ohm resistor • LED • hook-up wires

Page 52: หน่วยที่ 4 ฟังก์ชั่นพื้นฐานของ ARDUINO และการควบคุมหลอดไฟ LED · ในตัวอย่างนี้จะน

หนวยท 4 ฟงกชนพนฐานของ Arduino และการควบคมหลอดไฟ LED เรยบเรยงโดยครทนพงษ ภรกษ

52 เอกสารประกอบการสอนวชาไมโครคอนโทรลเลอรเบองตน

Circuit

Schematic

Code int outPin = 11; // digital pin 11 void setup() pinMode(outPin, OUTPUT); // sets as output void loop() digitalWrite(outPin, HIGH); // sets the pin on delayMicroseconds(50); // pauses for 50 microseconds digitalWrite(outPin, LOW); // sets the pin off

Page 53: หน่วยที่ 4 ฟังก์ชั่นพื้นฐานของ ARDUINO และการควบคุมหลอดไฟ LED · ในตัวอย่างนี้จะน

หนวยท 4 ฟงกชนพนฐานของ Arduino และการควบคมหลอดไฟ LED เรยบเรยงโดยครทนพงษ ภรกษ

53 เอกสารประกอบการสอนวชาไมโครคอนโทรลเลอรเบองตน

delayMicroseconds(50); // pauses for 50 microseconds

ผลการทดลอง............................................................................................................................. ................................................................................................................................... .......................................................................... ............................................................................................................................. ..................................................................................................................................................................................... ........................ .......................................................................................................... ........................................................................................................................................................................................ ........................................

Page 54: หน่วยที่ 4 ฟังก์ชั่นพื้นฐานของ ARDUINO และการควบคุมหลอดไฟ LED · ในตัวอย่างนี้จะน

หนวยท 4 ฟงกชนพนฐานของ Arduino และการควบคมหลอดไฟ LED เรยบเรยงโดยครทนพงษ ภรกษ

54 เอกสารประกอบการสอนวชาไมโครคอนโทรลเลอรเบองตน

สรปผลการทดลอง ................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................... ......................................................................................................................................................................................................................................................................................................................................................

ปญหาอปสรรคหรอขอเสนอแนะ

...........................................................................................................................................................................

........................................................................................................................................................................... ตารางการประเมนผลคะแนนภาคปฏบต

หวขอการพจารณาภาคปฏบต ระดบคะแนน การทดลองท 4.1 เอาตพตดจตอลของ Arduino Uno โปรแกรมสงให LED กะพรบ 5 ดวง

5 คะแนน

การทดลองท 4.2 อนพตดจตอลของ Arduino Uno 5 คะแนน การทดลองท 4.3 การสงขอมลออกพอรตอนกรม 5 คะแนน การทดลองท 4.4 ฟงกเกยวกบเวลา delayMicroseconds(us) 5 คะแนน

รวมคะแนนภาคปฏบต

............คะแนน

Page 55: หน่วยที่ 4 ฟังก์ชั่นพื้นฐานของ ARDUINO และการควบคุมหลอดไฟ LED · ในตัวอย่างนี้จะน

หนวยท 4 ฟงกชนพนฐานของ Arduino และการควบคมหลอดไฟ LED เรยบเรยงโดยครทนพงษ ภรกษ

55 เอกสารประกอบการสอนวชาไมโครคอนโทรลเลอรเบองตน

**********************************************************************************

เรอง ฟงกชนพนฐานของ Arduino ใชเวลา 20 นาท วชา ไมโครคอนโทรลเลอรเบองตน รหสวชา (2127-2107) ระดบชน ประกาศนยบตรวชาชพ (ปวช.) สาขาวชา เมคคาทรอนกส ค าชแจง 1. แบบทดสอบมทงหมด 10 ขอ (10 คะแนน) 2. ใหผเรยนเลอกค าตอบทถกทสดแลวกาเครองหมายกากบาท () ลงในกระดาษค าตอบ 1. โปรแกรม Arduino IDE สามารถเรยกใชฟงกชนพนฐานไดทนทโดยไมตอง ก. ใชค าสง #plus เพอผนวกไฟลเพม ข. ใชค าสง #include เพอผนวกไฟลเพม ค. ใชค าสง #defile เพอผนวกไฟลเพม ง. ใชค าสง #add เพอผนวกไฟลเพม 2. ฟงกชน digitalWrite (pin, value) ท างานอยางไร ก. ใชเลอกโหมดการท างานเปน INPUT ข. ใชเลอกโหมดการท างานเปน OUTPUT ค. ใชก าหนดขาพอรต OUTPUT ใหมสถานะเปนลอจกสงหรอลอจกต า ง. ใชก าหนดขาพอรต INPUT ใหมสถานะเปนลอจกสงหรอลอจกต า 3. ฟงกชนเกยวกบการสอสารผานพอรตอนกรมคอขอใด ก. digitalWrite ข. Serial .begin (int datarate) ค. digitalRead ง. pinMode 4. ฟงกชน int Serial .available ( ) ใชส าหรบ ก. ใชแจงวาไดรบสญญาณแลว และพรอมส าหรบการอานไปใชงาน ข. ใชแจงวาไดรบขอมลตวอกษร และพรอมส าหรบการอานไปใชงาน ค. เปนการเลอกอตราบอดเทากบ 9600 บตตอวนาท ง. สงคากลบจากฟงกชน และพรอมส าหรบการอานไปใชงาน

แบบทดสอบหลงเรยน หนวยท 4 เรอง ฟงกชนพนฐานของ Arduino

Page 56: หน่วยที่ 4 ฟังก์ชั่นพื้นฐานของ ARDUINO และการควบคุมหลอดไฟ LED · ในตัวอย่างนี้จะน

หนวยท 4 ฟงกชนพนฐานของ Arduino และการควบคมหลอดไฟ LED เรยบเรยงโดยครทนพงษ ภรกษ

56 เอกสารประกอบการสอนวชาไมโครคอนโทรลเลอรเบองตน

5. ฟงกชน int Serial .read ( ) ใชส าหรบ ก. อานคาขอมลทไดรบจากพอรตขนาน ข. อานคาขอมลทไดรบจากพอรตอนกรม ค. ใชเขยนแจงวาก าลงอานค าสง ง. ใชเขยนแจงวาก าลงลบค าสง 6. . ถาตองการก าหนดขาอนพตแอนะลอกตองก าหนดดวยฟงกชน

ก. AnalogWrite ข. AnalogRead ค. digitalRead

ง. ModePin 7. ฟงกชน unsigned long millis() คนคาเปนคาเวลาในหนวยมลลวนาท ไดประมาณกชวโมง ก. ประมาณ 6 ชวโมง ข. ประมาณ 7 ชวโมง

ค. ประมาณ 8 ชวโมง ง. ประมาณ 9 ชวโมง

8. ฟงกชน detachInterrupt(interrupt) ใชส าหรบ ก. เรมการอนเตอรรปตภายนอก ข. ยกเลกการอนเตอรรปตภายนอก ค. ฟงกชนกระโดดไปท างานเมอเกดอนเตอรรปต ง. เลอกประเภทสญญาณทใชกระตนใหเกดการอนเตอรรปต

9. ฟงกชน constrain(x, a, b) ท างานอยางไร ก. หาคาตวเลขทมากทสดของตวเลขสองตว ข. หาคาสมบรณของตวเลข ค. ปดคาตวเลขทนอยกวาหรอมากกวาใหอยในชวงทก าหนด ง. หาคาตวเลขทนอยทสดของตวเลขสองตว 10. randomSeed(seed) คอฟงกชนอะไร ก. ใชหาคาสมบรณของตวเลขแบบสม ข. ใชก าหนดตวแปรส าหรบสรางตวเลขแบบสม

ค. ใชสรางตวเลขเสมอนแบบสม ง. ใชหาคาทนอยทสดของตวเลขสองตวแบบสม