Arduino-I / O 기능
Arduino 보드의 핀은 입력 또는 출력으로 구성 할 수 있습니다. 이러한 모드에서 핀의 기능을 설명합니다. 대부분의 Arduino 아날로그 핀은 디지털 핀과 똑같은 방식으로 구성 및 사용할 수 있습니다.
INPUT으로 구성된 핀
Arduino 핀은 기본적으로 입력으로 구성되므로 다음을 사용하여 명시 적으로 입력으로 선언 할 필요가 없습니다. pinMode()입력으로 사용할 때. 이러한 방식으로 구성된 핀은 높은 임피던스 상태에 있다고합니다. 입력 핀은 샘플링하는 회로에 극히 작은 요구를합니다. 이는 핀 앞의 100 메가 옴 직렬 저항에 해당합니다.
이는 입력 핀을 한 상태에서 다른 상태로 전환하는 데 매우 적은 전류가 필요함을 의미합니다. 이는 정전 용량 터치 센서를 구현하거나 LED를 포토 다이오드로 읽는 것과 같은 작업에 핀을 유용하게 만듭니다.
pinMode (pin, INPUT)로 구성된 핀은 아무것도 연결되지 않았거나 다른 회로에 연결되지 않은 전선이 연결된 상태에서 핀 상태의 임의의 변화를보고하거나 환경에서 전기적 노이즈를 포착하거나 상태를 용량 적으로 결합합니다. 근처 핀의.
풀업 저항기
풀업 저항은 입력이없는 경우 입력 핀을 알려진 상태로 조정하는 데 유용합니다. 이는 입력에 풀업 저항 (+ 5V까지) 또는 풀다운 저항 (접지에 대한 저항)을 추가하여 수행 할 수 있습니다. 10K 저항은 풀업 또는 풀다운 저항에 적합한 값입니다.
입력으로 구성된 핀과 함께 내장 풀업 저항 사용
Atmega 칩에는 소프트웨어에서 액세스 할 수있는 20,000 개의 풀업 저항이 내장되어 있습니다. 이러한 내장 풀업 저항은pinMode()INPUT_PULLUP으로. 이는 INPUT 모드의 동작을 효과적으로 반전시킵니다. 여기서 HIGH는 센서가 꺼져 있음을 의미하고 LOW는 센서가 켜져 있음을 의미합니다. 이 풀업의 값은 사용 된 마이크로 컨트롤러에 따라 다릅니다. 대부분의 AVR 기반 보드에서 값은 20kΩ에서 50kΩ 사이로 보장됩니다. Arduino Due에서는 50kΩ에서 150kΩ 사이입니다. 정확한 값은 보드에있는 마이크로 컨트롤러의 데이터 시트를 참조하십시오.
INPUT_PULLUP으로 구성된 핀에 센서를 연결할 때 다른 쪽 끝은 접지에 연결해야합니다. 간단한 스위치의 경우 스위치가 열리면 핀이 HIGH로, 스위치를 눌렀을 때 LOW로 표시됩니다. 풀업 저항은 입력으로 구성된 핀에 희미하게 연결된 LED를 비추기에 충분한 전류를 제공합니다. 프로젝트의 LED가 작동하는 것 같지만 매우 어둡다면 이것은 진행중인 것일 수 있습니다.
핀이 HIGH인지 LOW인지를 제어하는 동일한 레지스터 (내부 칩 메모리 위치)가 풀업 저항을 제어합니다. 결과적으로 핀이 INPUT 모드에있을 때 풀업 저항이 켜지도록 구성된 핀은 핀이 pinMode ()를 사용하여 OUTPUT 모드로 전환되면 핀이 HIGH로 구성됩니다. 이것은 다른 방향에서도 작동하며, HIGH 상태로 남겨진 출력 핀은 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으로 구성된 핀
pinMode ()를 사용하여 OUTPUT으로 구성된 핀은 낮은 임피던스 상태에 있다고합니다. 이는 다른 회로에 상당한 양의 전류를 제공 할 수 있음을 의미합니다. Atmega 핀은 최대 40mA (밀리 암페어)의 전류를 다른 장치 / 회로에 소싱 (양의 전류 제공) 또는 싱크 (음의 전류 제공) 할 수 있습니다. 이는 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()함수는 HIGH 또는 LOW 값을 디지털 핀에 쓰는 데 사용됩니다. 핀이 pinMode () 를 사용하여 OUTPUT으로 구성된 경우 해당 전압은 HIGH의 경우 5V (또는 3.3V 보드의 경우 3.3V), LOW의 경우 0V (접지)로 설정됩니다. 핀이 INPUT으로 구성된 경우 digitalWrite ()는 입력 핀의 내부 풀업을 활성화 (HIGH) 또는 비활성화 (LOW)합니다. 내부 풀업 저항을 활성화하려면 pinMode () 를 INPUT_PULLUP 으로 설정하는 것이 좋습니다 .
pinMode ()를 OUTPUT으로 설정하지 않고 LED를 핀에 연결하면 digitalWrite (HIGH) 호출시 LED가 어두워 질 수 있습니다. pinMode ()를 명시 적으로 설정하지 않으면 digitalWrite ()는 내부 풀업 저항을 활성화하여 큰 전류 제한 저항처럼 작동합니다.
digitalWrite () 함수 구문
Void loop() {
digitalWrite (pin ,value);
}
pin − 모드를 설정하려는 핀 번호
value − HIGH 또는 LOW.
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 보드의 오른쪽 하단에 "Analog In"이라고 표시된 6 개의 핀이 있습니다. 이 특수 핀은 전압이 적용되었는지 여부뿐만 아니라 그 값도 알려줍니다. 사용하여analogRead() 기능을 사용하면 핀 중 하나에 적용된 전압을 읽을 수 있습니다.
이 함수는 0에서 5V 사이의 전압을 나타내는 0에서 1023 사이의 숫자를 반환합니다. 예를 들어 핀 번호 0에 2.5V의 전압이 적용되면 analogRead (0)는 512를 반환합니다.
analogRead () 함수 구문
analogRead(pin);
pin − 읽을 아날로그 입력 핀의 수 (대부분의 보드에서 0 ~ 5, Mini 및 Nano에서 0 ~ 7, Mega에서 0 ~ 15)
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
}