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 ดังนี้

© 2023 by Skyline

Proudly created with Wix.com

bottom of page