[Robotgroup] Robot Head: BS2 Stamp programming Help?!
LHudson
lhudson73 at yahoo.com
Tue Aug 5 08:48:58 PDT 2008
I've included my code module as an attachment.
I have four pins connected to a "Mouth Module" with LEDs that light up. The Serial Port is tied to a DOT NET speech programming API event. The BS2 "listens" for the Serial data inside of a DO...LOOP:
DO
'~ SERIN 16\0, BAUD, [DEC COMDATA]
DEBUG CR, "Enter Command: "
DEBUGIN DEC COMDATA
SELECT COMDATA
CASE CMD_Mouth_Pin2_ON: HIGH 2
CASE CMD_Mouth_Pin2_OFF: LOW 2
CASE CMD_Mouth_Pin1_ON: HIGH 1
CASE CMD_Mouth_Pin1_OFF: LOW 1
CASE CMD_Mouth_Pin4_ON: HIGH 4
CASE CMD_Mouth_Pin4_OFF: LOW 4
CASE CMD_Mouth_Pin5_ON: HIGH 5
CASE CMD_Mouth_Pin5_OFF: LOW 5
ENDSELECT
LOOP
I am happy to report that the mouth movement is quite realistic and entertaining, when tied to the Speech API Events! I will bring this to the Show & Tell on Thursday. Also, this is weird, but it doesn't matter if you use the SERIN or the DEBUGIN Code, it still works the same whether you are using the DOT NET Serial Interface or the Stamp Editor?!
But okay here is my actual question: I am having problems with the Pan & Tilt servos that are attached to the head. If you inspect the code attachment, you can see the input processing to determine the servo position. With some experimentation, I was able to engineer it so that by inputting a command, e.g. "1010" or "2130" I was able to position the head... not with 100% consistency or accuracy, but it's a good start.
The problem is that if there is no command to execute the Pan & Tilt, then the servos receive no PULSOUT. With no charge to the motors, the slightest bump can cause a severe case of whiplash. My tentative solution was to put additional PULSOUT codes before the ...LOOP:
DO
'~ SERIN 16\0, BAUD, [DEC COMDATA]
DEBUG CR, "Enter Command: "
DEBUGIN DEC COMDATA
IF COMDATA < 100
' {Do the Speech Code}
ELSEIF COMDATA < 1000
' {Do the Movement Code}
ELSE
' {Do the Pan or Tilt Code}
ENDIF
PULSOUT PIN_PanTilt_Pan, POS_PanTilt_Pan
PULSOUT PIN_PanTilt_Tilt, POS_PanTilt_Tilt
LOOP
However this causes much weirdness to happen. In the attachment, there is an initialization sequence; it lights up the LEDs so I can verify they are connected to the correct pins, and it also centers the servos, before the DO...LOOP that receives the input and executes the command. When I include the two PULSOUT codes before the ...LOOP, the result is that this initiation sequence, which is supposed to occur before the DO...LOOP, executes over and over and over again!
Here is another thing: sometimes, when I am debugging in the Stamp Editor, it will go through the initiation sequence 10-11x before finally displaying the "Enter Command:" prompt in the debug window. Is this somehow related?
Thanks!
L. Scott Hudson
"There are known knowns. These are things we know that we know. There are known unknowns. That is to say, there are things we know we don't know. But, there are also unknown unknowns. These are things we don't know we don't know."
-- Donald Rumsfeld, describing the IBM "Rational Software" Platform
More information about the Robotgroup
mailing list