푸시 버튼을 슬라이드 스위치처럼 작동하게 스케치 코드 수정
푸시버튼은 누르는 동안 상태가 변경되었다 떼면 원래의 상태로 되돌아가고, 슬라이드 스위치는 스위치를 움직일 때마다 변경된 상태를 계속 유지한다. 따라서 푸시버튼을 슬라이드 스위치로 변경하지 않고, 스케치 코드만 수정해서 푸시버튼을 슬라이드 스위치처럼 동작하도록 만들어보려고 한다.

// c# code
//
int flag = 0; // 버튼 상태 변경 여부를 확인하기 위한 변수 선언
void setup()
{
Serial.begin(9600); // 시리얼 통신 초기화
// 1초에 9600비트로 데이터 전송
pinMode(8, OUTPUT); // 8번 디지털 핀을 출력 모드로 설정
pinMode(7, INPUT); // 7번 디지털 핀을 입력 모드로 설정
}
// loop() 함수 :
// 컴퓨터에서 실행 중인 C# 프로그램에서 전달된 명령에 따라 LED를 켜고 끄는 코드
void loop()
{
int inputValue = digitalRead(7); // 입력 핀의 값(HIGH 혹은 LOW)을 읽어 변수에 저장
Serial.println(inputValue); // 변수값(1 혹은 0)을 직렬 모니터에 출력
// 만약 읽은 값이 HIGH이고(푸시 버튼이 눌렸고)
if(inputValue == HIGH)
{
if(flag == 0) // flag 변수가 0이면
{
flag = 1; // flag 변수를 1로 변경한다.
}
else // 만약 읽은 값이 HIGH가 아니고,
{
if(flag == 1) // flag 변수가 1이면
{
int ledState = digitalRead(8); // 현재 LED의 상태를 읽는데,
if(ledState == HIGH) // 현재 LED의 상태가 HIGH(켜짐)이면,
digitalWrite(8, LOW); // LED의 상태를 LOW(꺼짐)로 변경하고,
else // 현재 LED의 상태가 HIGH(켜짐)이 아니면,
digitalWrite(8,HIGH); // LED의 상태를 HIGH(켜짐)로 변경한다.
flag = 0; // 그리고 flag 변수를 0으로 변경한다.
}
delay(100);
}
}
}

C#을 공부했었으므로, if문을 중첩시키지 않고 푸시 버튼을 슬라이드 스위치처럼 작동하도록 아두이노 스케치 코드를 수정하려고 시도했다.
// C# code
bool ledState = false; // LED 상태를 저장하는 변수 (초기값: false - 꺼짐)
void setup()
{
Serial.begin(9600); // 시리얼 통신 초기화
pinMode(8, OUTPUT); // 8번 디지털 핀을 출력 모드로 설정
pinMode(7, INPUT); // 7번 디지털 핀을 입력 모드로 설정
}
void loop()
{
int buttonState = digitalRead(7); // 7번 핀 (버튼)의 상태를 읽습니다.
if (buttonState == HIGH) // 버튼이 눌렸으면
{
ledState = !ledState; // LED 상태를 토글합니다.
digitalWrite(8, ledState ? HIGH : LOW); // LED 상태에 따라 8번 핀 (LED)을 켜거나 끕니다.
delay(100); // 채터링 방지를 위해 짧은 지연 시간을 추가합니다.
}
}
코드 설명
bool ledState = false;: LED의 현재 상태를 저장하는 변수입니다. false는 LED가 꺼진 상태를, true는 LED가 켜진 상태를 나타냅니다.loop() 함수:int buttonState = digitalRead(7);: 7번 핀 (푸시 버튼)의 상태를 읽어 buttonState 변수에 저장합니다.if (buttonState == HIGH): 버튼이 눌렸는지 확인합니다.ledState = !ledState;: LED의 상태를 반전시킵니다. 즉, LED가 꺼져 있으면 켜고, 켜져 있으면 끕니다.digitalWrite(8, ledState ? HIGH : LOW);: LED의 상태에 따라 8번 핀 (LED)을 켜거나 끕니다. ledState가 true이면 HIGH (켜짐), false이면 LOW (꺼짐)를 출력합니다.delay(100);: 채터링 방지를 위해 짧은 지연 시간을 추가합니다. 채터링은 버튼을 누르거나 뗄 때 발생하는 접촉 불안정 현상으로 인해 여러 번 신호가 입력되는 현상입니다.정상적으로 기능하는 것을 확인할 수 있다.
