메뉴 바로가기

서브메뉴 바로가기

본문 바로가기

logo

문의(질문)하기

문의하기
ZEO 자료실
ZEO 자료실
ZEO-S 제품 자료입니다.

ZEO-S, Pulse Counter, C#

예제 조회 수 5516 추천 수 0 2013.08.29 17:15:45

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;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
 using System.Text;
using System.Windows.Forms;
using ZeoDotNetLib;

namespace OutputTest1
{
  public partial class Form1 : Form
  {
    ZeoLib ZEO = new ZeoLib();
    UInt16[] cntLast = new UInt16[8];// 카운터 변화량 계산을 위해 최근 값을 저장


    public Form1()
    {
      InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
      this.ZEO.Open();
      this.ZEO.InitZeo(0);
      this.label1.Text = this.ZEO.ToString();

      this.ZEO.InitCount(0);
      this.ZEO.InitCount(1);
      this.ZEO.InitCount(2);
      this.ZEO.InitCount(3);
      this.ZEO.InitCount(4);
      this.ZEO.InitCount(5);
      this.ZEO.InitCount(6);
      this.ZEO.InitCount(7);

    }

 
    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
      this.ZEO.Close();
     }

    public void GetCounts()
    {
      if (!this.ZEO.IsOpened) return;

      StringBuilder sb = new StringBuilder();
      UInt16[] _cnt = null;


      // 한번에 하나의 카운터만 읽기 (상황에 맞게 선택 사용)
      //UInt16   _cnt2 = 0;
      //this.ZEO.GetCount(0, out _cnt2);

      // 한번에 모든 카운터 읽기  (상황에 맞게 선택 사용)
      this.ZEO.GetCounts(out _cnt);

      this.lblCount0.Text = _cnt[0].ToString() + ".." + (_cnt[0] - cntLast[0]).ToString() + "";
      this.lblCount1.Text = _cnt[1].ToString() + ".." + (_cnt[1] - cntLast[1]).ToString() + "";
      this.lblCount2.Text = _cnt[2].ToString() + ".." + (_cnt[2] - cntLast[2]).ToString() + ""; ;
      this.lblCount4.Text = _cnt[4].ToString() + ".." + (_cnt[4] - cntLast[4]).ToString() + ""; ;
      this.lblCount5.Text = _cnt[5].ToString() + ".." + (_cnt[5] - cntLast[5]).ToString() + ""; ;
      this.lblCount6.Text = _cnt[6].ToString() + ".." + (_cnt[6] - cntLast[6]).ToString() + ""; ;

      Buffer.BlockCopy(_cnt, 0, this.cntLast, 0, cntLast.Length * 2);
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
      this.GetCounts();
    }
  }
}

 

 

 

 

 

 

 

 

 

 

 

ReadPort() 와 다른 점

 

이 예제를 보면 ReadPort() 를 사용하여 HIGH, LOW 를 비교하여 카운터해도 됩니다. 하지만 ReadPort()를 사용할 경우 정확한 값을 얻기 힘듭니다. 그 이유는 ReadPort()의 경우 호출되는 순간의 상태를 읽는 것이라 빠르게 변하는 모든 값을 읽기가 거의 불가능하기 때문입니다. 예를 들어 1초에 1000번 정도 상태를 읽으려면 1초에 1000번을 읽어야 하는데 ZEO-S에서는 거의 불가능한 일입니다. 이 때는 Pulse Counter 를 사용해야 합니다.

 

Pulse Counter는 1초에 10000번 이상 변하는 상태도 다 읽어 낼 수 있기 때문입니다.

 

  

 

전체 코드 Visual C# 2008 용

 

 다운로드

관련 문서가 검색되었습니다.
  1. [2019/04/22] [C# 코드]H-Server3 원격으로 RGB 색상 제어 by WhiteAT (355)
  2. [2019/04/22] [기본예제]H-Server3 원격으로 RGB 색상 제어 by WhiteAT (105)
  3. [2015/06/08] ZEO-S C++ 라이브러리 ver. 1.01 by WhiteAT (0)
  4. [2015/06/01] ZEO-S C++ 라이브러리 ver. 1.0 by WhiteAT (0)
  5. [2015/05/27] WIFI로 LCD 제어 (TCP/IP 사용) by WhiteAT (1281)
  6. [2015/04/15] 부저 실험 by WhiteAT (6307)
  7. [2015/03/15] 블루투스로 스텝모터 제어 by WhiteAT (3773)
  8. [2015/03/15] 시리얼 포트로 스텝모터 제어 by WhiteAT (2526)
  9. [2014/11/28] 컴퓨터-아두이노 간의 블루투스 통신 (채팅) by WhiteAT (3875)
  10. [2014/05/13] 0. 3개 이상의 Multi Task 작업 by WhiteAT (3029)
List of Articles
번호 제목
공지 예제 ZEO 예제
공지 일반 ZEO 모듈,매뉴얼,드라이버,라이브러리,관리툴
16 예제 ZEO-S, CDS로 빛 밝기 -> LED ON/OFF
15 제품 ZEO-IO2 BOARD [ZEO IO 실험 보드2] file
14 예제 ZEO-S PWM 펄스를 Pulse Counter로 읽기, C#
» 예제 ZEO-S, Pulse Counter, C#
12 예제 ZEO-S, 스위치로 LED ON/OFF, C#
11 예제 ZEO-S, LED 연속으로 이동, C#
10 예제 ZEO-S, LED 이동 속도 조절, C#
9 제품 ZEO-IO BOARD – ZEO IO 실험 보드 file
8 예제 인체감지 센서 모듈로 침입자 감시 - 02. 프로그램 작성
7 예제 인체감지 센서 모듈로 침입자 감시- 01 하드웨어 연결
6 예제 ZEO-S 모듈로 PWM 펄스 11개 제어
5 예제 ZEO-S 모듈로 서보모터 제어
4 제품 ZEO 모듈이란? file
3 예제 포트 출력 테스트 - 프로그램(C# 2008)