PDA

View Full Version : SAY IT, Help



paulvive
01-12-2012, 06:41 PM
I GET ALL THE WAY TO GENERATE CODE ON THE STAMP GUI. I RUN THE CODE THE SCREEN TURNS BLUE AND i GET A MESSAGE GROUP 0 "WAITING FOR COMMAND". I THOUGHT iWAS USING WORDSET 2 THAT CONTAINED THE WORD SET i WANTED TO USE. hOW DO I GET THE PROGRAM TO USE WORDSET 2 AND WHAT COMMAND WOULD IT BE WAITING FOR. hELP

Martin_H
01-12-2012, 07:47 PM
Post the code you are running and we can take a look. Put these tags around it: [ code] [ /code] but remove the space between the [ and the characters that follow.

paulvive
01-12-2012, 09:33 PM
It's a long code. It's "say it.bs2". I can post it anyway but I'm not sure if I follow what you want me to do with the tags? Do you want me to put the parenthesis you indicated with the code between?

Thanks for your help but nothing seems to be going right with me and this module. If I wasn't so stubborn I would have given up on it.

Duane Degn
01-12-2012, 09:36 PM
Paul,

There's more information about posting code here:

http://forums.parallax.com/attachment.php?attachmentid=78421&d=1297987572 (http://forums.parallax.com/showthread.php?129690&p=978076&viewfull=1#post9780 76)

graffix
01-12-2012, 09:57 PM
Try a quick search of the Sayit Module on the forums.Xanatos has helped a couple people recently.

xanatos
01-12-2012, 11:34 PM
I'm watching this but swamped at the moment... I know what you probably need, which is to have the system switch to another command bank when it hears the wake-up word. Once I get myself out from under the gun on my other projects, I'll see where this has gotten to. I do know for certain that the exact answer to your question is somewhere under my "Speaking, voice recognizing home automation system" thread.

Dave

paulvive
01-13-2012, 01:39 PM
[' {$STAMP BS2}
' {$PBASIC 2.5}
' COM Parameters
COM_RX PIN 0 ' rx pin
COM_TX PIN 2 ' tx pin
COM_SPEED CON 84 ' baud 9600
COM_10MS CON 10 ' 10ms unit
' Protocol Command
CMD_BREAK CON "b" ' abort recog or ping
CMD_SLEEP CON "s" ' go to power down
CMD_KNOB CON "k" ' set si knob <1>
CMD_LEVEL CON "v" ' set sd level <1>
CMD_LANGUAGE CON "l" ' set si language <1>
CMD_TIMEOUT CON "o" ' set timeout <1>
CMD_RECOG_SI CON "i" ' do si recog from ws <1>
CMD_RECOG_SD CON "d" ' do sd recog at group <1> (0 = trigger mixed si/sd)
' Protocol Status
STS_AWAKEN CON "w" ' back from power down mode
STS_ERROR CON "e" ' signal error code <1-2>
STS_INVALID CON "v" ' invalid command or argument
STS_TIMEOUT CON "t" ' timeout expired
STS_INTERR CON "i" ' back from aborted recognition (see 'break')
STS_SUCCESS CON "o" ' no errors status
STS_RESULT CON "r" ' recognised sd command <1> - training similar to sd <1>
STS_SIMILAR CON "s" ' recognised si <1> (in mixed si/sd) - training similar to si <1>
' Protocol arguments are in the range 0x40 (-1) TO 0x60 (+31) inclusive
ARG_MIN CON 64 ' 0x40
ARG_MAX CON 96 ' 0x60
ARG_ZERO CON 65 ' 0x41
ARG_ACK CON 32 ' 0x20 'TO READ more status arguments
'Groups and Commands
GROUP_1 CON 1 '(Command count: 1)
G1_UNNAMED_COMMAND_0 CON 0
RES_ERROR CON 255
RES_TIMEOUT CON 254
RES_COMMFAIL CON 253
RES_BUILTIN CON 32

'Robot Constant
VRLED PIN 4
'Global Variable
VRA VAR Byte
VRA1 VAR Byte
VRGROUP VAR Byte
VRCOMMAND VAR Byte
' Main Start
INPUT COM_RX
HIGH COM_TX
Restart:
LOW VRLED
VRGROUP = 0
DEBUG CR, "Setting up VRbot... "
'Wake up or stop recognition
GOSUB VR_Wakeup
DEBUG "awake... "
'Set SI Language
VRA1 = 0
GOSUB VR_SetLanguage
DEBUG "language ", DEC VRA1, "... "
'Set 5 seconds timeout
VRA1 = 5
GOSUB VR_SetTimeout
DEBUG "timeout ", DEC VRA1, "... "
DEBUG CR, "VRbot ready!"
VR_Loop:
DEBUG CR, "VRbot in group ", DEC VRGROUP, " waiting for command... "
LOW VRLED
PAUSE 150
IF VRGROUP > 0 THEN HIGH VRLED
VRA1 = VRGROUP
GOSUB VR_RecognizeSD
'-- handle errors or timeout
IF VRA1 = RES_ERROR THEN
DEBUG "error"
'try again in the same group
GOTO VR_Loop
ENDIF
IF VRA1 = RES_TIMEOUT THEN
DEBUG "timed out"
VRGROUP = 0 ' back to trigger
GOTO VR_Loop
ENDIF
IF VRA1 = RES_COMMFAIL THEN
DEBUG "comm failed"
'resync and try again
GOSUB VR_Wakeup
GOTO VR_Loop
ENDIF
'-- got a command
VRCOMMAND = VRA1
IF VRCOMMAND <= RES_BUILTIN THEN GOSUB VR_Action
GOTO VR_Loop
VR_Action:
DEBUG "got ", DEC VRCOMMAND
SELECT VRGROUP
CASE GROUP_1
SELECT VRCOMMAND
CASE G1_UNNAMED_COMMAND_0
PAUSE 0 '-- write your code here
ENDSELECT
ENDSELECT
RETURN
'=== VR Routines ===
' Wake up:
VR_Wakeup:
TOGGLE VRLED
VRA = CMD_BREAK
SEROUT COM_TX, COM_SPEED, [VRA]
SERIN COM_RX, COM_SPEED, 100*COM_10MS, VR_Wakeup, [VRA]
IF (VRA <> STS_SUCCESS) THEN GOTO VR_Wakeup
LOW VRLED
RETURN
' Inputs:
' VRA1 = language index (0 = english, ...)
VR_SetLanguage:
VRA = CMD_LANGUAGE
SEROUT COM_TX, COM_SPEED, [VRA]
VRA1 = VRA1 + ARG_ZERO
SEROUT COM_TX, COM_SPEED, [VRA1]
SERIN COM_RX, COM_SPEED, 20*COM_10MS, VR_CommFailed, [VRA]
VRA1 = VRA1 - ARG_ZERO
'IF (VRA <> STS_SUCCESS) THEN GOTO VR_Wakeup
RETURN
' Inputs:
' VRA1 = timeout (in ms, 0=forever, 255=default)
VR_SetTimeout:
VRA = CMD_TIMEOUT
SEROUT COM_TX, COM_SPEED, [VRA]
VRA1 = VRA1 + ARG_ZERO
SEROUT COM_TX, COM_SPEED, [VRA1]
SERIN COM_RX, COM_SPEED, 20*COM_10MS, VR_CommFailed, [VRA]
VRA1 = VRA1 - ARG_ZERO
'IF (VRA <> STS_SUCCESS) THEN GOTO VR_Wakeup
RETURN
' Inputs:
' VRA1 = SI knob (0=loosest, 2=normal, 4=tightest)
VR_SetKnob:
VRA = CMD_KNOB
SEROUT COM_TX, COM_SPEED, [VRA]
VRA1 = VRA1 + ARG_ZERO
SEROUT COM_TX, COM_SPEED, [VRA1]
SERIN COM_RX, COM_SPEED, 20*COM_10MS, VR_CommFailed, [VRA]
VRA1 = VRA1 - ARG_ZERO
'IF (VRA <> STS_SUCCESS) THEN GOTO VR_Wakeup
RETURN
' Inputs:
' VRA1 = SD level (1=easy, 2=default, 5=hard)
VR_SetLevel:
VRA = CMD_LEVEL
SEROUT COM_TX, COM_SPEED, [VRA]
VRA1 = VRA1 + ARG_ZERO
SEROUT COM_TX, COM_SPEED, [VRA1]
SERIN COM_RX, COM_SPEED, 20*COM_10MS, VR_CommFailed, [VRA]
VRA1 = VRA1 - ARG_ZERO
'IF (VRA <> STS_SUCCESS) THEN GOTO VR_Wakeup
RETURN
' Inputs:
' VRA1 = wordset (0=trigger)
' Ouputs:
' VRA1 = result (0-31=word, 32..=builtin, 253=comm err, 254=timeout, 255=error)
VR_RecognizeSI:
VRA = CMD_RECOG_SI
GOTO VR_Recognize0
VR_RecognizeSD:
VRA = CMD_RECOG_SD
VR_Recognize0:
SEROUT COM_TX, COM_SPEED, [VRA]
' send Group/WS
VRA1 = VRA1 + ARG_ZERO
SEROUT COM_TX, COM_SPEED, [VRA1]
' wait for answer
SERIN COM_RX, COM_SPEED, 600*COM_10MS, VR_CommFailed, [VRA]
IF VRA = STS_RESULT THEN
' send ack
VRA = ARG_ACK
SEROUT COM_TX, COM_SPEED, [VRA]
' wait for recognised command code
SERIN COM_RX, COM_SPEED, 20*COM_10MS, VR_CommFailed, [VRA1]
VRA1 = VRA1 - ARG_ZERO
ELSEIF VRA = STS_SIMILAR THEN
' send ack
VRA = ARG_ACK
SEROUT COM_TX, COM_SPEED, [VRA]
' wait for recognised command code
SERIN COM_RX, COM_SPEED, 20*COM_10MS, VR_CommFailed, [VRA1]
VRA1 = VRA1 - ARG_ZERO + RES_BUILTIN
ELSEIF VRA = STS_TIMEOUT THEN
VRA1 = RES_TIMEOUT
ELSE
VRA1 = RES_ERROR
ENDIF
RETURN
VR_CommFailed:
VRA1 = RES_COMMFAIL
RETURN]

This is the message I get" Vbot in group 0 waiting for command.... Timed out

There aren't any commands in group o. I was trying to work with "2 Wordset" which has the commands I want. I tested the group and all commands were accepted. Then I ran the Generate code command which transferred me to the Stamp GUI with the program listed I hit run and the results above are what I got.

Martin_H
01-14-2012, 05:20 PM
Two things. First you didn't wrap your code in code tags so I have a hard time reading it. Second, the group zero command is robot and that gets the robot's attention. Then you use your additional commands, but the GUI doesn't generate action code, it only detects the word. You have to insert the code you want into the program.

Also, I don't work for Parallax and only check in on the forum randomly. But I do have a Say It program for the BS2 I wrote a year ago, so I do know how to get this working.