การเขยนโปรแกรมบน IPST-
MicroBOX
นายยอดชาย ขนสงวาลยโรงเรยนสงวนหญง
เนอหา• แผงวงจรควบคมหลก• เครองมอพฒนาโปรแกรมบน MicroBOX
• การเชอมตอกบพซ• การดาวนโหลดโปรแกรม• แผงวงจรอนพท/เอาพทและการใชงาน
การเตรยมตว
• ตดตงโปรแกรม AVR Studio 4
• ตดตงโปรแกรม WinAVR
• ตดตงโปรแกรม PonyProg2000
โปรแกรม AVR Studio
• เปนเครองมอหลกในการพฒนาโปรแกรมบนไมโครคอลโทรเลอรตระกล AVR
• คณสมบตหลก ๆ ▫ เครองมอส าหรบจดการโครงงาน▫ เอดเตอรเพอแกไขซอรสไฟล▫ เครองมอจ าลองการท างานของไมโครคอลโทรเลอร
โปรแกรม WinAVR• คอมไพเลอรภาษา C เพอแปลโปรแกรมทเขยนส าหรบสถาปตยกรรม AVR
• ถกเรยกใชงานผานโปรแกรม AVR Studio
ทดลองสรางโปรเจคใหม
• เลอก New Project หลงจากเรยกโปรแกรม AVR Studio
กลองสรางโปรเจค• Project type: AVR GCC
• Project name: Counting• เลอก Location ตามความเหมาะสม
หนาจอหลกของ AVR Studio
รายชอไฟลท
เกยวของ
เอดเตอรภาษา C
กลองรายงานผลการ
คอมไพลโปรแกรม
การปรบแตงคาในโปรเจค
• โปรเจคทสรางขนใหมตองผานการปรบคาตาง ๆ กอนเรมพฒนาโปรแกรม• เลอกเมน Project Configuration Options
การปรบแตงในสวน General
atmega16
16000000
เชคทงหมด
การปรบแตงในสวน Include
Directories
กด Add เพอเพมไดเรคตอร
ipst_include ลงไป
การปรบแตงในสวน Libraries
•ปรบแตงเฉพาะเมอตองการใชงานไฟลเฮดเดอร lcd.h และ/หรอ serial.h
เพมไลบราร libm.a
ชดค าสงในไลบราร IPST
• in_out.h – รวมค าสงพนฐานเพอจดการอนพทเอาทพท• sleep.h – รวมค าสงหนวงเวลาเปนมลลวนาท• led.h – รวมค าสงแสดงผลขอมลบนแถว LED 8 ดวง• segment.h – รวมค าสงแสดงผลขอมลบน LED แบบ 7 สวน• timer.h – รวมค าสงจบเวลา• analog.h - รวมค าสงอานคาอนพทแบบแอนะลอก• sound.h – รวมค าสงสงสญญาณเสยงออกทางล าโพงเปยโซ• motor.h – รวมค าสงควบคมมอเตอรไฟตรง
แผงวงจรแสดงผลตวเลข 4 หลก
• เปนอปกรณหลกในการแสดงผล•การเชอมตอทางฮารดแวร
▫ เสยบจมเปอรดานลางในต าแหนง COMMON CONTROL ชดแสดงผล
LED 8 ดวง
อปกรณแสดงผล
7 สวน 4 หลก
PORTC
PB1
PB2
PB3
PB4
PORT
DIGIT1
DIGIT2
DIGIT3
DIGIT4
แผงวงจรหลก แผงวงจรแสดงผล
PB0 LED
ตวอยาง - โปรแกรมนบเลข#include <avr/io.h>
#include <in_out.h>
#include <segment.h>
#include <sleep.h>
void main()
{
uint16_t i = 0;
while (1)
{
sleep(1000);
segment(i++);
if (i > 10) i = 0;
}
}
โปรแกรม PonyProg2000
• ใชส าหรบสงโปรแกรมทอยในรหสภาษาเครองไปยงไมโครคอนโทรลเลอร
• ตดตอผานพอรตแบบขนาน• โปรแกรมจะถกเขยนลงบนหนวยความจ าแบบแฟลชทอยภายในไมโครคอนโทรลเลอร
ปรบแตงคาใน PonyProg2000
• Setup Interface Setup▫ Parallel, Avr ISP I/O, LPT1
• Device AVR micro ATmega16
การเชอมตอกบพซ
ดานหลงของเครองคอมพวเตอร
เคลยรบต JTAGEN
สรปขนตอนการพฒนาโปรแกรมAVR Studio
ไฟล .c WinAVRไฟล
.hexPonyProg2000
เฉลย - โปรแกรมนบเลขถอยหลง#include <avr/io.h>
#include <in_out.h>
#include <segment.h>
#include <sleep.h>
void main()
{
int16_t i = 20;
while (1)
{
sleep(1000);
segment(i--);
if (i < 0) i = 20;
}
}
ใหแนใจวาไมใชตวแปร
แบบ unsigned
อปกรณแสดงผลพนฐาน
• แผงวงจรแสดงผล 4 หลก
• ไลบราร segment.h ชดแสดงผล
LED 8 ดวง
อปกรณแสดงผล
7 สวน 4 หลก
ชดค าสงส าหรบวงจรแสดงผล
• ไฟลเฮดเดอรทใช▫ avr/io.h, in_out.h, segment.h
• ค าสงในไลบราร▫ segment(x) – น าคา x มาแสดงผลเปนตวเลข 4 หลก▫ segment_dot(d) – ก าหนดจดในต าแหนง d ไดแก 1 (ขวา), 2,3,4
(ซาย)▫ segment_off() – ปดการแสดงผลขอมลของ LED 7 สวน▫ led8(d) – แสดงคา d บนแถว LED ในรปเลขฐานสอง▫ led8_off() – ก าหนดใหแถว LED อยในสถานะดบ
sleep - ค าสงหนวงเวลา
•อยในไฟลเฮดเดอร sleep.h
•การใชงาน▫ sleep(m) – หนวงเวลา m มลลวนาท
(โดยประมาณ)
เครองตงเวลาหนงนาท
• สรางโปรเจคใหม: Timer
• ให MicroBOX ท างานเปนนาฬกาจบเวลา 1 นาท▫ แสดงเลข 60 เมอเปดเครอง นบถอยหลงทกวนาท▫ นบถงศนยใหหนาจอดบไป
เฉลย - Timer#include <avr/io.h>
#include <in_out.h>
#include <segment.h>
#include <sleep.h>
void main()
{
int16_t i = 60;
while (i >= 0)
{
segment(i--);
sleep(1000);
}
segment_off();
while (1) { }
}
เพมสสนใหไทเมอร
• ท าใหจดซายมอกระพรบทก ๆ ครงวนาทเมอเวลายงเดนอย
เฉลย – Timer ไฟกระพรบ#include <avr/io.h>
#include <in_out.h>
#include <segment.h>
#include <sleep.h>
void blink()
{
while (1)
{
segment(0);
sleep(500);
segment_off();
sleep(500);
}
}
void main()
{
int16_t i = 60;
while (i >= 0)
{
segment(i--);
segment_dot(1);
sleep(500);
segment_dot(0);
sleep(500);
}
blink();
}
ตวอยาง – ใชงานแถว LED#include <avr/io.h>
#include <in_out.h>
#include <segment.h>
#include <sleep.h>
void main()
{
uint8_t i = 0;
while (1)
{
led8(i);
i++;
sleep(100);
}
}
แบบฝกหด - ไฟวงหลายแบบ• เขยนโปรแกรมไฟวงในรปแบบตาง ๆ
1.
2.
3.
4.
5.
6.
7.
8.
1.
2.
3.
4.
5.
6.
7.
8.
แบบท 1 แบบท 2
ไฟวงหลายรปแบบ
• แบบทสาม 1.
2.
3.
5.
6.
7.
4.
เฉลย - ไฟวงแบบทหนง#include <avr/io.h>
#include <in_out.h>
#include <segment.h>
#include <sleep.h>
void main()
{
uint8_t i = 0b10000000;
while (1)
{
led8(i);
i = i >> 1;
if (i == 0) i = 0b10000000;
sleep(100);
}
}
เฉลย - ไฟวงแบบทสอง#include <avr/io.h>
#include <in_out.h>
#include <segment.h>
#include <sleep.h>
void main()
{
uint8_t i = 0b11000000;
while (1)
{
led8(i);
i = i >> 1;
if (i == 0b00000001) i = 0b10000001;
if (i == 0b01000000) i = 0b11000000;
sleep(100);
}
}
เฉลย - ไฟวงแบบทสอง (อกแบบ)#include <avr/io.h>
#include <in_out.h>
#include <segment.h>
#include <sleep.h>
void main()
{
uint8_t i = 0b10000000, j = 0b01000000;
while (1)
{
led8(i | j);
i = i >> 1; j = j >> 1;
if (i == 0) i = 0b10000000;
if (j == 0) j = 0b10000000;
sleep(100);
}
}
เฉลย - ไฟวงแบบทสาม#include <avr/io.h>
#include <in_out.h>
#include <segment.h>
#include <sleep.h>
void main()
{
uint8_t i = 0b10000000, j = 0b00000001;
while (1)
{
led8(i | j);
i = i >> 1; j = j << 1;
if (i == 0) i = 0b10000000;
if (j == 0) j = 0b00000001;
sleep(100);
}
}
สวตชกดตดปลอยดบ
• เปนอปกรณอนพทแบบดจตอล• เชอมตอกบพอรตไดทกพอรต ยกเวนพอรต C
ค าสงอนพทเอาทพทแบบดจตอล
• ไฟลเฮดเดอรทใช▫ avr/io.h, in_out.h
• ค าสงในไลบราร▫ in_a(p) – อานคาดจตอลอนพทจากพอรต A ขา p▫ in_b(p) – อานคาดจตอลอนพทจากพอรต B ขา p▫ in_c(p) – อานคาดจตอลอนพทจากพอรต C ขา p▫ in_d(p) – อานคาดจตอลอนพทจากพอรต D ขา p▫ out_a(p,d) – สงคา d (0 หรอ 1) ไปยงขา p ของพอรต A
▫ out_b(p,d) – สงคา d (0 หรอ 1) ไปยงขา p ของพอรต B
▫ out_c(p,d) – สงคา d (0 หรอ 1) ไปยงขา p ของ
แบบฝกหด - เครองออกหวย
• กดสวตชคางเพอท าการวนสมตวเลข• ปลอยสวตชเพอแสดงตวเลขทสมได
กดสวตชคาง
ปลอย
เฉลย - เครองออกหวย#include <avr/io.h>
#include <in_out.h>
#include <segment.h>
void main()
{
uint16_t i = 0;
while (1)
{
if (in_d(7) == 1)
{
i++;
if (i > 9999) i = 0;
}
segment(i);
}
}
#include <avr/io.h>
#include <in_out.h>
#include <segment.h>
void main()
{
uint16_t i = 0;
while (1)
{
if (in_d(7) == 1)
{
i = random() % 10000;
}
segment(i);
}
}
หรอ
แผงวงจรแสดงผล LED สองส
• เปนอปกรณเอาทพทแบบดจตอล• เชอมไดกบทกพอรต ยกเวนพอรต C
เปดปด LED ดวยสวตช
• ท าใบงานท 4.2
• กดสวตชแลวปลอยหนงครง ใหไฟ (LED) ตด• กดแลวปลอยอกครง ใหไฟดบ
เฉลย – เปดปด LED ดวยสวตช#include <avr/io.h>
#include <in_out.h>
#include <segment.h>
void main()
{
out_d(6, 0);
while (1)
{
while (in_d(7) == 0) {}
toggle_d(6);
while (in_d(7) == 1) {}
}
}
LED ตออยกบ D6
สวตชตอกบ D7
ตวอยาง - ควบคมไฟดวยสวตช• เชอมวงจร LED สองสเขากบ PD6• เชอมวงจรสวตชชอง HIGH เขากบ PD7
• ขอควรระวง▫ อยาใชหวตอบนแผงวงจร LED สองสพรอมกนทงค
#include <avr/io.h>
#include <in_out.h>
void main()
{
while (1)
{
if (in_d(7) == 1)
out_d(6,1);
else
out_d(6,0);
}
}
#include <avr/io.h>
#include <in_out.h>
void main()
{
while (1)
{
out_d(6,in_d(7));
}
}
หรอ
ตวอยาง - เครองนบเลขดวยการกด• นบจ านวนครงการกดสวตชและแสดงผลออกทาง LED 7 สวน
• ทดลองใชงานและสงเกตวาตวเลขปรากฏตามจ านวนครงทกดจรงหรอไม
#include <avr/io.h>
#include <in_out.h>
#include <segment.h>
void main()
{
uint16_t i = 0;
while (1)
{
while (in_d(7) == 0){}
while (in_d(7) == 1){}
i++; segment(i);
}
}
sleep(10);
sleep(10);
#include <sleep.h>
Contact Bouncingลอจก
เวลา
1
0
จงหวะทสวตชถกกด (หรอปลอย)
การสรางค าสงตรวจสอบสวตช
• สรางเปนมาโคร▫ เขยนไวกอน main()
• สรางเปนฟงกชน
#define wait_d(x) \
while (in_d(x) == 0){} sleep(10); \
while (in_d(x) == 1){} sleep(10);
void wait_d(uint8_t x)
{
while (in_d(x) == 0){} sleep(10);
while (in_d(x) == 1){} sleep(10);
}
วงจรล าโพงเปยโซ• ใชงานรวมกบชดค าสงในไลบราร sound.h
• ไฟลเฮดเดอรทใช▫ avr/io.h, in_out.h, sound.h
• ค าสงในไลบราร▫ beep_a(p) – ก าเนดเสยงความถ 2000Hz นาน 10 ms ทขา p ของพอรต A (ใชกบพอรต B, C และ D ไดเชนกนโดยใช beep_b, ฯลฯ)
▫ sound_a(p, f, t) – ก าเนดเสยงความถ fHz นาน tมลลวนาททขา p ของพอรต A (ใชกบพอรตอนไดเชนกนโดยใช sound_b, ฯลฯ)
ตวอยาง - ประตเซเวน#include <avr/io.h>
#include <in_out.h>
#include <sleep.h>
#include <sound.h>
void main()
{
while (1)
{
if (in_d(7) == 1)
{
sound_d(5, 659, 500);
sound_d(5, 523, 500);
}
}
}
ล ำโพงตอเขำทพอรต PD5
ตวรบแสงอนฟราเรด 38kHz
• เปนอปกรณรบขอมลดจทล• ใหโลจก ‘0’ ถาตรวจจบคลนอนฟราเรดยานความถ 38kHz ได
สญญาณดจทลและสญญาณแอนะลอก
สญญาณดจทล
สญญาณแอนาลอก
0
1
อำนอนพทแบบ
ดจทล
อำนอนพทแบบ
แอนำลอก
0
1
0
1023
การใชงานอปกรณแบบแอนะลอก
• Mega16 มวงจรแปลงสญญาณอะนาลอกเปนดจตอลภายในตว▫ ใชงานผานพอรต PA0 – PA7▫ ความละเอยด 10 บต (0-1023)
• อปกรณแอนะลอกทมให▫ วงจรตรวจจบแสงสวาง, แสงอนฟราเรด▫ วงจรตรวจจบเสยง▫ วงจรตรวจจบแสงสะทอน▫ วงจรตวตานทานปรบคาได▫ วงจรตรวจจบอณหภม
วงจรตรวจจบแสงสวาง
ชดวงจรตรวจจบแสงอนฟราเรด•ตวก าเนดแสงอนฟราเรด (เอาทพท)
• โฟโตทรานซสเตอรอนฟราเรด (อนพท)▫ แสงมากใหคานอย
วงจรจบแสงสะทอน
• แสงมากใหคานอย
วงจรรบเสยง
• เสยงดงใหคามาก
วงจรวดอณหภม
อณหภมสงข นใหคานอยลง
อณหภมสงข นใหคามากข น
วงจรตวตานทานปรบคาได
เลอนมาทางขวาไดคามากข น
เลอนไปทางซายไดคามากข น
ค าสงอานคาแอนะลอก
• ไฟลเฮดเดอรทใช▫ avr/io.h, analog.h
• ค าสงในไลบราร มเพยงค าสงเดยวคอ▫ analog(ch) – คนคาระหวาง 0 ถง 1023 เพอบงบอกระดบแรงดน
(สญญาณแอนะลอก) ทวดไดทขา ch ของพอรต A
โปรแกรมทดสอบอปกรณแอนะลอก
• ตอตวตานทานแกนเลอนเขาทพอรต PA0
• ทดสอบโปรแกรมตอไปน#include <avr/io.h>
#include <in_out.h>
#include <segment.h>
#include <analog.h>
void main()
{
while(1) segment(in_a(0));
}
จากนนเปลยนเปน
ค าสง analog(0)
ตวอยาง - แขงปรบมอ
• ตอไมโครโฟนเขาทพอรต PA0
• ปรบมอจากระยะหางระยะหนงโดยท าใหตวเลขมากกวาเดมใหได#include <avr/io.h>
#include <in_out.h>
#include <segment.h>
#include <analog.h>
void main()
{
uint16_t aval, max = 0;
while(1)
{
aval = analog(0);
if (aval > max) max = aval;
segment(max);
}
}
แบบฝกหด - เปดปดไฟดวยแสง
• จ าลองการควบคมไฟภายในบานดวยแสง• ฮารดแวรทใช: แผงวงจร LED สองส, แผงวงจรวดแสง, ตวตานทานปรบคาได
•การท างาน:▫ สวาง LED ดบ▫ มด LED ตด▫ ก าหนดความไวดวยวงจรความตานทานปรบคาได
เฉลย - เปดปดไฟดวยแสง#include <avr/io.h>
#include <in_out.h>
#include <analog.h>
void main()
{
while(1)
{
if (analog(0) > analog(1))
out_a(5,1);
else
out_a(5,0);
}
}
ตอตววดแสงท PA0 (แสงนอยคามาก)
ตอตวตานทานท PA1
ตอ LED ท PA5 ชอง HIGH
แบบฝกหด - เปดปดไฟดวยเสยง
• เปดปดไฟโดยใชวธปรบมอ• ฮารดแวรทใช: LED สองส, วงจรรบเสยง, ตวตานทานปรบคาได• การท างาน:
▫ ปรบครงแรกใหไฟ (LED) ตด▫ ปรบอกครงใหไฟ (LED) ดบ▫ ใชตวตานทานปรบคาไดก าหนดความไว
เฉลย - เปดปดไฟดวยเสยง#include <avr/io.h>
#include <in_out.h>
#include <analog.h>
#include <sleep.h>
void main()
{
out_a(5,0); // initially on
while(1)
{
if (analog(0) > analog(1))
{
toggle_a(5);
sleep(1000);
}
}
}
ตอไมโครโฟนท PA0
ตอตวตานทานท PA1
ตอ LED ท PA5 ชอง HIGH
แบบฝกหด – นบคนเขาราน
• จ าลองอปกรณตรวจจบคนเดนเขาหนาราน• เมอคนเดนผานใหเพมคาบน 7-Segment (พรอมนงหนอง)
• เลอกใชตววดตามสมควร▫ ตววดแสง + ไฟฉาย▫ ตววดอนฟราเรด + LED แบบอนฟราเรด▫ ตววดแสงสะทอน▫ ตววดเสยง▫ ตววดอณหภม ???
เฉลย - นบคนเขาราน#include <avr/io.h>
#include <in_out.h>
#include <segment.h>
#include <analog.h>
#include <sleep.h>
#include <sound.h>
void main()
{
uint16_t count = 0;
segment(count); out_d(7, 1);
while (1)
{
while (analog(0) < 100) {} sleep(10);
while (analog(0) > 100) {} sleep(10);
count++; segment(count);
sound_d(5, 659, 500);
sound_d(5, 523, 1000);
}
}
ตอ IR LED ท PD7
ตอตวรบ IR ท PA0 (แสงมากคานอย)
ตอล าโพงท PD5
แผงวงจรควบคมมอเตอรไฟตรง
• การเชอมตอกบแผงวงจรหลก- +
- + - +
OUT2 OUT1
PWM2
DIR2A
DIR2B
PWM1
DIR1A
DIR1B
- +
PD4
PD2
PD3
+Vm
แผงวงจรควบคมมอเตอร แผงวงจรหลก
DC In/Out
ค าสงควบคมมอเตอรไฟตรง
• ไฟลเฮดเดอรทใช▫ avr/io.h, in_out.h, motor.h
•ค าสงในไลบราร▫ motor(ch, pwr) – ขบมอเตอรชอง ch ดวยก าลง pwr%
▫ motor_stop(ch) – หยดมอเตอรชอง chหรอใช motor_stop(ALL) เพอหยดมอเตอรทงค
ทดสอบการท างานของมอเตอร#include <avr/io.h>
#include <in_out.h>
#include <motor.h>
#include <sleep.h>
void main()
{
motor(1, 50); // เดนหนำ 50%
sleep(10000);
motor(1, 100); // เดนหนำ 100%
sleep(10000);
motor(1, -50); // ถอยหลง 50%
sleep(10000);
motor_stop(1); // หยด
while (1) {}
}
ตวอยาง - พดลมตดเพดาน
• กดสวตชครงแรกเปด กดอกทแรงขน กดอกทปด (ใช PD7)
#include <avr/io.h>
#include <in_out.h>
#include <motor.h>
#include <sleep.h>
uint8_t switch_d(uint8_t x)
{
if (in_d(x) == 1)
{
sleep(5); while (in_d(x) == 1) {}
sleep(5); return 1;
}
else return 0;
}
void main()
{
uint16_t power = 0;
while (1)
{
if (switch_d(7) == 1)
{
power = power + 33;
if (power > 100)
{
power = 0;
motor_stop(1);
}
motor(1, power);
}
}
}
แบบฝกหด - พดลมสมองกล
• จ าลองการท างานของพดลมดวยมอเตอร โดยปรบความแรงใหสอดคลองกบสภาพแวดลอม
• การท างาน:▫ ใชสวตชเพอเปดและปดเทานน▫ อากาศเยน (ต ากวา 25oC) พดลมหมนชา▫ อากาศรอนแตมด พดลมหมนปานกลาง▫ อากาศรอนและสวาง พดลมหมนเรว
ประตเลอนอตโนมต
แหลงก าเนดแสงอนฟราเรดตวตรวจจบแสง
อนฟราเรด
มอเตอรเลอนบานประต
กลองควบคม
รเลย (Relay)
ขดลวดแมเหลกไฟฟา
หนาสมผส
สปรง
จดตอสญญาณควบคม
จดตอกบอปกรณไฟฟา
แผงวงจรควบคมรเลย
• ใชควบคมอปกรณไฟฟาภายนอก โดยเฉพาะพวกทตองใชกบแรงดนหรอกระแสสง ๆ
ภายในรเลยและการใชงาน• การท างาน
• การตอใชงานกบอปกรณภายนอก
ปอนกระแสขบรเลย ตอเขากบอปกรณ
ไฟฟาภายนอก
NC = Normally Closed
NO = Normally Open
C = Common
ตวอยางการเชอมตอแผงควบคมรเลย• ชอง RELAY-n แตละชองสามารถตอกบพอรตใดกได ยกเวนพอรต C
• ทดลองสงลอจก 1 และ 0 ไปท PD0
- +
NC
C
NO
RELAY-1
- +
PD0
-12V+
แผงวงจรควบคมรเลย แผงวงจรหลก
DC In/Out
แบบฝกหด - เปดปดไฟดวยแสง
• จ าลองการควบคมไฟภายในบานดวยแสง (เหมอนแบบฝกหดกอนหนา)
• ฮารดแวรทใช: หลอดไฟ, แผงวงจรวดแสง, ตวตานทานปรบคาได, แผงวงจรควบคมรเลย
•การท างาน:▫ สวาง หลอดไฟดบ▫ มด หลอดไฟตด▫ ก าหนดความไวดวยวงจรความตานทานปรบคาได
แบบฝกหด - โรงเรอนอจฉรยะ
• สรางระบบปรบอากาศใหโรงเลยงสตว• แบบจ าลอง
▫ หลอดไฟ (จรง ๆ) แทนฮตเตอรใหความอบอน▫ มอเตอร แทนปมน าใหความเยน
• การท างาน▫ ควบคมอณหภมใหอยในชวง 20-30oC▫ หากรอนเกนไปใหเปดปมน า▫ หากเยนเกนไปใหเปดฮตเตอร
ค านวณคาแรงดน
• จากกราฟคณสมบตของเทอรมสเตอร▫ อณหภม 20oC ไดความตานทานประมาณ 12k
▫ อณหภม 30oC ไดความตานทานประมาณ 8k
• ใชสตร
• ได Dlow = 558, Dhigh = 455
D
DRt
1023
10
t
t
R
RD
10
1023
เฉลย - โรงเรอนอจฉรยะ#include <avr/io.h>
#include <in_out.h>
#include <sleep.h>
#include <motor.h>
#include <analog.h>
#define LOW 558
#define HIGH 455
void main()
{
uint16_t temp;
ตอตววดอณหภมท PA0
ตอรเลยท PD0
while (1)
{
temp = analog(0);
if (temp > LOW) // too cold
{
out_d(0, 1);
motor_stop(1);
}
else if (temp < HIGH) // too hot
{
out_d(0, 0);
motor(1, 100);
}
else
{
out_d(0, 0);
motor_stop(1);
}
}
}