소스코드(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);
      }
    }
  }
}