ZEO-S 의 Pulse Counter 기능으로 펄스 카운터를 쉽게 구할 수 있습니다.
이 기능은 엔코더 모터 회전 수를 계산하는데 많이 사용되는데, 여기서는 버튼의 눌림을 예로 들었으며
모터 회전수 계산은 다음에 올리도록 하겠습니다.
준비
ZEO-IO BOARD에 연결하여 0.5초 간격으로 스위치 눌림 횟수를 확인해 보는 예제입니다.
Pulse Counter0, 1, 2, 4, 5, 6 이 사용되며 버튼의 눌림 횟수의 누적 값과 현재 값을 화면에 표시해 보겠습니다.
ZEO-S 와 스위치의 연결 상태는 아래와 같습니다.
스위치 |
ZEO-S |
|
SW2 |
PA13 |
|
SW3 |
PA14 |
|
SW4 |
PA15 |
|
SW6 |
PB13 |
|
SW7 |
PB13 |
|
SW8 |
PB14 |
SW, SW3, SW4, SW6, SW7, SW8이 각각 눌린 누적 횟수는 15, 17, 19, 8, 28, 16 이며
0.5초 동안에 눌린 횟수(즉, 변화값 )는 2,5,2,4,5,1 입니다.
SW, SW3, SW4, SW6, SW7, SW8이 각각 눌린 누적 횟수는 55, 53, 55, 30, 48, 63 이며
0.5초 동안에 눌린 횟수(즉, 변화값)는 3,5,3,7,6,12 입니다.
코드 C#
using System; namespace OutputTest1
private void Form1_Load(object sender, EventArgs e) this.ZEO.InitCount(0); } public void GetCounts() StringBuilder sb = new StringBuilder();
// 한번에 모든 카운터 읽기 (상황에 맞게 선택 사용) this.lblCount0.Text = _cnt[0].ToString() + ".." + (_cnt[0] - cntLast[0]).ToString() + ""; Buffer.BlockCopy(_cnt, 0, this.cntLast, 0, cntLast.Length * 2); private void timer1_Tick(object sender, EventArgs e) |
ReadPort() 와 다른 점
이 예제를 보면 ReadPort() 를 사용하여 HIGH, LOW 를 비교하여 카운터해도 됩니다. 하지만 ReadPort()를 사용할 경우 정확한 값을 얻기 힘듭니다. 그 이유는 ReadPort()의 경우 호출되는 순간의 상태를 읽는 것이라 빠르게 변하는 모든 값을 읽기가 거의 불가능하기 때문입니다. 예를 들어 1초에 1000번 정도 상태를 읽으려면 1초에 1000번을 읽어야 하는데 ZEO-S에서는 거의 불가능한 일입니다. 이 때는 Pulse Counter 를 사용해야 합니다.
Pulse Counter는 1초에 10000번 이상 변하는 상태도 다 읽어 낼 수 있기 때문입니다.
전체 코드 Visual C# 2008 용
'ZEO 시리즈' 카테고리의 다른 글
ZEO-IO2 BOARD – ZEO IO 실험 보드2 (0) | 2013.10.28 |
---|---|
ZEO-S PWM 펄스를 Pulse Counter로 읽기, C# (0) | 2013.09.02 |
ZEO-S, 스위치로 LED ON/OFF, C# (0) | 2013.06.13 |
ZEO-S, LED 연속으로 이동, C# (0) | 2013.06.08 |
ZEO-S, LED 이동 속도 조절, C# (0) | 2013.06.06 |
댓글을 달아 주세요