728x90
이번에는 스위치를 활용하여 3개의 LED를 순차적으로 점등시키는 동작을 구현해보려고 한다.
코드를 동작 시키면 LED는 순차적으로 점등된다. 하지만, 스위치를 작동시키면 LED는 방향을 바꾸어 점등을 진행한다.
스위치 관련 동작은 코드상에 맨 밑에 if문에서 동작되며, 스위치가 눌릴 때 마다 mode는 Toggle되어 변경된다.
구현된 코드는 아래와 같다.
#include <wiringPi.h>
#include <stdio.h>
int ps[40]; // ps(pin state) : default 0, pin number : 40
void Toggle(int pin)
{
ps[pin] = !ps[pin];
digitalWrite(pin,ps[pin]);
}
int main()
{
wiringPiSetup(); // Pin number use case (wPi)
pinMode(8, OUTPUT); // 8,9,7 : OUT 2 : IN
pinMode(9, OUTPUT);
pinMode(7, OUTPUT);
pinMode(2, INPUT);
int mode = 0;
for(;;) // while(1)
{
if(mode)
{
Toggle(8); delay(200);
Toggle(9); delay(200);
Toggle(7); delay(200);
}
else
{
Toggle(7); delay(200);
Toggle(9); delay(200);
Toggle(8); delay(200);
}
if(digitalRead(2) == 0) // Switch Pushed
{
mode = !mode; //++;
}
}
return 0;
}
다음은 스위치를 활용하여 LED 점등 속도가 점점 증가하는 코드를 구현해보았다.
속도 증가를 위하여 interval 변수를 활용하였고, 스위치가 눌릴 때 마다 intv 변수는 1 씩 값이 증가한다.
따라서, 버튼을 누를 때 마다 증가 된 intv은 for문 내에 tim 변수에 저장이 되며,
9까지 증가하였을 때에 초기화되어 다시 처음 속도로 진행된다.
#include <wiringPi.h>
#include <stdio.h>
#define RED 8
#define GREEN 9
#define YELLOW 7
#define SW 2
int ps[40]; // ps(pin state) : default 0, pin number : 40
void Toggle(int pin)
{
ps[pin] = !ps[pin];
digitalWrite(pin,ps[pin]);
}
int main()
{
wiringPiSetup(); // Pin number use case (wPi)
pinMode(RED, OUTPUT); // 8,9,7 : OUT 2 : IN
pinMode(GREEN, OUTPUT);
pinMode(YELLOW, OUTPUT);
pinMode(SW, INPUT); //Switch
int mode = 1;
int intv = 2;
int tim; // delay time interval(ms)
for(;;) // while(1)
{
tim = (9-intv) * 100;
if(mode)
{
Toggle(RED); delay(tim);
Toggle(GREEN); delay(tim);
Toggle(YELLOW); delay(tim);
}
if(digitalRead(2) == 0) // Switch Pushed
{
intv++;
if(intv > 8)
{
intv = 1;
}
}
}
return 0;
}
728x90
'Language > Linux' 카테고리의 다른 글
리눅스 BSP : LED 점등 (2) | 2024.06.11 |
---|---|
리눅스 BSP : Raspberry Pi 코드 구현 (0) | 2024.06.10 |