푸시버튼은 눌렀을때 인풋이 보드로 들어가는 가장 기본이 되는 센서 입니다.

 

이 포스팅에서는 버튼을 눌렀을때 LED에 불이 들어오는 동작을 통해 푸시버튼을 사용해 봅시다.

 

 

1. 보드 구성

간단하면서도 간단하지 않은 배선입니다 ㅎㅎ

 

2번핀을 스위치의 입력으로 사용합니다.

7번핀을 LED 출력으로 사용합니다.

 

저항은 10k를 썼습니다.

 

 

2. 펌웨어 작성

스위치가 눌리면 LED가 들어오게 해야 하는데.....

직접 스위치에 배선을 하지 않고 아두이노에 연결하여 값을 받아 LED를 켜게 되면 문제가 하나 있습니다.

아두이노의 반복주기에 따라 스위치값을 읽지못하거나 생각했던것 보다 여려번 작동할 수 있죠.

 

#define LED 2
#define BTN 7

int m_nBtn = 0;

void setup()
{
  Serial.begin(9600);
  
  pinMode( LED, OUTPUT);
  pinMode( BTN, INPUT);
}

void loop()
{
  m_nBtn = digitalRead(BTN);
  Serial.println(m_nBtn);
  
  if( HIGH == m_nBtn )
  {
    digitalWrite(LED, HIGH);
  }
  else
  {
    digitalWrite(LED, LOW);
  }
  
  delay(300);
}

 

 

딜래이를 더 주거나 덜주거나 하여 스위치 값을 어떻게 읽고 있는지 확인해 볼수 있습니다.

 

 

 

 

 

3. 테스트

스위치를 눌러 봅시다.

 

 

4. 응용해보기

푸시버튼을 누를때마다 LED값이 밝아지도록 해봅시다.

혹시 모르니 LED핀을 3번으로 옮기고 다음과 같이 펌웨어를 작성합니다.

 

#define LED 3
#define BTN 7

int m_nBtn = 0;

int m_nCount = 0;
boolean m_bButton = false;

int m_nLed = 0;

void setup()
{

  pinMode( LED, OUTPUT);
  pinMode( BTN, INPUT);
  
  Serial.begin(9600);
}

void loop()
{
  m_nBtn = digitalRead(BTN);
  
  
  if( HIGH == m_nBtn )
  {
    DataCount(true);
  }
  else
  {
    DataCount(false);
  }
  
  m_nLed = (m_nCount * 63);

  analogWrite(LED, m_nLed );
  //analogWrite(LED, 128);
  Serial.println( (String)m_nCount + " " + (String)m_nLed);
  
  delay(10);
}

void DataCount(boolean bPB)
{
  if((true == bPB)
      && (false == m_bButton))
  {
    m_bButton = true;
    DataAdd();
  }
  else if((false == bPB)
          && (true == m_bButton))
  {
    m_bButton = false;
  }
}

void DataAdd()
{
  ++m_nCount;
  if( 5 <= m_nCount)
  {
    m_nCount = 0;
  }
}

이제 테스트 해봅시다.

 

 

 

댓글 작성

이름
패스워드
홈페이지
비밀글

티스토리 툴바