이번 내용은 사실 LineTracer과는 조금 무관하나, Arduino의 부품중 하나이므로 소스코드와
지난번 fading를 연계하여 작성해 볼려 한다.
본 소스코딩은 millis()함수를 사용하지 않은 소스코딩이다.
int led = 11; // 아날로그를 위한 led핀
int button = 2; // 버튼은 0~13pin 아무거나 사용가능
int fadestate = 0; // fading을 위한 임의 변수
int fadevalue = 0; // fading이 되는 실질적 변수
void setup()
{
pinMode(led,OUTPUT);
pinMode(button,INPUT); // 버튼은 클릭하는것이니 INPUT이다.
}
void loop()
{
if(digitalRead(button) == 1 //1이라 하는것은 즉, 버튼이 눌러졌을때를 의미
{
if(fadestate < 51) // 51 * 5 = 255임을 기억하자
{
analogWrite(led,fadevalue); // fading 시작
fadevalue = fadevalue + 5; //0부터 시작하면 fadevalue가 5만큼 증가
delay(30);
fadestate ++; //버튼이 눌러졌을때 fadestate는 계속 증가한다
}
else if( fadestate >= 51 && fadestate <= 101 )
// 51 *(- 5) = -255 즉 fadevalue가 255에서 0으로 갈수있도록 만들어둔 것.
{
fadevalue = fadevalue - 5; // fadevalue가 255에서부터 5만큼 감소한다.
analogWrite(led,fadevalue);
delay(30);
fadestate ++; //fadestate는 계속 증가한다.
}
else //fadestate는 결국 버튼이 계속눌러져있다면 102를 향해 갈것이다.
//102가되면 else구문을 만나기에 fadestate는 자동으로 0이되고 다시 if문부터 시작하게 된다.
{
fadestate = 0;
}
}
else if(digitalRead(button) == 0) // 버튼이 눌러져있지 않을때는 0이다.
{
fadestate = 0; // 초기화
fadevalue = 0; // 초기화
analogWrite(led,fadevalue); // fadevalue값을 넣음으로써 초기화
}
}
다소 생뚱맞고, 이해하기 힘들수도 있다고 생각한다. 하지만 알고보면 간단한 소스코드이다.
필자는 그런데 버튼을 아직까지 왜 쓰는지는 잘 모르겠다.
항상 loop문을통해 기계를움직이는데 버튼을 누르고 떼고 할 시간이있을까 한다..
행여나 알람 로봇을 만든다면 쓸필요는 있을 것같긴하다.
'Applied > Arduino' 카테고리의 다른 글
ServoMotor (0) | 2014.02.15 |
---|---|
Piezo (0) | 2014.01.15 |
LED fading (0) | 2014.01.15 |
LED Blink ( on / off ) (0) | 2014.01.15 |
** Arduino 필독 ** (0) | 2014.01.15 |