
택트스위치는 누르기 전까지는 각각 AA, BB 연결되어 있다가 누르면 4개가 모두 연결된다.
int sw = 8;//스위치를 8번에 연결
int led = 7; //led를 7번에 연결
void setup() {
// put your setup code here, to run once:
pinMode(sw, INPUT);//입력으로 설정
pinMode(led, OUTPUT);//출력으로 설정
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
if(digitalRead(sw) == 0)//8번핀의 입력값을 읽어서 값이 0이면
{
digitalWrite(led, LOW);//led 끔
}
else{//0,1만 존재
digitalWrite(led, HIGH);
}
delay(100);
}

스위치의 연결로 전류를 흐르게 해 led를 키는게 아니라 스위치의 연결, 해제 신호를 받아 led를 키거나 끈다.
delay문을 delay(1000);으로 바꾸고 실행했을 경우 스위치를 때고 1초후에 꺼지는 것을 예상했다. 어느정도는 맞지만, 빠르게 스위치를 키고 껐을 경우 스위치 눌림을 인식하지 못해 LED가 안 켜지는 경우가 있었다.
delay를 짧게 주어 빠르게 인식할 수 있도록 한다.
digitalRead(핀 번호)
핀모드를 통해 입력으로 설정한 핀의 값이 HIGH인지 LOW인지 읽어와서 1 또는 0으로 반환하는 함수이다.
평소에는 연결(on)되어 있다가 기울이게 되면 스위치가 off된다.
SW-520D

내가 생각한 내부구조와 동일한데, 코드가 의도와 다르게 수행된다. gnd에 연결해서 예상과 반대로 수행된다.
int ballsw = 8;//스위치를 8번에 연결
int led = 7; //led를 7번에 연결
void setup() {
// put your setup code here, to run once:
pinMode(ballsw, INPUT_PULLUP);//입력으로 설정, 내부풀업저항 사용?
pinMode(led, OUTPUT);//출력으로 설정
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
Serial.println(digitalRead(ballsw));
if(digitalRead(ballsw))//서 있을 경우 0
{
digitalWrite(led, HIGH);
}
else{//기울이면 1
digitalWrite(led, LOW);
}
}