보통의 아두이노의 입력 카테고리(디지털, 아날로그)는 변수를 생성해 읽어드린 값을 저장해 줍니다.
또한, digitalRead() 함수는 지정한 디지털 입력핀의 값을 읽어옵니다. 읽어온 입력값은 HIGH(1) 또는 LOW(0) 두 가지 중 하나의 값입니다. 입력핀은 앞서 pinMode() 함수를 사용하여 입력모드로 설정되어 있어야합니다.
위에 제공한 예시 소스를 구성하고 업로드 후에 동작사항을 확인해 보세요.
내장 LED (LED_BUILTIN) 에 불이 들어오나요?
정상동작이 되지 않습니다. 이유는 바로 스위치의 특성 때문인데요.
채터링 [chattering]
스위치의 하드웨어 특성 중 하나인 채터링은 스위치를 눌렀을 때 스위치 연결 핀에 불안정한 신호가 발생하는 현상을 의미합니다. 이 채터링 현상은 스위치의 접촉이 닫히는 과정에서 발생할 수 있으며, 짧은 시간 동안 스위치 연결 핀이 빠르게 ON과 OFF를 반복하여 신호를 보낼 수 있습니다.
그럼 이러한 현상을 해결할 수 있는 방법은 무엇이 있을까요?
크게 2가지가 있습니다.
1. 디바운스[debounce] : 짧은 시간에 여러번 스위치의 상태를 확인하는 방법을 의미합니다. 2. 하드웨어 혹은 소프트웨어의 풀업[PULLUP] & 풀다운[PULLDOWN] 셋팅
우선 디바운스 설정 방법 입니다.
아두이노 스케치 프로그램에서 파일 -> 예제 -> 02.Digital -> Debounce 선택하시면 됩니다.
const int buttonPin = 2; // 버튼 핀 번호
const int ledPin = 13; // LED 핀 번호
boolean ledState = HIGH; // 현재 LED 상태를 초기 설정합니다. (켜진 상태)
boolean buttonState; // 현재 버튼 상태를 저장합니다. (기본적으로 LOW)
boolean lastButtonState = LOW;// 이전 버튼 상태를 저장합니다.
unsigned long lastDebounceTime = 0; // 버튼 디바운스를 위한 시간 변수
unsigned long debounceDelay = 50; // 디바운스 지연 시간 (50ms)
void setup() {
pinMode(buttonPin, INPUT); // 버튼 핀을 입력으로 설정합니다.
pinMode(ledPin, OUTPUT); // LED 핀을 출력으로 설정합니다.
digitalWrite(ledPin, ledState); // 초기 LED 상태를 설정합니다. (켜진 상태)
}
void loop() {
int reading = digitalRead(buttonPin); // 버튼 핀의 상태를 읽어옵니다.
if (reading != lastButtonState) { // 버튼 상태가 이전 상태와 다를 경우
lastDebounceTime = millis(); // 현재 시간을 기록합니다.
}
if ((millis() - lastDebounceTime) > debounceDelay) { // 디바운스 지연 시간이 경과한 경우
if (reading != buttonState) { // 버튼 상태가 이전 상태와 다를 경우
buttonState = reading; // 버튼 상태를 업데이트합니다.
if (buttonState == HIGH) { // 버튼이 눌린 상태일 경우
ledState = !ledState; // LED 상태를 반전시킵니다. (ON <-> OFF)
}
}
}
digitalWrite(ledPin, ledState); // LED 상태를 출력합니다.
lastButtonState = reading; // 이전 버튼 상태를 업데이트합니다.
}
다음으로 풀업 저항 설정 방법 입니다.
풀업 저항 설정 방법은 크게 2가지가 있습니다.
1. 하드웨어 셋팅
1. 스위치 입력단자(D7)번에 저항(10K ohm) 연결 후 2. 저항의 반대쪽은 5V 전압을 연결해주면 됩니다.
2. 소프트웨어 셋팅
const int switchPin = 7; // 스위치 연결핀
const int ledPin = 13; // LED 연결핀
void setup() {
pinMode(switchPin, INPUT_PULLUP); // 스위치핀을 입력으로
pinMode(ledPin, OUTPUT); // LED핀을 출력으로
Serial.begin(9600);
}
void loop() {
int switchState = digitalRead(switchPin); // 스위치핀 읽기
Serial.println(switchState);
if (switchState == HIGH) {
digitalWrite(ledPin, HIGH); // 스위치 ON시 LED 켜기
}
else {
digitalWrite(ledPin, LOW); // 스위치 OFF시 LED 끄기
}
}
안녕하세요! Choi GPT 입니다. 오늘은 팅커캐드(Tinkercad) 사이트 소개 및 초기 접속 방법에 대한 설명을 하고자 합니다.
팅커캐드란? 팅커캐드(Tinkercad)는 3D 디자인 및 모델링 도구로, 온라인 상에서 사용할 수 있는 웹 기반 애플리케이션입니다.
팅커캐드는 Autodesk 사에서 개발하였으며, 사용자들이 간단하게 3D 모델을 만들고시뮬레이션할 수 있도록 도와줍니다. 팅커캐드는 초보자부터 전문가까지 다양한 사용자를 위한 진입 장벽이 낮은 인터페이스를 제공합니다. 그래서 교육 기관이나 학생들 사이에서 많이 활용되며, STEM(과학, 기술, 공학, 수학) 교육과 관련된 프로젝트나 실험 등을 지원합니다. 팅커캐드에서는 다양한 기하 도형, 부품, 컴포넌트를 활용하여 3D 모델을 만들 수 있습니다. 사용자들은 드래그 앤 드롭 방식으로 객체를 배치하고 크기를 조절하며, 필요에 따라 회전이나 이동을 시킬 수 있습니다. 또한, 팅커캐드는 모델의 물리적 동작을 시뮬레이션하고, 전자회로를 설계하고 시험해볼 수 있는 기능도 제공합니다. 틴커캐드는 무료로 사용할 수 있으며, 웹 브라우저 상에서 직접 접속하여 사용할 수 있습니다. 따라서 별도의 소프트웨어 설치가 필요하지 않습니다.