17
เอกสารประกอบการเรียนการสอน วิชา: 618352 ไมโครโปรเซสเซอรและการเชื่อมตอ เรื่องที3: * ภาษาซีสําหรับ Arduino ตอนที2 * การรับคาจาก Analog IN และ Push Switch เว็บไซตรายวิชา: http://sites.google.com/site/618352 อาจารย ดร.โสภณ ผูมีจรรยา ภาควิชาวิศวกรรมไฟฟา คณะวิศวกรรมศาสตรและเทคโนโลยีอุตสาหกรรม มหาวิทยาลัยศิลปากร 1 2 ชุดคําสั่งการตัดสินใจ คําสั่งการตัดสินใจ คือ คําสั่งที่มีทางเลือกอยางใดอยางหนึ่งในการทํางาน โดยขึ้นอยูกับเงื่อนไขที่กําหนดไววาเปน จริงหรือ เท็จหรือตรงกับเงื่อนไขที่ได กําหนดไวหรือไม 3 ชุดคําสั่งการตัดสินใจ 4 การใชงานคําสั่งทางเลือก if …

New เอกสารประกอบการเรียนการสอน ... · 2017. 3. 20. · เอกสารประกอบการเรียนการสอน

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: New เอกสารประกอบการเรียนการสอน ... · 2017. 3. 20. · เอกสารประกอบการเรียนการสอน

เอกสารประกอบการเรียนการสอน• วิชา: 618352 ไมโครโปรเซสเซอรและการเชื่อมตอ• เรื่องที่ 3: * ภาษาซีสําหรับ Arduino ตอนที่ 2 * การรับคาจาก Analog IN และ Push Switch• เว็บไซตรายวิชา: http://sites.google.com/site/618352• อาจารย ดร.โสภณ ผูมีจรรยา• ภาควิชาวิศวกรรมไฟฟา • คณะวิศวกรรมศาสตรและเทคโนโลยีอุตสาหกรรม• มหาวิทยาลัยศิลปากร

1 2

ชุดคําสั่งการตัดสินใจคําสั่งการตัดสินใจ คือ คําสั่งที่มีทางเลือกอยางใดอยางหนึ่งในการทํางาน

โดยขึ้นอยูกับเงื่อนไขที่กําหนดไววาเปน “จริง” หรือ “เท็จ” หรือตรงกับเงื่อนไขที่ไดกําหนดไวหรือไม

3

ชุดคําสั่งการตัดสินใจ

4

การใชงานคําสั่งทางเลือก if …

Page 2: New เอกสารประกอบการเรียนการสอน ... · 2017. 3. 20. · เอกสารประกอบการเรียนการสอน

5

ตัวอยางการใชงานif…

6

ตัวอยางการใชงานif…

กรณีที่มี ; อยูหลัง if

7

การใชงานคําสั่งทางเลือก if … else …

8

ตัวอยางการใชงานif… else…

Page 3: New เอกสารประกอบการเรียนการสอน ... · 2017. 3. 20. · เอกสารประกอบการเรียนการสอน

9

การใชงานคําสั่งทางเลือก if … else if …

10

ตัวอยางการใชงานif… else if…

11

การใชงานคําสั่งทางเลือก if … else if … else …

12

ตัวอยางการใชงานif… else if… else...

Page 4: New เอกสารประกอบการเรียนการสอน ... · 2017. 3. 20. · เอกสารประกอบการเรียนการสอน

13

การใชงานคําสั่งทางเลือก switch …

14

ตัวอยางการใชงานswitch caseแบบมี break

15

ตัวอยางการใชงานswitch case

แบบไมมี break

16

ชุดคําสั่งการวนทําซ้ําคําสั่งการวนทําซ้ําหรือสั่งลูป เปนคําสั่งเงื่อนไขที่มีการทํางานซ้ํา ๆ อยูใน

วงจรของเงื่อนไขจนกวาเงื่อนไขจะเปนเท็จ จึงออกจากการทํางานของวงจร

Page 5: New เอกสารประกอบการเรียนการสอน ... · 2017. 3. 20. · เอกสารประกอบการเรียนการสอน

17

ชุดคําสั่งวนทําซ้ํา

18

การใชงานคําสั่งวนทําซ้ํา while loop

19

ตัวอยางการใชงานwhile loop

20

ตัวอยางการใชงานwhile loop

กรณีเงื่อนไขเปนเท็จตั้งแตแรก

ไมวนลูป while

Page 6: New เอกสารประกอบการเรียนการสอน ... · 2017. 3. 20. · เอกสารประกอบการเรียนการสอน

21

ตัวอยางการใชงานwhile loop

กรณีเงื่อนไขเปนจริงตลอด

วนลูป while ไมรูจบ

22

การใชงานคําสั่งวนทําซ้ํา for loop

23

ตัวอยางการใชงานfor loop

24

การใชงานคําสั่งวนทําซ้ํา do while loop

Page 7: New เอกสารประกอบการเรียนการสอน ... · 2017. 3. 20. · เอกสารประกอบการเรียนการสอน

25

ตัวอยางการใชงานdo while loop

26

คําสั่งอื่น ๆ ที่เกี่ยวของกับลูปคําสั่ง gotoเปนคําสั่งที่ใชในการกระโดดไปยังตําแหนงที่ตองการ โดยมีเงื่อนไขการ

ใชงานคําสั่ง goto จะตองควบคูกับคําสั่ง Label ที่จะกระโดดไปดวยทุกครั้งคําสั่ง break เปนคําสั่งที่ใชเพื่อหยุดการทํางานในลูปและออกจากลูป แตกตางกับคําสั่ง

goto ตรงที่ เมื่อคําสั่ง break ถูกเรียกใชงานจะออกจากลูปและทํางานในตําแหนงตอจากคําสั่งลูป แตคําสั่ง goto จะไปทํางานในตําแหนง Label แทน ซึ่งขึ้นอยูกับผูเขียนวาจะกําหนดตําแหนง label ไวที่ใด

คําสั่ง continue เปนคําสั่งการทํางานที่ตรงขามกับคําสั่ง break และ goto เนื่องจากทั้งสอง

คําสั่งเปนการออกจากลูป แตการทํางานของคําสั่ง continue จะบังคับใหโปรแกรมกลับไปจุดเริ่มตนของลูป

27

ตัวอยางการใชงานgoto( )

Label ที่ตั้งชื่อไว

28

ตัวอยางการใชงานbreak( )

Page 8: New เอกสารประกอบการเรียนการสอน ... · 2017. 3. 20. · เอกสารประกอบการเรียนการสอน

29

ตัวอยางการใชงานcontinue( )

จะไมแสดงเลข “5”

30

สรุปคําสั่ง

31

ฟงกชันสําหรับ Arduino• ฟงกชันการสื่อสาร (Communication Function)• ฟงกชันทางดานคณิตศาสตร (Math Function)• ฟงกชันทางดานตรีโกณมิติ (Trigonometry Function)• ฟงกชันการสุมคาตัวเลข (Random Numbers Function)• ฟงกชันอินเตอรรัปตจากสัญญาณภายนอก (External Interrupts Function) 32

ฟงกชันการสื่อสาร (Communication Function)• Serial.begin(speed)

Serial.begin(speed,config)ฟงกชันกําหนดคุณสมบัติของการสื่อสารขอมูลผานทางพอรตอนุกรม ความเร็วใน

การสื่อสารและขอมูลการสื่อสาร โดยที่ speed คือ ความเร็วในการสื่อสารขอมูล บิตตอวินาที (baud) ดังนี้ 300, 600, 1200,

2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, 115200 config คือ จํานวนบิตขอมูล พาริตี้บิต และบิตหยุดขอมูล (data, parity, and stop bit) ดังนี้ SERIAL_5N1, SERIAL_6N1, SERIAL_7N1, SERIAL_8N1 (คา default), SERIAL_5N2, SERIAL_6N2, SERIAL_7N2, SERIAL_8N2, SERIAL_5E1, SERIAL_6E1, SERIAL_7E1, SERIAL_8E1, SERIAL_5E2, SERIAL_6E2, SERIAL_7E2, SERIAL_8E2, SERIAL_5O1, SERIAL_6O1, SERIAL_7O1, SERIAL_8O1, SERIAL_5O2, SERIAL_6O2, SERIAL_7O2, SERIAL_8O2

Page 9: New เอกสารประกอบการเรียนการสอน ... · 2017. 3. 20. · เอกสารประกอบการเรียนการสอน

33

• Serial.print(val)Serial.print(val,format)ฟงกชันเขียนขอมูลเอาตพุตไปที่พอรตอนุกรมตามรูปแบบที่กําหนด (format)

• Serial.println(val)Serial.println(val,format)ฟงกชันเขียนขอมูลเอาตพุตไปที่พอรตอนุกรมตามรูปแบบที่กําหนด (format) พรอม

กับขึ้นบรรทัดใหม โดยที่ val คือ ขอมูลที่จะสงไปที่ขาพอรตอนุกรม format คือ รูปแบบของขอมูลที่จะแสดงเชน DEC, BIN, OCT, HEX เปนตน

34

ตัวอยางการใชงานคําสั่ง print และ println

• min(x,y)ฟงกชันหาคานอยที่สุดระหวาง x และ y

• max(x,y)ฟงกชันหาคามากที่สุดระหวาง x และ y

• abs(x)ฟงกชันคํานวณหาคา absolute ของ x

• pow(base, exponent)ฟงกชันคํานวณหาคายกกําลัง baseexponent

• sqrt(x)ฟงกชันคํานวณหาคา square root ของ x

35

ฟงกชันทางดานคณิตศาสตร (Math Function)

36

• constrain(x, a, b,)ฟงกชันที่กําหนดใหคา x อยูในชวง a ถึง b เทานั้น

• map(value, fromLow, fromHigh, toLow, to High)ฟงกชันปรับคาชวงตัวเลขใหอยูในชวงที่ตองการ

โดยที่ value คือ คาที่ตองการเปลี่ยนชวงหนวยfromLow คือ คาต่ําสุดของชวงเดิมformHigh คือ คาสูงสุดของชวงเดิมtoLow คือ คาต่ําสุดของชวงใหมtoHigh คือ คาสูงสุดของชวงใหม

ฟงกชันทางดานคณิตศาสตร (Math Function) (ตอ)

Page 10: New เอกสารประกอบการเรียนการสอน ... · 2017. 3. 20. · เอกสารประกอบการเรียนการสอน

37

ตัวอยางการใชงานmin( ) max( ) abs( )

38

ตัวอยางการใชงานpow( ) sqrt( )

39

ตัวอยางการใชงานconstrain( ) map( )

40

ฟงกชันทางดานตรีโกณมิติ (Trigonometry Function)• sin(rad)

ฟงกชันคํานวณคา sin ของมุม rad โดยคาที่ไดจะอยูในชวง -1 ถึง 1• cos(rad)

ฟงกชันคํานวณคา cos ของมุม rad โดยคาที่ไดจะอยูในชวง -1 ถึง 1• tan(rad)

ฟงกชันคํานวณคา tan ของมุม rad โดยคาที่ไดจะอยูในชวง -∞ ถึง ∞

Page 11: New เอกสารประกอบการเรียนการสอน ... · 2017. 3. 20. · เอกสารประกอบการเรียนการสอน

41

ตัวอยางการใชงานsin( ) cos( ) tan()

42

ฟงกชันการสุมคาตัวเลข (Random Numbers Function)• randomSeed(seed)

ฟงกชันที่กําหนดใหกระบวนการสุมคามีผลลัพธที่แตกตางไปจากเดิม• random(max)

ฟงกชันสุมตัวเลขในชวง 0 ถึง max-1• random(min, max)

ฟงกชันสุมตัวเลขในชวง min ถึง max-1

43

ตัวอยางการใชงานrandom( )

กดปุม reset ที่บอรด ไป 3 ครั้งจะเห็นไดวา

a และ b จะสุมไดเลขเดิมเสมอ44

ตัวอยางการใชงานrandomSeed()

random( )

กดปุม reset ที่บอรด ไป 3 ครั้งจะเห็นไดวา

a และ b จะสุมไดเลขแตกตางออกไปจากเดมิ

เพิ่มเขามา

Page 12: New เอกสารประกอบการเรียนการสอน ... · 2017. 3. 20. · เอกสารประกอบการเรียนการสอน

45

ฟงกชันอินเตอรรัปตจากสัญญาณภายนอก (External Interrupts Function)

• attachInterrupt(interrupt, ISR, mode)ฟงกชันเปดและใชบริการสัญญาณอินเตอรรัปต Interrupt Service Routine (ISR)

จากภายนอก ใชกําหนดชองสัญญาณอินเตอรรัปตจากภายนอก บอรด Arduino Uno กําหนดชองสัญญาณอินเตอรรัปตไวที่ตําแหนงขาพอรตดิจิตอลที่ 2 (INT.0) และที่ 3 (INT.1)โดยที่ interrupt คือ หมายเลขอินเตอรรัปต

บอรด Arduino Uno เลือกกําหนดไดเปน 0 และ 1ISR คือ การเรียกฟงกชันบริการอินเตอรรัปตmode คือ รูปแบบของสัญญาณอินเตอรรัปต

LOW อินเตอร

46

(ตอจากหนาที่แลว)mode คือ รูปแบบของสัญญาณอินเตอรรัปต

CHANGE อินเตอรรัปตเมื่อมีการเปลี่ยนแปลงของขอบขาสัญญาณ RISING อินเตอรรัปตเมื่อขอบขาของสัญญาณเปลี่ยนแปลงจาก

“Low” เปน “High” FALLING อินเตอรรัปตเมื่อขอบขาของสัญญาณเปลี่ยนแปลงจาก

“High” เปน “Low”• detachInterrupt(interrupt)

ฟงกชันยกเลิกสัญญาณอินเตอรรัปตหมายเลขที่เปดใชงาน• interrupts()

ฟงกชันเปด (Re-enables interrupts) การใชงานอินเตอรรัปต• noInterrupts()

ฟงกชันปด (Disables interrupts) การใชงานอินเตอรรัปต (เปดกลับมาใชงานใหมไดดวยฟงกชัน interrupts())

47ขาอินเตอรรัปตจากภายนอก

การรับคาจาก Analog IN

48

• analogRead(pinR) ฟงกชันอานคาแรงดันอะนาลอกและแปลงเปนคาดิจิตอลขนาดความละเอียด 10บิต (มีคาอยูในชวง 0 ถึง 1023) โดย pinR คือ หมายเลขขาพอรตอะนาลอก เชน A0, A1, A2, A3, A4, A5 เปนตน (ขึ้นอยูกับบอรดแตละรุน)

แรงดันอะนาลอกอินพุต 0 ถึง 5 Vจะถูกแปลงเปนดิจิตอลเลขฐานสิบ0 ถึง 1023

Page 13: New เอกสารประกอบการเรียนการสอน ... · 2017. 3. 20. · เอกสารประกอบการเรียนการสอน

49

การแบงแรงดันอินพุตโดยใช R ปรับคาได

ขา 1 --> GNDขา 2 --> A0ขา 3 --> 5V

50

ตัวอยางที่ 1 การแสดงตัวเลขได 4 หลักที่ LED 7-Segment

7SEG-MPX8-CC-BLUE

MAX7219

51

แสดงเลขของตัวแปร num

52

ตัวอยางที่ 2 การรับคาจาก Analog IN มาแสดงที่ LED 7-Segment

POT-HG

Page 14: New เอกสารประกอบการเรียนการสอน ... · 2017. 3. 20. · เอกสารประกอบการเรียนการสอน

53มีคาในชวง 0 ถึง 1023

ใหทดลองเลื่อนขึ้น-ลง

54

ตัวอยางที่ 3 ควบคมุความเร็วของการกระพริบดวย R ปรับคาได

55

เมื่อหมุนตัวตานทานปรับคาได เลื่อนขึ้น แรงดันที่เขาขา A0 จะมีคามาก สงผลใหคา aval มีคาสูง การ delay จะเยอะ (หลอด LED กระพริบชา)

มีคาในชวง 0 ถึง 1023

มีคาในชวง 0 ถึง 5 V

แตถาหมุนตัวตานทานปรับคาได เลื่อนลง แรงดันที่เขาขา A0 จะมีคานอย สงผลใหคา aval มีคานอย การ delay จะนอย (หลอด LED กระพริบเร็ว) 56

ตัวอยางที่ 4 ปรับจํานวน LED ที่ตองการใหติด โดยใช R ปรับคาได

POT-HG

Page 15: New เอกสารประกอบการเรียนการสอน ... · 2017. 3. 20. · เอกสารประกอบการเรียนการสอน

57

จํานวนของ LED ที่ติด จะขึ้นอยูกับการหมุน R ปรับคาได ถาเลื่อนไปบนสุดจะติดทุกดวง แตถาเลื่อนลงมาลางสุดจะติดดวงเดียว

ตัวอยาง ติด 4 ดวง กรณีที่เลื่อนมาที่ 50 %

58

ตัวอยางที่ 5 การใชงานขา PWM สรางรูปคลื่นสี่เหลี่ยม

ที่สามารถปรับคา duty cycle ได โดยใช R ปรับคาได

POT-HG

OSCILLOSCOPE

59

ขา PWM สําหรับฟงกชัน analogWrite สําหรับ Arduino Uno

ขาที่ 3 5 6 9 10 11

โดยคาที่สงไดจะอยูในชวง 0 ถึง 255 (duty cycle 100%) เทานั้น60

การคํานวณคา duty cycle

duty cycle 100%on

all

TT

onT

allT

Page 16: New เอกสารประกอบการเรียนการสอน ... · 2017. 3. 20. · เอกสารประกอบการเรียนการสอน

61

ตัวอยางคา duty cycle 20 %

สามารถปรับคา duty cycle ไดโดยการหมุนตัวตานทานปรับคาได ถาเลื่อนขึ้นบนสุดจะได duty cycle 100% (analogWrite คา 255) แตถาเลื่อนลงมาลางสุดจะได duty cycle 0 % (analogWrite คา 0)

การรับคาจาก Push Switch

62

• digitalRead(pin) ฟงกชันอานคาอินพุตจากขาพอรตดิจิตอล (pin) คาที่อานไดจะเปนคา HIGH

หรือ LOW โดย pin คือ หมายเลขขาพอรตที่ตองการใชงาน และคาที่รับเขามาจะเปน HIGH หรือ LOW

Push Switch

63

ตัวอยางที่ 6 กดติดปลอยดับ

BUTTON

64

เมื่อกดสวิตซ หลอด LED จะติด เมื่อไมไดกดสวิตซ หลอด LED จะดับ

Page 17: New เอกสารประกอบการเรียนการสอน ... · 2017. 3. 20. · เอกสารประกอบการเรียนการสอน

65

ตัวอยางที่ 7 การใชงานขาอินเตอรรัปตภายนอก INT0

66

LED 4 ดวง ดานบนจะวิ่งจากลางขึ้นบน ไปเรื่อย ๆ โดยจะมีการเปลี่ยนจังหวะทุก ๆ 0.25 วินาทีเมื่อเรากดสวิตชหนึ่งครั้ง จะทําให LED ที่ตออยูกับ ขา 7 ดับ และเมื่อกดสวิตซอีกหนึ่งครั้ง LED จะติด โดยจะมีการติดสลับไปทุกครั้งที่มีการกดสวิตซ ในขณะที่ LED 4 ดวง ดานบนก็ยังคงวิ่งตอไปเรื่อย ๆ ได (ในลูป for ทํางานไดปกติ) จึงเรียกไดวาเปนการทํางานแบบอินเตอรรัปต

67

เอกสารอางอิง• http://www.thaieasyelec.com/• http://www.arduitronics.com/• http://www.myarduino.net/• http://www.arduino.org/• https://www.arduino.cc/• ประจิน พลังสันติกุล, พื้นฐานภาษา C สําหรับ Arduino, กรุงเทพ: แอพซอฟต

เทค, 2553• Basic Electronic + Arduino (Pre-Lab) Workshop for Cpre, หองปฏิบัติระบบ

สมองกลฝงตัว (Embedded Syatem Lab) ภาควิชาวิศวกรรมไฟฟาและคอมพิวเตอร คณะวิศวกรรมศาสตร มจพ. 12 ตุลาคม 2557

• เรียนรูการใชงาน Arduino เบื้องตน, ชมรม MAKER SPACE PSRU ศูนยเทคโนโลยีสารสนเทศ มหาวิทยาลัยราชภัฏพิบูลสงคราม

• Julien Bayle, C Programming for Arduino, PACKT publishing