8장. 스위치 눌림 시간 알아보기

来自Microduino Wikipedia
Md讨论 | 贡献2014年9月12日 (五) 00:12的版本 (Created page with "{{Language|Lesson 8--Pulse timing (check how long you hold down the switch)}} {| style="width: 800px;" |- | ==목표== 채터링을 피하여 버튼을 사용하는 방법에 ...")
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转至: 导航搜索
Language English

목표

채터링을 피하여 버튼을 사용하는 방법에 대해 알아 볼것입니다. 시간지연을 이용하도록 하겠습니다. 그러나 이 해결책은 단점도 가지고 있습니다. 시간지연을 사용함으로 버튼을 누르는 사람 모두 다 다른 시간이 나타납니다. 이 장에서는 버튼이 눌린 시간을 얻는 방법에 대해서 알아보도록 하겠으며 펄스 시간 계산을 사용했습니다. 또한, 시리얼 포트를 통해 데이터를 모니터링하는 방법에 대해 알아보겠습니다.

부품

펄스

마이크로두이노에서 펄스는 High와 Low를 번갈아가며 변하는 디지털 신호입니다. 펄스 타이밍은 종종 광인코더에서 사용됩니다. 이것을 가지고 속도를 계산할 수도 있습니다.


회로도

Lesson8-schematic.jpg

내부 풀업저항을 사용했으며 외부에 100nF 캐패시터를 사용했습니다.

프로그램

int pin = 2;                                            // 입력포트핀 D2 설정
float time1,time2;                                      // 타임 변수
 
void setup()
{
  Serial.begin(115200);                                 // 시리얼 포트 보드레이트 설정
  pinMode(pin, INPUT_PULLUP);                           // 입력포트를 입력으로 설정하고 내부 풀업을 사용하도록 설정
}
 
void loop()
{
  //입력포트에서 Low 펄스를 읽고 최대 펄스폭은 60초, 'time1' 변수에 결과 값을 저장하도록 할당
  time1= pulseIn(pin, LOW,60000000)/1000;              // 시간을 ms로 변환
  Serial.print(time1);                                 // 시리얼 포트로 'time1' 변수값을 출력
  Serial.print("ms  ");
  time2= pulseIn(pin, LOW,60000000)/1000.0;            // 시간을 ms로 변환
  Serial.print(time2);                                 // 시리얼 포트로 'time2' 변수값을 출력
  Serial.println("ms");                                // 'ms' 단위를 표시하고 println()함수는 값을 출력하고 새로운 줄로 변경하는 함수
}
}

시리얼 모니터링

시리얼 모니터 열기

  • 시리얼 모니터 버튼을 클릭하면 시리얼 모니터 창이 뜹니다.
Lesson8-serialmonitor.jpg
Lesson8-serialwindow.jpg
  • 주의사항:
    • 시리얼 포트를 사용하기 위해서 setup() 함수내에 Serial.begin(xxxx) 함수를 추가해야 합니다. 여기서 'xxxx'는 보드레이트입니다.
    • 보드레이트는 사용하는 시리얼 모니터와 동일한 값을 설정해야 하며 설정이 맞지 않으면 정확한 값이 보이지 않습니다.
  • 단위를 변경할때는 데이터 타입에 유의해야 합니다.
Lesson-calculate.jpg

PulseIn()함수

  • 기능 : 입력포트에서 펄스의 HIGH 또는 LOW 값을 읽는 기능. 값이 HIGH이면 pulse() 함수는 핀이 HIGH일때 타이머가 동작하고 LOW로 변화될때 타이머가 멈춤니다.

펄스타임의 리턴 값은 'us' 단위를 가지며 타이머의 범위는 10us ~ 3 분입니다.(1s = 100ms = 1000000us)

  • 문법:
    • pulseIn(pin, value)
    • pulseIn(pin, value, timeout)
  • 파라메터:
    • pin : I/O 포트, 데이터 타입 : int
    • value : 펄스타입,HIGH or LOW, 데이터 타입 : int
    • 타입아웃 (옵션):펄스 대기 시간, 단위는 us, 디폴트 값은 1초입니다. 데이터 타입 : unsigned long

결과

100nF 커패시터를 입력포트에 병렬로 추가하면 더 양호한 결과를 얻을 수 있습니다.

Lesson8-capacitance.jpg

비디오


https://www.youtube.com/watch?v=Ge52Sx_8XeU