스위치 1

magicdrill·2025년 1월 19일

스위치

택트 스위치


택트스위치는 누르기 전까지는 각각 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);
  }
}

업로드중..

0개의 댓글