Award
Congratulations ptp, for answering the question and has received an EZ-Credit award! Share what you have learned and create a tutorial to help others by clicking here.

Function For Counting Pulses On A Digital Input

Assistance Requested

Help Jim Milan with their question and receive $10 of EZ-Credit to get more robots and parts from our store. The following information was provided about their previous efforts searching tutorials for a resolution.

Product: (click to view product details)

EZ-Builder Control: (click to view manual page)

Jim Milan claims to have checked these sources:
 
#1

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.

I have found a few conversations, tutorials and activities that may help with your question. Take a look at these links. I've sorted them by what I believe to be most relevant but that is not always the case as I'm still learning.


Also, consider reviewing the Learn section for informative lessons and activities. Check it out!


#2

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.

#3

@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.

EZBuilder (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" :

Code:


#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)

#4

@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