Arduino - Chức năng I / O

Các chân trên bảng Arduino có thể được cấu hình làm đầu vào hoặc đầu ra. Chúng tôi sẽ giải thích chức năng của các chân trong các chế độ đó. Điều quan trọng cần lưu ý là phần lớn các chân tương tự Arduino, có thể được cấu hình và sử dụng, giống hệt như các chân kỹ thuật số.

Các ghim được định cấu hình là INPUT

Các chân Arduino theo mặc định được định cấu hình làm đầu vào, vì vậy chúng không cần được khai báo rõ ràng là đầu vào với pinMode()khi bạn đang sử dụng chúng làm đầu vào. Các chân được cấu hình theo cách này được cho là ở trạng thái trở kháng cao. Các chân đầu vào tạo ra các yêu cầu cực kỳ nhỏ đối với mạch mà chúng đang lấy mẫu, tương đương với một điện trở nối tiếp 100 megaohm ở phía trước chân cắm.

Điều này có nghĩa là cần rất ít dòng điện để chuyển chân đầu vào từ trạng thái này sang trạng thái khác. Điều này làm cho các chân trở nên hữu ích cho các tác vụ như triển khai cảm biến cảm ứng điện dung hoặc đọc đèn LED dưới dạng điốt quang.

Các chân được định cấu hình là pinMode (pin, INPUT) mà không có gì kết nối với chúng hoặc với các dây được kết nối với chúng không được kết nối với các mạch khác, báo cáo các thay đổi dường như ngẫu nhiên trong trạng thái chân, nhận nhiễu điện từ môi trường hoặc trạng thái ghép nối điện dung của một ghim gần đó.

Điện trở kéo lên

Điện trở kéo lên thường hữu ích để điều hướng một chân đầu vào đến trạng thái đã biết nếu không có đầu vào nào. Điều này có thể được thực hiện bằng cách thêm một điện trở kéo lên (đến + 5V) hoặc một điện trở kéo xuống (điện trở nối đất) vào đầu vào. Một điện trở 10K là một giá trị tốt cho một điện trở kéo lên hoặc kéo xuống.

Sử dụng điện trở kéo lên tích hợp với các chân được định cấu hình làm đầu vào

Có 20.000 điện trở kéo lên được tích hợp trong chip Atmega có thể được truy cập từ phần mềm. Các điện trở kéo lên tích hợp này được truy cập bằng cách thiết lậppinMode()dưới dạng INPUT_PULLUP. Điều này có hiệu quả đảo ngược hoạt động của chế độ INPUT, trong đó CAO nghĩa là cảm biến TẮT và THẤP nghĩa là cảm biến BẬT. Giá trị của phần kéo lên này phụ thuộc vào bộ vi điều khiển được sử dụng. Trên hầu hết các bo mạch dựa trên AVR, giá trị được đảm bảo nằm trong khoảng từ 20kΩ đến 50kΩ. Trên Arduino Due, nó nằm trong khoảng từ 50kΩ đến 150kΩ. Để biết giá trị chính xác, hãy tham khảo biểu dữ liệu của bộ vi điều khiển trên bo mạch của bạn.

Khi kết nối cảm biến với chân được định cấu hình bằng INPUT_PULLUP, đầu kia phải được kết nối với đất. Trong trường hợp một công tắc đơn giản, điều này làm cho chân ghi giá trị CAO khi công tắc mở và THẤP khi công tắc được nhấn. Các điện trở kéo lên cung cấp đủ dòng điện để thắp sáng đèn LED được kết nối mờ với chân được định cấu hình làm đầu vào. Nếu đèn LED trong một dự án dường như đang hoạt động, nhưng rất mờ, đây có thể là điều đang xảy ra.

Các thanh ghi tương tự (vị trí bộ nhớ chip bên trong) kiểm soát việc một chân là CAO hay THẤP kiểm soát các điện trở kéo lên. Do đó, một chân được cấu hình để bật điện trở kéo lên khi chân ở chế độ INPUTmode, sẽ có chân được cấu hình là CAO nếu sau đó chân được chuyển sang chế độ OUTPUT với pinMode (). Điều này cũng hoạt động theo hướng khác và chân đầu ra được để ở trạng thái CAO sẽ có bộ điện trở kéo lên nếu được chuyển sang đầu vào có 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

Các chân được định cấu hình là OUTPUT

Các chân được cấu hình là OUTPUT với pinMode () được cho là ở trạng thái trở kháng thấp. Điều này có nghĩa là chúng có thể cung cấp một lượng dòng điện đáng kể cho các mạch khác. Các chân Atmega có thể cấp nguồn (cung cấp dòng điện dương) hoặc chìm (cung cấp dòng điện âm) lên đến 40 mA (miliampe) dòng điện đến các thiết bị / mạch khác. Đây là dòng điện đủ để làm sáng đèn LED (đừng quên điện trở nối tiếp), hoặc chạy nhiều cảm biến nhưng không đủ dòng điện để chạy rơ le, solenoids hoặc động cơ.

Cố gắng chạy các thiết bị hiện tại cao từ các chân đầu ra, có thể làm hỏng hoặc phá hủy các bóng bán dẫn đầu ra trong chân, hoặc làm hỏng toàn bộ chip Atmega. Thông thường, điều này dẫn đến một chân "chết" trong bộ vi điều khiển nhưng các chip còn lại vẫn hoạt động tốt. Vì lý do này, bạn nên kết nối các chân OUTPUT với các thiết bị khác thông qua điện trở 470Ω hoặc 1k, trừ khi dòng điện tối đa rút ra từ các chân được yêu cầu cho một ứng dụng cụ thể.

hàm pinMode ()

Hàm pinMode () được sử dụng để định cấu hình một chân cụ thể hoạt động như một đầu vào hoặc đầu ra. Có thể kích hoạt các điện trở kéo lên bên trong với chế độ INPUT_PULLUP. Ngoài ra, chế độ INPUT vô hiệu hóa rõ ràng các pull-up bên trong.

Cú pháp hàm pinMode ()

Void setup () {
   pinMode (pin , mode);
}
  • pin - số pin có chế độ bạn muốn đặt

  • mode - INPUT, OUTPUT hoặc 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
   }
}

Hàm digitalWrite ()

Các digitalWrite()hàm được sử dụng để ghi giá trị CAO hoặc THẤP vào chân số. Nếu chân đã được cấu hình như một OUTPUT với pinMode () , điện áp của nó sẽ được đặt thành giá trị tương ứng: 5V (hoặc 3.3V trên bảng 3.3V) đối với CAO, 0V (đất) đối với THẤP. Nếu chân được định cấu hình là ĐẦU VÀO, digitalWrite () sẽ bật (CAO) hoặc tắt (THẤP) kéo lên bên trong trên chân đầu vào. Bạn nên đặt pinMode () thành INPUT_PULLUP để kích hoạt điện trở kéo lên bên trong.

Nếu bạn không đặt pinMode () thành OUTPUT và kết nối đèn LED với chân cắm, khi gọi digitalWrite (HIGH), đèn LED có thể bị mờ. Nếu không thiết lập rõ ràng pinMode (), digitalWrite () sẽ kích hoạt điện trở kéo lên bên trong, hoạt động giống như một điện trở hạn chế dòng điện lớn.

Cú pháp hàm digitalWrite ()

Void loop() {
   digitalWrite (pin ,value);
}
  • pin - số pin có chế độ bạn muốn đặt

  • value - CAO, hoặc THẤP.

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
}

hàm analogRead ()

Arduino có thể phát hiện xem có điện áp đặt vào một trong các chân của nó hay không và báo cáo nó thông qua hàm digitalRead (). Có sự khác biệt giữa cảm biến bật / tắt (phát hiện sự hiện diện của vật thể) và cảm biến tương tự, có giá trị liên tục thay đổi. Để đọc loại cảm biến này, chúng ta cần một loại chân cắm khác.

Ở phần dưới bên phải của bảng Arduino, bạn sẽ thấy sáu chân được đánh dấu “Analog In”. Các chân đặc biệt này không chỉ cho biết có điện áp đặt vào chúng hay không mà còn cho biết giá trị của nó. Bằng cách sử dụnganalogRead() chức năng, chúng ta có thể đọc điện áp được áp dụng cho một trong các chân.

Hàm này trả về một số từ 0 đến 1023, đại diện cho điện áp từ 0 đến 5 vôn. Ví dụ: nếu có một điện áp 2,5 V được áp dụng cho chân số 0, analogRead (0) trả về 512.

Cú pháp hàm analogRead ()

analogRead(pin);
  • pin - số lượng chân đầu vào tương tự để đọc (0 đến 5 trên hầu hết các bo mạch, 0 đến 7 trên Mini và Nano, 0 đến 15 trên 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
}