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상태 유지되고 ... 이상하다