Arduino - ฟังก์ชั่น I / O
หมุดบนบอร์ด Arduino สามารถกำหนดค่าเป็นอินพุตหรือเอาต์พุตได้ เราจะอธิบายการทำงานของพินในโหมดเหล่านั้น สิ่งสำคัญคือต้องสังเกตว่าพินอะนาล็อก Arduino ส่วนใหญ่อาจได้รับการกำหนดค่าและใช้งานในลักษณะเดียวกับพินดิจิทัล
พินที่กำหนดค่าเป็น INPUT
โดยค่าเริ่มต้นหมุด Arduino ได้รับการกำหนดค่าเป็นอินพุตดังนั้นจึงไม่จำเป็นต้องประกาศอย่างชัดเจนว่าเป็นอินพุตด้วย pinMode()เมื่อคุณใช้เป็นอินพุต พินที่กำหนดค่าด้วยวิธีนี้จะกล่าวได้ว่าอยู่ในสถานะที่มีความต้านทานสูง พินอินพุตสร้างความต้องการเพียงเล็กน้อยในวงจรที่พวกเขากำลังสุ่มตัวอย่างเทียบเท่ากับตัวต้านทานแบบอนุกรม 100 เมกะโอห์มที่ด้านหน้าของพิน
ซึ่งหมายความว่าต้องใช้กระแสน้อยมากในการเปลี่ยนพินอินพุตจากสถานะหนึ่งไปยังอีกสถานะหนึ่ง สิ่งนี้ทำให้พินมีประโยชน์สำหรับงานต่างๆเช่นการใช้เซ็นเซอร์สัมผัสแบบ capacitive หรืออ่าน LED เป็นโฟโตไดโอด
พินที่กำหนดค่าเป็น pinMode (พิน, อินพุต) โดยไม่มีอะไรเชื่อมต่อกับพวกมันหรือมีสายไฟที่เชื่อมต่อกับพวกมันที่ไม่ได้เชื่อมต่อกับวงจรอื่นรายงานการเปลี่ยนแปลงที่ดูเหมือนสุ่มในสถานะพินรับสัญญาณรบกวนทางไฟฟ้าจากสภาพแวดล้อมหรือการเชื่อมต่อแบบ capacitively สถานะ ของพินใกล้เคียง
ตัวต้านทานแบบดึงขึ้น
ตัวต้านทานแบบดึงขึ้นมักมีประโยชน์ในการบังคับขาอินพุตไปยังสถานะที่ทราบหากไม่มีอินพุตอยู่ สามารถทำได้โดยการเพิ่มตัวต้านทานแบบดึงขึ้น (ถึง + 5V) หรือตัวต้านทานแบบดึงลง (ตัวต้านทานต่อกราวด์) บนอินพุต ตัวต้านทาน 10K เป็นค่าที่ดีสำหรับตัวต้านทานแบบดึงขึ้นหรือแบบดึงลง
ใช้ตัวต้านทานแบบดึงขึ้นในตัวพร้อมพินที่กำหนดค่าเป็นอินพุต
มีตัวต้านทานแบบดึงขึ้น 20,000 ตัวที่ติดตั้งอยู่ในชิป Atmega ที่สามารถเข้าถึงได้จากซอฟต์แวร์ ตัวต้านทานแบบดึงขึ้นในตัวเหล่านี้สามารถเข้าถึงได้โดยการตั้งค่าpinMode()เป็น INPUT_PULLUP สิ่งนี้จะเปลี่ยนพฤติกรรมของโหมด INPUT ได้อย่างมีประสิทธิภาพโดยที่ HIGH หมายถึงเซ็นเซอร์ปิดอยู่และ LOW หมายความว่าเซ็นเซอร์เปิดอยู่ ค่าของการดึงขึ้นนี้ขึ้นอยู่กับไมโครคอนโทรลเลอร์ที่ใช้ บนบอร์ดที่ใช้ AVR ส่วนใหญ่จะรับประกันว่าค่าอยู่ระหว่าง20kΩถึง50kΩ บน Arduino Due อยู่ระหว่าง50kΩถึง150kΩ สำหรับค่าที่แน่นอนโปรดดูแผ่นข้อมูลของไมโครคอนโทรลเลอร์บนบอร์ดของคุณ
เมื่อเชื่อมต่อเซ็นเซอร์กับพินที่กำหนดค่าด้วย INPUT_PULLUP ปลายอีกด้านหนึ่งควรเชื่อมต่อกับกราวด์ ในกรณีของสวิตช์ธรรมดาจะทำให้พินอ่าน HIGH เมื่อสวิตช์เปิดอยู่และ LOW เมื่อกดสวิตช์ ตัวต้านทานแบบดึงขึ้นให้กระแสไฟเพียงพอที่จะทำให้ไฟ LED สลัวที่เชื่อมต่อกับพินที่กำหนดค่าเป็นอินพุต หากไฟ LED ในโปรเจ็กต์ดูเหมือนจะใช้งานได้ แต่มีแสงสลัวมากก็เป็นไปได้ว่าจะเกิดอะไรขึ้น
การลงทะเบียนเดียวกัน (ตำแหน่งหน่วยความจำชิปภายใน) ที่ควบคุมว่าพินสูงหรือต่ำควบคุมตัวต้านทานแบบดึงขึ้น ดังนั้นพินที่กำหนดค่าให้เปิดตัวต้านทานแบบดึงขึ้นเมื่อพินอยู่ในโหมด INPUT จะมีการกำหนดค่าพินเป็น HIGH หากพินถูกเปลี่ยนเป็นโหมดเอาท์พุทด้วย pinMode () สิ่งนี้ทำงานในทิศทางอื่นเช่นกันและขาเอาต์พุตที่อยู่ในสถานะสูงจะมีชุดตัวต้านทานแบบดึงขึ้นหากเปลี่ยนเป็นอินพุตด้วย pinMode ()
Example
pinMode(3,INPUT) ; // set pin to input without using built in pull up resistor
pinMode(5,INPUT_PULLUP) ; // set pin to input using built in pull up resistor
พินกำหนดค่าเป็น OUTPUT
พินที่กำหนดค่าเป็น OUTPUT ด้วย pinMode () ถูกกล่าวว่าอยู่ในสถานะอิมพีแดนซ์ต่ำ ซึ่งหมายความว่าสามารถจ่ายกระแสให้กับวงจรอื่น ๆ ได้เป็นจำนวนมาก พิน Atmega สามารถจ่ายกระแสไฟฟ้า (ให้กระแสบวก) หรือจม (ให้กระแสลบ) ได้ถึง 40 mA (มิลลิแอมป์) ของกระแสไปยังอุปกรณ์ / วงจรอื่น ๆ นี่เป็นกระแสเพียงพอที่จะทำให้ LED สว่างขึ้น (อย่าลืมตัวต้านทานแบบอนุกรม) หรือเรียกใช้เซ็นเซอร์จำนวนมาก แต่กระแสไม่เพียงพอที่จะรันรีเลย์โซลีนอยด์หรือมอเตอร์
การพยายามเรียกใช้อุปกรณ์กระแสสูงจากพินเอาต์พุตอาจทำให้ทรานซิสเตอร์เอาต์พุตในพินเสียหายหรือทำลายชิป Atmega ทั้งหมดได้ บ่อยครั้งสิ่งนี้ส่งผลให้พิน "ตาย" ในไมโครคอนโทรลเลอร์ แต่ชิปที่เหลือยังทำงานได้อย่างเพียงพอ ด้วยเหตุนี้จึงเป็นความคิดที่ดีที่จะเชื่อมต่อพิน OUTPUT กับอุปกรณ์อื่น ๆ ผ่านตัวต้านทาน470Ωหรือ 1k เว้นแต่จะต้องใช้กระแสไฟฟ้าสูงสุดที่ดึงออกมาจากพินสำหรับแอพพลิเคชั่นเฉพาะ
pinMode () ฟังก์ชัน
ฟังก์ชัน pinMode () ใช้เพื่อกำหนดค่าพินเฉพาะให้ทำงานเป็นอินพุตหรือเอาต์พุต เป็นไปได้ที่จะเปิดใช้งานตัวต้านทานแบบดึงขึ้นภายในด้วยโหมด INPUT_PULLUP นอกจากนี้โหมด INPUT จะปิดการใช้งานพูลอัพภายในอย่างชัดเจน
pinMode () ไวยากรณ์ของฟังก์ชัน
Void setup () {
pinMode (pin , mode);
}
pin - จำนวนพินที่คุณต้องการตั้งค่าโหมด
mode - INPUT, OUTPUT หรือ INPUT_PULLUP
Example
int button = 5 ; // button connected to pin 5
int LED = 6; // LED connected to pin 6
void setup () {
pinMode(button , INPUT_PULLUP);
// set the digital pin as input with pull-up resistor
pinMode(button , OUTPUT); // set the digital pin as output
}
void setup () {
If (digitalRead(button ) == LOW) // if button pressed {
digitalWrite(LED,HIGH); // turn on led
delay(500); // delay for 500 ms
digitalWrite(LED,LOW); // turn off led
delay(500); // delay for 500 ms
}
}
digitalWrite () ฟังก์ชัน
digitalWrite()ฟังก์ชันใช้ในการเขียนค่าสูงหรือค่าต่ำไปยังพินดิจิทัล หากกำหนดค่าพินเป็น OUTPUT ด้วยpinMode ()แรงดันไฟฟ้าจะถูกกำหนดเป็นค่าที่สอดคล้องกัน: 5V (หรือ 3.3V บนบอร์ด 3.3V) สำหรับ HIGH, 0V (กราวด์) สำหรับ LOW หากกำหนดค่าพินเป็น INPUT digitalWrite () จะเปิดใช้งาน (HIGH) หรือปิดใช้งาน (LOW) พูลอัพภายในของพินอินพุต ขอแนะนำให้ตั้งค่าpinMode ()เป็น INPUT_PULLUP เพื่อเปิดใช้งานตัวต้านทานแบบดึงขึ้นภายใน
หากคุณไม่ได้ตั้งค่า pinMode () เป็น OUTPUT และเชื่อมต่อ LED เข้ากับพินเมื่อเรียก digitalWrite (HIGH) ไฟ LED อาจหรี่ลง หากไม่มีการตั้งค่า pinMode () อย่างชัดเจน digitalWrite () จะเปิดใช้งานตัวต้านทานแบบดึงขึ้นภายในซึ่งทำหน้าที่เหมือนตัวต้านทาน จำกัด กระแสขนาดใหญ่
digitalWrite () ไวยากรณ์ของฟังก์ชัน
Void loop() {
digitalWrite (pin ,value);
}
pin - จำนวนพินที่คุณต้องการตั้งค่าโหมด
value - สูงหรือต่ำ
Example
int LED = 6; // LED connected to pin 6
void setup () {
pinMode(LED, OUTPUT); // set the digital pin as output
}
void setup () {
digitalWrite(LED,HIGH); // turn on led
delay(500); // delay for 500 ms
digitalWrite(LED,LOW); // turn off led
delay(500); // delay for 500 ms
}
ฟังก์ชัน analogRead ()
Arduino สามารถตรวจจับว่ามีแรงดันไฟฟ้าที่ใช้กับหมุดตัวใดตัวหนึ่งหรือไม่และรายงานผ่านฟังก์ชัน digitalRead () มีความแตกต่างระหว่างเซ็นเซอร์เปิด / ปิด (ซึ่งตรวจจับการมีอยู่ของวัตถุ) และเซ็นเซอร์อะนาล็อกซึ่งค่าจะเปลี่ยนแปลงอย่างต่อเนื่อง ในการอ่านเซ็นเซอร์ประเภทนี้เราจำเป็นต้องมีพินประเภทอื่น
ในส่วนล่างขวาของบอร์ด Arduino คุณจะเห็นหมุดหกตัวที่มีเครื่องหมาย "อนาล็อกเข้า" หมุดพิเศษเหล่านี้ไม่เพียง แต่บอกว่ามีแรงดันไฟฟ้าที่ใช้กับพวกมันเท่านั้น แต่ยังรวมถึงค่าของมันด้วย โดยใช้ไฟล์analogRead() เราสามารถอ่านแรงดันไฟฟ้าที่ใช้กับหมุดตัวใดตัวหนึ่งได้
ฟังก์ชันนี้จะส่งกลับตัวเลขระหว่าง 0 ถึง 1023 ซึ่งแสดงถึงแรงดันไฟฟ้าระหว่าง 0 ถึง 5 โวลต์ ตัวอย่างเช่นหากมีแรงดันไฟฟ้า 2.5 V ที่ใช้กับพินหมายเลข 0 analogRead (0) จะส่งกลับ 512
analogRead () ของฟังก์ชัน Syntax
analogRead(pin);
pin - จำนวนพินอินพุตอะนาล็อกที่จะอ่าน (0 ถึง 5 บนบอร์ดส่วนใหญ่, 0 ถึง 7 บน Mini และ Nano, 0 ถึง 15 บน Mega)
Example
int analogPin = 3;//potentiometer wiper (middle terminal)
// connected to analog pin 3
int val = 0; // variable to store the value read
void setup() {
Serial.begin(9600); // setup serial
}
void loop() {
val = analogRead(analogPin); // read the input pin
Serial.println(val); // debug value
}