United Kingdom
Asked — Edited

Speaking The Time

@Rich.

I was looking through the forum and came across a thread where you mentioned you made a script to speak the current time. I tried it out but I'm having a problem with it. When I start the script, it only says "The time is dollar the time". Is there something that I need to change in the syntax as I know this posted a year ago and something might have changed.


IF ($hour>12)
  $hour_word=$hour-12
ELSE 
  $hour_word=$hour
ENDIF 
  
IF ($hour_word=0)
  $hour_word=12
ENDIF 
  
IF ($Minute = 0)
  $thetime = "$hour_word"
ELSEIF ($minute = 1)
  $thetime = "one minute past $hour_word"
ELSEIF ($minute = 15)
  $thetime = "quarter past $hour_word"
ELSEIF ($minute = 30)
  $thetime = "half past $hour_word"
ELSEIF ($minute  30)
  $hour_word=$hour_word+1
  $minute_word = 60-$minute
  $thetime = "$minute_word minutes to $hour_word"
ELSE 
  $thetime = "$hour_word $minute"
ENDIF 
  
IF ($hour 21)
  $thetime = "$thetime at night"
ELSEIF ($hour > 17)
  $thetime = "$thetime in the evening"
ELSEIF ($hour > 11)
  $thetime = "$thetime in the afternoon"
ENDIF 
  
Say("The time is $thetime")

Many thanks.


ARC Pro

Upgrade to ARC Pro

Stay on the cutting edge of robotics with ARC Pro, guaranteeing that your robot is always ahead of the game.

United Kingdom
#17  

Just jumped on this quickly while I had a few minutes spare. it's by no means the final draft and I am certain I can improve on it (for one the IFs can use and and or to make less code) but give this a whirl.


# Speak the time phrase script
# Written for: EZ-Script
# Author: Rich Pyke
# Version: 2014.12.12

# Description: Speak the current time in 12 hour
# format and in a human-like style phrase.

# Variables used:
# $hour (built in variable)
# $minute (built in variable)
$spokenhour = $hour
$spokenminute = $minute
$timeofday = 0
$timephrase = 0
$precedingminutes = 0

# Main Script Code


# Get the current minutes and reformat as needed
IF($minute = 0)
  $spokenminute = "o clock"
  $precedingminutes = 0
ElseIf($minute < 15)
  $spokenminute = $minute + "minutes past"
  $precedingminutes = 1
ElseIf($minute = 15)
  $spokenminutes = "quarter past"
  $precedingminutes = 1
ElseIf($minute < 30)
  $spokenminutes = $minute + "minutes past"
  $precedingminutes = 1
ElseIf($minute = 30)
  $spokenminute = "half past"
  $precedingminutes = 1
ElseIf($minute < 45)
  $spokenminute = (60 - $minute) + "minutes to"
  $spokenhour = $hour + 1
  $precedingminutes = 1
ElseIf($minute = 45)
  $spokenminute = "quarter to"
  $spokenhour = $hour + 1
  $precedingminutes = 1
Else
  $spokenminute = 60 - $minute
  $spokenminute =  $spokenminute + "to"
  $spokenhour = $hour + 1
  $precedingminutes = 1
EndIf

# Get the current hour and reformat to 12 hour as needed
IF($spokenhour > 12)
  $spokenhour = $spokenhour - 12
EndIf

# Work out the time of day
If($hour < 12)
  $timeofday = " in the morning"
ElseIf($hour < 19)
  $timeofday = "in the evening"
Else
  $timeofday = "at night"
EndIf

# Create the time phrase
IF($precedingminutes = 1)
  $timephrase = "The time is " + $spokenminute + " " + $spokenhour + " " + $timeofday
ELSE
  $timephrase = "The time is " + $spokenhour + " " + $spokenminute + " " + $timeofday
ENDIF

Say($timephrase)
HALT()

Not fully tested but tested between 6:25 and 6:35 PM and it worked OK. I'm not entirely sure what happens at 11pm and later though but will try it out in a few hours time if I get chance.

It's a starter anyway, feel free to make it better ;)

United Kingdom
#18  

Nice one. Thanks Rich. I just got home so I will try it out this evening and let you know how it goes. Looking forward to 11pm (if I'm still awake). :P

United Kingdom
#19  

Thinking about it, 11pm will be fine. It's when it passes 12:30 am it may give funny times, possibly, I'll have to check that ElseIf out a bit more:)

United Kingdom
#20  

I just tried it out and it sounds really nice. Much more human sounding. Lol, NO chance of me being awake at 12:30. I'll be lucky if I make it to 9:30. tired tired

United Kingdom
#21  

I personally think it's too specific. When did anyone last say "It's 17 minutes to 9"? I plan to round to 5 minute intervals for the one I will be using.

But the script shows a nice big if nest and some other functions which (hopefully) will help people get to grips with the programming:)