ผู้ให้ย่อมเป็นที่รัก

การเชื่อมต่อ LCD กับ Arduino โดยใช้สายสัญญาณเพียง 3 เส้น

ปกติเวลาเราเชื่อมไมโครคอนโทรลเลอร์กับ LCD แบบ text 16 x 1 เราจะใช้สายสัญญาณอย่างน้อย 7 เส้น http://www.arduino.cc/playground/Code/LCD3wires เป็นตัวอย่างการประยุกต์ใช้ shift register มาช่วยลดนำนวนสายสัญญาณให้เหลือเพียง 3 เส้น

อุปกรณ์เสริมของบอร์ด freeduino

หลังจากที่พัฒนาโปรแกรมโดยเขียนโปรแกรมบนคอมพิวเตอร์พีซีแล้วโหลดลงบอร์ดทดลองเรียบร้อย freeduino สามารถทำงานแบบ Stand Alone ได้โดยไม่ต้องเชื่อมต่อกับคอมพิวเตอร์พีซีโดยการใช้ไฟจาก external dc adapter ซื่งเลือกโดย set jumper ได้ โดยบอร์ด freeduino มี DC Plug สำหรับต่อ adapter ซึ่ง DC Plug นี้จะรับไฟบวกที่ขั้วตรงกลาง รุ่นที่แนะนำให้ใช้คือ Adapter 9 volt 500-800 ma. รุ่นที่ขั้วบวกอยู่ด้านใน หาซื้อได้ที่บ้านหม้อ หรือสั่งซื้อจาก logicthai ได้ในราคา 150 บาท

 

 

?

วงจร freeduino diecimila compatible

http://www.logicthai.net/sites/default/files/freeduinosch.png เพื่อดูภาพขยายใหญ่

arduino osciloscope

การเชื่อมต่อ arduino กับ ps2 keyboard หรือ barcode scanner

http://www.arduino.cc/playground/ComponentLib/BarcodeScanner เป็นตัวอย่างการเชื่อมต่อ ps2 keyboard ที่ใช้กับพีซีทั่วไปกับ arduino board พร้อม source code ตัวอย่าง

Arduino กับการเล่นไฟล์ เสียง

โปรเจกน่าสนวันนี้เสนอการนำ Arduino มาเล่นไฟล์เสียง (.wav file) ที่เก็บใน SD card ดูรายละเอียดเพิ่มเติมได้ที่ http://ladyada.net/make/waveshield/index.html

Arduino Servo Control

Arduino Hardware

บอร์ด Arduino มีหลายรุ่น ไมโครคอนโทรลเลอร์ที่ใช้กับบอร์ด Arduino มีสองเบอร์ได้แก่ Atmega8 ที่ใช้กับบอร์ดรุ่นเก่า และ Atmega168 ที่ใช้กับบอร์ดรุ่นใหม่ เป็นไมโครคอนโทรลเลอร์จากค่าย Atmel ตระกูล AVR

หมายเหตุ: การออกแบบวงจรของ Arduino ถูกแจกจ่ายตามข้อตกลง Creative Commons license Attribution-ShareAline2.5

I/O Boards

  • Diecimila เป็นบอร์ดรุ่นล่าสุด ที่มีความสามารถ reset ด้วยซอฟท์แวร์เมื่อทำการ Upload โปรแกรม สะดวกในการพัฒนาไม่ต้องกดสวิทซ์ reset บ่อยๆ ใช้วงจร low dropout power supply (ใช้ไฟ 6-12 โวลท์) และมีวงจรป้องกันกระแสเกิน ของ USB พอร์ท

แนะนำตัวโปรแกรมพัฒนา Arduino

เมนูต่างๆที่น่าสนใจ

Sketch

verify / compile

ตรวจสอบความบกพร่องของโปรแกรม

Import Library

ใช้โปรแกรมไลบรารี่ในโปรแกรมที่คุณออกแบบ ทำงานโดยการเขียน #include ไว้ที่ส่วนหัวของโปรแกรม ซึ่งจะทำให้โปรแกรมของคุณเรียกใช้ฟังชั่นความสามารถพิเศษโดยที่คุณไม่ต้องเขียนขึ้นเอง แต่ขนาดของโปรแกรมจะเพิ่มขึ้น ถ้าคุณไม่ต้องการใช้ ไลบรารี่, ลบบรรทัดที่มีข้อความ #include ออกจากส่วนหัวของโปรแกรม

Show Sketch Folder

เปิดไฟล์โปรแกรมที่จะนำมาพัฒนา

Add File

เปิดไฟล์ source code อื่นเพื่อแก้ไข ไฟล์ที่เปิดใหม่จะปรากฏใน tab ใหม่ในหน้าจอ Sketch ใช้สำหรับการแก้ไขโปรแกรมที่มี source code หลายๆไฟล์พร้อมกัน File ที่เปิดสามารถลบออกได้โดยใช้ เมนู tab

Tools

Auto Format

จะทำให้เนื้อหาโปรแกรมที่คุณเขียนในคลิบบอร์ดดูดีเป็นระเบียบและแยกสีให้ดูง่าย

Board

เลือกบอร์ดให้ตรงกับบอร์ดที่คุณใช้ เนื่องจากโปรเจก Arduino มีบอร์ดหลายรุ่น สำหรับบอร์ด Freeduino ให้เลือก Arduino Diecimila การเลือกบอร์ดจะมีผลกับการ upload โปรแกรมลงตัวบอร์

Serial Port

เมนูนี้จะแสดงพอร์ท serial ทั้งหมด (ทั้งพอร์ทจริง หรือพอร์ทเสมือน) ของเครื่องพีซี ซึ่งมันจะแสดงข้อมูลที่ update ทุกครั้งที่คุณเปิดเมนู Tools

ก่อนที่จะ upload โปรแกรมที่คุณเขียนขึ้นคุณต้องเลือกพอร์ทที่จะใช้งานเสียก่อน อาจเป็นพอร์ท com3 หรือ com อื่นที่มีตัวเลขสูงเนื่องจากเป็นพอร์ทเสมือน

Burn Bootloader

เมนูนี้จะใช้ burn bootloader ลงในบอร์ดโดยใช้เครื่องโปรแกรมหลากหลายชนิด เมนูนี้ไม่จำเป็นต้องใช้ในเวลาปกติ

การสร้างบอร์ด Freeduino รุ่น Arduino Diecimila compatible

Freeduino diecimila compatible USB version

?

?

รายการอุปกรณ์

S1 1 Reset pusbutton
IC4 1 LM2940CS-5 Voltage Regulator
X1 1 USB B type Female Connector
PWR, TX, RX, 13 4 3mm Green LED
POWER, J1 2 6 pins female header
J2, J3 2 8 pins female header
DC1 1 2.1mm power jack
Q1 1 16 MHz Quartz or ceramic oscillator
D1 1 1N4004
R1 1 10K 1/4 W resistor
R7, R8, R9, R10, R11, R12 6 1K 1/4 W resistor
C1, C5, C8, C9, C10, C12, CRS 7 0.1uF Ceramic Capacitor
pcb Freeduino 1 Freeduino pcb
C4 1 0.01uF Ceramic Capacitor
C2, C3 2 22pF Ceramic Capacitor (only with crystal)
C6 1 100uF Electrolitic Capacitor
C7 1 47uF Electrolitic Capacitor
ATMEGA168 1 Atmega168 28pin DIP microcontroller
IC1 1 FT232RL USB IC
X3 1 28pin IC socket
SV1 1 3 pin male header
ICSP 1 2x3 pins header
PTC 1 Polyfuse 0.5 A
การประกอบและบัดกรีอุปกรณ์ควรบัดกรี IC FT232RL ก่อนเนื่องจากเป็นอุปกรณ์ smd หลังจากนั้นจึงลงอุปกรณ์ R , IC Socket, xtal และตัวอื่นๆ ตามความสูงของอุปกรณ์ตามลำดับ สำหรับ IC ATMEGA168 จะต้องลงโปรแกรม Bootloader ก่อนจึงจะนำมาใช้ได้ สำหรับมือใหม่แนะนำให้ซื้อชุดสำเร็จ สมาชิกสั่งซื้อได้โดยเข้าเมนู contact

การประกอบชุดคิท Freeduino Max232 serial version

?

เพื่อให้การประกอบชุดคิท freeduinomax232ss ได้ผลดีควรทำตามขั้นตอนการประกอบจากอุปกรณ์ที่มีความสูงจากแผ่นปริ้นท์น้อยไปหามากดังนี้

1. บัดกรีจุดเชื่อมต่อของแผ่นปริ้นท์ JP1 - JP7 (โดยการใส่ resistor ลงแผ่นปริ้นท์แล้ว ตัดขาส่วนที่เกินเพื่อเอาไปใช้เป็นสาย JP1 - JP7 แล้วถอด resistor ออก เพื่อให้บัดกรีจุด JP1 - JP7 ได้ง่าย)

2. ใส่ resistor R1 ,R2 ,R3 ,R4 ,R5 ,R6 ค่า 1K และ R11 ค่า 10K แล้วบัดกรีและตัดขา

3. ใส่ ไดโอด D1 1N4004 ดูขั้วให้ถูกต้อง แล้วบัดกรีและตัดขา

4. ใส่ XTAL16 MHZ? ในแผ่นปริ้นท์จะไม่มีเครื่องหมายบอก (อยู่ติดกับ IC ATMEGA 28 ขา)แล้วบัดกรีและตัดขาให้เรียบร้อย

5. ใส่ ซ็อกเกทไอซี 16 ขา และ? 28 ขา จัดวางขาให้ตรงตามรูป บัดกรีให้เรียบร้อย

6. ใส่สวิทซ์รีเซท S1 บัดกรีให้เรียบร้อย

7. ใส่ไอซี 7805 ตัวไอซีให้ดัดขาเป็นมุมฉาก 90 องศาและทดลองใส่ให้พอดีช่องตามรูปตัวไอซีก่อน โดยให้เว้นช่องสำหรับตัวอุปกรณ์ LEDTX ,LEDRX ด้วย บัดกรีและตัดขาให้เรียบร้อย

8. ใส่ LEDPWR สีเขียว ,LEDTX สีแดง,LEDRX สีส้ม,LED13 สีเหลือง โดยสังเกตุขาให้หันด้านที่ตัดของตัวถัง LED ให้ตรงตามรูป บัดกรีและตัดขา

9. ใส่ FEMALE PIN HEADER 8 pin สองตัว และ FEMALE PIN HEADER 6 pin สองตัว บัดกรีให้เรียบร้อย

10. ใส่ C1, C2 ค่า 22 pf (ที่ตัวอุปกรณ์มีตัวอักษร 22) C3 ,C4 ,C7 ค่า 100 nanofarad(ที่ตัวอุปกรณ์มีตัวอักษร 104) บัดกรีและตัดขา

11. ใส่ PINHEADER 6 PIN(3x2) ICSP , และ PINHEADER 2 PIN(2x1) ENABLE บัดกรีให้เรียบร้อย

12. ใส่ DC Plug DC1 บัดกรีให้เรียบร้อย

13. ใส่ C5 ,C8 ค่า100 uf และ C6 ,C10 ,C11 ,C12 ,C13? ค่า? 10 uf ดูขั้วบวกลบให้ตรงตามรูป บัดกรีและตัดขา

14. ใส่ X1 pcb mounting db9 female บัดกรีให้เรียบร้อย

15. เสียบ ENABLESTRAP mini jumper 2.54 mm pitch เข้ากับ PINHEADER 2 PIN(2x1) ENABLE

16. ใส่ ไอซี IC2 MAX232CPE ลงในซ็อกเกทไอซี 16 ขาและ IC1 ATMEGA8-16PU หรือ ATMEGA168-20PU with bootloader ลงในซ็อกเกทไอซี 28 ขาตามลำดับ ดูขาให้ถูกต้องตามรูป

17. ตรวจสอบจุดบัดกรีให้ครบถ้วนสมบูรณ์ ชุดคิทแผ่น freeduinomax232ss นี้พร้อมใช้งานแล้ว การใช้งานจะใช้คู่กับสาย RS232 เพื่อเชื่อมต่อกับ PC และต้องใช้กับ DC อะแดปเตอร์ 9 - 12 โวลท์ ชนิดที่ไฟขั้วบวกอยู่ตรงกลาง เพื่อจ่ายไฟให้บอร์ด

?

แนะนำตัว Arduino

Arduino คืออะไร?

Arduino คือเครื่องมือที่จะทำให้คอมพิวเตอร์สามารถรับสัญญาณจากภายนอกและส่งสัญญาณไปควบคุมอุปกรณ์ภายนอกได้อย่างมีประสิทธิภาพมากกว่าใช้เครื่องพีซีตั้งโต็ะ
ตัวบอร์ดออกแบบจากไมโครคอมพิวเตอร์ชิพเดี่ยว, และมีโปรแกรมพัฒนาสำหรับเขียนโปรแกรมให้บอร์ดทำงาน

Arduino สามารถประยุกต์ทำเครื่องใช้อัจฉริยะ รับสัญญาณจากสวิทซ์ หรือ เซนเซอร์, และควบคุม หลอดไฟ, มอเตอร์, หรืออุปกรณ์อื่นๆ โปรเจก Arduino เป็นได้ทั้งแบบทำงานอิสระ หรือทำงานติดต่อกับโปรแกรมที่ทำงานบนเครื่องพีซี ตัวบอร์ดสามารถประกอบขึ้นใช้เอง หรือจะซื้อสำเร็จที่มีขาย ส่วนโปรแกรมพัฒนา Arduino สามารถดาวน์โหลดได้ฟรี

ทำใมต้องเป็น Arduino?

ในตลาดไมโครคอนโทรลเลอร์มีตัวเลือกมากมาย เช่น Parallax Basic Stamp, Netmedia's BX-24, Pidgets, MIT's Handyboard, และอีกหลายเจ้าที่มีคุณสมบัติไกล้เคียงกัน คือทำโปรเจกให้ใช้งานง่าย และเน้นการโปรแกรมไมโครคอนโทรลเลอร์เป็นหลัก Arduino ก็เช่นเดียวกันแต่มีข้อแตกต่างที่เห็นได้ชัดคือ

  • ราคาไม่แพง - ราคา Arduino บอร์ดไม่แพงเมื่อเทียบกับ บอร์ดอื่น บอร์ด Arduino ที่ราคาถูกสุดสามารถทำใช้เองได้หรือซื้อสำเร็จด้วยเงินไม่เกิน 30 $
  • ทำงานได้หลายแพลตฟอร์ม - โปรแกรมพัฒนา Arduino ทำงานได้ทั้งบนวินโดวส์, Macintosh OSX, และ บนลีนุกซ์ ในขณะที่บอร์ดอื่นทำงานได้เฉพาะบนวินโดวส์
  • ใช้งานง่าย, มีโปรแกรมพัฒนาที่ไม่ซับซ้อน - โปรแกรมพัฒนา Arduino ใช้งานง่ายสำหรับมือใหม่, และมีความสามารถครบความต้องการของนักพัฒนามืออาชีพ
  • เปิดเผยซอร์สโค้ด และ นำไปพัฒนาต่อยอดได้ - โปรแกรม Arduino ตีพิมพ์แบบเปิดเผยซอร์สโค้ด และสามารถเพิ่มเติมความสามารถผ่าน C++ library, ถ้าคุณต้องการศึกษาให้ลึกซื้ง คุณสามารถข้ามไปเล่น AVR C ซึ่งเป็นต้นแบบของ Arduino, และคุณสามารถเพิ่มเติม AVR - C โค้ดได้โคยตรงถ้าคุณต้องการ
  • เปิดเผยวงจร และ นำไปพัฒนาขยาย hardware ได้ - Arduino ใช้โมโครคอนโทรลเลอร์ของ Atmel เบอร์ ATMEGA8 และ ATMEGA168 วงจรของบอร์ดตีพิมพ์แบบเปิดเผยวงจรภายไต้ Creative Commons License คุณสามารถนำไปดัดแปลงต่อขยายและเพิ่มประสิทธิภาพ เพื่อศึกษาการทำงานของมันได้ฟรี


เริ่มต้นกับ Arduino

หลังจากที่ได้รับ Arduino มาตอนนี้คุณก็พร้อมที่จะเริ่มเล่น บทความนี้จะเป็นแนวทางการเริ่มต้นใช้งาน Arduino board และการเขียนโปรแกรมให้บอร์ดทำงาน ตั้งแต่การเปิดเครื่อง, ติดตั้ง driver และ upload โปรแกรมแรกของคุณ

การใช้งาน Arduino บน Windows

สำหรับผู้เริ่มต้นใช้งานควรอ่านและใช้งาน Arduino ตามขั้นตอนดังนี้

1. เตรียมบอร์ด Arduino และสาย USB cable

2. Download โปรแกรมพัฒนา Arduino หรือที่เรียกว่า Arduino environment

3. ติดตั้ง USB drivers

4. เชื่อมต่อ พีซีกับ Arduino

5. ทดลองต่อ LED

6. เรียกโปรแกรมพัฒนา Arduino

7. Upload โปรแกรม

8. ดูผลการกระพริบของ LED

9. เรียนรู้การใช้งาน Arduino

?

1. เตรียมบอร์ด Arduino และสาย USB cable (สำหรับบอร์ด freeduinomax232ss เตรียมบอร์ด ,สาย rs232 และอะแดปเตอร์ 9 โวลท์)

2. Download โปรแกรมพัฒนา Arduino หรือที่เรียกว่า Arduino environment

ในการโปรแกรม Arduino board คุณต้องใช้ โปรแกรมพัฒนา Arduino หรือที่เรียกว่า Arduino environment

ดาวน์โหลด Arduino 0011 for Windows

หรือ copy? ไฟล์จากแผ่นซีดี

หลังจากนั้นให้ทำการ UNZIP และเก็บไว้ใน folder ที่ต้องการ เช่น ถ้าเก็บไว้ที่ drive c:\ จะได้ folder C:\arduino-0011

3. ติดตั้ง USB drivers?? (สำหรับ freeduino max232ss ไม่ต้องทำขั้นตอนนี้)

ถ้าคุณใช้ Arduino diecimila หรือ Freeduino ซึ่งเป็นรุ่นที่มี USB port คุณจำเป็นต้องใช้ USB Driver

ดาวน์โหลด USB Driver จากเวบ FTDI

หรือ copy? ไฟล์จากแผ่นซีดี

ทำการ UNZIP แล้วเก็บไว้ใน Folder ที่ต้องการ เช่นถ้าเก็บไว้ที่ drive c:\ จะได้ folder C:\CDM 2.04.06 WHQL Certified

4. เชื่อมต่อ พีซีกับ Arduino

ตรวจสอบ jumper ที่บนบอร์ดว่าอยู่ในตำแหน่งการจ่ายไฟจาก USB (สำหรับบอร์ด freeduinomax232ss ต่อสาย rs232 กับพีซีและจ่ายไฟให้บอร์ดด้วยอะแดปเตอร์ 9 โวลท์แล้วข้ามไป step 5 ได้เลย)

ต่อสาย USB ที่เครื่องพีซีและบอร์ด Arduino ที่จอเครื่อง pc จะขึ้นข้อความ detect new hardware

คลิกที่ No, not this time และกด Next ตามรูปข้างล่าง

โปรแกรมจะขึ้นหน้าจอให้เลือกที่เก็บซอฟแวร์ติดตั้ง driver ให้คลิกที่ Install from a list และกด Next

โปรแกรมจะขึ้นหน้าจอให้เลือกแหล่งซอฟแวร์ ให้คลิก Search for the best driver ..., Include this location ...,และกด Browse ตามรูปข้างล่าง

หน้าจอจะขึ้นให้เลือกไฟล์ ให้เลือกไปที่ folder ที่เราได้ทำการเก็บ usb driver ไว้ และกด OK

หน้าจอจะกลับมาที่ search for best driver ให้กด Next

โปรแกรมจะทำการติดตั้ง driver เข้าเครื่องพีซี

หลังจากการติดตั้งเสร็จสิ้นให้กด Finish

ถ้า windows detect พบ driver และทำงานตามปกติ windows จะแจ้งข้อความว่า device ready to use แต่ถ้ามีข้อความ error ให้ทำการลงใหม่ตามข้อ 4

5. ทดลองต่อ LED

บอร์ด Arduino diecimila หรือ Freeduino มี LED ต่ออนุกรมกับความต้านทาน 1K ต่อกับขา 13 ของไมโครคอนโทรลเลอร AVR ที่เป็นตัวควบคุมหลักของบอร์ด เราสามารถเขียนโปรแกรมสั่งงานให้ LED กระพริบเพื่อทดสอบการทำงานของโปรแกรมได้เลย

6. เรียกโปรแกรมพัฒนา Arduino

เปิด folder ที่เรา unzip โปรแกรมพัฒนา Arduino และเรียกโปรแกรม Arduino

โปรแกรมพัฒนา Arduino หรือที่เรียกว่า Arduino environment จะทำงาน

ทดลองโหลดโปรแกรมไฟกระพริบตัวอย่างที่มากับโปรแกรมพัฒนาโดยเข้าเมนู File, sketchbook, examples, digital, blink

จะได้โปรแกรมไฟกระพริบที่พร้อมทดลอง

ทำการ compile โปรแกรมโดยกด Sketch, Verify/compile

ตรวจสอบ การตั้งค่าบอร์ดว่าตั้งไว้ที่ Arduino Deicemila โดยเรียก Tools, Board (ถ้าใช้ชิพ ATmega8 ให้เลือก Arduino NG or older w/ATmega8)

ตรวจสอบการตั้งค่า port ที่ใช้ติดต่อบอร์ด Arduino โดยเข้าเมนู Tools, Serial Port, จะเห็น Com3 (บางเครื่องอาจเป็น com อื่นให้เลือก Com port ที่มีค่าสูงสุด) (ถ้าใช้บอร์ด Freeduinomax232ss ให้เลือก com port ที่เสียบสาย rs232 เชื่อมต่อกับพีซี ส่วนมากจะใช้ com1 หรือ com2)

7. Upload โปรแกรมลงบอร์ด Arduino โดยกดปุ่ม Upload to I/O Board

8. ดูผลการกระพริบของ LED

จะเห็น LED กระพริบติด 1 วินาทีและดับ 1 วินาที คุณอาจทดลองเปลี่ยนตัวเลขค่าหน่วงเวลาแล้ว compile, upload เพื่อทดสอบการทำงาน (สำหรับบอร์ดที่ใช้ chip ATmega8 หลังจาก upload จะมีช่วงdelay เวลาประมาณ 8 - 10 วินาที โปรแกรมจึงจะทำงาน)

9. เรียนรู้การใช้งาน Arduino

ศึกษาเพิ่มเติมจาก e-book หรือคู่มือการโปรแกรม Arduino ในเวบนี้ ตัวอย่างการใช้งาน Arduino สามารถหาข้อมูลได้ที่ www.arduino.cc และ www.freeduino.org

?

?

คู่มือการทดลองสำหรับ Arduino

เนื้อหาใน e-book เล่มนี้อ่านเป็นแนวทางการทดลอง Arduino board เบื้องต้น download ได้ที่ http://www.tinker.it/en/uploads/v3_arduino_small.pdf

มาเล่น Arduino กันเถอะ

Freeduino

Arduino คือบอร์ดทดลองเอนกประสงค์ที่เปิดเผย source code ทั้ง hardware และ software ที่สามารถนำไปประยุกต์ใช้งานได้ง่าย เหมาะสำหรับนักอิเลคทรอนิคส์สมัครเล่น, นักพัฒนา, ศิลปินนักสร้างสรรผลงาน และคนทั่วไปที่สนใจการสร้างนวัตกรรมใหม่ๆของการคิดค้นโปรเจกใหม่ๆ

Arduino สามารถรับสัญญาณจากโลกภายนอกได้โดยรับ input จาก sensor หลากหลายแบบ และสามารถตอบสนองโดยส่งสัญญาณไปควบคุมหลอดไฟ, มอเตอร์, และอุปกรณ์อื่นๆอีกหลายชนิด ตัวไมโครคอนโทรลเลอร์บนบอร์ดใช้โปรแกรม Arduino programming language (พัฒนาจาก wiring) และ พัฒนาโดยใช้โปรแกรมการพัฒนา Arduino (พัฒนาจาก Processing) ตัวบอร์ด Arduino สามารถใช้งานอิสระ หรือจะใช้งานติดต่อกับโปรแกรมที่ทำงานบนเครื่องคอมพิวเตอร์อื่น

ตัวบอร์ดสามารถประกอบได้ด้วยตัวท่านเอง หรือซื้อสำเร็จ ซอฟท์แวร์สามารถ download ได้ฟรี ส่วนข้อมูลการออกแบบตัวบอร์ด(cad files) หาได้ ที่นี่ ภายใต้เงื่อนไขลิขสิทธิ์ของการเปิดเผย source code, คุณสามารถนำไป ดัดแปลงใช้งานตามที่คุณต้องการ ได้ฟรี ต้องขอขอบคุณ ทีมพัฒนา ที่ช่วยกันสร้างโครงงานให้เป็นที่แพร่หลาย

ซื้อ Arduino Board

Freeduino Board

Download the Arduino Software

คู่มือการโปรแกรม Arduino board

?

arduino

programming

notebook

?

brian w.evans

?

Arduino Programming Notebook

written an compiled by Brian W. Evans

?

With information or inspiration taken from:

http://www.arduino.cc

http://www.wiring.org.co

http://www.arduino.cc/en/Booklet/HomePage

http://cslibrary.stanford.edu/101/

?

Including material written by:

Massimo Banzi

Hernando Barragan

David Cuartielles

Tom Igoe

Daniel Jolliffe

Todd Kurt

David Mellis

and others

?

Published:

First Edition August 2007

?

This work is licensed under the Creative Commons

Attribution-Noncommercial-Share Alike 3.0 License.

?

To view a copy of this license, visit:

http://createivecommons.org/licenses/by-nc-sa/3.0/

Or send a letter to:

?

Creative Commons

171 Second Street, Suite 300

San Francisco, California, 94105, USA

?


?

contents

structure

structure

setup()

loop()

functions

{} curly braces

; semicolon

/*... */ block comments

// line comments

variables

variables

variables declaration

variable scope

datatype

byte

int

long

float

arrays

arithmetic

arithmetic

compound assignments

comparison operators

logical operators

constants

constants

true/false

high/low

input/output

flow control

if

if... else

for

while

do... while

digital i/o

pinMode(pin, mode)

digitalRead(pin)

digitalWrite(pin, value)

analog i/o

analogRead(pin)

analogWrite(pin, value)

time

delay(ms)

millis()

math

min(x,y)

max(x,y)

random

randomSeed(seed)

random(min, max)

serial

Serial.begin(rate)

Serial.println(data)

appendix

digital output

digital input

high current output

pwm output

potentiometer input

variable resistor input

servo output

?


?

บทนำ

?

?

คู่มือนี้จัดทำเพื่อให้การใช้คำสั่งและรูปแบบคำสั่งของการโปรแกรม Arduino microcontroller ง่ายและสะดวก เนื้อหาจะเป็นพื้นฐานอย่างง่ายสำหรับการนำไปประยุกต์ใช้ต่อไป

?

?

STRUCTURE

การโปรแกรม Arduino board มีส่วนประกอบอย่างง่ายๆแบ่งเป็นโปรแกรมย่อยหรือฟังชั่นสองส่วน

?

void setup()

{

statements;

}

void loop()

{

statements;

}

?

โปรแกรมย่อยในส่วน setup() คือส่วนการเตรียมการเริ่มต้นใช้งาน ส่วน loop() เป็นส่วนการทำงานหลัก ซึ่งทั้งสองส่วนมีความสำคัญในการทำงานของบอร์ด

ฟังชั่นในส่วน setup() ควรจะมีส่วนที่กำหนดค่าตัวแปรที่ส่วนหัวของโปรแกรม ซึ่งมันจะทำงานเพียงครั้งเดียวและทำงานก่อนโปรแกรมอื่นๆ ส่วนมากโปรแกรมในส่วนนี้จะใช้สำหรับการกำหนดหน้าที่ขาของตัว AVR ไมโครคอนโทรลเลอร์ หรือตั้งค่าการติดต่อแบบ serial กับอุปกรณ์อื่น

โปรแกรม loop จะทำงานต่อจากโปรแกรม setup และมันจะทำงานอย่างต่อเนื่องต่อไป เช่นอ่านค่า input ส่งสัญญาณ triggering outputs เป็นต้น โปรแกรมนี้เป็นโปรแกรมทำงานหลักของ Arduino และทำงานส่วนใหญ่ของระบบ

?

SETUP()

ฟังชั่นนี้จะถูกเรียกใช้งานเพียงครั้งเดียวเมื่อโปรแกรมถูกเริ่มใช้งาน ใช้สำหรับการกำหนดค่าของขาของตัว AVR หรือตั้งค่าการติดต่อแบบ serial โปรแกรมนี้เป็นส่วนจำเป็นที่จะต้องมีถึงแม้มันจะไม่มีคำสั่งภายในตัวมันก็ตาม

?

void setup()

{

pinMode(pin,OUTPUT); // set the 'pin' as output

}

?

LOOP()

หลังจากเรียกโปรแกรม setup() แล้ว โปรแกรม loop() จะทำงานต่อและจะทำงานเป็นวนลูป เพื่อให้โปรแกรมทำงานตามสถานะต่างๆ

?

void loop()

{

digitalWrite(pin, HIGH); // turns 'pin' on

delay(1000); // pauses for one second

degitalWrite(pin, LOW) // turns 'pin' off

delay(1000);

}

?

FUNCTION

ฟังชั่นเป็นกลุ่มคำสั่งที่มีชื่อเรียกและกลุ่มคำสั่งซึ่งจะทำงานเมื่อฟังชั่นถูกเรียกใช้ นอกจากฟังชั่น void setup() และ void loop() แล้วยังมีฟังชั่นอื่นๆที่พร้อมใช้งาน(build-in) ซึ่งจะได้อฺธิบายต่อไป

ฟังชั่นที่ทำงานเฉพาะสามารถเขียนขึ้นเพื่อให้ทำงานที่ซ้ำๆกันเพื่อลดความยาวของคำสั่ง ในการสร้างฟังชั่นจะเริ่มต้นด้วยการกำหนดชนิดค่าที่ฟังชั่นจะคืนกลับให้โปรแกรมที่เรียกใช้ เช่น int สำหรับค่า integer ถ้าฟังชั่นไม่มีการคืนค่า จะใช้คำว่า void ต่อจากชนิดค่าที่ฟังชั่นคืนกลับจะเป็นชื่อฟังชั่นและตามด้วยวงเล็บซึ่งจะเป็นค่าพารามิเตอร์ที่จะส่งค่าให้กับฟังชั่น

?

type functionName(parameters)

{

statements;

}

?

ตัวอย่างด้านล่างนี้เป็นค่า integer type function delayVal() ที่ใช้ตั้งค่าหน่วงเวลาในโปรแกรมโดยอ่านค่าของ potentiometer การทำงานของฟังชั่นจะกำหนดตัวแปร v และนำค่าของ potentiometer ซึ่งมีค่า 0-1023 มาเก็บไว้ใน v จากนั้นหารค่านั้นด้วย 4 เพื่อให้ได้ค่า 0-255 สุดท้ายจึงส่งค่ากลับไปยัง main program

?

int delayVal()

{

int v; // create temporary variable 'v'

v = analogRead(pot); // read potentiometer value

v /= 4; // converts 0 - 1023 to 0 - 255

return v;

}

?

{} curly braces

วงเล็บปีกกาใช้เป็นเครื่องหมายเพื่อแสดงจุดเริ่มต้นและจุดสิ้นสุดของกลุ่มคำสั่งของฟังชั่น และกลุ่มคำสั่งเช่น void loop() function และกลุ่มคำสั่ง for และ if statement

?

type function()

{

statements;

}

?

วงเล็บปีกกาเปิด { จะต้องตามด้วยวงเล็บปีกกาปิด } เสมอ ในโปรแกรมอาจมีวงเล็บเปิดและปิดหลายๆอันแต่จะต้องมีจำนวนเท่ากัน ถ้าวงเล็บเปิดปิดไม่เท่ากันจะทำให้เกิด compiler error และบางครั้งทำให้หาข้อผิดพลาดได้ยากในโปรแกรมที่มีความซับซ้อน

สำหรับ โปรแกรม Arduino environment จะมีความสามารถในการตรวจความสมดุลย์ของวงเล็บปีกกา โดย คลิกที่ วงเล็บปีกกา หรือคลิกด้านข้างขวาของวงเล็บปีกกาที่ต้องการตรวจสอบ โปรแกรมจะแสดงวงเล็บปีกกาที่เป็นคู่ของมันทันที

?

; SEMICOLON

เครื่องหมายเซมิโคลอน ; จะต้องใช้ที่ส่วนท้ายของคำสั่งและใช้แยกส่วนของโปรแกรมออกจากกัน นอกจากนี้เซมิโคลอนยังใช้แยกส่วนของ for loop ออกเป็นส่วนๆด้วย

?

int x = 13; // declare variable 'x' as the integer 13

?

หมายเหตุ: ถ้าลืมใส่เซมิโคลอนที่ท้ายบรรทัดจะทำให้ compiler error ซึ่งการ error อาจมาจากหลายสาเหตุแต่การลืมใส่เซมิโคลอนก็เป็นสาเหตุหนึ่ง ให้ตรวจสอบบรรทัดที่ไกล้จุดที่ compiler error ว่าใส่เซมิโคลอนหรือเปล่า

?

/*....*/ BLOCK COMMENTS

คำอธิบายโปรแกรม สามารถใส่ไว้ในเครื่องหมาย /*......คำอธิบาย....*/ คำอธิบายที่อยู่ในเครื่องหมาย/*...*/ นี้ตัว compiler จะไม่นำมาประมวลผล ซึ่งจะมีประโยชน์ในการอธิบายความมุ่งหมายของคำสั่ง เพื่อให้เข้าใจการทำงานแต่ละส่วนของโปรแกรม ซึ่งจะเริ่มด้วยเครื่องหมาย /* และจบด้วยเครื่องหมาย */ และสามารถเขียน comment ได้หลายๆบรรทัดถ้าต้องการ

?

/* this is an enclosed block comment

don't forget the closing comment -

they have to be balanced!

*/

?

เนื่องจากการเขียน คำอธิบายไม่ได้เอาไปใช้ในโปรแกรมทำให้ไม่สิ้นเปลืองหน่วยความจำโปรแกรม ดังนั้นควรเขียนคำอธิบายให้ชัดเจนและทำให้เป็นนิสัย อีกอย่างที่เครื่องหมาย comment มีประโยชน์คือใช้ตัดส่วนของโปรแกรมที่ไม่ต้องการออกไปสำหรับการตรวจสอบความผิดพลาดของโปรแกรม

?

// LINE COMMENTS

การเขียนคำอธิบายโปรแกรมบรรทัดเดียวใช้เครื่องหมาย // เป็นเครื่องหมายเริ่มต้นและสิ้นสุดด้วยการขึ้นบรรทัดใหม่ และเช่นเดียวกับ block comment คือมันจะไม่เปลืองเนื้อที่โปรแกรมใช้งาน เนื่องจาก compiler จะไม่นำไปใช้ในโปรแกรม

?

// this is a single line comment

?

คำอธิบายโปรแกรมบรรทัดเดียวใช้บ่อยเพื่ออธิบายผลของกลุ่มคำสั่ง หรืออาจเป็นจุดเตือนในการเขียนคำสั่งต่อๆไป

?

VARIABLES

variable หรือ ตัวแปรเป็นชื่อและที่เก็บค่าของตัวเลขสำหรับใช้งานในโปรแกรม ตัวแปรมีค่าที่เปลี่ยนแปลงได้ซึ่งตรงกันข้ามกับ constant หรือค่าคงที่ ที่ไม่สามารถเปลี่ยนแปลงค่าได้ การใช้งานตัวแปรจะต้องมีการกำหนดชนิดและอาจกำหนดค่าเริ่มต้นให้กับตัวแปรนั้น ตัวอย่างด้านล่างนี้เป็นการกำหนดตัวแปรชื่อ inputVariable หลังจากนั้นนำค่าที่ได้จาก analog input pin 2 มาเก็บไว้

?

int inputVariable = 0; // declares a variable and assigns value of 0

inputVariable = analogRead(2); // set variable to value of anlog pin 2

?

ค่าของตัวแปร inputVariable จะเปลี่ยนแปลงได้ บรรทัดแรกจะกำหนดให้มันเป็นชนิด int หรือตัวเลขจำนวนเต็มโดยมีค่าเริ่มต้นเป็น 0 บรรทัดที่สองจะนำค่าจาก analog pin 2 มาเก็บไว้ ซึ่งจะทำให้ค่าของ pin 2 จะถูกเรียกใช้ในโปรแกรมได้

เมื่อตัวแปรถูกสร้างขึ้น, หรือใส่ค่าใหม่ให้มัน, คุณสามารถตรวจสอบค่าของมันว่ามันมีค่าตามที่ต้องการ, หรือคุณจะนำค่านั้นไปใช้เลยก็ได้ ตัวอย่างด้านล่างนี้เป็นสามตัวอย่างที่ใช้งานตัวแปร, คือตรวจสอบค่าตัวแปร inputVariable ว่ามีค่าต่ำกว่า 100 หรือไม่ ถ้ามีค่าต่ำกว่า 100 ให้ใส่ค่า 100 ให้กับตัวแปร หลังจากนั้นตั้งค่าหน่วงเวลาตามค่าตัวแปร inputVariable ซึ่งก็คือค่า 100 เป็นอย่างต่ำ

?

if (inputVariable < 100) // test variable if less than 100

{

inputVariable = 100; // if true assigns value of 100

}

delay(inputVariable); // uses variables as delay

?

หมายเหตู: ตัวแปรควรจะมีชื่อที่สื่อถึงหน้าที่ใช้งาน, เพื่อให้โปรแกรมสามารถอ่านได้ง่าย ชื่อตัวแปรเช่น tiltSensor หรือ pushButton จะช่วยให้โปรแกรมเมอร์หรือคนอื่นที่อ่านโปรแกรมสามารถเข้าใจได้ว่าตัวแปรนั้นเอาไว้ทำอะไร คุณสามารถตั้งชื่ออะไรก็ได้ที่ไม่ตรงกับชื่อเฉพาะที่ใช้ใน Arduino language

?

variable declaration

ตัวแปรที่จะนำไปใช้งานได้จะต้องถูกตั้งค่าตัวแปรก่อนนำไปใช้ การตั้งค่าตัวแปรหมายถึงการระบุชนิดตัวแปร ให้เป็น int, long, float, เป็นต้น การกำหนดชื่อให้ตัวแปรมีชื่อเรียก และอาจมีการกำหนดค่าเริ่มต้นให้กับตัวแปร ซึ่งการตั้งค่านี้จะทำเพียงครั้งเดียวในโปรแกรม แต่ค่าของตัวแปรจะเปลี่ยนแปลงไปตามการทำงานของโปรแกรม

ตัวอย่างต่อไปนี้ตั้งค่าตัวแปร inputVariable ให้เป็นตัวแปรจำนวนเต็ม int,หรือ integer, และใส่ค่าเริ่มต้นให้เป็นศูนย์ ซึ่งเป็นการตั้งค่าตัวแปรแบบง่าย

?

int inputVariable = 0;

?

ตัวแปรสามารถตั้งค่าในแบบระบุตำแหน่งในหน่วยความจำ

?

variable scope

ตัวแปรสามารถตั้งค่าตอนเริ่มต้นโปรแกรมก่อน void setup(), หรือตั้งค่าตัวแปรภายในฟังชั่น,และบางครั้งก็ตั้งค่าตัวแปรภายในกลุ่มคำสั่ง for loop ซึ่งการตั้งค่าตัวแปรในแบบต่างๆ มีผลถึงขอบเขตการใช้ตัวแปร, หรืออีกนัยหนึ่งการที่โปรแกรมจะสามารถใช้ตัวแปรนั้น

ตัวแปรแบบ global เป็นตัวแปรที่โปรแกรมมองเห็นและใช้งานได้จากทุกฟังชั่นและทุกกลุ่มคำสั่งในโปรแกรม ตัวแปรนี้จะตั้งค่าที่ตอนเริ่มต้นโปรแกรม, ก่อน setup() function

ตัวแปรแบบ local เป็นตัวแปรที่ตั้งค่าภายในฟังชั่นหรือภายในกลุ่มคำสั่ง for loop ตัวแปรนี้จะมองเห็นและใช้งานได้เฉพาะภายในฟังชั่นที่มันตั้งค่า ชื่อตัวแปรแบบนี้อาจมีชื่อซ้ำกันในแต่ละฟังชั่น แต่ในการทำงานฟังชั่นแต่ละตัวจะใช้ตัวแปรตัวนั้นเฉพาะที่ตั้งค่าภายในตัวมันเท่านั้น

ตัวอย่างด้านล่างนี้แสดงการตั้งค่าตัวแปรและขอบเขตการใช้งานของตัวแปร

?

int value; // 'value' is visible to any function

void setup();

{

// no setup needded

}

void loop()

{

for (int i=0; i<20;) // 'i is only visible inside the for - loop

{

i++;

}

float f; // 'f' is only visible inside loop

}

?

byte

ตัวแปร byte เก็บตัวเลข 8 bit ไม่มีทศนิยม มีค่า 0 - 255

?

byte someVariable = 180; // declares 'someVariable' as a byte type

?

int

integer เป็นตัวแปรพื้นฐานที่เก็บตัวเลขโดยไม่มีจุดทศนิยม และเก็บค่า 16 bit มีค่าระหว่าง 32,767 ถึง -32,768

?

int someVariable = 1500; // declares 'someVariable' as an integer type

?

หมายเหตุ: ตัวแปร integer จะมีค่าย้อนกลับหรือ roll over ถ้ามันถูกใส่ค่าเกินจากค่าสูงสุดที่มันรับได้ เช่นถ้า x = 32767 และคำสั่งถัดมาให้เพิ่มค่า 1 ให้กับ x , x = x + 1 หรือ x++, ค่า x จะล้นหรือที่เรียกว่า roll over เป็นค่า -32768

?

long

?

เป็นตัวแปรจำนวนเต็มแบบขยายโดยไม่มีจุดทศนิยม เก็บค่าแบบ 32 bit มีค่าระหว่าง 2,147,483,647 ถึง -2,147,483,648

long someVariable = 90000; // declares 'someVariable' as a long type

?

float

?

ตัวแปรชนิด floating-point หรือตัวแปรที่มีจุดทศนิยม ตัวแปรนี้มีค่ามากกว่าค่าของตัวแปรจำนวนเต็ม โดยใช้เนื้อที่เก็บ 32 bit มีค่าระหว่าง 3.4028235E+38 ถึง -3.4028235E+38

?

float someVariable = 3.14; // declares 'someVariable' as a floatint -point type

?

หมายเหตุ: ค่าตัวเลขทศนิยมเป็นค่าที่ไม่เต็มจำนวน และอาจส่งผลแปลกๆเมื่อนำมาเปรียบเทียบกับค่าอื่น และการคำนวนเลขทศนิยมใช้เวลามากว่าการคำนวนเลขจำนวนเต็ม, ดังนั้นควรหลีกเลี่ยงใช้งานถ้าทำได้

?

arrays

ตัวแปร arrays หรือตัวแปรหลายมิติเป็นตัวแปรที่สามารถเข้าถึงได้ด้วยค่าตัวชี้หรือ index ค่าตัวแปรใน array อาจเรียกใช้โดยระบุชื่อ array และระบุตัวชึ้ index number ตัวแปร array จะมี index เริ่มต้นจาก 0 ตัวแปร array จะต้องตั้งค่า ก่อนจะนำไปใช้งาน และอาจกำหนดค่าเริ่มต้นหรือไม่ก็ได้

?

int myArray[] = {value0, value1, value2...}

?

เราอาจตั้งค่า array โดยกำหนดชนิดและขนาด แล้วค่อยใส่ค่าลงไปทีหลังก็ได้

?

int myArrays[5]; // declares integer array w/ 6 positions

myArray[3] = 10; // assigns the 4th index the value 10

?

การดึงค่าจาก array ใช้การเรียกค่าจากตัวแปร array และระบุตำแหน่งตัวชี้ index

?

x = myArray[3]; // x now equals 10

?

ตัวแปร arrays ใช้บ่อยใน for loops, ซึ่งจะมีการเพิ่มค่าตัวนับ และใช้ตัวนับเป็นตัวชี้ตำแหน่งของ arrays แต่ละตัว ตัวอย่างต่อไปนี้เป็นการใช้ array ในการสั่ง LED ติดดับ โดยใช้ for loop, ตัวนับจะเริ่มจาก 0, เขียนค่าที่ได้จาก array ตำแหน่งที่ 0 ของ array flicker[], ในที่นี้คือค่า 180, ไปยัง PWM pin 10, หยุดเป็นเวลา 200 ms, แล้วจึงย้ายไปเอาค่าในตำแหน่งถัดไปของ array

?

int ledPin = 10; // LED on pin 10

byte flicker[] = {180, 30, 255, 200, 10, 90, 150, 60}; // array of 8 different values

?

viod setup()

{

pinMode(ledPin, OUTPUT); // sets OUTPUT pin

}

?

viod loop()

{

for(int i=0; i<7; i++) // loop equals number of values in array

{

analogWrite(ledPin, flicker[i]); // write index value

delay(200);

}

}

?

arithmetic

ตัวกระทำการทางคณิตศาสตร์หมายรวมถึง การบวก, ลบ, คูณ, และหาร ซึ่งมันจะให้ค่า ผลรวม, ผลต่าง, ผลคูณ, หรือผลการหาร ของสองตัวดำเนินการ

?

y = y + 3;

x = x - 7;

i = j * 6;

r = r / 5

?

การทำงานของโปรแกรมจะเป็นการนำขนิดข้อมูลตัวแปรของตัวดำเนินการมาใช้, ดังนั้น, จากตัวอย่าง 9/4 ผลลัพท์จะเท่ากับ 2 แทนที่จะเท่ากับ 2.25 เนื่องจาก 9 และ 4 เป็นตัวแปรจำนวนเต็มหรือ integer ซึ่งไม่สามารถเก็บค่าทศนิยมได้ และถ้าผลลัพท์ที่ได้มีค่ามากกว่าที่ตัวแปรจะรับได้มันจะเกิดการ overflow

ถ้ามีการคำนวนกับชนิดตัวแปรที่ต่างกัน, ตัวแปรที่มีขนาดใหญ่กว่าจะถูกนำมาใช้ เช่นการบวก ลบเลขจำนวนเต็มกับเลขทศนิยม การบวกลบทศนิยมจะถูกนำมาใช้

ควรเลือกตัวแปรที่มีขนาดที่ใหญ่พอที่จะเก็บผลลัพท์การคำนวน ตรวจสอบจุดที่ตัวแปรจะมีค่าย้อนกลับหรือ roll over เช่น 0-1 หรือ 0-32768 สำหรับการคำนวนที่เป็นเลขเศษส่วน ใช้ตัวแปรที่มีจุดทศนิยม แต่ควรระวังผลข้างเคียงถ้าตัวเลขมากจะทำให้ความเร็วในการคำนวนช้าลง

หมายเหตุ: การ cast ตัวแปรคือการเปลี่ยนชนิดตัวแปรจากชนิดหนึ่งไปยังอีกชนิดหนึ่งคือ (int)myFloat เช่น i = (int)3.6 จะเป็นการแปลงค่าให้ i มีค่าเป็น 3

?

compound assignment

การเขียนคำสั่งโปรแกรมแบบย่อหมายถึงการทำงานกับตัวแปรแล้วนำผลลัพท์ที่ได้ไปเก็บในตัวแปรนั้น จะพบมากใน for loop การเขียนคำสั่งแบบย่อหรือ compound assignment ที่ใช้ทั่วไปคือ

?

x ++ // same as x = x + 1, or increments x by +1

x -- // same as x = x - 1, or decrements x by -1

x += y // same as x = x + y, or increments x by +y

x -= y // same as x = x - y, or decrements x by -y

x *= y // same as x = x * y, or multiply x by y

x /= y // same as x = x / y, or devides x by y

หมายเหตุ: ตัวอย่างเช่น x *= 3 จะคูณค่า x เป็นสามเท่าแล้วนำผลลัพท์เก็บใน x

?

comparison operator

การเปรียบเทียบตัวแปรหรือค่าคงที่กับค่าอื่นๆ จะใช้บ่อยในกลุ่มคำสั่ง if เพื่อตรวจค่าว่ามีสถานะตรงตามที่ต้องการหรือไม่ ตัวอย่างต่อไปนี้เป็นคำสี่งเปรียบเทียบตัวแปรสองตัว

?

x == y // x is equal to y ??

x != y // x is not equal to y ??

x < y // x is less than y ??

x > y // x is greater than y ??

x <= y // x is less than or equal to y ??

x >= y // x is greater than or equal to y ??

?

logical operators

การตรวจสอบทาง logic จะใช้เปรียบเทียบตัวดำเนินการสองตัวและให้ผลลัพท์ จริง หรือ เท็จ(TRUE OR FALSE) ขึ้นอยู่กับตัวดำเนินการ ตัวดำเนินการทางลอจิกมี 3 ตัวคือ AND, OR และ NOT ซึ่งใช้บ่อยใน กลุ่มคำสั่ง if ดังตัวอย่างต่อไปนี้

?

Logical AND:

if (x > 0 && x < 5) // true only if both expression are true

// เป็นจริงเมื่อทั้งสองส่วนเป็นจริง

Logical OR:

if (x > 0 || y < 5) // true only if either expression are true

// เป็นจริงเมื่อตัวใดตัวหนึ่งเป็นจริง

?

constants

ในภาษา Arduino มีค่าที่กำหนดไว้แล้ว่ไม่มาก เราเรียกค่าพวกนี้ว่า constant หรือค่าคงที่ ซึ่งมีไว้เพื่อให้โปรแกรมอ่านง่าย ค่าคงที่เหล่านี้จะแบ่งออกได้หลายกลุ่ม

?

true/false

ค่าเหล่านี้เป็นค่าคงที่ boolean ซึ่งบอกสถานะระดับลอจิก FALSE หมายถึง 0(ศูนย์) ในขณะที่ TRUE จะหมายถึง 1, หรืออะไรก็ได้ที่ไม่ใช่ ศูนย์ ดังนั้นในทางลอจิกแล้ว -1, 2, -200 จะหมายถึง TRUE

?

if (b == TRUE);

{

doSomething;

}

?

high/low

ค่าคงที่เหล่านี้แสดงถึงระดับลอจิกที่ขาไอซีว่าเป็น HIGH หรือ LOW และใช้เมื่อมีการอ่านหรือเขียนไปที่ขาไอซี HIGH จะแทนระดับลอจิก 1, ON, หรือ 5 volts ในขณะที่ LOW คือระดับลอจิก 0, OFF, หรือ 0 volts

?

digitalWrite(13, HIGH)

?

input/output

ค่าคงที่ใช้ในฟังชั่น pinMode() ในการกำหนดหน้าที่ของ digital pin ว่าจะให้เป็น INPUT หรือ OUTPUT

?

pinMode(13, OUTPUT);

?

if

?

คำสั่ง if จะใช้ตรวจหาสถานะที่ต้องการว่าเกิดขึ้นหรือยัง, เช่นค่า analog ที่อ่านได้มีค่าเกินจำนวนที่ตั้งไว้หรือยัง และทำงานตามคำสั่งในวงเล็บปีกกาถ้าสถานะเป็นจริง(TRUE) แต่ถ้าสถานะเป็นเท็จ(FALSE)โปรแกรมจะข้ามกลุ่มคำสั่งนั้นไป ดังตัวอย่าง

?

if (someVariable ?? value)

{

doSomething;

}

?

ตัวอย่างข้างบนเป็นการเปรียบเทียบ someVariable กับค่าอื่น, ซึ่งอาจเป็นตัวแปรหรือค่าคงที่ ถ้าผลลัพท์เป็นจริง คำสั่งในวงเล็บปีกกาจะถูกทำงาน แต่ถ้าไม่ โปรแกรมจะข้ามไปทำงานต่อที่หลังวงเล็บปีกกาปิด

หมายเหตุ: ระมัดระวังการใช้ '=' ในรูปคำสั่ง if (x=10), คำสั่งนี้ถูกต้องตามรูปแบบคือนำค่า 10 ไปไส่ในตัวแปร x และจะทำให้ผลลัพท์เป็นจริงตลอด อาจทำให้เกิดผลที่ไม่คาดคิด ดังนั้ควรใช้ '==' เช่น if (x==10), ซึ่งเพียงแต่ตรวจค่า x ว่ามีค่าเท่ากับ 10 หรือไม่ เท่านั้น จำไว้ว่า '=' หมายถึง 'เท่ากับ' ตรงกันข้ามกับ '==' ที่หมายถึง 'เท่ากับใช่หรือไม่'

?

if... else

if... else เป็นการเพิ่มทางเลือก 'ถ้าไม่ใช่สถานะที่ต้องการ' ให้มีทางเลือกอีกทาง ตัวอย่างเช่น ถ้าคุณต้องการตรวจสอบ digital input และทำงานอย่างหนึ่งถ้าอินพุทเป็น HIGH หรือทำงานอีกอย่างถ้าอินพุทเป็น LOW คุณจะเขียนคำสั่งในลักษณะนี้

?

if (inputPin == HIGH)

{

doThingA;

}

else

{

doThingB;

}

else สามารถขยายเงื่อนไขต่อเนื่องออกไปได้อีก ทำให้เราสามารถทดสอบเงื่อนไขได้หลายเงื่อนไขในเวลาเดียวกัน เราสามารถตั้งเงื่อนไขสำหรับการทดสอบได้อย่างไม่จำกัด แต่จำไว้ว่าเงื่อนไขทั้งหมดจะมีกลุ่มคำสั่งเดียวที่ทำงานเนื่องจากสถานะที่ทดสอบตรงตามเงื่อนไข

?

if (inputPin < 500)

{

doThingA;

}

else if (inputPin >= 1000)

{

doThingB;

}

else

{

doThingC;

}

?

หมายเหตุ: คำสั่ง if จะทดสอบเงื่อนไขในวงเล็บว่าจริงหรือเท็จ ซึ่งเงื่อนไขจะเป็นคำสั่งในภาษา C ดังตัวอย่างแรก, if (inputPin == HIGH) ในตัวอย่างนี้ คำสั่ง if จะตรวจสอบว่า inputPin เป็น HIGH หรือ +5V

?

for

คำสั่ง for จะใช้เพื่อทำกลุ่มคำสั่งในวงเล็บปีกกาหลายๆครั้งเป็นจำนวนที่ต้องการ ปกติจะใช้ตัวนับจำนวนเพิ่มจำนวนครั้งที่ทำงานจนถึงจำนวนที่ต้องการแล้วจึงออกจาก loop เงื่อนไขของการทำงานใน loop จะกำหนดโดยคำสั่งที่ส่วนหัวของ loop ซึ่งมีสามส่วนแยกกันด้วยเซมิโคลอน

?

for (initialization; condition; expression)

{

doSomething;

}

?

ส่วนของการเริ่มต้นค่าตัวแปรหรือที่เรียกว่า initialization จะทำงานก่อนและทำงานเพียงครั้งเดียว และเมื่อทำงานครบหนึ่งรอบ ส่วนทดสอบรอบการทำงานหรือส่วน condition จะถูกทดสอบถ้าเงื่อนไขเป็นจริง กลุ่มคำสั่ง expression จะถูกทำงานและเงื่อนไขจะถูกทดสอบอีกครั้ง ถ้าเงื่อนไขเป็นเท็จ จึงจะออกจาก loop

ตัวอย่างต่อไปนี้จะตั้งค่าเริ่มต้นให้ตัวแปร i เป็นศูนย์, ทดสอบว่ามันยังมีค่าต่ำกว่า 20 และถ้าเป็นจริง, เพิ่มค่า i ด้วย 1 และทำคำสั่งในวงเล็บปีกกา

?

for (int i=0; i < 20; i++) // declares i, test if less than 20, increment i by 1

{

degitalWrite(13, HIGH); // turn pin 13 on

delay(250); // pauses for 1/4 second

degitalWrite(13, LOW); //turn pin 13 off

delay(250); // pauses for 1/4 second

}

?

หมายเหตุ: คำสั่ง for loop ในภาษา C มีความซับซ้อนกว่า for loop ในภาษาคอมพิวเตอร์อื่นบางภาษารวมทั้งภาษาเบสิก บางส่วนของส่วนหัวอาจไม่มีกลุ่มคำสั่งแต่ก็ต้องใส่เครื่องหมายเซมิโคลอนไว้ คำสั่งของกลุ่มคำสั่งในส่วนหัวอันได้แก่ส่วน initialization, condition, และ expression จะเป็นคำสั่งภาษา C ที่มีส่วนตัวแปรที่ไม่เกี่ยวข้องกันก็ได้ ขึ้นอยู่กับการออกแบบของโปรแกรมเมอร์

?

while

while loops จะทำงานอย่างต่อเนื่องตลอดไป จนกระทั่งเงื่อนไขในวงเล็บจะเป็นเท็จ ดังนั้นจะตั้องมีเหตุการณ์บางอย่างมาเปลี่ยนแปลงค่าตัวแปรที่ใช้ทดสอบ หรือการทำงานใน while loop อาจทำงานไปตลอดโดยไม่มีการออกจาก loop ขึ้นอยู่กับคำสั่งที่คุณเขียน เช่นเพิ่มค่าตัวแปร, หรือทดสอบสถานะภายนอก, เช่นตรวจสอบ sensor เป็นต้น

?

while (someVariable ?? value) // test if less than 200

{

doSomething; // executes enclosed statements

someVariable++; // increments variable by 1

}

?

do... while

do loop จะทำงานและทดสอบสถานะการทำงานที่ด้านท้ายของ loop คล้ายกับการทำงานของ while loop ยกเว้นการตรวจสอบสถานะเพื่อออกจาก loop จะทำที่ส่วนท้ายของ loop ดังนั้น do loop จะทำงานอย่างน้อยหนึ่งครั้งเสมอ

?

do

{

doSomething;

} while (someVariable ?? value);

?

ตัวอย่างต่อไปนี้อ่านค่า readSensor() แล้วเก็บไว้ที่ตัวแปร 'x', หยุดเป็นเวลา 50 มิลลิวินาที, และทำงานวนลูปจนกระทั่ง 'x' มีค่าน้อยกว่า 100

?

do

{

x = readSensor(); // assigns the value of readSensors() to x

delay(50); // pauses 50 milliseconds

} while (x < 100); // loop if x is less than 100

?

pinMode(pin, mode)

ใช้ในกลุ่ม void setup() เพื่อกำหนดหน้าที่ขาของไมโครคอนโทรลเลอร์ให้เป็น ขารับสัญญาน INPUT หรือขาส่งสัญญาน OUTPUT

?

pingMode(pin, OUTPUT); // sets 'pin' to output

?

ขาของ Arduino digital ถูกตั้งให้เป็นขารับอินพุทโดยปริยาย ดังนั้นจึงไม่จำเป็นต้องสั่งให้มันทำหน้าที่เป็นอินพุทด้วยคำสั่ง pinMode() ขาที่ถูกตั้งให้เป็นอินพุทจะมีคุณสมบัติเป็นขาที่มีอิมพีแดนท์สูง

นอกจากนี้ยังมีความต้านทานพูลอัพ 20K ที่พร้อมใช้งานในตัว Atmega chip ซึ่งสามารถสั่งให้ทำงานได้ด้วยซอฟท์แวร์ โดยคำสั่งดังนี้

?

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

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

?

ความต้านทานพูลอัพปกติจะใช้ต่อกับอุปกรณ์อินพุทเช่นสวิทซ์ ตัวอย่างข้างบนไม่ได้ทำให้ขาเปลี่ยนเป็นขา output แต่เป็นวิธีตั้งให้ความต้านทางพูลอัพทำงานเท่านั้น

ขาที่กำหนดให้เป็น OUTPUT เรียกได้ว่าเป็นขาที่ทำให้มีอิมพีแดนท์ต่ำและสามารถจ่ายกระแสได้ 40 มิลลิแอมป์ให้อุปกรณ์อื่น ซึ่งเพียงพอที่จะขับ LED ให้ติด(อย่าลืมไส่ความต้านทานจำกัดกระแสด้วย) อย่างไรก็ตามมันไม่สามารถขับรีเลย์, โซลีนอยด์, หรือมอเตอร์ได้โดยตรง

การลัดวงจรบนขาของ Arduino และการจ่ายกระแสมากเกินไปอาจทำความเสียหายให้กับขา output หรืออาจทำให้ตัวไอซีเสียหาย ดังนั้นควรต่อความต้านทานค่า 470 โอห์มหรือ 1k โอห์มอนุกรมกับอุปกรณ์ภายนอก

?

digitalRead(pin)

คำสั่งนี้อ่านค่าจาก ขาไอซีที่ถูกกำหนดให้เป็น digital pin ซึ่งจะได้ผลลัพท์เป็น HIGH หรือ LOW หมายเลขขาไอซีอาจกำหนดเป็นตัวแปรหรือค่าคงที่ (0-13)

?

value = digitalRead(pin); // sets 'value' equal to the input pin

?

digitalWrite(pin, value)

ส่งค่าลอจิก HIGH หรือ LOW (เปิด หรือ ปิด) ไปยังขา digital ที่กำหนด

หมายเลขขาไอซีอาจกำหนดเป็นตัวแปรหรือค่าคงที่ (0-13)

?

digitalWrite(pin, HIGH); // sets 'pin' to high

?

ตัวอย่างต่อไปนี้อ่านค่าจากปุ่มกดที่ต่อกับ digital input และเปิด LED ที่ต่อกับ digital output เมื่อปุ่มถูกกด

?

int led = 13; // connect LED to pin 13

int pin = 7; // connect pushbutton to pin 7

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

void setup()

{

pinMode(led, OUTPUT); // sets pin 13 as output

pinMode(pin, INPUT); // sets pin 7 as input

}

void loop()

{

value = digitalRead(pin); // sets 'vaue' equal to the input pin

digitalWrite(led, value); // sets 'led' to the button's value

}

?

analogRead(pin)

คำสั่งนี้อ่านค่าจากขา Analog จะได้ค่า 10 bit คำสั่งนี้จะทำงานกับขา analog input (0-5) เท่านั้น และได้ผลลัพท์เป็นเลขจำนวนเต็มค่า 0 - 1023

?

value = analogRead(pin); // sets 'value' equal to 'pin'

หมายเหตุ: ขา Analog ไม่เหมือนกับ ขา digital, ไม่ต้องกำหนดตอนเริ่มต้นว่าเป็น INPUT หรือ OUTPUT

?

analogWrite(pin, value)

เป็นคำสั่งเขียนค่า analog เทียมโดยใช้ hardware enabled pulse width mdulation(PWM) ไปยังขา outut ที่สามารถทำ PWM ได้ ใน Arduino รุ่นใหม่ที่ใช้ชิพ Atmega168 คำสั่งนี้จะทำงานกับขา 3, 5, 6, 9, 10, และ 11 ส่วน Arduino รุ่นเก่าที่ใช้ Atmega8 จะรองรับเพียงขา 9, 10 และ 11 ค่าที่เขียนสามารถใช้เป็นตัวแปรหรือค่าคงที่จาก 0 - 255

?

anllogWrite(pin, value); // writes 'value' to analog 'pin'

ค่า 0 ที่เขียนไปยังขา analog จะทำให้เกิด 0 โวลท์คงที่ที่ขานั้น ส่วนค่า 255 จะทำให้เกิด 5 โวลท์คงที่ที่ขานั้นเช่นกัน สำหรับค่าระหว่าง 0 - 255 ขาจะเปลี่ยนไปเป็นค่าที่อยู่ระหว่าง 0 และ 5 โวลท์ ค่ายิ่งมากแรงดันที่ปรากฏก็ยิ่งเข้าไกล้ HIGH(5 โวลท์) ตัวอย่างเช่น ค่า 64 จะทำให้เกิด 0 โวลท์เป็นสามในสี่ของเวลาทั้งหมด และเป็น 5 โวลท์หนึ่งในสี่ที่เหลือ ถ้าค่าที่เขียนคือ 128 จะทำให้เกิด 0 ครึ่งหนึ่งของคาบเวลาและ 255 อีกครึ่งคาบเวลา ถ้าเป็นค่า 192 จะทำให้เกิด 0 โวลท์หนึ่งในสี่และ 5 โวลท์ สามในสี่ของคาบเวลา

เนื่องจากคำสั่งนี้เป็นคำสั่งให้ hardware ในตัวไอซีทำงาน ขาไอซีจะผลิตคลื่นที่มีคาบเวลาตามค่าที่เขียนอย่างคงที่หลังจากทำคำสั่ง analogWrite ไปเรื่อยๆ จนกระทั่งมีการเรียกใช้คำสั่ง analogWrite ครั้งใหม่ (หรือการเรียกใช้คำสั่ง digitalRead หรือ digitalWrite บนขาไอซีขาเดียวกัน)

?

หมายเหตุ: ขา Analog ไม่เหมือนกับ ขา digital, ไม่ต้องกำหนดตอนเริ่มต้นว่าเป็น INPUT หรือ OUTPUT

?

ตัวอย่างต่ไปนี้ อ่านค่า analog จากขา analog input pin, เปลี่ยนค่าที่อ่านได้ด้วยการหาร 4 และส่งค่าที่ได้เป็นค่า PWM ออกทางขา PWM

?

int led = 10; // LED with 220 resistor on pin 10

int pin = 0; // potentiometer on analog pin 0

int value; // value for reading

void setup(){} // no setup needed

void loop()

{

value = analogRead(pin); // sets 'value' equal to 'pin'

value /= 4; // converts 0 - 1023 to 0 - 255

analogWrite(led, value); // outputs PWM signal to led

}

?

delay(ms)

คำสั่งนี้จะหยุดการทำงานของโปรแกรมเป็นเวลาตามที่กำหนดเป็นมิลลิวินาที ซึ่ง 1000 วินาทีเท่ากับ 1 วินาที

?

delay(1000); // waits for one second

?

millis()

คำสั่งนี้จะได้ผลลัพท์ค่าเวลาเป็นมิลลิวินาทีแสดงค่าที่ Arduino board1 เริ่มต้นทำโปรแกรมปัจจุบัน ค่าที่ได้เป็นค่า unsigned long ขนาด 32 bit

?

value = missis(); // sets 'value' equal to missis()

?

หมายเหตุ: ถ้า run โปรแกรมอย่างต่อเนื่องตัวเลขจำนวนนี้จะมีค่าย้อนกลับเป็นศูนย์ หลังจากเวลาผ่านไปประมาณ 9 ชั่วโมง

?

min(x,y)

?

คำสั่งนี้คำนวนหาค่าที่น้อยกว่าของค่าที่ให้มาในวงเล็บและคืนค่าที่น้อยก่วา

?

value = min(value, 100); // sets 'value to the smaller of 'value' or 100, ensureing that

// it never gets above 100.

?

max(x,y)

?

คำสั่งนี้คำนวนหาค่าที่มากกว่าของค่าที่ให้มาในวงเล็บและคืนค่าที่มากกว่า

?

value = max(value, 100); // sets 'value to the larger of 'value' or 100, ensureing that

// it is at least 100.

?

randomSeed(seed)

กำหนดค่าเริ่มต้นของฟังชั่น random

?

randomSeed(value); // sets 'value' as the random seed

เนื่องจาก Arduino ไม่สามารถสร้างตัวเลขสุ่มได้เอง คำสั่ง randomSeed จะอนุญาตให้เราใส่ค่าตัวแปร, ค่าคงที่, หรือค่าจากฟังชั่นอื่นลงไปในฟังชั่น random เพื่อให้มันสามารถสร้างตัวเลขสุ่มได้อย่างมีประสิทธิภาพ ค่าจากฟังชั่นที่จะไส่ลงไปมีทั้งค่าจาก millis() หรือ analogRead() เป็นต้น

?

random(max)

random(min, max)

เป็นฟังชั่นที่ให้ค่าตัวเลขสุ่มที่มีค่าตัวเลขระหว่างตัวเลขจ้อยกับตัวเลขมากที่กำหนด

?

value = random(100, 200); // sets 'value' to a random number between 100-200

?

หมายเหตุ: ควรใช้คำสั่งนี้หลังจากใช้คำสั่ง randomSeed()

?

ตัวอย่างต่อไปนี้จะสร้างตัวเลขสุ่มมีค่าระหว่าง 0 - 255 และส่งตัวเลขสุ่มนี้ไปสร้างสัญญาณ PWM ออกไปที่ขา PWM

?

int randNumber; // variable to store the random value

int led = 10; // LED with 220 resistor on pin 10

void setup(){} // no setup needed

void loop()

{

randomSeed(millis()); // sets millis() asa seed

randNumber = random(255); // random number from 0 - 255

analogWrite(led, randNumber); // outputs PWM signal

delay(500); // pauses for half a second

}

?

Serial.begin(rate)

คำสั่งนี้จะเปิดพอร์ท serial และตั้งค่าความเร็วในการรับส่ง ปกติการติดต่อกับเครื่องพีซีจะตั้งไว้ที่ ความเร็ว 9600 แม้ว่ามันสามารถรับส่งได้ที่ความเร็วมากกว่านี้ก็ตาม

?

void setup()

{

Serial.begin(9600); // opens serial port set data rate to 9600 bps

}

หมายเหตุ: เมื่อใช้พอร์ทสำหรับการติดต่อ serial communication ,ขา digital pin 0 (RX) และ digital pin 1 (TX) จะนำไปใช้งานอย่างอื่นไมได้

?

Serial.println(data)

คำสั่งนี้จะส่งข้อมูลให้กับ serial port, ตามด้วยขึ้นบรรทัดใหม่โดยอัตโนมัติ คำสั่งนี้จะมีผลเหมือนกับคำสั่ง Serial.print() แต่สามารถดูข้อมูลได้ที่ Serial monitor ได้ด้วย

?

Serial.println(analogvalue); // sends the value of 'analogValue'

?

หมายเหตุ: ข้อมูลเพิ่มเติมของการใช้ ฟังชั่น Serial.println() และ Serial.print() ดูได้จากเวบไซด์ Aruduino

?

ตัวอย่างต่อไปนี้เป็นคำสั่งอ่านค่าจากขา analog pin 0 และส่งข้อมูลให้กับเครื่องคอมพิวเตอร์ทุกๆ 1 วินาที

?

viod setup()

{

Seral.begin(9600); // sets serial to 9600 bps

}

void loop()

{

Seral.println(analogRead(0)); // sends analog value

delay(1000); // pauses for 1 second

}

?

?


?

Appendix

?


?

Syndicate content