프로그래밍/Arduino

버튼 스위치 led제어

꼬도기 2015. 2. 26. 21:50
반응형

 

 

int led1 = 7;
int led2 = 6;

int key1 =13;
int key2 =12;

void setup()
{
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
 
  pinMode(key1, INPUT);
  pinMode(key2, INPUT);
 
}
void loop()
{
  if( digitalRead(key1) == HIGH )
  digitalWrite(led1, HIGH);
  else
  digitalWrite(led1, LOW);
 
  if( digitalRead(key2) == HIGH )
  digitalWrite(led2, HIGH);
  else
  digitalWrite(led2, LOW);
 
  delay(100);
}

 
 

 

 

 

 

해석

 

 

 if( digitalRead(key1) == HIGH )
  digitalWrite(led1, HIGH);
  else
  digitalWrite(led1, LOW);

digitalWrite() 함수와는 반대로 아두이노 보트의 포트가 INPUT으로 설정된 포트를 읽어 오는 함수이다. 아두이노 보드의 포트가 약 2~5V 사이이면 HIGH이 읽어지고 그렇지 않으면 LOW로 읽어진다.

 

 

스위치 데이타시트

 

http://www.omron.com/ecb/products/pdf/en-b3f.pdf

 

 

 

 

 

 

 

int led1 = 7;
int led2 = 6;

int key1 =13;
int key2 =12;

int key1_status = LOW; //key1 state
int key2_status = LOW; //key2 state

void setup()
{
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
 
  pinMode(key1, INPUT);
  pinMode(key2, INPUT);
 
  digitalWrite(led1, LOW);
  digitalWrite(led2, LOW);
   
}

void loop()
{
  if( digitalRead(key1) == HIGH && key1_status == LOW )
  {
    digitalWrite(led1, HIGH);
    key1_status = HIGH;
  }
  else if( key1_status == HIGH )
  {
    digitalWrite(led1, LOW);
    key1_status = LOW;
  }
 
  if( digitalRead(key2) == HIGH && key2_status == LOW )
  {
    digitalWrite(led2, HIGH);
    key2_status = HIGH;
  }
  else if( key2_status == HIGH )
  {
    digitalWrite(led2, LOW);
    key2_status = LOW;
  }
 
  delay(100);
}

 
 

해석

 

 

int key1_status = LOW; //key1 state
int key2_status = LOW; //key2 state

 

LED가 꺼져있는 상태에서 버튼을 누르면 켜고 켜져있는 상태에서 버튼을 누르면 끄기 위해서 상태 저장을 위해서 필요하다

초기에는 LED가 꺼져있는 상태로 시작되었기 때문에 로우로 초기화 하였다. key1_status가 결국 LED1의 상태를 저장하는 것이다.

 

  if( digitalRead(key1) == HIGH && key1_status == LOW )
  {
    digitalWrite(led1, HIGH);
    key1_status = HIGH;
  }

 

푸시 버튼1이 눌려지고 현재 LED1이 꺼져있으면 ?

>>>LED1을 켜고 LED1의 상태를 HIGH로 변경한다.

 


  else if( key1_status == HIGH )
  {
    digitalWrite(led1, LOW);
    key1_status = LOW;
  }

 

반대로 푸시 버튼1이 눌려ㅕ지고 LED1이 켜져있으면 LED1을 끄고 상태를 LOW로 변경한다

if 문장에서 key1_status == HIGH 를 비교하는 문장이 생략되었으나 결과는 동일

 

 

 

결과

 

버튼 한번 누르면 1이 켜지고 다시 한번 누르면 LED1이 꺼진다.

 

 

실제 결과

 

버튼 누르면 깜빡인다 딜레이 0.1초로....

버튼을 손에서 떼면 LOW상태 유지되고 ... 이상하다

 

LED_state.ino

 

 

반응형