Asked — Edited
Resolved Resolved by ptp!

Function For Counting Pulses On A Digital Input

I need to count the number of times a digital input detects state changes within a specified time window (100ms to 1000ms). Any suggestions?

Thanks.


ARC Pro

Upgrade to ARC Pro

Get access to the latest features and updates before they're released. You'll have everything that's needed to unleash your robot's potential!

PRO
USA
#1  

with a loop, use the WaitForChange function to detect the change of the digital input.

I will post a code example when I get to my computer.

PRO
USA
#2  

@rz90208: WaitForChange evaluates the condition every 10 ms, then you have the EZ-Script parser and communications overhead.

@Jim Milan: if you need accuracy and/or the transitions are fast you will need a micro-controller e.g. Arduino, PIC.

ARC (Desktop/Mobile) applications runs the logic code, EZB only handles the hardware.

you can try the EZ-Script maybe can work if your requirements are not "Real Time" :


#Monitor Port D23 changes for one second")

$start_date=$date
$last_value=GetDigital(D23)
$number_of_changes=0

:loop
$current_value=GetDigital(D23)

if ($current_value!=$last_value)
  $last_value=$current_value
  $number_of_changes=$number_of_changes+1  
endif

$timespan=CDateTime($date)-CDateTime($start_date)
$timespan_sec=FmtTimeSpan($timespan, "ss")

if ($timespan_sec<1)
  #Same timeout used in WaitForChange(...) 
  Sleep(10)
  Goto(loop)
endif

print("number_of_changes: " + $number_of_changes)
#3  

@ptp Thanks, your code worked. It was the kick start that I needed. I'm using a Parallax X-Band (10.525 GHz) Motion Detector in my latest ARMadeus robot. The unique feature of this sensor is that is capable of detecting motion though walls. I understand the 1 second limitation by using the system $date function. Since the sensor has an enable pin, I may tinker with a combination of Set(DigitalPort, ON/OFF) and Sleep(ms) commands to generate an adjustable enable pulse.

Jim Milan