소스코드(1.아날로그 스위치입력 실험)
아래는 소스코드1입니다. 아두이노 IDE에 붙여넣기 하여 컴파일하고 업로드해봅니다.
// 아두이노 푸시버튼 스위치 실험1
int led=13; //LED 디지털 IO핀 설정(우노보드에 장착된 LED)
void setup()
{
pinMode(led,OUTPUT);//디지털IO를 출력으로 설정
}
void loop()
{
int i;//변수 선언
while(1)
{
i=analogRead(5);//A5 아날로그 입력으로부터 전압을 읽어옴
if(i>1000)//전압값이 1000보다 크면(약 4.88V)
digitalWrite(led,HIGH);//디지털IO 13번을 HIGH로 하여 LED 점등
else
digitalWrite(led,LOW);//디지털IO 13번을 LOW로 하여 LED 소등
}
}
위 프로그램에서는 analogRead()함수를 이용하여 아날로그 입력값을 읽어오며 0-5V의 전압값을 0-1023(8비트)의 값으로 읽어옵니다. 따라서 프로그램에서는 1000이상의 값을 스위치가 눌러진 것으로 판단하고 이는 전압으로 환산하면 약 4.88V가 됩니다.
입력전압의 범위를 다른 전압으로 바꾸고자 하는 경우에는 analogReference()를 함수를 사용하면 됩니다.
소스코드(2.디지털 스위치입력 실험)
아래는 소스코드2입니다. 아두이노 IDE에 붙여넣기 하여 컴파일하고 업로드해봅니다.
// 아두이노 푸시버튼 스위치 실험2
int Button=3; //디지털 IO 3번핀에 스위치 연결
int LED=13; //LED 디지털 IO핀 설정(우노보드에 장착된 LED)
boolean onoff=LOW; //LED 점등상태 저장
void setup()
{
pinMode(Button,INPUT); //버튼은 입력으로 설정
pinMode(LED,OUTPUT); //LED는 출력으로 설정
}
void loop(){
if(digitalRead(Button)==LOW) //상승 엣지 검출(먼저 초기에 LOW레벨 여부 확인, 버튼 누르기 전)
{
delay(10); //10ms 딜레이
if(digitalRead(Button)==HIGH) //HIGH레벨 여부 확인 (버튼이 눌러진 상태)
{
digitalWrite(LED,onoff); //LED에 LED점등상태값 출력
onoff=(!onoff); //LED점등상태를 바꿈(LOW->HIGH or HIGH->LOW0
delay(10); //10ms 딜레이
while(digitalRead(Button)==HIGH) //버튼이 떨어질 때까지 대기
{
delay(1);
}
}
}
}