slide-04 - WordPress.com

Download Report

Transcript slide-04 - WordPress.com

128
บทที่ 4
ชุดคำสังภำยในไลบรำรี
่
ของ
โปรแกรมภำษำ C สำหรับควบคุมหุ่นยนต์
IPST-BOT
1. ไลบรำรี in_out.h
129
เป็ นไลบรำรี ที่บรรจุชุดคำสังกำรอ่
่
ำน
และเขี ย นข้ อ มู ล อิ น พุต และเอำต์ พุต ของ
พอร์ตไมโครคอนโทรลเลอร์ ก่ อนเรี ยกใช้
งำนฟั งก์ชนภำยในไลบรำรี
ั่
กลุ่มนี้ ผู้พฒ
ั นำ
จะต้ อ งท ำกำรผนวกไฟล์ ไ ลบรำรี ไ ว้ ที่
ตอนต้นของโปรแกรมด้วยคำสัง่
1.1 ฟั งก์ชนอ่
ั ่ ำนค่ำจำกพอร์ตอินพุต
in_a : อ่ำนค่ำสัญญำณดิจิตอลจำก
พอร์ต A
in_b : อ่ำนค่ำสัญญำณดิจิตอลจำก
พอร์ต B
in_c : อ่ำนค่ำสัญญำณดิจิตอลจำก
พอร์ต C
130
รูปแบบ
131
char in_a(char _bit);
char in_b(char _bit);
char in_c(char _bit);
char in_d(char _bit);
พำรำมิเตอร์
ถึง 7
_bit ใช้กำหนดขำพอร์ตที่ต้องกำรในช่วง 0
กำรคืนค่ำ
1.2 ฟั งก์ชนเขี
ั ่ ยนข้อมูลไปยังพอร์ต
132
เอำต์พตุ
out_a : กำหนดค่ำสัญญำณดิจิตอลที่
พอร์ต A
out_b : กำหนดค่ำสัญญำณดิจิตอลที่
พอร์ต B
รูปแบบ
void out_a(char _bit,char _dat);
void out_b(char _bit,char _dat);
void out_c(char _bit,char _dat);
void out_d(char _bit,char _dat);
พำรำมิเตอร์
_bit ใช้กำหนดขำพอร์ตที่ต้องกำร มีค่ำ
ตัง้ แต่ 0 ถึง 7
133
1.3 ฟั งก์ชนกลั
ั ่ บลอจิกให้กบั พอร์ต
134
เอำต์พตุ
toggle_a : กลับค่ำสัญญำณดิจิตอลที่
พอร์ต A
toggle_b : กลับค่ำสัญญำณดิจิตอลที่
พอร์ต B
toggle_c : กลับค่ำสัญญำณดิจิตอลที่
รูปแบบ
void toggle_a(char _bit);
void toggle_b(char _bit);
void toggle_c(char _bit);
void toggle_d(char _bit);
พำรำมิเตอร์
_bit ใช้กำหนดขำพอร์ตที่ ต้องกำร
ในช่วง 0 ถึง 7
135
1.4 ฟั งก์ชน
ั ่ sw
เป็ นฟังก์ชนส
ั ่ ำหรับตรวจสอบสถำนะ
สวิตช์ SW1 ถึง SW3
sw1 : ตรวจสอบสถำนะกำรกดสวิตช์
SW1
sw2 : ตรวจสอบสถำนะกำรกดสวิตช์
SW2
136
รูปแบบ
char sw1(void);
char sw2(void);
char sw3(void);
กำรคืนค่ำ
เมื่อสวิตช์ถกู กดจะคืนค่ำเป็ น 0 แต่ถ้ำไม่
ถูกกดจะคืนค่ำเป็ น 1
137
1.5 ฟั งก์ชน
ั ่ sw_press
เป็ นฟังก์ชนส
ั ่ ำหรับอ่ำนค่ำสถำนะของสวิตช์
SW1 ถึง SW3
sw1_press
: รอจนกว่ำจะมีกำรกด
สวิตช์ SW1
sw2_press
: รอจนกว่ำจะมีกำรกด
สวิตช์ SW2
sw3_press
: รอจนกว่ำจะมีกำรกด
138
2. ไลบรำรี sleep.h
139
เป็ นไลบรำรี ที่ บ รรจุ ชุ ด ค ำสัง่ ในกำร
หน่ วงเวลำในหน่ วยมิ ลลิ วิ นำที ก่ อน
เรี ย กใช้ ง ำนฟั งก์ ช ั น่ ที่ บรรจุ อ ยู่ ภ ำยใน
ผู้พฒ
ั นำจะต้องทำกำรผนวกไฟล์ไลบรำรีไว้
ที่ตอนต้นของโปรแกรมด้วยคำสัง่
#include <sleep.h>
2.1 ฟั งก์ชน
ั ่ sleep
sleep : สำหรับหน่ วงเวลำในหน่ วย
มิลลิวินำที
รูปแบบ
void sleep(unsigned int ms);
พำรำมิเตอร์
140
3. ไลบรำรี analog.h
141
เป็ นไลบรำรีที่บรรจุชุดคำสังเรี
่ ยกอ่ำน
ค่ ำ จำกขำพอร์ ต อิ นพุ ต อะนำลอกของ
ไมโครคอนโทรลเลอร์ ก่ อ นเรี ย กใช้ ง ำน
ฟั งก์ชนที
ั ่ ่บรรจุอยู่ภำยในผูพ้ ฒ
ั นำจะต้องทำ
กำรผนวกไฟล์ ไ ลบรำรี ไ ว้ ที่ ต อนต้ น ของ
โปรแกรมด้วยคำสัง่
3.1 ฟั งก์ชน
ั ่ analog
142
เป็ นฟั ง ก์ ช ัน่ อ่ ำ นค่ ำ จำกโมดู ล แปลง
สั ญ ญำณ อะนำลอกเป็ นดิ จิ ตอลของขำ
พอร์ต A
มีควำมละเอี ยดในกำรแปลง
สัญญำณ 10 บิต
โดยมักใช้งำนร่วมกับ
เซนเซอร์ชนิด อะนำลอกต่ำงๆ
รูปแบบ
unsigned int analog(unsigned char
channel);
พำรำมิเตอร์
channel ใช้กำหนดขำพอร์ตที่ ต้องกำร
ในช่วง 0 ถึง 7 สำหรับพอร์ต PA0 ถึง PA7
กำรคืนค่ำ
143
4. ไลบรำรี lcd.h
144
เป็ นไลบรำรี ที่บรรจุชุดคำสังเกี
่ ่ ยวกับ
ก ำ ร แ ส ด ง ข้ อ ค ว ำ ม ที่ โ ม ดู ล LCD บ น
แผงวงจร Display-Motor ก่ อ นเรี ย กใช้
งำนฟั งก์ ช ั น่ ที่ บ รรจุ อ ยู่ ภ ำยในผู้ พ ัฒ นำ
จะต้ อ งท ำกำรผนวกไฟล์ ไ ลบรำรี ไ ว้ ที่
ตอนต้นของโปรแกรมด้วยคำสัง่
4.1 ฟั งก์ชน
ั ่ lcd หรือ LCD
lcd หรือ LCD: แสดงผลข้อควำมที่โมดูล
LCD แบบ 16 ตัวอักษร 2 บรรทัด
รูปแบบ
void lcd(char *p,…);
พำรำมิเตอร์
p ใช้กำหนดรูปแบบกำรแสดงผลที่โมดูล
145
146
รหัสบังคับ
กำรทำงำน
%c หรือ %C
แสดงผลอักขระ 1 ตัว
%d หรือ %D
แสดงผลตัวเลขฐำนสิบช่วง
-32,768 ถึง
+32,767
%l หรือ %L
แสดงผลตัวเลขฐำนสิบช่วง
-2,147,483,648 ถึง
+2,147,483,647
%f หรือ %F
แสดงผลตัวเลขจำนวนจริง
5. ไลบรำรี motor.h
147
เป็ นไลบรำรี ที่บรรจุชุดคำสังเกี
่ ่ ยวกับ
กำรควบคุ ม มอเตอร์ไ ฟตรง โดยท ำงำน
ร่ ว ม กั บ ว ง จ ร ขั บ ม อ เ ต อ ร์ ไ ฟ ต ร ง บ น
แผงวงจร Display-MOTOR ก่อนเรียกใช้
งำนฟั งก์ ช ั น่ ที่ บ รรจุ อ ยู่ ภ ำยในผู้ พ ัฒ นำ
จะต้ อ งท ำกำรผนวกไฟล์ ไ ลบรำรี ไ ว้ ที่
5.1 ฟั งก์ชน
ั ่ motor
148
motor : เป็ นฟั งก์ชนส
ั ่ ำหรับขับมอเตอร์ไฟตรง
รูปแบบ
void motor(char _channel, int _power);
พำรำมิเตอร์
_channel ใช้เลือกช่องของวงจรขับมอเตอร์ที่
ต้องกำรใช้งำน
_power ใช้กำหนดกำลังขับของวงจรขับมอเตอร์
5.2 ฟั งก์ชน
ั ่ motor_stop
motor_stop : เป็ นฟั งก์ชนส
ั ่ ำหรับบังคับแกน
หมุนหรือเบรกมอเตอร์
รูปแบบ
void motor_stop(char _channel);
พำรำมิเตอร์
_channel ใช้เลือกวงจรขับมอเตอร์ที่ต้องกำร
เบรกมอเตอร์
149
6. ไลบรำรี sound.h
150
เป็ นไลบรำรี ที่บรรจุชุดคำสังเกี
่ ่ ยวกับ
กำรก ำเนิ ดสัญ ญำณโดยท ำงำนร่ ว มกับ
แผงวงจร ZX-SPEAKER ก่อนเรียกใช้งำน
ฟั งก์ชนที
ั ่ ่บรรจุอยู่ภำยในผูพ้ ฒ
ั นำจะต้องทำ
กำรผนวกไฟล์ ไ ลบรำรี ไ ว้ ที่ ต อนต้ น ของ
โปรแกรมด้วยคำสัง่
6.1 ฟั งก์ชน
ั ่ sound
sound_a : เลือกกำเนิดเสียงที่ ขำพอร์ต
ใดๆ ของพอร์ต A
sound_b : เลือกกำเนิดเสียงที่ขำพอร์ต
ใดๆ ของพอร์ต B
sound_c : เลือกกำเนิดเสียงที่ ขำพอร์ต
ใดๆ ของพอร์ต C
sound_d : เลือกกำเนิดเสียงที่ขำพอร์ต
151
รูปแบบ
152
void sound_a(char ch, int freq, int time);
void sound_b(char ch, int freq, int time);
void sound_c(char ch, int freq, int time);
void sound_d(char ch, int freq, int time);
พำรำมิเตอร์
ch ใช้กำหนดขำพอร์ตที่ต้องกำรในช่วง
0 ถึง 7
freq ใช้กำหนดค่ำควำมถี่ค่ำสัญญำณเสียง
time
ใช้กำหนดช่วงเวลำในกำร
6.2 ฟั งก์ชน
ั ่ beep
beep_a : เลือกกำเนิดเสียงที่ ขำของ
พอร์ต A
beep_b : เลือกกำเนิดเสียงที่ ขำของ
พอร์ต B
beep_c : เลือกกำเนิดเสียงที่ ขำของ
พอร์ต C
153
รูปแบบ
void beep_a(char ch);
void beep_b(char ch);
void beep_c(char ch);
void beep_d(char ch);
พำรำมิเตอร์
ch ใช้กำหนดขำพอร์ตที่ ต้องกำรในช่วง 0
ถึง 7
154
7. ไลบรำรี servo.h
155
เป็ นไลบรำรี ที่ บ รรจุชุด คำสัง่ ควบคุม
กำรขับ เซอร์โ วมอเตอร์ ก่ อ นเรี ย กใช้ ง ำน
ฟั งก์ชนที
ั ่ ่บรรจุอยู่ภำยในผูพ้ ฒ
ั นำจะต้องทำ
กำรผนวกไฟล์ ไ ลบรำรี ไ ว้ ที่ ต อนต้ น ของ
โปรแกรมด้วยคำสัง่
#include <servo.h>
7.1 ฟั งก์ชน
ั ่ servo
156
servo : กำหนดตำแหน่ งเซอร์โวมอเตอร์ โดยเมือ
่
ใช้งำนกับรุ่นมำตรฐำนจะทำให้หมุนไปยังตำแหน่ ง 0 ถึง
180 องศำได้และถ้ำใช้งำนกับ รุ่นปรับแต่ง จะทำให้
หมุนในทิศทำงใดทิศทำงหนึ่ งและมีผลต่ออัตรำเร็วในกำร
หมุน หรืออำจหยุดนิ่ง
รูปแบบ
void servo(unsigned char _ch, unsigned int
_pos);
7.2 ฟั งก์ชน
ั ่ server_stop
servo_stop : ปิดกำรขับเซอร์โวมอเตอร์
ทุกช่องพร้อมกัน
รูปแบบ
void servo_stop(void);
157
7.3 ฟั งก์ชน
ั ่ servo_pause
158
servo_pause : ใช้สำหรับหยุดกำรขับเซอร์
โวมอเตอร์ในช่องที่กำหนด
รูปแบบ
void servo_pause(unsigned char
_ch);
พำรำมิเตอร์
_ch ใช้กำหนดช่องที่ต้องกำรหยุดขับเซอร์
7.4 ฟั งก์ชน
ั ่ servo_resume
159
servo_resume : ใช้สำหรับกำรขับเซอร์โว
มอเตอร์ในตำแหน่ งที่มีผลจำกกำรหยุดขับ
ชัวขณะจำกฟั
่
งก์ชนั ่ servo_pause ก่อนหน้ ำนี้
รูปแบบ
void servo_resume(unsigned char
_ch);
พำรำมิเตอร์
7.5 ฟั งก์ชน
ั ่ servo_get_status
160
servo_get_status : ใช้สำหรับอ่ำนค่ำ
สถำนะกำรขับเซอร์โวมอเตอร์ในช่องที่กำหนด
รูปแบบ
unsigned char servo_get_status(unsigned
char _ch);
พำรำมิเตอร์
_ch ใช้กำหนดช่องที่ ต้องกำรอ่ำนค่ำสถำนะกำร
ขับเซอร์โวมอเตอร์ที่ต่อใช้งำนมีค่ำตัง้ แต่ 0 ถึง 4
หมายเหตุ
161
เมือ
่ ผูพั
่ ควบคุม
้ ฒนามีการใช้งานกลุมฟั
่ งกชั
์ น
เซอรโวมอเตอร
จากไลบรารี
servo.h โปรแกรมจะ
์
์
มีการจับจองขาพอรตดั
์ งนี้
- เมือ
่ ใช้งานเซอรโวมอเตอร
ช
์
์ ่ อง 0 โปรแกรม
จะจองพอรต
์ PB0
- เมือ
่ ใช้งานเซอรโวมอเตอร
ช
์
์ ่ อง 1 โปรแกรม
จะจองพอรต
์ PB1
- เมือ
่ ใช้งานเซอรโวมอเตอร
ช
์
์ ่ อง 2 โปรแกรม
จะจองพอรต
์ PB2
- เมือ
่ ใช้งานเซอรโวมอเตอร
ช
์
์ ่ อง 3 โปรแกรม
จะจองพอรต
์ PB3
- เมือ
่ ใชงานเซอรโวมอเตอรชอง 4 โปรแกรม
8. ไลบรำรี gp2d120_lib.h
162
เป็ นไลบรำรีที่บรรจุชุดคำสังเรี
่ ยกอ่ำน
ค่ ำ ระยะทำงจำกโมดู ล GP2D120 ก่ อ น
เรี ย กใช้ ง ำนฟั งก์ ช ั น่ ที่ บรรจุ อ ยู่ ภ ำยใน
ผู้พฒ
ั นำจะต้องทำกำรผนวกไฟล์ไลบรำรีไว้
ที่ตอนต้นของโปรแกรมด้วยคำสัง่
#include <gp2d120_lib.h>
8.1 ฟั งก์ชน
ั ่ getdist
getdist : อ่ำนค่ำระยะทำงในหน่ วย
163
เซนติเมตรจำกโมดูล GP2D120 ซึ่งค่ำที่มีควำม
เชื่อถือได้จะมีค่ำตัง้ แต่ 4 ถึง 32 เซนติเมตร
รูปแบบ
unsigned int getdist(char adc_ch)
พำรำมิเตอร์ adc_ch ใช้กำหนดขำพอร์ตที่
ต้องกำรในช่วง 0 ถึง 7 สำหรับพอร์ต A
164
กำรทดสอบใช้งำน
ZX-LED
กำรทดลองที่ 1-5 (ZXLED)
กำรเชื่อมต่อทำงฮำร์ดแวร์
ต่อ ZX-LED เข้ำกับพอร์ต PB4
165
โปรแกรมกำรทดลองที่ 1
(led_01.c)
#include <in_out.h>
สังให้
่ LED ติด ที่พอร์ต PB4
void main()
{
out_b(4,1);
}
166
โปรแกรมกำรทดลองที่ 2
(led_02.c)
#include <in_out.h>
สังให้
่ LED ดับ ที่พอร์ต PB4
void main()
{
out_b(4,0);
}
167
โปรแกรมกำรทดลองที่ 3
(led_03.c)
#include <in_out.h>
สั#include
งให้
่ LED<sleep.h>
ที่พอร์ต PB4
ิ นำทีmain()
วvoid
แล้วดับ
{
out_b(4,1);
sleep(5000);
out_b(4,0);
}
168
ติดนำนประมำณ 5
โปรแกรมกำรทดลองที่ 4
(led_04.c)
#include <in_out.h>
169
<sleep.h>
สั#include
งให้
่ LED
ที่พอร์ต PB4 กระพริบทุกๆ 0.5
void main()
ว{ิ นำที
while(1)
{
out_b(4,1);
sleep(500);
out_b(4,0);
sleep(500);
}
}
โปรแกรมกำรทดลองที่ 5
170
(led_05.c)
#include <in_out.h>
สั#include
งให้
่ LED <sleep.h>
ที่พอร์ต PB4 กระพริบทุกๆ 0.5 วินำที
main()
ด้void
วยคำสั
ง่ toggle
{
while(1)
{
toggle_b(4);
sleep(500);
}
}
171
กำรทดสอบใช้งำน ZXSPEAKER
กำรทดลองที่ 6-7 (ZXSPEAKER)
กำรเชื่อมต่อทำงฮำร์ดแวร์
ต่อ SPEAKER เข้ำกับพอร์ต PA5
172
โปรแกรมกำรทดลองที่ 6
(sound_01.c)
#include <sound.h>
สร้
ำงสัญญำณเสี
ยงติ๊ดทุกๆ 1
#include
<sleep.h>
void main()
{
while(1)
{
beep_a(5);
sleep(1000);
}
}
วินำที
173
174
โปรแกรมกำรทดลองที่ 7
(sound_02.c)
#include <sound.h>
สร้
ำงสัญญำณเสี
ยงควำมถี่ 800
#include
<sleep.h>
ิ นำทีmain()
วvoid
ทุกๆ 1 วินำที
{
while(1)
{
sound_a(5,800,100);
sleep(1000);
}
}
ช่วง 0.1
175
กำรทดสอบใช้งำน ZXSWITCH
กำรทดลองที่ 8-9 (ZX-
176
SWITCH)
กำรเชื่อมต่อทำงฮำร์ดแวร์
ต่อ ZX-LED เข้ำกับพอร์ต PB4
2. ต่อ ZX-SWITCH จำกช่อง LOW เข้ำ
กับพอร์ต PB1
1.
โปรแกรมกำรทดลองที่ 8
(switch_01.c)
#include <in_out.h>
LED ติดเมือ
่ มีกำรกดสวิตช์/ดับเมื่อปล่อย
#include <sleep.h>
void main()
{
while(1)
{
if(in_b(1)==0)
{
out_b(4,1);
}
else
{
out_b(4,0);
}
}
}
สวิตช์
177
โปรแกรมกำรทดลองที่ 9
(switch_02.c)
#include <in_out.h>
<sleep.h>
ิ
ทุ#include
ก
ๆครั
ง
้
ที
่
ม
ี
ก
ำรกดสว
ต
ช์
LED จะกลับ
void main()
{
ิ
สถำนะกำรต
ด
/ดับ
while(1)
{
if(in_b(1)==0)
{
toggle_b(4);
sleep(200);
}
}
}
178
179
กำรทดสอบใช้งำนโมดูล
LCD
บนแผงวงจร Display-
MOTOR
กำรทดลองที่ 10-14
(LCD)
กำรเชื่อมต่อทำงฮำร์ดแวร์
ต่อแผงวงจร Display-MOTOR เข้ำกับ
บอร์ด MicroBOX
(ให้ทำกำรย้ำยจุดจ่ำยไฟมำที่ บอร์ด DisplayMOTOR ด้วย)
180
โปรแกรมกำรทดลองที่ 10 (lcd_01.c)
แสดงข้อควำม “Hello World!”
#include <lcd.h>
void main()
{
lcd("Hello World!");
}
181
โปรแกรมกำรทดลองที่ 11 (lcd_02.c)
182
แสดงผลลัพธ์เมือ่ ตัวอักขระติดกันเกิน 16
#include <lcd.h>
ตัvoid
วอักษร
main()
{
lcd("abcdefghijklmnopqrstuvwxy
z");
}
โปรแกรมกำรทดลองที่ 12 (lcd_03.c)
แสดงผลลัพธ์ค่ำข้อมูลตัวเลขจำนวนเต็ม
#include <lcd.h>
(int)
void main()
{
int x=158;
lcd("x = %d",x);
}
183
โปรแกรมกำรทดลองที่ 13 (lcd_04.c)
184
แสดงตั
ว
อย่
ำ
งโปรแกรมนั
บ
ค่
ำ
ทุ
ก
ๆ
1 วินำที
#include <lcd.h>
#include <sleep.h>
void main()
{
int i=0;
while(1)
{
lcd("Count = %d ",i);
sleep(1000);
i++;
}
}
โปรแกรมกำรทดลองที่ 14 (lcd_05.c)
แสดงกำรตัดข้อควำมมำแสดงบรรทัดที่ 2
#include <lcd.h>
void main()
{
lcd("Sawasdee#nThailand");
}
185
186
กำรทดสอบใช้งำนสวิตช์
SW1-SW3 บนแผงวงจร
SW3
Display-MOTOR
SW2
SW1
187
โปรแกรมกำรทดลองที่ 15 (swx_01.c)
เพิ่มค่ำกำรนับทุกๆ ครัง้ ที่มีกำรกดสวิตช์ SW1
#include <in_out.h>
#include <lcd.h>
#include <sleep.h>
void main()
{
int i=0;
while(1)
{
if(sw1()==0)
{
i++; sleep(200);
}
lcd("Count = %d ",i);
}
}
188
โปรแกรมกำรทดลองที่ 16 (swx_02.c)
เพิ่มค่ำกำรนับทุกๆ ครัง้ ที่มีกำรกดสวิตช์ SW1 และลดค่ำกำรทุกๆ
#include <in_out.h>
ครั
ง้ ที่มีกำรกดสวิตช์ SW2
#include <lcd.h>
#include <sleep.h>
void main()
{
int i=0;
while(1)
{
if(sw1()==0)
{
i++; sleep(200);
}
if(sw2()==0)
{
i--; sleep(200);
}
lcd("Count = %d ",i);
}
}
189
โปรแกรมกำรทดลองที่ 17 (swx_03.c)
รอจนกระทังมี
่ กำรกดสวิตช์ SW1 จึงจะเริ่มต้น
#include <in_out.h>
#include
<lcd.h>
กำรนั
บ
ค่
ำ
ทุ
ก
ๆ
1 วินำที
#include <sleep.h>
void main()
{
int i=0;
lcd("Press SW1#nfor Counter");
sw1_press();
lcd("#c");
while(1)
{
lcd("Count = %d ",i++);
sleep(1000);
}
}
190
กำรทดสอบใช้งำน
ZX-03
กำรต่ อ ใช้ ง ำนกับ
191
IPST
MicroBOX
สำหรับ ZX-03 จัดว่ำเป็ นเซนเซอร์
ชนิดอะนำลอก ซึ่งจะให้ค่ำที่ แปรตำมแสง
สะท้ อนของอินฟรำเรดจำกวัตถุเป้ ำหมำย
ดั ง นั ้ น ในกำรต่ อ ใช้ ง ำนควรต่ อ ใช้ ง ำน
ร่วมกับ พอร์ต A (พอร์ต PA0 - PA7)
กำรทดลองที่ 18 (ZX-03)
กำรเชื่อมต่อทำงฮำร์ดแวร์
ต่อแผงวงจร ZX-03 เข้ำกับพอร์ต PA3
192
โปรแกรมการทดลองที่ 18
(infrared_01.c)
193
อ#include
านค
าปริ
ม<analog.h>
าณแสงสะท้อนอินฟราเรดทีไ่ ดจากการตรวจจั
บจาก ZX่
่
้
03
อยางต
อเนื
่ <lcd.h>
่ ่อง
#include
#include <sleep.h>
void main()
ให้ ท าการทดสอบจ่ อ
{
บริ เ วณแผ่ นกระดาษ
int infrared=0;
ทดสอบสี ขาวและสี ดาที่
while(1)
ระยะห่างประมาณ 5{
10 มิลลิเมตร แล้วท า
การบันทึกค่าผลลัพธที
infrared = analog(3);
์ ่
ไ ด้ เ พื่ อ เ ป็ น ข้ อ มู ล ใ น
lcd("Infrared = %d ",infrared);
การทดลองตอไป
่
sleep(100);
}
}
กำรทดลองที่ 19 (ZX-03)
กำรเชื่อมต่อทำงฮำร์ดแวร์
1. ต่อแผงวงจร ZX-03 เข้ำกับพอร์ต PA3
2. ต่อ ZX-SPEAKER เข้ำกับพอร์ต PB4
194
โปรแกรมการทดลองที่ 19
(infrared_02.c)
#include
แจ
งเตือ<analog.h>
นดวยเสี
ยงเมือ
่ พบเส้นสี ดา
้
้
#include <lcd.h>
#include <sleep.h>
#include <sound.h>
void main()
{
int infrared=0;
while(1)
{
infrared = analog(3);
lcd("Infrared: %d ",infrared);
if(infrared<500)
{
beep_b(4);
}
sleep(100);
}
}
จากการทดสอบอ่ านค่ า
ป ริ ม า ณ แ ส ง ส ะ ท้ อ น
อิ น ฟ ร า เ ร ด ก่ อ น ห น้ า นี้
สมมุ ต ิว่ าบริ เ วณส้ นสี ด า
อ ่ า น ไ ด้ ป ร ะ ม า ณ 2 0 0
พืน
้ สี ขาวอานได
่
้ประมาณ
800 ดัง นั้น จะได้ค่าเฉลี่ย
ใ น ก า ร เ ป รี ย บ เ ที ย บ
ประมาณ (200+800)/2
= 500
195
196
กำรทดสอบใช้งำนโมดูล
GP2D120
กำรต่อใช้งำนกับ IPST
197
MicroBOX
ส ำหรับ โมดูล วัดระยะทำง GP2D120
จัดว่ำเป็ นเซนเซอร์ชนิดอะนำลอกซึ่ งจะให้
ค่ ำที่ แปรตำมระยะทำงจำกวัตถุเป้ ำหมำย
ดั ง นั ้ น ในกำรต่ อ ใช้ ง ำนควรต่ อ ใช้ ง ำน
ร่วมกับพอร์ต A (พอร์ต PA0 - PA7) และ
กำรทดลองที่ 20
กำรเชื
่
อ
มต่
อ
ทำงฮำร์
ด
แวร์
(GP2D120)
ต่อโมดูล GP2D120 เข้ำกับพอร์ต PA4
198
โปรแกรมกำรทดลองที่ 20
(distance_01.c)
ทดสอบอ่ำนค่ำระยะทำงจำกโมดูลวัดระยะทำง
#include <sleep.h>
#include <lcd.h>
ทดสอบเอำวัตถุสีโปร่ ง
#include <gp2d120_lib.h>
แสงเช่นสีขำว(หรืออำจ
GP2D120
void main()
ใช้มือ) มำวำงด้ำนหน้ ำ
{
โ ม ดู ล GP2D120
unsigned int dist;
ในช่ ว งระยะ 4 ถึ ง 32
while(1)
เซนติเมตร โดยอำจใช้
{
dist = getdist(4);
ไม้บรรทัดเป็ นตัวเที ยบ
lcd("Distance = %d cmในกำรทดสอบไปด้
",dist);
วย
sleep(200);
}
}
199
กำรทดลองที่ 21
กำรเชื
่อมต่อทำงฮำร์ดแวร์
(GP2D120)
1. ต่อ โมดูล GP2D120 เข้ำกับพอร์ต PA4
2. ต่อ ZX-SPEAKER เข้ำกับพอร์ต PB4
200
โปรแกรมกำรทดลองที่ ทดสอบเอำมื
21
อ มำวำง
201
ด้ ำ น ห น้ ำ โ ม ดู ล
(distance_02.c)
#include <sleep.h>
ในระยะห่
ำง 4
แจ้
งเตือ<lcd.h>
นด้วยเสียงเมื่อพบวัตถุเข้ำGP2D120
มำใกล้ในช่
วงระยะ
#include
#include <sound.h>
มำกกว่ำ 20 เซนติเมตร
<gp2d120_lib.h>
ิ
ถึ#include
ง
20 เซนต
เ
มตร
ห ลั ง จ ำ ก นั ้ น ค่ อ ย ๆ
void main()
{
unsigned int dist;
while(1)
{
dist = getdist(4);
lcd("Distance = %d cm
if(dist>=4 && dist<=20)
{
beep_b(4);
}
sleep(200);
}
}
เคลื่ อ นมื อ เข้ ำ มำใกล้
อย่ ำ งช้ ำ ๆจนกระทัง่ ถึ ง
ระยะ 20 เซนติเมตรหรือ
น้ อยกว่ ำ นั ้ น จะได้ ยิ น
",dist);
เ สี ย ง แ จ้ ง เ ตื อ น จ ำ ก
ลำโพงเปี ยโซ
202
กำรทดสอบใช้งำน
เซอร์โวมอเตอร์แบบ
มำตรฐำน
กำรเชื่อมต่อทำงฮำร์ดแวร์
203
ส ำหรับ เซอร์ โ วมอเตอร์ จ ัด ว่ ำ เป็ น
อุ ป กรณ์ เ อำต์ พุ ต ชนิ ดหนึ่ งที่ ผู้ ใ ช้ ง ำนที่
สำมำรถควบคุมกำรหมุนได้จำกกำรสังกำร
่
ด้วยโปรแกรม
ในกำรต่อใช้งำนจำเป็ นต้องต่อเข้ำกับ
ช่องขับเซอร์โวมอเตอร์ B0 ถึง B4 ซึ่งต่อใช้
กำรทดลองที่ 22-24
กำรเชื
่อมต่motor)
อทำงฮำร์ดแวร์
(servo
ต่อ เซอร์โวมอเตอร์ เข้ำกับพอร์ตเซอร์โว
B0
204
โปรแกรมกำรทดลองที่ 22
(servo_01.c)
#include <lcd.h>
#include <sleep.h>
#include <servo.h>
#include <in_out.h>
void main()
{
unsigned char pos=20;
while(1)
{
lcd("Position: %d ",pos);
servo(0,pos);
if(sw1()==0)
{
pos++; sleep(100);
}
if(sw2()==0)
{
pos--; sleep(100);
}
}
}
ทดสอบขับเซอร์โวมอเตอร์จท ำกช่
ด ส อ บอ
ปง
รั บ0
เ พิ่ ม ค่ ำ
ตำแหน่ งจำกสวิตช์ SW1
และลดค่ ำ ต ำแหน่ งจำก
สวิตช์ SW2 ตำมลำดับ
เ พื่ อ สั ง เ ก ต ผ ล ว่ ำ ค่ ำ
ตำแหน่ งต่ ำงๆ ของเซอร์
โวมอเตอร์
205
206
โปรแกรมกำรทดลองที่ 23 (servo_02.c)
ทดสอบขับเซอร์โวมอเตอร์ช่อง 0 หมุนไปมำระหว่ำงตำแหน่ ง 20
#include <lcd.h>
ิ
ิ
และ
60
ท
ศ
ทำงทุ
ก
ๆ
2
ว
นำที
#include <sleep.h>
#include <servo.h>
#include <in_out.h>
void main()
{
lcd("Press SW1");
sw1_press();
while(1)
{
servo(0,20);
sleep(2000);
servo(0,60);
sleep(2000);
}
}
โปรแกรมกำรทดลองที่ 24
(servo_03.c)
#include <lcd.h>
207
ทดสอบขั
เซอร์โวมอเตอร์ช่อง 0 ที่ตำแหน่ ง 60 นำน 5 วินำทีแล้ว
#include บ
<sleep.h>
#include <servo.h>
หยุ
ดกำรขับ
#include <in_out.h>
#define SERVO_MID 55
void main()
{
lcd("Press SW1");
sw1_press();
lcd("Servo Run");
servo(0,60);
sleep(5000);
servo_pause(0);
lcd("Servo Stop");
}