วันอังคารที่ 14 พฤศจิกายน พ.ศ. 2560

Arduino - analogWrite( ) - Electronics Lab



analog Write()

คำอธิบาย

     เขียนค่าอนาล็อกที่ขา (คลื่น PWMซึ่งสามารถทำให้แสงไฟ LED สว่างในหลายระดับ หรือ ขับมอเตอร์ด้วยความเร็วหลายระดับ หลังจากเรียกฟังก์ชัน analogWrite() ขานั้นจะสร้างคลื่นสี่เหลี่ยมอย่างต่อเนื่องซึ่งมีรอบการทำงานตามที่กำหนดไว้จนกว่าจะมีการเรียกฟังก์ชัน analogWrite() (หรือเรียก digitalRead() หรือ digitalWrite() บนขาเดียวกันความถี่ของสัญญาณ PWM ที่ขาส่วนใหญ่จะอยู่ที่ประมาณ 490 เฮิร์ตซ์ ใน บอร์ด Uno และ ในบอร์ดที่คล้ายกัน ขาที่ และ มีความถี่ประมาณ 980 เฮิร์ตซ์ ขาที่ และ 11 บนบอร์ด Leonardo มีความถี่ประมาณ 980 เฮิร์ตซ์ เช่นกัน
     ในบอร์ด Arduino ส่วนใหญ่ (ATmega168 หรือ ATmega328) ฟังก์ชันนี้ทำงานบนขา 3, 5, 6, 9, 10, และ 11 ในบอร์ด Arduino Mega จะทำงานบนขา 2-13 และ 44 - 46 บอร์ด Arduino ที่เก่ากว่าที่มี ATMega8 จะรองรับ เฉพาะ analogWrite() บนขา 9, 10, และ 11
บอร์ด Arduino Due รองรับ analogWrite() บนขา ถึง 13 และยังมีขาสำหรับ DAC0 และ DAC1 ซึ่งแตกต่างจากขา PWM ขา DAC0 และ DAC1 เป็นตัวแปลงดิจิตอลเป็นอนาล็อก และ ทำหน้าที่เป็นเอาต์พุตเป็นแบบอนาล็อก
     ไม่จำเป็นต้องเรียกใช้ฟังก์ชัน pinMode() เพื่อการตั้งค่าขาให้เป็นเอาต์พุต ก่อนการเรียกใช้งานฟังก์ชันanalogWrite() ฟังก์ชัน analogWrite ไม่มีการทำงานร่วมกับขาอนาล็อก หรือ ฟังก์ชัน analogRead
การใช้งาน
analogWrite(pin, value)

พารามิเตอร์

pin: ขาที่จะเขียนลงไป
value: รอบการทำงานระหว่าง 0 (ปิดตลอดถึง 255 (เปิดตลอดเวลา)

ค่าที่ส่งกลับ

ไม่มี

ข้อสังเกต และ ปัญหาที่พบเจอ

เอาต์พุต PWM สร้างขึ้นบนขา และ จะมีรอบสูงกว่าที่คาดไว้ นี้เป็นเพราะการปฏิสัมพันธ์ของฟังก์ชั่น millis() และ delay() ที่ใช้เวลาภายในร่วมกัน เพื่อสร้างเอาต์พุต PWM จะสังเกตได้ส่วนใหญ่ในการตั้งค่ารอบของวงจรต่ำ (เช่น 0 - 10) และอาจส่งผลให้ค่าเอาต์พุต ที่ขา และ ไม่ปิดการทำงาน

ตัวอย่าง

ตั้งค่าเอาต์พุต LED ตามสัดส่วนค่าที่อ่านจากตัวต้านทานปรับค่าได้
int ledPin = 9;         // LED ต่อที่ขาดิจิตอล 9
int analogPin = 3;   // ตัวต้านทานปรับค่าได้ต่อขาอนาล็อก 3         
int val = 0;              // ตัวแปรเก็บค่าที่อ่านได้
void setup()
{
  pinMode(ledPin, OUTPUT);   // ตั้งค่าขาเป็นเอาต์พุต
}

void loop()
{
  val = analogRead(analogPin);   // อ่านค่าขาอินพุต
  analogWrite(ledPin, val / 4);  // ค่า analogRead มีค่าเริ่มจาก 0-1023  analogWrite ค่าเริ่มจาก 0-255

}

ไม่มีความคิดเห็น:

แสดงความคิดเห็น