top of page
ใบงานที่ 4.5
การเขียนโปรแกรมอ่านค่าจากพอร์ตแอนาลอกและการใช้ PWM
การทดลองที่ 1
เขียนโปรแกรมควบคุมระดับความสว่างของ LED ที่ต่ออยู่ที่ขาพอร์ตดิจิทัล D9 ซึ่งเป็นขาที่สามารถส่งสัญญาณ PWM ออกมาได้ด้วยคาสั่ง analogWrite(pin,value) โดยควบคุมความสว่างด้วยโพเทนธิโอมิเตอร์ที่ต่ออยู่ที่ขาพอร์ตแอนาลอก A5 ค่าที่อ่านได้จะมีค่าอยู่ระหว่าง 0-1023 แต่ค่าที่ใช้ควบคุมดิวตี้ไซเคิลอยู่ระหว่าง
0-255 การดา เนินการลดค่าให้ใช้ค่าที่อ่านได้หารด้วย 4 ก่อนเอาไปใช้งาน
แบบที่ 1 ตรวจสอบค่าที่อ่านได้แบบค่าเดียวไม่เพิ่มช่วงตรวจสอบ
แปลงผังงานเป็นโปรแกรม จากผังงานสามารถเขียนเป็นโค้ดโปรแกรมควบคุม Arduino
ผังงาน จากโจทย์สามารถเขียนเป็นผังงานได้ดังนี้


แปลงผังงานเป็นโปรแกรม จากผังงานสามารถเขียนเป็นโค้ดโปรแกรมควบคุม Arduino
การทดลองที่ 2
เขียนโปรแกรมควบคุมความสว่างแก่ LED จานวน 2 ตัวที่อยู่ที่ขา D9, D10 ซึ่งเป็นขาที่สามารถส่งสัญญาณ PWM ได้ โดยใช้โพเทนธิโอมิเตอร์เป็นตัวปรับความสว่างโดยให้ LED ทั้งสองตัวมีความสว่างที่ตรงข้ามกัน โดยให้มีการแสดงค่าสัญญาณแอนาลอกที่อ่านได้จากขาที่ต่อโพเทนธิโอมิเตอร์ออกทางพอร์ตอนุกรมแสดงผลที่จอคอมพิวเตอร์
ผังงาน จากโจทย์สามารถเขียนเป็นผังงานได้ดังนี้


แปลงผังงานเป็นโปรแกรม จากผังงานสามารถเขียนเป็นโค้ดโปรแกรมควบคุม Arduino
งานที่ได้รับหมอบหมาย
1. เขียนโปรแกรมไฟวิ่ง LED 4 ตัว (กำหนดรูปแบบเอง)โดยให้สามารถปรับความเร็วในการวิ่งได้ด้วยโพเทนธิโอมิเตอร์ วงจรที่ใช้ทดลองเป็นดังรูป

int sensorPin = A3;
int ledPin = 5;
int led = 4;
int led2 = 3;
int led3 = 2;
int sensorValue = 0;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(led, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
Serial.begin(9600);
}
void loop() {
sensorValue = analogRead(sensorPin);
Serial.println(sensorValue);
Blinky(sensorValue);
}
void Blinky(int time) {
digitalWrite(ledPin, HIGH);
delay(time);
digitalWrite(ledPin, LOW);
delay(time);
digitalWrite(led, HIGH);
delay(time);
digitalWrite(led, LOW);
delay(time);
digitalWrite(led2, HIGH);
delay(time);
digitalWrite(led2, LOW);
delay(time);
digitalWrite(led3, HIGH);
delay(time);
digitalWrite(led3, LOW);
delay(time);
}
โค้ด Arduino
ใบงานที่ 4.6 การเขียนโปรแกรมรับสวิตช์ทางพอร์ตแอนาลอก
การทดลองที่ 1
เขียนโปรแกรมอ่านค่าแอนาลอกจากการกดสวิตช์แต่ละตัวโดยแสดงผลที่จอคอมพิวเตอร์ผ่านทางพอร์ตอนุกรม
แปลงผังงานเป็นโปรแกรม จากผังงานสามารถเขียนเป็นโค้ดโปรแกรมควบคุม Arduino


การทดลองที่ 2
เนื่องจากค่าที่อ่านจากการกดสวิตช์เข้ามาทางพอร์ตแอนาลอกมีโอกาสที่ตัวเลขจะแกว่งได้ ดังนั้นหากเขียนโปรแกรมโดยวิธีการตรวจสอบการเท่ากันของค่าที่กา หนดมีโอกาสจะคลาดเคลื่อนได้ทางแก้ปัญหาการแกว่งของค่าทาได้โดยเพิ่มช่วงในการตรวจสอบแทนที่จะตรวจสอบเพียงค่าเดียว การทดลองนี้เป็นการทดลองการกดสวิตช์ที่รับเข้ามาทางพอร์ตแอนาลอกและมีการเพิ่มช่วงในการตรวจสอบเป็น 30 ค่าและแสดงผลเป็นข้อความว่าสวิตช์ใดถูกกด
หมายเหตุ
ค่าที่ใช้ตรวจสอบจะต้องใช้ผลจากการทดลองในการทดลองที่ 1 สาหรับตัวอย่างการทดลองที่
2 สมมุติว่าได้ค่าดังรูปที่ 4.6-7 (สาหรับการทดลองจริงให้ใช้ค่าจริงที่ได้จากการทดลอง)


แปลงผังงานเป็นโปรแกรม จากผังงานสามารถเขียนเป็นโค้ดโปรแกรมควบคุม Arduino
แบบที่ 1 ตรวจสอบค่าที่อ่านได้แบบค่าเดียวไม่เพิ่มช ่วงตรวจสอบ

แบบที่ 2 ตรวจสอบค่าที่อ่านได้ชนิดเพิ่มช่วงตรวจสอบ

งานที่ได้รับหมอบหมาย
1. ปรับปรุงโปรแกรมในการทดลองที่ 2 โดยให้สามารถตรวจสอบการปล่อยคีย์ได้ด้วย และให้สวิตช์แต่ละตัวควบคุมการติดดับของ LED ดังนี้

bottom of page