Award
Congratulations Richard R, 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.

Random Personality Script Not Running

Assistance Requested

Help CochranRobotics 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.

CochranRobotics claims to have checked these sources:
 
#1

I cant seem to get this script to do anything other than to assign a random number to the $personality variable. When I run the script, it changes the variable and does nothing. I have been watching the variable change and it does hit 1, 2, 10 and 19 but nothing fires from there. Does anyone see anything wrong with the script? I am on version 2014.5.27 of the EZ-Builder software and this is running in a script manager. Thanks for any help you can provide.

Code:


# Get a response value
$personality = GetRandom(0,19)

If($personality = 0)
# dance

ElseIf($personality = 1)
ControlCommand("Script Manager", ScriptStart, "TellMeAJoke")

ElseIf($personality = 2)
ControlCommand("Script Manager", ScriptStart, "SayRandomFact")

ElseIf($personality = 3)
# ask if anyone else is getting hungery

ElseIf($personality = 4)
# Call Maples name and start autonimous movement

ElseIf($personality = 5)
# make a huge expression then look down with your arms hung low.

ElseIf($personality = 6)
#check the temp and if it is hot or cold, make a comment about it

ElseIf($personality = 7)
#Act like you are reading

ElseIf($personality = 8)
#look up and find someone, identify them, and ask how they are doing today.

ElseIf($personality = 9)
#see if it dark and if so, see if it is after 9 PM. if so, ask if it is bedtime

ElseIf($personality = 10)
Say("Can I chase the ball?")
:ChaseBall
WaitForChange($QuestionsAnswer)
if ($QuestionAnswer = "yes")
ControlCommand("Script Manager", ScriptStart, "ChaseColor")
Elseif ($QuestionAnswer = "no")
#look sad
else
say("I did not hear you. Can I chase the ball?")
endif
If($QuestionAnswer = "")
Goto(ChaseBall)
endif
$QuestionAnswer = ""

ElseIf($personality = 11)
say("Did you know it is ")
ControlCommand("Script Manager", ScriptStart, "SayTime")

ElseIf($personality = 12)
#autonomous collision avoidance

ElseIf($personality = 13)
#look mad and play mad sound

ElseIf($personality = 14)
#sway from side to side and play song

ElseIf($personality = 15)
#find someone and wave at them

ElseIf($personality = 16)
#look sad and say eve

ElseIf($personality = 17)
#scratch head - Thinking

ElseIf($personality = 18)
#Raise arms and gears
#Make yawn sound

ElseIf($personality = 19)
#look up and find someone
ControlCommand("Script Manager", ScriptStart, "FollowMotion")
ControlCommand("Soundboard", Track_4)
ControlCommand("Script Manager", ScriptStart, "kiss")
Left(255,1000)
Right(255,1000)
else
endif

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

It looks like the there may be an issue with elseif. I rewrote this as follows and it seems to be working. I haven't checked all of the personalities yet, but EZ-Builder seems to be liking it better like this.

Code:


:GeneratePersonality
# Get a response value
$personality = GetRandom(1,20)
print($personality)

If($personality = 1)
ControlCommand("Script Manager", ScriptStart, "TellMeAJoke")
endif

If($personality = 2)
ControlCommand("Script Manager", ScriptStart, "SayRandomFact")
endif

If($personality=3)
endif

If($personality = 4)
endif

If($personality = 5)
endif

If($personality = 6)
endif

If($personality = 7)
endif

If($personality = 8)
endif

If($personality = 9)
endif

If($personality = 10)
Say("Can I chase the ball?")
:Ball
WaitForChange($QuestionsAnswer)

if ($QuestionAnswer = "yes")
ControlCommand("Script Manager", ScriptStart, "ChaseColor")

Elseif ($QuestionAnswer = "no")
#look sad

else
say("I did not hear you. Can I chase the ball?")

endif

If($QuestionAnswer = "")
Goto(Ball)
endif
$QuestionAnswer = ""
endif

If($personality = 11)
say("Did you know it is ")
ControlCommand("Script Manager", ScriptStart, "SayTime")
endif

If($personality = 12)
endif

If($personality = 13)
endif

If($personality = 14)
endif

If($personality = 15)
endif

If($personality = 16)
endif

If($personality = 17)
endif

If($personality = 18)
endif

If($personality = 19)
#look up and find someone
ControlCommand("Script Manager", ScriptStart, "FollowMotion")
ControlCommand("Soundboard", Track_4)
ControlCommand("Script Manager", ScriptStart, "kiss")
Left(255,1000)
Right(255,1000)
endif

If($personality = 20)
endif

SleepRandom(10000,60000)
goto(GeneratePersonality)

#3

I won't tell you the solution right away - but i'll ask questions to help you solve it..


Q. Where does $QuestionsAnswer get set to a value, ever?

#4

It gets set by voice recognition.
When someone says Yes, it gets set to "Yes", and when someone says no, it gets set to "no". The parameter is created during the startup script and is initially set to "".

here is the startup script

Code:


$x = 0
$lastDay = $day
$batteryLEDs = "BlinkLights"
$rsstext = ""
$QuestionAnswer = ""
# battery monitor
ControlCommand("Camera", CameraStop)
ControlCommand("Radar Scan", PauseOn)
ControlCommand("Light", PauseOn)
ControlCommand("RightEdge Detection", PauseOn)
ControlCommand("LeftEdgeDetection", PauseOn)
ControlCommand("Floor Map", PauseOn)
ControlCommand("Soundboard", Stop)
ControlCommand("Battery Cell 1", PauseOn)
ControlCommand("Compass", PauseOn)
ControlCommand("Battery Cell 2", PauseOn)
ControlCommand("Temp", PauseOn)
#set decent voice
ControlCommand("Speech Settings", SetVoice, "Microsoft Hazel Desktop")
ControlCommand("Speech Settings", SetVoiceAge, "Teen")
ControlCommand("Speech Settings", SetVoiceEmphasis, "Strong")

#Start monitoring temp
ControlCommand("Script Manager", ScriptStart, "MonitorTemps")
ControlCommand("Script Manager", ScriptStart, "MonitorLight")
#Play wakeup sound
ControlCommand("Soundboard", Track_13)

# arms
servo(d8, 24)
servo(d9, 72)
servoSpeed(d8, 2)
servoSpeed(d9, 2)

# head
servo(d6, 32)
servo(d7, 56)
servoSpeed(d6, 2)
servoSpeed(d7, 2)

# camera power
set(d19, on)

ControlCommand("camera", cameraservotrackenable)
ControlCommand("camera", cameramovementtrackdisable)
ControlCommand("Camera", cameraview)

#controlCommand("Personality Generator", pauseoff)
ControlCommand("Script Manager", ScriptStart, "Personality Generator")

ControlCommand("Speech Recognition", PauseOff)

ControlCommand("Script Manager", ScriptStart, "BatteryMonitor")
if ($batteryLEDs = "BlinkLights")
say("There is an issue with the battery. Please correct.")
stop()
elseif ($batteryLEDs = "LightsOff")
say("Battery power is very low. Please put in a new battery.")
stop()
else
endif

# This must be at end of script because
# the command will stop even this script
# ControlCommand("Script Manager", ScriptStopAll)

#5

Found it. Thanks DJ.

#6

Still an issue. When I run the script with the elseif commands, I get this
Start
1: :GeneratePersonality
3: $personality = GetRandom(0,19)
5: If($personality = 0)
85: endif
86: SleepRandom(10000,60000)

This is the script I am using to get these results.

Code:


:GeneratePersonality
$personality = GetRandom(0,19)

If($personality = 0)
# dance

ElseIf($personality = 1)
ControlCommand("Script Manager", ScriptStart, "TellMeAJoke")

ElseIf($personality = 2)
ControlCommand("Script Manager", ScriptStart, "SayRandomFact")

ElseIf($personality = 3)
# ask if anyone else is getting hungery

ElseIf($personality = 4)
# Call Maples name and start autonimous movement

ElseIf($personality = 5)
# make a huge expression then look down with your arms hung low.

ElseIf($personality = 6)
#check the temp and if it is hot or cold, make a comment about it

ElseIf($personality = 7)
#Act like you are reading

ElseIf($personality = 8)
#look up and find someone, identify them, and ask how they are doing today.

ElseIf($personality = 9)
#see if it dark and if so, see if it is after 9 PM. if so, ask if it is bedtime

ElseIf($personality = 10)
Say("Can I chase the ball?")
:ChaseBall
WaitForChange($QuestionAnswer)
if ($QuestionAnswer = "yes")
ControlCommand("Script Manager", ScriptStart, "ChaseColor")
Elseif ($QuestionAnswer = "no")
#look sad
else
say("I did not hear you. Can I chase the ball?")
endif
If($QuestionAnswer = "")
Goto(ChaseBall)
endif
$QuestionAnswer = ""

ElseIf($personality = 11)
say("Did you know it is ")
ControlCommand("Script Manager", ScriptStart, "SayTime")

ElseIf($personality = 12)
#autonomous collision avoidance

ElseIf($personality = 13)
#look mad and play mad sound

ElseIf($personality = 14)
#sway from side to side and play song

ElseIf($personality = 15)
#find someone and wave at them

ElseIf($personality = 16)
#look sad and say eve

ElseIf($personality = 17)
#scratch head - Thinking

ElseIf($personality = 18)
#Raise arms and gears
#Make yawn sound

ElseIf($personality = 19)
#look up and find someone
ControlCommand("Script Manager", ScriptStart, "FollowMotion")
ControlCommand("Soundboard", Track_4)
ControlCommand("Script Manager", ScriptStart, "kiss")
Left(255,1000)
Right(255,1000)
else
endif
SleepRandom(10000,60000)
goto(GeneratePersonality)



$Personality = 12. Why is it stopping at line 5 and not making it to the elseif in line 8 or any of the others.

When running with just if statements, it gets through the script showing all like numbers like this.
Start
1: :GeneratePersonality
3: $personality = GetRandom(1,20)
4: print($personality)
> 17
6: If($personality = 1)
8: endif
10: If($personality = 2)
12: endif
14: If($personality=3)
15: endif
17: If($personality = 4)
18: endif
20: If($personality = 5)
21: endif
23: If($personality = 6)
24: endif
26: If($personality = 7)
27: endif
29: If($personality = 8)
30: endif
32: If($personality = 9)
33: endif
35: If($personality = 10)
55: endif
57: If($personality = 11)
60: endif
62: If($personality = 12)
63: endif
65: If($personality = 13)
66: endif
68: If($personality = 14)
69: endif
71: If($personality = 15)
72: endif
74: If($personality = 16)
75: endif
77: If($personality = 17)
78: endif
80: If($personality = 18)
81: endif
83: If($personality = 19)
90: endif
92: If($personality = 20)
93: endif
95: SleepRandom(10000,60000)

This is the script I am using for these results

Code:


:GeneratePersonality
# Get a response value
$personality = GetRandom(1,20)
print($personality)

If($personality = 1)
ControlCommand("Script Manager", ScriptStart, "TellMeAJoke")
endif

If($personality = 2)
ControlCommand("Script Manager", ScriptStart, "SayRandomFact")
endif

If($personality=3)
endif

If($personality = 4)
endif

If($personality = 5)
endif

If($personality = 6)
endif

If($personality = 7)
endif

If($personality = 8)
endif

If($personality = 9)
endif

If($personality = 10)
Say("Can I chase the ball?")
:Ball
WaitForChange($QuestionsAnswer)

if ($QuestionAnswer = "yes")
ControlCommand("Script Manager", ScriptStart, "ChaseColor")

Elseif ($QuestionAnswer = "no")
#look sad

else
say("I did not hear you. Can I chase the ball?")

endif

If($QuestionAnswer = "")
Goto(Ball)
endif
$QuestionAnswer = ""
endif

If($personality = 11)
say("Did you know it is ")
ControlCommand("Script Manager", ScriptStart, "SayTime")
endif

If($personality = 12)
endif

If($personality = 13)
endif

If($personality = 14)
endif

If($personality = 15)
endif

If($personality = 16)
endif

If($personality = 17)
endif

If($personality = 18)
endif

If($personality = 19)
#look up and find someone
ControlCommand("Script Manager", ScriptStart, "FollowMotion")
ControlCommand("Soundboard", Track_4)
ControlCommand("Script Manager", ScriptStart, "kiss")
Left(255,1000)
Right(255,1000)
endif

If($personality = 20)
endif

SleepRandom(10000,60000)
goto(GeneratePersonality)

#7

Might not make any difference whatsoever, but maybe try using GetRandomUnique(1,20) instead...? I also noticed you use random numbers 0,19 with the script using elseif and 1,20 with using just the "if" statements... maybe it is the 0 value as a random# that is giving you the problem...?

#8

how does the $QuestionsAnswer get data from the "speech recognition"? What command is populating the value to $QuestionsAnswer from speech recognition?

Do you think WaitForChange() is populating $QuestionsAnswer from speech recognition? Smile

You're almost there!

#9

Bingo.... found your problem! Drop your linen and start your grin'in ..... your variable $QuestionsAnswer.... look closely at it..... Winky....DJ you're too funny....

#10

If you are implying that the issue is with the variable $QuestionsAnswer having the "s" between "$Question" and "Answer", I corrected that silly mistake. Thanks DJ for finding that. It would have driven me crazy, but that isn't the issue that I am seeing.

To try to get to the bottom of what is going on, I did this.

Code:


:GeneratePersonality
$personality = GetRandom(0,2)
print($personality)
If($personality = 0)

ElseIf($personality = 1)
ControlCommand("Script Manager", ScriptStart, "TellMeAJoke")

ElseIf($personality = 2)
ControlCommand("Script Manager", ScriptStart, "SayRandomFact")
else
endif
SleepRandom(1000,2000)
goto(GeneratePersonality)



This works.

However, when I change the script to this

Code:


:GeneratePersonality
$personality = GetRandom(0,2)
print($personality)
If($personality = 0)
#Breaking The Script

ElseIf($personality = 1)
ControlCommand("Script Manager", ScriptStart, "TellMeAJoke")

ElseIf($personality = 2)
ControlCommand("Script Manager", ScriptStart, "SayRandomFact")
else
endif
SleepRandom(1000,2000)
goto(GeneratePersonality)



The script breaks. It looks like there is an issue with placing #comments inside of an if statement?