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
}