Shop OBEX P1 Docs P2 Docs Learn Events
boe bot basic stamp 2 (say it module ) — Parallax Forums

boe bot basic stamp 2 (say it module )

zainab1421zainab1421 Posts: 17
edited 2013-04-26 11:48 in BASIC Stamp
after trying for 5 days to get the confirm finally iam here and i can post i hope i will get answer from you people

i have the say it module i did the what wee need it in the say it gui software

i need you to check the codes is it write thse code


group 1 1- forward
2- backward
3- left
4- right
5- stop
6- zainab

i need you to check the codes is it write thse 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: 6)
G1_FORWARD                          CON   0
G1_BACKWARD                         CON   1
G1_LEFT                             CON   2
G1_RIGHT                            CON   3
G1_STOP                             CON   4
G1_ZAINAB                           CON   5
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_FORWARD
         PAUSE 0 '-- FORWARD
        CASE G1_BACKWARD
         PAUSE 0 '-- BACKWARD
        CASE G1_LEFT
         PAUSE 0 '-- LEFT
        CASE G1_RIGHT
         PAUSE 0 '-- RIGHT
        CASE G1_STOP
         PAUSE 0 '-- STOP
        CASE G1_ZAINAB
         PAUSE 0 '-- ZAINAB
      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

andcan aone write for me what i have to write in the demo to change the code

please help me i need to do it


thanks

Comments

  • Mike GreenMike Green Posts: 23,101
    edited 2013-04-26 07:11
    I've never used the SayIt, but I assume that this code is produced by the GUI creation software. In VR_Action, there's a nested SELECT statement like this
      SELECT VRGROUP
        CASE GROUP_1
          SELECT VRCOMMAND
            CASE G1_FORWARD
             PAUSE 0 '-- FORWARD
            CASE G1_BACKWARD
             PAUSE 0 '-- BACKWARD
            CASE G1_LEFT
             PAUSE 0 '-- LEFT
            CASE G1_RIGHT
             PAUSE 0 '-- RIGHT
            CASE G1_STOP
             PAUSE 0 '-- STOP
            CASE G1_ZAINAB
             PAUSE 0 '-- ZAINAB
          ENDSELECT
      ENDSELECT
    
    The variables, VRGROUP and VRCOMMAND are set by other code based on the information coming back from the SayIt module as a result of a spoken command and this block of code selects one CASE based on the spoken command. If you say "stop", the code in CASE G1_STOP is executed, etc. The PAUSE 0 is a placeholder and you would substitute the code that you want to execute when a "stop" command is said.
  • zainab1421zainab1421 Posts: 17
    edited 2013-04-26 07:41
    Great

    Can you tell me in the code for the demo

    What will be whith this select group?
  • zainab1421zainab1421 Posts: 17
    edited 2013-04-26 07:49
    The demo that you send it for me in the maker shed site with the software
    There is a demo for run it but we have to change it with the same what we do it in say it gui

    Can you put it for me
  • Mike GreenMike Green Posts: 23,101
    edited 2013-04-26 07:50
    I can't tell you. That depends on what you want to accomplish. You have to define what you want the demo to do.
  • zainab1421zainab1421 Posts: 17
    edited 2013-04-26 07:53
    I want it to go forward, backward, left , right , stop , zainb

    Stop mean stop robots
    Zainab mean making round
  • Mike GreenMike Green Posts: 23,101
    edited 2013-04-26 08:01
    I assume you have a BoeBot. What makes a BoeBot go forward? What makes it go backwards? Left? Right? If you don't know, you should study "Robotics with the BoeBot".
  • zainab1421zainab1421 Posts: 17
    edited 2013-04-26 08:09
    I orady finish it I will post for you the demo code to know what I mean
  • Mike GreenMike Green Posts: 23,101
    edited 2013-04-26 08:19
    This is obviously some kind of school project and we are not going to do it for you. That's not what these forums are about. We give advice, make suggestions, point people to existing references, and answer specific questions when we can. You have to do the rest. If you don't understand what I've told you so far, please ask more specific questions so I can try to answer them. Try to make clear what part you don't understand.
  • zainab1421zainab1421 Posts: 17
    edited 2013-04-26 08:47
    *' {$&#8236;STAMP BS2*}&#8236;
    *' {$&#8236;PBASIC 2.5*}&#8236;
    
    
    *' &#8236;COM Parameters
    COM_RX*              &#8236;PIN*         &#8236;0*      ' &#8236;RX Pin
    COM_TX*              &#8236;PIN*         &#8236;2*      ' &#8236;TX Pin
    RServo*              &#8236;PIN*         &#8236;13*     ' &#8236;Right Wheel
    LServo*              &#8236;PIN*         &#8236;12*     ' &#8236;Right Wheel
    PIN_LED*             &#8236;PIN*         &#8236;4*     ' &#8236;LED Pin
    COM_SPEED*           &#8236;CON*         &#8236;84*     ' &#8236;baud 9600
    
    
    
    
    *' &#8236;Protocol Command
    CMD_BREAK*           &#8236;CON*         "&#8236;b*" ' &#8236;abort recog or ping
    CMD_SLEEP*           &#8236;CON*         "&#8236;s*" ' &#8236;go to power down
    CMD_KNOB*            &#8236;CON*         "&#8236;k*" ' &#8236;set si knob* <&#8236;1*>&#8236;
    CMD_LEVEL*           &#8236;CON*         "&#8236;v*" ' &#8236;set sd level* <&#8236;1*>&#8236;
    CMD_LANGUAGE*        &#8236;CON*         "&#8236;l*" ' &#8236;set si language* <&#8236;1*>&#8236;
    CMD_TIMEOUT*         &#8236;CON*         "&#8236;o*" ' &#8236;set timeout* <&#8236;1*>&#8236;
    CMD_RECOG_SI*        &#8236;CON*         "&#8236;i*" ' &#8236;do si recog from ws* <&#8236;1*>&#8236;
    CMD_RECOG_SD*        &#8236;CON*         "&#8236;d*" ' &#8236;do sd recog at group* <&#8236;1*> (&#8236;0* = &#8236;trigger mixed si/sd*)&#8236;
    
    
    *' &#8236;Protocol Status
    STS_AWAKEN*          &#8236;CON*         "&#8236;w*" ' &#8236;back from power down mode
    STS_ERROR*           &#8236;CON*         "&#8236;e*" ' &#8236;signal error code* <&#8236;1-2*>&#8236;
    STS_INVALID*         &#8236;CON*         "&#8236;v*" ' &#8236;invalid command or argument
    STS_TIMEOUT*         &#8236;CON*         "&#8236;t*" ' &#8236;timeout expired
    STS_INTERR*          &#8236;CON*         "&#8236;i*" ' &#8236;back from aborted recognition* (&#8236;see* '&#8236;break*')&#8236;
    STS_SUCCESS*         &#8236;CON*         "&#8236;o*" ' &#8236;no errors status
    STS_RESULT*          &#8236;CON*         "&#8236;r*" ' &#8236;recognised sd command* <&#8236;1*> - &#8236;training similar to sd* <&#8236;1*>&#8236;
    STS_SIMILAR*         &#8236;CON*         "&#8236;s*" ' &#8236;recognised si* <&#8236;1*> (&#8236;in mixed si/sd*) - &#8236;training similar to si* <&#8236;1*>&#8236;
    
    
    *' &#8236;Protocol arguments are in the range 0x40* (-&#8236;1*) &#8236;TO 0x60* (+&#8236;31*) &#8236;inclusive
    ARG_MIN*             &#8236;CON*         &#8236;64* ' &#8236;0x40
    ARG_MAX*             &#8236;CON*         &#8236;96* ' &#8236;0x60
    ARG_ZERO*            &#8236;CON*         &#8236;65* ' &#8236;0x41
    
    
    ARG_ACK*             &#8236;CON*         &#8236;32* ' &#8236;0x20*    '&#8236;TO READ more status arguments
    
    
    *' &#8236;Wordset
    WST*                 &#8236;CON*         &#8236;0*  ' &#8236;wordset trigger
    WS1*                 &#8236;CON*         &#8236;1*  ' &#8236;Wordset 1* &#8236;commands
    WS2*                 &#8236;CON*         &#8236;2*  ' &#8236;Wordset 2* &#8236;actions
    WS3*                 &#8236;CON*         &#8236;3*  ' &#8236;Wordset 3* &#8236;numbers
    
    
    *'&#8236;Wordset Commands
    WS1*_&#8236;Action*          &#8236;CON*   &#8236;0
    WS1*_&#8236;Move*            &#8236;CON*   &#8236;1
    WS1*_&#8236;Turn*            &#8236;CON*   &#8236;2
    WS1*_&#8236;Run*             &#8236;CON*   &#8236;3
    WS1*_&#8236;Look*            &#8236;CON*   &#8236;4
    WS1*_&#8236;Attack*          &#8236;CON*   &#8236;5
    WS1*_&#8236;Stop*            &#8236;CON*   &#8236;6
    WS1*_&#8236;Hello*           &#8236;CON*   &#8236;7
    
    
    WS2*_&#8236;Left*            &#8236;CON*   &#8236;0
    WS2*_&#8236;Right*           &#8236;CON*   &#8236;1
    WS2*_&#8236;Up*              &#8236;CON*   &#8236;2
    WS2*_&#8236;Down*            &#8236;CON*   &#8236;3
    WS2*_&#8236;Forward*         &#8236;CON*   &#8236;4
    WS2*_&#8236;Backward*        &#8236;CON*   &#8236;5
    
    
    WS3*_&#8236;Zero*            &#8236;CON*   &#8236;0
    WS3*_&#8236;One*             &#8236;CON*   &#8236;1
    WS3*_&#8236;Two*             &#8236;CON*   &#8236;2
    WS3*_&#8236;Three*           &#8236;CON*   &#8236;3
    WS3*_&#8236;Four*            &#8236;CON*   &#8236;4
    WS3*_&#8236;Five*            &#8236;CON*   &#8236;5
    WS3*_&#8236;Six*             &#8236;CON*   &#8236;6
    WS3*_&#8236;Seven*           &#8236;CON*   &#8236;7
    WS3*_&#8236;Eight*           &#8236;CON*   &#8236;8
    WS3*_&#8236;Nine*            &#8236;CON*   &#8236;9
    WS3*_&#8236;Ten*             &#8236;CON*   &#8236;10
    
    
    WS_Timeout*          &#8236;CON*   &#8236;254
    WS_Error*            &#8236;CON*   &#8236;255
    
    
    VAR_LANG*            &#8236;DATA 0
    VAR_KNOB*            &#8236;DATA 2
    VAR_LEVEL*           &#8236;DATA 2
    
    
    
    
    *'&#8236;Robot Constant
    COMMAND_DURATION*    &#8236;CON*   &#8236;2000
    COMMAND_SPEED_HIGH*  &#8236;CON*   &#8236;3
    COMMAND_SPEED_LOW*   &#8236;CON*   &#8236;1
    
    
    *'&#8236;Global Variable
    counter*             &#8236;VAR*   &#8236;Word
    VRA*                 &#8236;VAR*   &#8236;Byte
    VRA1*                &#8236;VAR*   &#8236;Byte
    VRLED*               &#8236;VAR*   &#8236;Byte
    WS*                  &#8236;VAR*   &#8236;Byte
    RXC*                 &#8236;VAR*   &#8236;Byte
    RXC_PREV*            &#8236;VAR*   &#8236;Byte
    
    
    *' &#8236;Main Start
    LOW VRLED
    
    
    *' &#8236;AUTOMATIC SWITCHING MODALITY
    MSG* = $&#8236;22
    SEROUT COM_IN_TX*, &#8236;COM_SPEED*, [&#8236;MSG*]&#8236;
    SERIN COM_IN_RX*, &#8236;COM_SPEED*, &#8236;1000*, &#8236;MAIN_CONTROL*, [&#8236;MSG*]&#8236;
    IF MSG* <> $&#8236;55* &#8236;THEN GOTO MAIN_CONTROL
    
    
    GOSUB VR_Wakeup
    GOSUB VR_SetLanguage
    SEROUT COM_IN_TX*, &#8236;COM_SPEED*, [&#8236;MSG*]&#8236;
    GOTO PROGRAMMING
    
    
    MAIN_CONTROL*:&#8236;
    DEBUG CR*, "&#8236;ROBOT CONTROL*"&#8236;
    DEBUG CR*, "&#8236;Wake Up Voice Module*"&#8236;
    GOSUB VR_Wakeup
    DEBUG CR*, "&#8236;Voice Module Waked up*"&#8236;
    GOSUB VR_SetLanguage
    *'&#8236;VRA1* = &#8236;255
    VRA1* = &#8236;5
    GOSUB VR_SetTimeout
    
    
    *'&#8236;start with trigger
    WS* = &#8236;WST
    
    
    MAIN_LOOP*:&#8236;
    *  &#8236;LOW PIN_LED
    *  &#8236;DEBUG CR*, "&#8236;Wait for* "&#8236;
    *  &#8236;SELECT WS
    *  &#8236;CASE 0
    *    &#8236;DEBUG* "&#8236;Trigger*"&#8236;
    *  &#8236;CASE 1
    *    &#8236;DEBUG* "&#8236;WS1*"&#8236;
    *    &#8236;HIGH PIN_LED
    *  &#8236;CASE 2
    *    &#8236;DEBUG* "&#8236;WS2*"&#8236;
    *    &#8236;PAUSE 150
    *    &#8236;HIGH PIN_LED
    *  &#8236;CASE 3
    *    &#8236;DEBUG* "&#8236;WS3*"&#8236;
    *    &#8236;PAUSE 150
    *    &#8236;HIGH PIN_LED
    *  &#8236;ENDSELECT
    *  '&#8236;Wait for command
    *  &#8236;VRA1* = &#8236;WS
    *  &#8236;GOSUB VR_Recognize
    *  &#8236;RXC* = &#8236;VRA1
    
    
    *  &#8236;LOW PIN_LED
    
    
    *  &#8236;IF RXC* < &#8236;WS_Timeout THEN
    *    '&#8236;Perform action and cycle
    *    &#8236;GOSUB ACTION
    *    &#8236;GOTO MAIN_LOOP
    
    
    *' &#8236;Handle errors
    *  &#8236;ELSEIF RXC* = &#8236;WS_Timeout THEN
    *    &#8236;DEBUG CR*, "&#8236;Timeout*"&#8236;
    *  &#8236;ELSE'IF RXC* = &#8236;WS_Error THEN
    *    &#8236;DEBUG CR*, "&#8236;Error*"&#8236;
    *  &#8236;ENDIF
    *  &#8236;WS* = &#8236;WST
    *  &#8236;GOTO MAIN_LOOP
    
    
    *  &#8236;END
    *' &#8236;Main END
    
    
    
    
    ACTION*:&#8236;
    
    
    *  &#8236;SELECT WS
    
    
    *  &#8236;CASE WST
    *      &#8236;WS* = &#8236;WS1
    *      &#8236;IF RXC* > &#8236;0* &#8236;THEN
    *        &#8236;DEBUG CR*, "&#8236;Custom Trigger*"&#8236;
    *      &#8236;ENDIF
    
    
    *  &#8236;CASE WS1
    *    &#8236;RXC_PREV* = &#8236;RXC
    *    &#8236;WS* = &#8236;WST
    *    &#8236;SELECT RXC
    *    &#8236;CASE WS1*_&#8236;Move* '&#8236;MOVE
    *      &#8236;DEBUG CR*, "&#8236;Move*"&#8236;
    *      &#8236;WS* = &#8236;WS2
    *    &#8236;CASE WS1*_&#8236;Turn* '&#8236;TURN
    *      &#8236;DEBUG CR*, "&#8236;Turn*"&#8236;
    *      &#8236;WS* = &#8236;WS2
    *    &#8236;CASE WS1*_&#8236;Run* '&#8236;RUN
    *      &#8236;DEBUG CR*, "&#8236;Run*"&#8236;
    *      &#8236;WS* = &#8236;WS2
    *    '&#8236;This command for testing numbers
    *    &#8236;CASE WS1*_&#8236;Action
    *      &#8236;DEBUG CR*, "&#8236;Action*"&#8236;
    *      &#8236;WS* = &#8236;WS3
    *    '&#8236;Following commands do nothing
    *    &#8236;CASE WS1*_&#8236;Look
    *      &#8236;DEBUG CR*, "&#8236;Look*"&#8236;
    *    &#8236;CASE WS1*_&#8236;Attack
    *      &#8236;DEBUG CR*, "&#8236;Attack*"&#8236;
    *    &#8236;CASE WS1*_&#8236;Hello
    *      &#8236;DEBUG CR*, "&#8236;Hello*"&#8236;
    *    &#8236;CASE WS1*_&#8236;Stop
    *      &#8236;DEBUG CR*, "&#8236;Stop*"&#8236;
    
    
    *    &#8236;CASE ELSE
    *      &#8236;DEBUG CR*, "&#8236;Invalid Command*"&#8236;
    *    &#8236;ENDSELECT
    
    
    *  &#8236;CASE WS2
    *    &#8236;SELECT RXC
    *    &#8236;CASE WS2*_&#8236;Left* '&#8236;LEFT
    *      &#8236;DEBUG CR*, "&#8236;Left*"&#8236;
    *      &#8236;IF RXC_PREV* = &#8236;WS1*_&#8236;Move THEN* ' &#8236;MOVE
    *        &#8236;GOSUB TURN_LEFT
    *      &#8236;ELSEIF RXC_PREV* = &#8236;WS1*_&#8236;Turn*  &#8236;THEN* '&#8236;TURN
    *        &#8236;GOSUB SPIN_LEFT
    *      &#8236;ELSEIF RXC_PREV* = &#8236;WS1*_&#8236;Run*  &#8236;THEN* '&#8236;RUN
    *        &#8236;GOSUB TURN_LEFT
    *      &#8236;ENDIF
    
    
    *    &#8236;CASE WS2*_&#8236;Right* '&#8236;RIGHT
    *      &#8236;DEBUG CR*, "&#8236;Right*"&#8236;
    *      &#8236;IF RXC_PREV* = &#8236;WS1*_&#8236;Move THEN* '&#8236;MOVE
    *         &#8236;GOSUB TURN_RIGHT
    *      &#8236;ELSEIF RXC_PREV* = &#8236;WS1*_&#8236;Turn THEN* '&#8236;TURN
    *        &#8236;GOSUB SPIN_RIGHT
    *      &#8236;ELSEIF RXC_PREV* = &#8236;WS1*_&#8236;Run THEN* '&#8236;RUN
    *        &#8236;GOSUB TURN_RIGHT
    *      &#8236;ENDIF
    
    
    *    &#8236;CASE WS2*_&#8236;Forward* '&#8236;FORWARD
    *      &#8236;DEBUG CR*, "&#8236;Forward*"&#8236;
    *      &#8236;IF RXC_PREV* = &#8236;WS1*_&#8236;Move THEN* '&#8236;MOVE
    *        &#8236;GOSUB FORWARD
    *      &#8236;ELSEIF RXC_PREV* = &#8236;WS1*_&#8236;Run THEN* '&#8236;RUN
    *        &#8236;GOSUB FORWARD
    *      &#8236;ENDIF
    
    
    *    &#8236;CASE WS2*_&#8236;Backward* '&#8236;BACKWARD
    *      &#8236;DEBUG CR*, "&#8236;Backward*"&#8236;
    *      &#8236;IF RXC_PREV* = &#8236;WS1*_&#8236;Move THEN* '&#8236;MOVE
    *        &#8236;GOSUB BACKWARD
    *      &#8236;ELSEIF RXC_PREV* = &#8236;WS1*_&#8236;Run THEN* '&#8236;RUN
    *        &#8236;GOSUB BACKWARD
    *      &#8236;ENDIF
    
    
    *    '&#8236;Following commands do nothing
    *    &#8236;CASE WS2*_&#8236;Up* '&#8236;UP
    *      &#8236;DEBUG CR*, "&#8236;Up*"&#8236;
    *    &#8236;CASE WS2*_&#8236;Down* '&#8236;DOWN
    *      &#8236;DEBUG CR*, "&#8236;Down*"&#8236;
    
    
    *    &#8236;CASE ELSE
    *      &#8236;DEBUG CR*, "&#8236;Invalid Command*"&#8236;
    *    &#8236;ENDSELECT
    
    
    *    &#8236;WS* = &#8236;WST
    
    
    *  &#8236;CASE WS3
    *    &#8236;DEBUG CR*, "&#8236;Number* ", &#8236;DEC RXC
    *    &#8236;WS* = &#8236;WST
    
    
    *  &#8236;ENDSELECT
    
    
    *  &#8236;RETURN
    
    
    *' &#8236;Wake up*:&#8236;
    VR_Wakeup*:&#8236;
    *  &#8236;VRA* = &#8236;CMD_BREAK
    *  &#8236;SEROUT COM_TX*, &#8236;COM_SPEED*, [&#8236;VRA*]&#8236;
    
    
    *  &#8236;SERIN COM_RX*, &#8236;COM_SPEED*, [&#8236;VRA*]&#8236;
    *  &#8236;IF VRA* <> &#8236;STS_SUCCESS THEN GOTO VR_Wakeup
    
    
    *  &#8236;RETURN
    
    
    *' &#8236;Inputs*:&#8236;
    *'   &#8236;VRA1* = &#8236;language index* (&#8236;0* = &#8236;english*, ...)&#8236;
    VR_SetLanguage*:&#8236;
    *    &#8236;READ VAR_LANG*, &#8236;VRA1
    *    &#8236;VRA* = &#8236;CMD_LANGUAGE
    *    &#8236;SEROUT COM_TX*, &#8236;COM_SPEED*, [&#8236;VRA*]&#8236;
    *    &#8236;VRA1* = &#8236;VRA1* + &#8236;ARG_ZERO
    *    &#8236;SEROUT COM_TX*, &#8236;COM_SPEED*, [&#8236;VRA1*]&#8236;
    VR_SetLanguage1*:&#8236;
    *    &#8236;SERIN COM_RX*, &#8236;COM_SPEED*, &#8236;2000* ,&#8236;VR_SetLanguage1*, [&#8236;VRA*]&#8236;
    
    
    *    &#8236;RETURN
    
    
    *' &#8236;Inputs*:&#8236;
    *'   &#8236;VRA1* = &#8236;timeout* (&#8236;in ms*, &#8236;0*=&#8236;forever*, &#8236;255*=&#8236;default*)&#8236;
    VR_SetTimeout*:&#8236;
    *    &#8236;VRA* = &#8236;CMD_TIMEOUT
    *    &#8236;SEROUT COM_TX*, &#8236;COM_SPEED*, [&#8236;VRA*]&#8236;
    *    &#8236;VRA1* = &#8236;VRA1* + &#8236;ARG_ZERO
    *    &#8236;SEROUT COM_TX*, &#8236;COM_SPEED*, [&#8236;VRA1*]&#8236;
    VR_SetTimeout1*:&#8236;
    *    &#8236;SERIN COM_RX*, &#8236;COM_SPEED*, &#8236;2000* ,&#8236;VR_SetTimeout1*, [&#8236;VRA*]&#8236;
    *    &#8236;RETURN
    
    
    *' &#8236;Inputs*:&#8236;
    *'   &#8236;VRA1* = &#8236;wordset* (&#8236;0*=&#8236;trigger*)&#8236;
    *' &#8236;Ouputs*:&#8236;
    *'   &#8236;VRA1* = &#8236;result* (&#8236;1-N=word*, &#8236;254*=&#8236;timeout*, &#8236;255*=&#8236;error*)&#8236;
    *'          &#8236;for trigger N>0* &#8236;are custom words
    VR_Recognize*:&#8236;
    
    
    *  ' &#8236;START RECOG
    *  &#8236;IF VRA1* = &#8236;0* &#8236;THEN
    *    &#8236;VRA* = &#8236;CMD_RECOG_SD
    *  &#8236;ELSE
    *    &#8236;VRA* = &#8236;CMD_RECOG_SI
    *  &#8236;ENDIF
    *  &#8236;SEROUT COM_TX*, &#8236;COM_SPEED*, [&#8236;VRA*]&#8236;
    
    
    *  ' &#8236;SEND WS
    *  &#8236;VR_Recognize1*:&#8236;
    *  &#8236;VRA1* = &#8236;VRA1* + &#8236;ARG_ZERO
    *  &#8236;SEROUT COM_TX*, &#8236;COM_SPEED*, [&#8236;VRA1*]&#8236;
    
    
    *  ' &#8236;wait for answer
    * &#8236;SERIN COM_RX*, &#8236;COM_SPEED*, [&#8236;VRA*]&#8236;
    
    
    *  &#8236;IF VRA* = &#8236;STS_RESULT THEN
    *    ' &#8236;send ack
    *    &#8236;VRA* = &#8236;ARG_ACK
    *    &#8236;SEROUT COM_TX*, &#8236;COM_SPEED*, [&#8236;VRA*]&#8236;
    
    
    *    ' &#8236;wait for recognised command code
    *    &#8236;VR_Recognize2*:&#8236;
    *    &#8236;SERIN COM_RX*, &#8236;COM_SPEED*, &#8236;1000*, &#8236;VR_Recognize2*, [&#8236;VRA1*]&#8236;
    *    &#8236;VRA1* = &#8236;VRA1* - &#8236;ARG_ZERO* + &#8236;1
    
    
    *  &#8236;ELSEIF VRA* = &#8236;STS_SIMILAR THEN
    *    ' &#8236;send ack
    *    &#8236;VRA* = &#8236;ARG_ACK
    *    &#8236;SEROUT COM_TX*, &#8236;COM_SPEED*, [&#8236;VRA*]&#8236;
    
    
    *    ' &#8236;wait for recognised command code
    *    &#8236;VR_Recognize3*:&#8236;
    *    &#8236;SERIN COM_RX*, &#8236;COM_SPEED*, &#8236;1000*, &#8236;VR_Recognize3*, [&#8236;VRA1*]&#8236;
    *    &#8236;VRA1* = &#8236;VRA1* - &#8236;ARG_ZERO
    
    
    *  &#8236;ELSEIF VRA* = &#8236;STS_TIMEOUT THEN
    *    &#8236;VRA1* = &#8236;254
    *    '&#8236;DEBUG CR*, ? &#8236;VRA
    
    
    *  &#8236;ELSE
    *    &#8236;VRA1* = &#8236;255
    *    '&#8236;DEBUG CR*, ? &#8236;VRA
    *  &#8236;ENDIF
    
    
    *  &#8236;RETURN
    
    
    FORWARD*:&#8236;
    *  '&#8236;DEBUG CR*, "&#8236;Robot Forward*"&#8236;
    *  &#8236;FOR counter* = &#8236;1* &#8236;TO 50
    *    &#8236;PULSOUT LServo*, &#8236;1000
    *    &#8236;PULSOUT RServo*, &#8236;500
    *    &#8236;PAUSE 20
    *  &#8236;NEXT
    *  &#8236;RETURN
    
    
    BACKWARD*:&#8236;
    *  '&#8236;DEBUG CR*, "&#8236;Robot Backward*"&#8236;
    *  &#8236;FOR counter* = &#8236;1* &#8236;TO 50
    *    &#8236;PULSOUT LServo*, &#8236;500
    *    &#8236;PULSOUT RServo*, &#8236;1000
    *    &#8236;PAUSE 20
    *  &#8236;NEXT
    *  &#8236;RETURN
    
    
    SPIN_RIGHT*:&#8236;
    *  '&#8236;DEBUG CR*, "&#8236;Robot Spin right*"&#8236;
    *  &#8236;FOR counter* = &#8236;1* &#8236;TO 50
    *    &#8236;PULSOUT LServo*, &#8236;1000
    *    &#8236;PULSOUT RServo*, &#8236;1000
    *    &#8236;PAUSE 20
    *  &#8236;NEXT
    *  &#8236;RETURN
    
    
    SPIN_LEFT*:&#8236;
    *  '&#8236;DEBUG CR*, "&#8236;Robot Spin left*"&#8236;
    *  &#8236;FOR counter* = &#8236;1* &#8236;TO 50
    *    &#8236;PULSOUT LServo*, &#8236;500
    *    &#8236;PULSOUT RServo*, &#8236;500
    *    &#8236;PAUSE 20
    *  &#8236;NEXT
    *  &#8236;RETURN
    
    
    TURN_LEFT*:&#8236;
    *  '&#8236;DEBUG CR*, "&#8236;Robot Turn Left*"&#8236;
    *  &#8236;FOR counter* = &#8236;1* &#8236;TO 85
    *    &#8236;PULSOUT LServo*, &#8236;750
    *    &#8236;PULSOUT RServo*, &#8236;500
    *    &#8236;PAUSE 20
    *  &#8236;NEXT
    *  &#8236;RETURN
    
    
    TURN_RIGHT*:&#8236;
    *  '&#8236;DEBUG CR*, "&#8236;Robot Turn Right*"&#8236;
    *  &#8236;FOR counter* = &#8236;1* &#8236;TO 85
    *    &#8236;PULSOUT LServo*, &#8236;1000
    *    &#8236;PULSOUT RServo*, &#8236;750
    *    &#8236;PAUSE 20
    *  &#8236;NEXT
    *  &#8236;RETURN
    
    
    PROGRAMMING*:&#8236;
    *  '&#8236;DEBUG CR*, "&#8236;VOICE PROGRAMMING*"&#8236;
    *  ' &#8236;COM IN Parameters*  - &#8236;PC serial port
    *  &#8236;COM_IN_RX*   &#8236;CON*   &#8236;16*   ' &#8236;rx pin
    *  &#8236;COM_IN_TX*   &#8236;CON*   &#8236;16*   ' &#8236;tx pin
    
    
    *  ' &#8236;COM Parameters*  - &#8236;Voice Module port
    *  &#8236;COM_OUT_RX*  &#8236;CON*   &#8236;COM_RX*   ' &#8236;rx pin
    *  &#8236;COM_OUT_TX*  &#8236;CON*   &#8236;COM_TX*   ' &#8236;tx pin
    
    
    *  &#8236;COM_TIMEOUT CON*   &#8236;5000
    
    
    *  ' &#8236;Protocol Command
    *  &#8236;CMD_SEND*           &#8236;CON*   &#8236;1* ' &#8236;send request
    *  &#8236;CMD_SEND_RECEIVE*   &#8236;CON*   &#8236;2* ' &#8236;send and receive request
    *  &#8236;CMD_RECEIVE*        &#8236;CON*   &#8236;3* ' &#8236;receive request
    *  &#8236;CMD_LED*            &#8236;CON*   &#8236;4* ' &#8236;receive request
    *  &#8236;CMD_SET_LANG*       &#8236;CON*   &#8236;5* ' &#8236;receive request
    *  &#8236;CMD_GET_LANG*       &#8236;CON*   &#8236;6* ' &#8236;receive request
    
    
    
    
    *  &#8236;CODE_ERROR*         &#8236;CON*  &#8236;48*  ' &#8236;0x30
    *  &#8236;CODE_ACK*           &#8236;CON*  &#8236;32*  ' &#8236;0x20
    
    
    *  &#8236;MSG VAR Byte
    
    
    *  &#8236;LOW PIN_LED
    
    
    *  &#8236;PROGRAMMING_MAIN_LOOP*:&#8236;
    
    
    *    ' &#8236;wait for a byte on input COM
    *    &#8236;SERIN COM_IN_RX*, &#8236;COM_SPEED*, [&#8236;MSG*]&#8236;
    *    ' &#8236;send back Echo
    *    &#8236;SEROUT COM_IN_TX*, &#8236;COM_SPEED*, [&#8236;MSG*]&#8236;
    
    
    *    &#8236;SELECT MSG
    *      &#8236;CASE CMD_SEND* ' &#8236;send request
    *        ' &#8236;wait for the byte to send
    *        &#8236;SERIN COM_IN_RX*, &#8236;COM_SPEED*, &#8236;COM_TIMEOUT*, &#8236;RX_ERROR*, [&#8236;MSG*]&#8236;
    *        ' &#8236;send the byte to output COM
    *        &#8236;SEROUT COM_OUT_TX*, &#8236;COM_SPEED*, [&#8236;MSG*]&#8236;
    *        ' &#8236;send back Echo
    *        &#8236;SEROUT COM_IN_TX*, &#8236;COM_SPEED*, [&#8236;MSG*]&#8236;
    
    
    *      &#8236;CASE CMD_SEND_RECEIVE* ' &#8236;send and receive request
    *        ' &#8236;wait for the byte to send
    *        &#8236;SERIN COM_IN_RX*, &#8236;COM_SPEED*, &#8236;COM_TIMEOUT*, &#8236;RX_ERROR*, [&#8236;MSG*]&#8236;
    *        ' &#8236;send back Echo
    *        &#8236;SEROUT COM_IN_TX*, &#8236;COM_SPEED*, [&#8236;MSG*]&#8236;
    *        ' &#8236;light*?&#8236;
    *        &#8236;IF VRLED* = &#8236;1* &#8236;THEN HIGH PIN_LED
    *        ' &#8236;send the byte to output COM
    *        &#8236;SEROUT COM_OUT_TX*, &#8236;COM_SPEED*, [&#8236;MSG*]&#8236;
    *        ' &#8236;wait for a byte on output COM
    *        &#8236;SERIN COM_OUT_RX*, &#8236;COM_SPEED*, [&#8236;MSG*]&#8236;
    *        ' &#8236;light*?&#8236;
    *        &#8236;IF VRLED* = &#8236;1* &#8236;THEN LOW PIN_LED
    *        ' &#8236;send the byte to input COM
    *        &#8236;SEROUT COM_IN_TX*, &#8236;COM_SPEED*, [&#8236;MSG*]&#8236;
    
    
    *      &#8236;CASE CMD_RECEIVE* ' &#8236;receive request
    *        &#8236;MSG* = &#8236;CODE_ACK
    *        ' &#8236;send a byte request to output COM
    *        &#8236;SEROUT COM_OUT_TX*, &#8236;COM_SPEED*, [&#8236;MSG*]&#8236;
    *        ' &#8236;wait for a byte on output COM
    *        &#8236;SERIN COM_OUT_RX*, &#8236;COM_SPEED*, &#8236;COM_TIMEOUT*, &#8236;RX_ERROR*, [&#8236;MSG*]&#8236;
    *        ' &#8236;send the byte to input COM
    *        &#8236;SEROUT COM_IN_TX*, &#8236;COM_SPEED*, [&#8236;MSG*]&#8236;
    
    
    *      &#8236;CASE CMD_LED* ' &#8236;LED request
    *       ' &#8236;wait for the status byte
    *        &#8236;SERIN COM_IN_RX*, &#8236;COM_SPEED*, &#8236;COM_TIMEOUT*, &#8236;RX_ERROR*, [&#8236;MSG*]&#8236;
    *        &#8236;IF MSG* = "&#8236;0*" &#8236;THEN
    *         '&#8236;LED OFF
    *          &#8236;LOW PIN_LED
    *          &#8236;VRLED* = &#8236;0
    *        &#8236;ELSE
    *          '&#8236;LED ON
    *          '&#8236;HIGH PIN_LED* '&#8236;postpone to next cmd
    *          &#8236;VRLED* = &#8236;1
    *        &#8236;ENDIF
    *        ' &#8236;send back Echo
    *        &#8236;SEROUT COM_IN_TX*, &#8236;COM_SPEED*, [&#8236;MSG*]&#8236;
    
    
    *     &#8236;CASE CMD_SET_LANG* ' &#8236;set language on EEPROM
    *        ' &#8236;wait for the byte to store
    *        &#8236;SERIN COM_IN_RX*, &#8236;COM_SPEED*, &#8236;COM_TIMEOUT*, &#8236;RX_ERROR*, [&#8236;MSG*]&#8236;
    *        &#8236;WRITE VAR_LANG*, &#8236;MSG
    *        ' &#8236;send back Echo
    *        &#8236;SEROUT COM_IN_TX*, &#8236;COM_SPEED*, [&#8236;MSG*]&#8236;
    
    
    *     &#8236;CASE CMD_GET_LANG* ' &#8236;set language on EEPROM
    *        ' &#8236;wait for the byte to store
    *        &#8236;READ VAR_LANG*, &#8236;MSG
    *        ' &#8236;send back Echo
    *        &#8236;SEROUT COM_IN_TX*, &#8236;COM_SPEED*, [&#8236;MSG*]&#8236;
    
    
    *     &#8236;CASE ELSE
    *        &#8236;GOTO RX_ERROR
    
    
    *    &#8236;ENDSELECT
    
    
    *    &#8236;GOTO PROGRAMMING_MAIN_LOOP
    
    
    
    
    RX_ERROR*:&#8236;
    *  &#8236;MSG* = &#8236;CODE_ERROR
    *  &#8236;SEROUT COM_IN_TX*, &#8236;COM_SPEED*, [&#8236;MSG*]&#8236;
    *  &#8236;GOTO PROGRAMMING_MAIN_LOOP
    

    this is the demoo

    can you please tell me is it right like what i show you before or its wrong ?
    and what the thinks i have to change it
    and how to calculate ?
  • zainab1421zainab1421 Posts: 17
    edited 2013-04-26 09:24
    What the command for stop the robot ?
  • Mike GreenMike Green Posts: 23,101
    edited 2013-04-26 09:39
    For the BoeBot, there is no stop. You have to understand how the Stamp works, particularly with the servo motors. The Stamp can only do one thing at a time. This includes making the servo motors work. When the Stamp is talking to the SayIt module, it can't produce pulses to make the servo motors work. When it's producing pulses for the servo motors, it can't talk to the SayIt module. The way the demo program is written, when you say "forward", the SayIt module provides a code to the Stamp when the Stamp asks for one. The Stamp executes the FORWARD routine which sends pulses to the motors for a second (50 x 20ms), then goes back to talking to the SayIt module. Each time you say "forward", the BoeBot moves for a second, then stops. The same sort of thing happens with the other commands.
  • Chris SavageChris Savage Parallax Engineering Posts: 14,406
    edited 2013-04-26 09:41
    Your code, as posted, can not be put in the editor and loaded. You should attach large programs rather than trying to post them into the message. Also, as Mike pointed out, you need to understand the code you're posting, and then if there is something specific you do not understand, then ask that specific question.
  • Mike GreenMike Green Posts: 23,101
    edited 2013-04-26 09:48
    I'm not sure what the program in Post #10 does. It's hard to tell because it's not a valid Basic program with all the "*" characters. I suspect that there are a couple of variables used to allow the program to do multiple actions from a single SayIt command, but it's too complicated and messed up with the "*"s to make sense of.
  • zainab1421zainab1421 Posts: 17
    edited 2013-04-26 09:51
    Ok thank you
  • Duane DegnDuane Degn Posts: 10,588
    edited 2013-04-26 10:50
    I was debating about saying anything here. Since zainab1421 sent me a PM asking for help I'll try to add what I can.

    I've used the SayIt a bit with the Propeller but not the Basic Stamp. From what I know of the BS2 and from what I've read other's post about it, I think it's kind of tough to use the SayIt with the BS2 since the BS2 doesn't have an UART buffer. In order for the BS2 to catch the codes coming from the SayIt it has to be actively listening to the SayIt with the "SERIN" command.

    The motors of the BOE-Bot also interfere with the SayIt's ability to hear commands so the robot should be stopped and not making any noise while listening.

    I made the mistake of using an Emic2 with the SayIt. I had the Emic2 say outloud whatever command the SayIt heard. The problem with this was the SayIt would then try to understand what the Emic2 was saying which would either result in an error or the SayIt would think it understood a new command. In hindsight this was kind of funny. I add this not just because it was funny but to point out the SayIt needs a relatively quiet environment to work properly.

    I wrote a program to allow me to listen in on the data exchange between the SayIt and the PC GUI. This helped me to see just what the SayIt was expecting to receive in order to execute the various commands. Post #23 here has some of this exchange. I've saved a lot more of the exchange than what I posted. I've attached a text file of the full exchange. The lines that don't start with either "PC:" or "Say It:" are notes I added to help me remember what the actions were I took in the GUI.

    While I've spend some time trying to get the SayIt to control a robot, I'm far from satisfied with my efforts so far. I just haven't had time to spend fixing all the little details needed to have a speech operated robot to work correctly. There are a surprising number of things to keep straight. If the robot is going to be noisy, you need to have the SayIt stop listening. It's also a good idea to have some sort of error handling code to decide what happens when the various errors occur.

    My suggestion is to start as simple as possible. Have the microcontroller turn on a LED or send a debug statement when it hears the work "Robot". Then add the ability to change word sets. Or in your case it may be easier to just start with word set 1 and stay there. Have the microcontroller send a debug statement of the word the SayIt heard before trying to program the robot to perform any actions.

    I'll be glad to answer any question I know how but I haven't used a Basic Stamp for several years and I'm not very familiar with its syntax.

    As I've stated in my profile, I don't mind receiving PMs that point me to a thread someone would like me to look at, but I don't like to give one on one help through private messages for several reasons. One of the main reasons is I often give bad advice. When I do so on the forum others jump in to correct me so I don't have to worry so much about being wrong. Another big reason I don't like to give one on one help through private messages is often others will have the same question. If an exchange is make via PM no one else can benefit from it (I believe many forum member feel the same about helping via PMs.)
  • Chris SavageChris Savage Parallax Engineering Posts: 14,406
    edited 2013-04-26 11:37
    Duane Degn wrote: »
    As I've stated in my profile, I don't mind receiving PMs that point me to a thread someone would like me to look at, but I don't like to give one on one help through private messages for several reasons. One of the main reasons is I often give bad advice. When I do so on the forum others jump in to correct me so I don't have to worry so much about being wrong. Another big reason I don't like to give one on one help through private messages is often others will have the same question. If an exchange is make via PM no one else can benefit from it (I believe many forum member feel the same about helping via PMs.)

    I agree with you. Questions should be posted in the forums (not PM) for two important reasons...first of all it gives more people the opportunity to offer help. You never know who might be fluent in regards to your question if it is asked privately. Second, everyone should be able to benefit from the advice and answers given.
  • Mike GreenMike Green Posts: 23,101
    edited 2013-04-26 11:48
    Ditto on both Duane's and Chris's comments. I make it a personal policy not to help people via PM other than to refer them to the forums and the posted manuals and tutorials.
Sign In or Register to comment.