Asked — Edited
Resolved Resolved by JustinRatliff!

Comparing Time

I'm having a headache trying to comparing time. I have a variable $CustomerTime . It holds the last time motion was detected in the customer area. My plan is to have my robot look like he has fallen asleep. So I have the current time $time being stuffed into $CustomerTime each time motion is detected. So I want the robot to go to sleep when there has not been any motion in the last 10 minuets. I have the sleep and wake scripts working fine. But this comparing time is a pain.


ARC Pro

Upgrade to ARC Pro

ARC Pro is more than a tool; it's a creative playground for robot enthusiasts, where you can turn your wildest ideas into reality.

#1  

Are you going to share your code on how you are doing that, or trying to do that?

#2  

$waitUntilDate = ""
$waitUntilTime = ""
$dateLength = 0
$waitUntilDate = addminutes(cdatetime($date),10)
$dateLength = Length($WaitUntilDate)
$waitUntilTime = substring($waitUntilDate,$DateLength-11,11)
if(substring($waitUntilTime,0,1)=" ")
  $waitUntilTime = substring($waitUntilTime,1,6)
else
  $waitUntilTime = substring($waitUntilTime,0,7)
endif
$waitUntilHour = substring($waitUntilTime,0,1)
$waitUntilMinute = substring($waitUntilTime,2,2)

#use this in a script to wait until an hour and minute to run something.
#WaitUntilTime( $waitUntilHour, $waitUntilMinute ) 

#3  

you will have to adjust this some but it is an example of how you could go about doing this. More logic would need to be put in place to account for hours greater than 9, but it could easily be moved up to be held within the if statement.

#4  

This is perhaps an easier way to perform what you are seeking. Instead of making $CustomerTime = $time which gives you hour, minutes and seconds, you really only need to look at the minutes after motion is detected.


#When motion is detected
if ($Motion = "Y")
$CustomerTime = $Minute
EndIf

#to go sleep
if ($Minute > $CustomerTime + 9)
Print ("I'm sleeping")
#run your print sleep script
endif

#5  

That won't work if it goes past 60. Your logic only works if the current minute is less than 52. You have to account for the hour also.

#6  

Sorry I did not post my code. There wasn't enough code to call it code yet. Bt here it is:


# check for motion
if(getDigital(D18)=1)
Print (" associate detected")
$Associate = 1
$AssociateTime = $time
sayEZB(" I SEE a associate")
sleep(3000)
endif

if(getDigital(D17)=1)
$Customer = 1
$CustomerTime = $time
Print ("customer detected")
sayEZB(" I SEE an Customer. ")
sleep(3000)
endif

 #Lets see if its time to sleep.
 $SleepTrip = $time +  5
 if($AssociateTime =   ) or ($CustomerTime =  )
 
 endif



As you can see I did not get vary far. I was stumbling over the hours vers min. In my variable $AssociateTime holds the hole time and not just the min, because it would be possible for the minuets to be less then the limit and yet have the hour gone over the limit. So I gues first I must compare hours then minuets. I'm thinking I will re doo my $AssociateTime and change that to $AssociateTimeHour and on $AssociateTimeMin . I will then compare the hours first and last the min. hhmmm.....

#7  

I think he only wants to check to see if 10 minutes have passed with no Motion for his robot to pretend to sleep.

If you needed to go passed 60, you would need to incorporate the $hour variable, and that is very good catch David, if the time Motion was detected happened to be 50 or higher the logic of the script would fail, but it can be fixed with another variable by checking the hour.


#When motion is detected
if ($Motion = "Y")
$CustomerTime = $Minute
$CustomerHour = $Hour
EndIf

#to go sleep
if ($Minute > $CustomerTime + 9)
Print ("I'm sleeping")
#run your print sleep script
Elseif ($hour > $CustomerHour)
Print ("I'm going to sleep")
#run your print sleep script
Elseif ($hour < $CustomerHour)
Print ("I'm going to sleep now")
#run your print sleep script

endif

Edited: I added a less than hour check incase the time was 2300 hours

#8  

$waitUntilDate = addminutes(cdatetime($date),10)
$dateLength = Length($WaitUntilDate)
$waitUntilTime = substring($waitUntilDate,$DateLength-11,11)
if(substring($waitUntilTime,0,1)=" ")
$waitUntilTime = substring($waitUntilTime,1,6)
$waitUntilHour = substring($waitUntilTime,0,1)
$waitUntilMinute = substring($waitUntilTime,2,2)
else
$waitUntilTime = substring($waitUntilTime,0,7)
$waitUntilHour = substring($waitUntilTime,0,2)
$waitUntilMinute = substring($waitUntilTime,3,2)
endif

#use this in a script to wait until an hour and minute to run something.
#WaitUntilTime( $waitUntilHour, $waitUntilMinute )

this allows the system to calculate the hour and minute calculation for you.