int flag = 0;
int ledCount=0;
int buttonPin=6;
void setup()
{
pinMode(buttonPin, INPUT);
Serial.begin(9600);
}
void printValues()
{
Serial.print("flag : ");
Serial.print(flag);
Serial.print(" ledCount : ");
Serial.println(ledCount);
}
void loop()
{
int inputValue = digitalRead(buttonPin);
printValues();
if (inputValue == HIGH) {
if (flag == 0){
flag = 1;
ledCount++;
ledCount = ledCount % 3;
printValues();
}
}
else {
if (flag == 1) {
flag = 0;
printValues();
}
}
delay(100);
}
버튼을 클릭하면 번갈아서 LED가 켜지고 꺼지고를 반복하는 예제
int flag = 0;
int ledCount=0;
int redPin=9;
int buttonPin=6;
void setup()
{
pinMode(redPin, OUTPUT);
pinMode(buttonPin, INPUT);
}
void loop()
{
int inputValue = digitalRead(buttonPin);
if (inputValue == HIGH) {
if (flag == 0){
flag = 1;
ledCount++;
}
} else {
if (flag == 1) {
if(ledCount == 1){
digitalWrite(redPin, HIGH);
}
else{
digitalWrite(redPin, LOW);
ledCount = 0;
}
flag = 0;
}
}
delay(100);
}
- 위의 코드의 원리를 확인해 보면
a) flag = 0, count = 0 으로 초기화
b) 버튼을 누르면 inputValue가 HIGH로 바뀜 -> 버튼의 상태가 HIGH 이고 flag의 상태가 0 인 경우
flag의 상태가 (0 -> 1)로 바뀜 , count가 1더해져서 (0 -> 1)로 바뀜
c) delay(100)으로 100 ms 가 지남
d-1) 100ms 이후에도 버튼을 누르고 있는 경우
inputValue가 HIGH로 바뀜 -> flag의 상태는 1이므로 16번 라인의 if문 만족하지 않음 -> if문 빠져나감
delay(100)으로 100ms 가 지남
d-2) i) 100ms 이후에 버튼을 누르지 않는 경우
inputValue가 LOW로 바뀜 -> 21번째줄의 else문 아래를 실행 -> flag의 상태는 1이므로 22번째 줄의 if문 만족
-> 현재 ledCount가 1이므로 23번째 if문 만족 -> redPin ON -> 30번째 flag (1 -> 0) 으로 바뀜
delay(100)으로 100ms 가 지남
d-2) ii) 버튼을 누르면 b) 상황 발생 flag의 상태는 (0->1)로 바뀜, count는 1더해져서 (1->2)로 바뀜
다시 d-2) 상황으로 와서 21번째 else문 아래를 실행 -> flag의 상태는 1이므로 22번째 줄의 if문 만족
-> ledCount 가 2이므로 26번째 라인의 else문 만족해서 ledCount가 (2->0)으로 바뀜 -> 30번 라인의 flag (1->0)바뀜
다시 처음으로 돌아감 (flag = 0, count = 0)
int flag = 0;
int ledCount=0;
int redPin=9;
int bluePin=8;
int greenPin=7;
int buttonPin=6;
void setup()
{
pinMode(redPin, OUTPUT);
pinMode(bluePin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(buttonPin, INPUT);
}
void loop()
{
int inputValue = digitalRead(buttonPin);
if (inputValue == HIGH) {
if (flag == 0){
flag = 1;
ledCount++;
}
} else {
if (flag == 1) {
if(ledCount == 1){
digitalWrite(redPin, HIGH);
digitalWrite(bluePin, LOW);
digitalWrite(greenPin, LOW);
}
else if(ledCount == 2){
digitalWrite(redPin, LOW);
digitalWrite(bluePin, HIGH);
digitalWrite(greenPin, LOW);
}
else if(ledCount == 3){
digitalWrite(redPin, LOW);
digitalWrite(bluePin, LOW);
digitalWrite(greenPin, HIGH);
}
else if(ledCount == 4){
digitalWrite(redPin, HIGH);
digitalWrite(bluePin, HIGH);
digitalWrite(greenPin, HIGH);
}
else{
digitalWrite(redPin, LOW);
digitalWrite(bluePin, LOW);
digitalWrite(greenPin, LOW);
ledCount =0;
}
flag = 0;
}
}
delay(100);
}
- 코드를 그대로 두고 RGB LED를 사용하면 된다.
- 버튼을 누르면 LED의 상태가
OFF -> RED -> BLUE -> GREEN -> MAGENTA -> YELLOW -> CYAN -> WHITE -> OFF 순으로 변함
- Serial Monitor로 현재 RGB LED의 값을 출력 ( red, blue, green ... )
int flag = 0;
int ledCount=0;
int redPin=9;
int bluePin=8;
int greenPin=7;
int buttonPin=6;
void setup()
{
pinMode(redPin, OUTPUT);
pinMode(bluePin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(buttonPin, INPUT);
Serial.begin(9600);
}
void loop()
{
int inputValue = digitalRead(buttonPin);
if (inputValue == HIGH) {
if (flag == 0){
flag = 1;
ledCount++;
}
} else {
if (flag == 1) {
if(ledCount == 1){
digitalWrite(redPin, HIGH);
digitalWrite(bluePin, LOW);
digitalWrite(greenPin, LOW);
Serial.println("Red");
}
else if(ledCount == 2){
digitalWrite(redPin, LOW);
digitalWrite(bluePin, HIGH);
digitalWrite(greenPin, LOW);
Serial.println("blue");
}
else if(ledCount == 3){
digitalWrite(redPin, LOW);
digitalWrite(bluePin, LOW);
digitalWrite(greenPin, HIGH);
Serial.println("Green");
}
else if(ledCount == 4){
digitalWrite(redPin, HIGH);
digitalWrite(bluePin, HIGH);
digitalWrite(greenPin, LOW);
Serial.println("Magenta");
}
else if(ledCount == 5){
digitalWrite(redPin, HIGH);
digitalWrite(bluePin, LOW);
digitalWrite(greenPin, HIGH);
Serial.println("Yellow");
}
else if(ledCount == 6){
digitalWrite(redPin, LOW);
digitalWrite(bluePin, HIGH);
digitalWrite(greenPin, HIGH);
Serial.println("Cyan");
}
else if(ledCount == 7){
digitalWrite(redPin, HIGH);
digitalWrite(bluePin, HIGH);
digitalWrite(greenPin, HIGH);
Serial.println("White");
}
else{
digitalWrite(redPin, LOW);
digitalWrite(bluePin, LOW);
digitalWrite(greenPin, LOW);
Serial.println("Off");
ledCount =0;
}
flag = 0;
}
}
delay(100);
}
'Embedded > Arduino' 카테고리의 다른 글
01. Arduino 설치하기 (0) | 2021.06.09 |
---|---|
초음파센서+브라킷+서보모터 (0) | 2021.05.26 |
Servo 제어 (0) | 2020.11.21 |
CH07 -1) 푸시버튼으로 LED제어 (0) | 2020.10.12 |
CH06 - 1)피에조(Piezo) 스피커 (0) | 2020.10.10 |