SAY IT, I give up
paulvive
Posts: 35
I followed the SAY IT instructions step by step and I got nowhere so I'm giving up on SAY IT (at least for now, I've spent too much time on it and got nothing in return except aggravation and frustration).
Thanks for all the help. I know I'm missing something but I'm not sure what, Maybe the trigger.
Thanks for all the help. I know I'm missing something but I'm not sure what, Maybe the trigger.
Comments
There is nothing wrong with dropping a project for a while and working on simpler things, getting the entusiasm going again before having another go at the harder bits,
It's surprising how sometimes with that approach things all of a sudden slot into place and you wonder why it was such a problem before.
Good luck
I've used the SayIt a bit with the Prop. I found it useful to monitor the communication between the PC and the SayIt while I used the SayIt GUI.
The SayIt documentation list the various codes it uses. It's very possible to use the SayIt without the GUI at all.
When you yell "i RAN ABOUT FOUR OR FIVE OF THE EASIER PROGRAMS WITH NO PROBLEMS", do you mean you ran easier SayIt programs? or BS2 programs or Boe-Bot programs?
There are lots of people willing to help (some very patient) but it might take more than a day to hear from them.
Do in fact expect that people on these boards who have much to offer are also not sitting on the boards waiting for questions. I often go for months at a time without attending here, as the skills I learn from, and offer to this forum are in use elsewhere frequently. That said, Here's what I can tell you about the SayIt module.
First, when you post your code, the indentation provided by the code and /code tags on the forum will help members read your code. Do this by first typing the open-square-bracket character, followed by the word "code", then the close-square-bracket. Then paste your code in immediately after that. After the end of teh code you have pasted in, type the exact same character sequence as you did to open the code block, but this time put a / in front of the word "code", so it reads "/code". This will make your code usable to programmers here who may wish to run your code and debug it for you. We are happy to help you - help us to accomplish that goal.
Next, as mentioned previously, you need to actually program in a command. If you use the SayIt module's programming GUI to program your module, you will soon notice that the code it generates is almost always identical in all parts with the exception of just a few lines which change based on what commands you are wishing to run.
The first set is under the comment tag "Groups and Commands" as illustrated here:
This is where you will notice what you have trained the unit to recognize. In the above code, I have trained the unit to recognize "Computer" as the wake-up word. You will also notice that that is the only command in the GROUP_0 block. The module can only listen for commands within a single command group at a time, and the GROUP_0 block can only hold two words. The default is Robot, and there is one other you can train, as I did here.
The system does not know what to do on its own, however, when it hears the GROUP_0 wake-up word, other than to turn on the LED, then time out. So you have to provide code to tell it what to do. You can tell it to either perform a hardware function (turn something on/off) or tell it to switch to a different command group. In my case (a home automation system), when it hears the GROUP_0 wake-up word, I tell the module to switch OUT of GROUP_0 and switch INTO GROUP_1 commands. This code is found a little further down in the listing in two parts, and looks like this:
First, the main code:
Then, a subroutine called VR_Action:
The main code just loops through listening until it hears something useful. The subroutine is where things really happen. In the very beginning of this, when it hears the GROUP_0 command, it turns on the VRLED, plays a little chirp-tone I write, and most importantly, it changes the command group to 1 with the line VRGROUP = 1.
Subsequent sections in that subroutine instruct the system what to do when the specific keywords (such as "Outside Water On") are heard by the module. This code in here is entirely needing to be constructed by you. The SayIt GUI just outputs some line that says "put your code here" or something similar. All the code I have in there about state, s1, s2, cmd and Bank_Build are references to variables and subroutines that were built by me specifically for this application.
My full code listings can be found on this forum by searching for "Speaking Voice Controlled Home Automation System" - but it is a very complex set of slot programs. What is listed above should be the answer to get you going on the module again, when you're ready to jump back in.
The Say-It modules are fantastic. If you program them well with very auditorially-unique commands, and have them in an environment with a relatively controlled background, they will work very well - especially for the price. People are using these things all over the place - robots, home automation systems, etc. Once you get the hang of it, it'll become second nature to you, just give yourself the space and let it be fun. You can't kill these things with programming or lack of it - only bad wiring! :-) So feel free to experiment and have fun with it. I hope you get to have the same experience I did with these things - the first time in my life that I ever had a "conversation" with one of my electronics projects - asking it questions in plain english (Say-It Module) and hearing it speak the responses in equally plain english (V-Stamp Text-to-Speech module). That hooked me forever on voice recognition and speech generation...
Good luck, and feel free to ask any question you like, just bear in mind it may take as much as a week sometimes before the person with the answer will actually come around to see your post. And if no one answers in two or three weeks, you can try again - but that kind of wait is rare (happens more during vacation season, oddly enough! :-) )
Best of luck,
Dave Xanatos
{code]
' {$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: 5)
G1_AVANCE CON 0
G1_STOP CON 1
G1_RECULE CON 2
G1_DROITE CON 3
G1_GAUCHE CON 4
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 = 1
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:
SELECT VRGROUP
CASE GROUP_1
SELECT VRCOMMAND
CASE G1_AVANCE
DEBUG "La commande AVANCE a
Dave
PS., I'm headed out the door now, so if I do not respond tonight, have patience...
You're getting closer, as far as posting code goes, but you used [noparse]{code] instead of [/noparse]. You have to follow the syntax exactly for the tags to work.
-Phil
You're almost there with posting code. You have an s-bracket in "{code]". Both ends need square brackets "[". If you use the "Go Advanced" feature, you can "Preview Post" and see what it will look like. The "Go Advanced" also has a "#" button that will insert the code tags for you.
Edit: You win this round Phil. But we'll meet again.
above is now showing as it should
I have also cut and pasted your code from above and then highlighted it and again clicked the # button , the result is below:
[code]' {$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: 5)
G1_AVANCE CON 0
G1_STOP CON 1
G1_RECULE CON 2
G1_DROITE CON 3
G1_GAUCHE CON 4
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 = 1
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:
SELECT VRGROUP
CASE GROUP_1
SELECT VRCOMMAND
CASE G1_AVANCE
DEBUG "La commande AVANCE a
Crazy cool stuff!
-Phil
paulvive, if you are still with us I may be able to help, I've just got myself a boe-bot with a say it module and like yourself I was having trouble getting the module to change groups at first but studying through the generated code and looking at the debug terminal I noticed that it was looking in group 0 (zero) I had trained a second trigger "computer" and noticed in the debug window if i said "Robot" the generated code replied in the debug window "got 32", If i said "Computer" the reply was "got 0" so lifted by this small progress I delved into the code more, found the VRGROUP =0 command and changed it to 1 which is Group 1 where i had my two trained commands of ON and OFF
and low and behold I found that it was now listening to Group 1 and the command ON turned on the led connected to pin13 and OFF turned it back off!
So now how do I move the group by voice rather than changing VRGROUP to 1?
It turned out rather simple in the end, I changed VRGROUP back to 0 so that it would listen for either "Robot" or "Computer" and in the generated code under Case G0 COMPUTER
I added a command to make VRGROUP now 1 and to GOTO VRLOOP so that it now waits in group 1 for the next voice command.
It works a treat, once in group 1 if you speak before it has a chance to timeout you can say ON and then OFF as much as you like and the LED turns on and off forever,
if you dont speak, after the timeout you simply say computer again to make it look at group 1 again.
Hope I havnt confused you with the above, take a look at the posted code below and I've bolded the bits of interest, good luck.,