davidbuckley.net
home  >  Bambino  >  Programs 1 to 16  |  Programs 17 to 21  |  Programs 22 to 28 14 January 2012

Bambino Programming by David Buckley

Developer Programming instructions

  • Revisions

    Now you have built Bambino you can either just use it with the preloaded program or you can learn about robots and programming by following the programs I wrote while creating the original Bambino.

    All the programs are in the program ZIP file available for download from the main Bambino page.

    You will need the PicAxe Programming Editor
    available from
    http://www.picaxe.com/Software/PICAXE/PICAXE-Programming-Editor
    then
    unpack the programs from the ZIP file using WinZIP or a similar program
    and then load them into the PicAxe Programming Editor.
    (It is recommended that you use the programs from the ZIP file.)
    Or you can copy from the listings below and paste each program into the editor.

    Programs 17 to 21
    Programs 22 to 28

    [page top]

    'Bambino-01
    Sertxd("B01",cr)		'report program number
    
    #PicAxe 20M2
    #no_data
    
    'Bambino-01	'Test eyeLEDs, whiskerLEDs and speaker
    
    'The program makes a sound and toggles the four orange LEDs.
    'It uses
    ' - the Speaker and red Mouth LED, 
    ' - the four orange LEDs 
    
    symbol VoiceLed_     =c.5    'low =>LED on 
    symbol eyeLedL_      =c.2    'low =>LED on 
    symbol eyeLedR_      =b.1    'low =>LED on
    symbol whiskerLedL_  =c.3    'low =>whisker LED on
    symbol whiskerLedR_  =b.3    'low =>whisker LED on
    
    initialise:
    	high eyeLedL_		'make output and turn off
    	high eyeLedR_		'make output and turn off
    	high whiskerLedL_	'make output and turn off
    	high whiskerLedR_	'make output and turn off
    start:
    	let b0 = b0 + 1         'increment b0, 
    	  'when the byte variable b0 reaches 255 it will increment to 0
    	sound VoiceLed_,(b0,2)  'make a sound
    	toggle eyeLedL_		'alter eyeL
    	toggle eyeLedR_		'alter eyeR
    	toggle whiskerLedL_	'alter whiskerL
    	toggle whiskerLedR_	'alter whiskerR
    	goto start              'loop back to start
    

    [page top]

    'Bambino-02
    Sertxd("B02",cr)		'report program number
    
    #PicAxe 20M2
    #no_data
    
    'Bambino-01	'Test eyeLEDs, whiskerLEDs and speaker
    'Bambino-02	'Test InfraRed input
    
    'Test InfraRed input
    '-------------------
    '	receive IR code and send it to the PC;
    '	open the Terminal window [F8] to see the codes;
    '		set the baud to 4800;
    '	if you are not using the PicAxe controller TVR010
    '	then you will need to write down which keys give which codes;
    
    
    symbol VoiceLed_     =c.5
    symbol eyeLedL_      =c.2    'low =>LED on 
    symbol eyeLedR_      =b.1    'low =>LED on
    symbol whiskerLedL_  =c.3    'low =>whisker LED on
    symbol whiskerLedR_  =b.3    'low =>whisker LED on
    symbol iIRin         =c.6
    
    '=================================================================
    'TVR010 PicAxe IR-controller
    '---------------------------
    'Before use, the transmitter must be programmed with the ‘Sony’ transmit code.
    '1. Insert 2 AAA size batteries, preferably alkaline.
    '2. Press ‘S’ and ‘B’ at the same time. S is in the centre of the arrows. 
    '	The top left red LED should light.
    '3. Press ‘0’. The LED should flash.
    '4. Press ‘1’. The LED should flash.
    '5. Press ‘3’. The LED should go out.
    '6. Press the red power button (top right).
    '-------------------------------------------
    'IRin cmnds PicAxe controller
    'DO NOT PRESS OTHER KEYS 
    'ie [A] [B] [C] [D] [E] [F] [G] 
    'They change the Mode and [B] has to be pressed to change back.
    '[square] [triangle [()] [L] [X] [backwards F]  have no effect
    
    Symbol KEY_POWER  = 21	
    
    Symbol KEY_UP     = 16	
    Symbol KEY_DOWN   = 17	
    Symbol KEY_RIGHT  = 18	
    Symbol KEY_LEFT   = 19	
    
    Symbol KEY_BAR    = 96
    Symbol KEY_TENT   = 54
    Symbol KEY_VERT_CROSS = 37
    Symbol KEY_VCROSS = 37		'synonym for easier coding
    Symbol KEY_DIAG_CROSS = 20
    Symbol KEY_XCROSS = 20		'synonym for easier coding
    symbol IRkey1     =  0
    symbol IRkey2     =  1
    symbol IRkey3     =  2
    symbol IRkey4     =  3
    symbol IRkey5     =  4
    symbol IRkey6     =  5
    symbol IRkey7     =  6
    symbol IRkey8     =  7
    symbol IRkey9     =  8
    Symbol KEY_MINUS  = 98
    Symbol KEY_0      =  9	
    Symbol KEY_PLUS   = 11
    '=================================================================
    
    initialise:
    	low eyeLedR_			'make output and off
    	low eyeLedL_			'make output and off
    
    start:
    	let b0 = b0 + 1               'increment b0
    	sound VoiceLed_,(b0,2)    	'make a sound
    	toggle eyeLedR_			'alter eyeR
    	toggle eyeLedL_			'alter eyeL
    	irin [100,start],iIRin,b1	'irin with timeout
    '	irin iIRin,b1			'irin with no timeout
    	sertxd (#b1," ",cr)   		'send value back to PC
    	goto start                    'loop back to start
    

    [page top]

    'Bambino-02a
    Sertxd("B02a",cr)		'report program number
    
    #PicAxe 20M2
    #no_data
    
    'Bambino-01	'Test eyeLEDs, whiskerLEDs and speaker
    'Bambino-02	'Test InfraRed input
    'Bambino-02a	'Test Eye light values
    
    'Test Eye light values
    '---------------------
    '	open the Terminal window [F8] to see the values;
    '		set the baud to 4800;
    
    
    symbol VoiceLed_     =c.5
    symbol eyeLedL_      =c.2    'low =>LED on 
    symbol eyeLedR_      =b.1    'low =>LED on
    symbol whiskerLedL_  =c.3    'low =>whisker LED on
    symbol whiskerLedR_  =b.3    'low =>whisker LED on
    symbol iIRin         =c.6
    symbol eyeR          =c.7		  	
    symbol eyeL          =c.1		  	
    
    
    
    
    initialise:
    	high eyeLedR_			'make output LED off
    	high eyeLedL_			'make output LED off
    
    start:
    	high  eyeLedR_			'eyeR off
    
    whiskerL:
    	readadc c.1,b1			'dark
    	low eyeLedL_			'eyeR on
    	readadc c.1,b2			'light
    	high  eyeLedL_			'eyeR off
    	if b1>b2 then whiskerL	
    '	b3 =b2 -b1
    	b3 =b2 -b1 *256 /b2		'scale
    		sertxd ("L ",#b1," ",#b2," ",#b3,":")   	 	 'send value back to PC
    	pause 100
    
    whiskerR:
    	readadc c.7,b1			'dark
    	low eyeLedR_			'eyeR on
    	readadc c.7,b2			'light
    	high  eyeLedR_			'eyeR off
    	if b1>b2 then whiskerR	
    '	b3 =b2 -b1
    	b3 =b2 -b1 *256 /b2		'scale
    	sertxd ("R ",#b1," ",#b2," ",#b3,"--",cr)   		'send value back to PC
    	
    	
    	pause 100
    	goto start                    'loop back to start
    

    [page top]

    'Bambino-02a
    Sertxd("B02b",cr)		'report program number
    
    #PicAxe 20M2
    #no_data
    
    'Bambino-01		'Test eyeLEDs, whiskerLEDs and speaker
    'Bambino-02		'Test InfraRed input
    'Bambino-02a	'Test Eye light values
    'Bambino-02b	'Test Whisker light values and put in EEPROM
    
    'Test Whisker light values
    '-------------------------
    '	open the Terminal window [F8] to see the values;
    '		set the baud to 4800;
    
    symbol VoiceLed_     =c.5
    symbol eyeLedL_      =c.2    'low =>LED on 
    symbol eyeLedR_      =b.1    'low =>LED on
    symbol whiskerLedL_  =c.3    'low =>whisker LED on
    symbol whiskerLedR_  =b.3    'low =>whisker LED on
    symbol iIRin         =c.6
    symbol oIRout        =b.2
    symbol eyeR          =c.7		  	
    symbol eyeL          =c.1		  	
    symbol whiskerL      =b.6    'whisker Down Left		  	
    symbol whiskerR      =b.0    'whisker Down Right		  	
    
    'edit holedetect values so Bambino can see table edges
    'detected values should 
    'be grater than the holedetect values when not at an edge 
    'and lower when at an edge
    symbol holedetectL =50	'scaled light level difference for hole
    symbol holedetectR =50	'scaled light level difference for hole
    
    
    write 253,holedetectL	'store for future programs
    write 252,holedetectR	'store for future programs
    
    initialise:
    	high whiskerLedL_			'make output, whisker LED off
    	high whiskerLedR_			'make output, whisker LED off
    
    start:
    
    ReadwhiskerL:
    	readadc b.6,b1			'dark
    	low whiskerLedL_		'LED on
    	readadc b.6,b2			'light
    	high  whiskerLedL_		'LED off
    	if b1>b2 then ReadwhiskerL	
    	b3 =b2 -b1 *256 /b2		'scale 
    	sertxd ("L ",#b1," ",#b2," ",#b3,"   ")   	 'home, send value back to PC
    	if b3<holedetectL then
    	  sertxd("edge",cr)
    	 endif 
    
    ReadwhiskerR:
    	readadc b.0,b1			'dark
    	low whiskerLedR_		'LED on
    	low whiskerLedL_		'LED on
    	readadc b.0,b2			'light
    	high  whiskerLedR_		'LED off
    	high  whiskerLedL_		'LED off
    	if b1>b2 then ReadwhiskerR	
    	b3 =b2 -b1 *256 /b2		'scale
    	sertxd ("R ",#b1," ",#b2," ",#b3,"   ",cr)',"--",cr) 'send value back to PC
    	if b3<holedetectR then
    	  sertxd("edge",cr)
    	 endif 
    	
    	pause 200
    	goto start                    'loop back to start
    

    [page top]

    'Bambino-03
    Sertxd("B03",cr)		'report program number
    
    #PicAxe 20M2
    #no_data
    
    'Bambino-01		'Test eyeLEDs, whiskerLEDs and speaker
    'Bambino-02		'Test InfraRed input
    'Bambino-02a	'Test Eye light values and put in EEPROM
    'Bambino-03		'Play the inbuilt tunes using keys 1 to 4 and beep on 5
    
    
    'Play the inbuilt tunes using keys 1 to 4 and beep on 5
    '------------------------------------------------------
    
    symbol VoiceLed_      =c.5
    symbol eyeLedL_       =c.2    'low =>LED on 
    symbol eyeLedR_       =b.1    'low =>LED on
    symbol whiskerLedL_   =c.3    'low =>whisker LED on
    symbol whiskerLedR_   =b.3    'low =>whisker LED on
    symbol iIRin          =c.6
    symbol oIRout         =b.2
    symbol eyeR           =c.7		  	
    symbol eyeL           =c.1		  	
    
    'TVR010 PicAxe IR-controller
    '---------------------------
    'Before use, the transmitter must be programmed with the ‘Sony’ transmit code.
    '1. Insert 2 AAA size batteries, preferably alkaline.
    '2. Press ‘S’ and ‘B’ at the same time. S is in the centre of the arrows. 
    '	The top left red LED should light.
    '3. Press ‘0’. The LED should flash.
    '4. Press ‘1’. The LED should flash.
    '5. Press ‘3’. The LED should go out.
    '6. Press the red power button (top right).
    '-------------------------------------------
    'IRin cmnds PicAxe controller
    
    Symbol KEY_POWER  = 21
    Symbol KEY_UP     = 16
    Symbol KEY_DOWN   = 17
    Symbol KEY_RIGHT  = 18
    Symbol KEY_LEFT   = 19
    
    symbol IRkey1     =  0
    symbol IRkey2     =  1
    symbol IRkey3     =  2
    symbol IRkey4     =  3
    symbol IRkey5     =  4
    symbol IRkey6     =  5
    symbol IRkey7     =  6
    symbol IRkey8     =  7
    symbol IRkey9     =  8
    Symbol KEY_MINUS  = 98
    Symbol KEY_0      =  9
    Symbol KEY_PLUS   = 11
    Symbol KEY_BAR    = 96
    Symbol KEY_TENT   = 54
    Symbol KEY_VERT_CROSS = 37
    Symbol KEY_DIAG_CROSS = 20
    
    
    initialise:
    	low eyeLedR_			'make output
    	high eyeLedL_			'make output
    
    start:
    	toggle eyeLedR_			'flash eyeR while waiting 
    	toggle eyeLedL_			'flash eyeR while waiting 
    	irin [100,start],iIRin,b1	'irin with timeout
    	on b1 goto play0,play1,play2,play3,beep 
    	'if b1>3 then ignore command
    	goto start                    'loop back to start
    
    
    
    play0:
    	play VoiceLed_,0
    	goto start                    'loop back to start
    play1:
    	play VoiceLed_,1
    	goto start                    'loop back to start
    play2:
    	play VoiceLed_,2
    	goto start                    'loop back to start
    play3:
    	play VoiceLed_,3
    	goto start                    'loop back to start
    
    beep:
    	sound VoiceLed_,(150,10)
    	goto start                    'loop back to start
    
    

    [page top]

    'Bambino-04
    Sertxd("B04",cr)		'report program number
    
    #PicAxe 20M2
    #no_data
    
    'Bambino-01		'Test eyeLEDs, whiskerLEDs and speaker
    'Bambino-02		'Test InfraRed input
    'Bambino-02a	'Test Eye light values
    'Bambino-02b	'Test Whisker light values and put in EEPROM
    'Bambino-03		'Play the inbuilt tunes using keys 1 to 4 and beep on 5
    'Bambino-04		'Set servos to mid position	
    
    
    'Set servos to mid position
    '--------------------------
    '	remove horn screws
    '	remove horns from servos
    '	run program
    '	attach horns so 
    '		feet are side by side
    '		feet are both flat on the ground
    '		fasten the horns with the screws
    
    symbol servopace      =c.0
    symbol servoroll      =c.4
    symbol VoiceLed_      =c.5
    symbol eyeLedL_       =c.2    'low =>LED on 
    symbol eyeLedR_       =b.1    'low =>LED on
    symbol whiskerLedL_   =c.3    'low =>whisker LED on
    symbol whiskerLedR_   =b.3    'low =>whisker LED on
    symbol eyeR           =c.7		  	
    symbol eyeL           =c.1		  	
    symbol iIRin          =c.6
    symbol oIRout         =b.2
    
    initialise:
    	low eyeLedR_			'make output
    	high eyeLedL_		'make output
    
    start:
    	toggle eyeLedR_		'flash eyeR so we know program is running
    	toggle eyeLedL_		'flash eyeL so we know program is running
    	pulsout servopace,150	'pulse servo 1.5ms
    	pulsout servoroll,150	'pulse servo 1.5ms
    	pause 20			'pause 20ms
    	goto start              'loop back to start
    
    

    [page top]

    'Bambino-05
    Sertxd("B05",cr)		'report program number
    
    #PicAxe 20M2
    #no_data
    read 255,b1
    Sertxd("255 is ",#b1,cr)
    'Bambino-01		'Test eyeLEDs, whiskerLEDs and speaker
    'Bambino-02		'Test InfraRed input
    'Bambino-02a	'Test Eye light values
    'Bambino-02b	'Test Whisker light values and put in EEPROM
    'Bambino-03		'Play the inbuilt tunes using keys 1 to 4 and beep on 5
    'Bambino-04		'Set servos to mid position	
    'Bambino-05		'Calibrate servo mid positions and put in EEPROM.
    
    
    'Calibrate servo mid positions.
    '-----------------------------
    'The pulsout value must be between 100 and 200 otherwise the servo may be damaged.
    'Because of the way each servo is made and
    '  the horns can only be put on about every 15 degrees
    '  the feet may not be exactly side by side or flat on the ground.
    'Edit the servo mid positions, rollC and paceC, and
    '   reload the program until the feet are in the right position..
    'The calibrated values are stored in EEPROM for further programs.
    
    
    symbol servopace      =c.0	'left connector
    symbol servoroll      =c.4	'right connector
    symbol VoiceLed_      =c.5
    symbol eyeLedL_       =c.2    'low =>LED on 
    symbol eyeLedR_       =b.1    'low =>LED on
    symbol whiskerLedL_   =c.3    'low =>whisker LED on
    symbol whiskerLedR_   =b.3    'low =>whisker LED on
    symbol eyeR           =c.7		  	
    symbol eyeL           =c.1		  	
    symbol iIRin          =c.6
    symbol oIRout         =b.2
    
    symbol rollC	=155	'100 is roll to the left
    symbol paceC	=150	'100 is left foot back
    
    write 254,rollC		'save for other programs
    write 255,paceC		'save for other programs 
    
    initialise:
    	low eyeLedR_			'make output
    	high eyeLedL_			'make output
    
    start:
    	toggle eyeLedR_			'flash eyeR so we know program is running
    	toggle eyeLedL_			'flash eyeR so we know program is running
    	pulsout servopace,paceC		'pulse servo paceC
    	pulsout servoroll,rollC		'pulse servo rollC
    	pause 20			'pause 20ms
    	goto start                      'loop back to start
    

    [page top]

    'Bambino-06
    Sertxd("B06",cr)		'report program number
    
    #PicAxe 20M2
    #no_data
    
    'Bambino-01		'Test eyeLEDs, whiskerLEDs and speaker
    'Bambino-02		'Test InfraRed input
    'Bambino-02a	'Test Eye light values
    'Bambino-02b	'Test Whisker light values and put in EEPROM
    'Bambino-03		'Play the inbuilt tunes using keys 1 to 4 and beep on 5
    'Bambino-04		'Set servos to mid position	
    'Bambino-05		'Calibrate servo mid positions and put in EEPROM.
    'Bambino-06		'Introduce _iStand:- initialise with feet in mid position
    
    
    'Introduce _iStand:- initialise with feet in mid position
    '--------------------------------------------------------
    
    'modified
    '--------
    'initialise:
    
    'New
    '---
    'i
    '_iStand:
    
    symbol oservopace     =c.0	'left connector
    symbol oservoroll     =c.4	'right connector
    symbol VoiceLed_      =c.5
    symbol eyeLedL_       =c.2    'low =>LED on 
    symbol eyeLedR_       =b.1    'low =>LED on
    symbol whiskerLedL_   =c.3    'low =>whisker LED on
    symbol whiskerLedR_   =b.3    'low =>whisker LED on
    symbol iIRin          =c.6
    symbol oIRout         =b.2
    
    symbol rollC	=150	'100 is roll to the left
    symbol paceC	=150	'100 is left foot back
    
    symbol i 		=b2
    
    
    initialise:
    	low eyeLedR_			'make output
    	high eyeLedL_			'make output
    	gosub _iStand
    
    start:
    	toggle eyeLedR_			'flash eyeR so we know program is running
    	toggle eyeLedL_			'flash eyeR so we know program is running
    	pause 20				'pause 20ms
    	goto start                    'loop back to start
    
    
    _iStand:
    'initialise with feet in mid position
    	for i=0 to 10
    	  pulsout oservopace,paceC	'pulse servo paceC
    	  pulsout oservoroll,rollC	'pulse servo rollC
    	  pause 70				'pause 70ms - do it slowly
    	 next i
    	return 
    
    

    [page top]

    'Bambino-07
    Sertxd("B07",cr)		'report program number
    
    #PicAxe 20M2
    #no_data
    
    'Bambino-01	'Test eyeLEDs, whiskerLEDs and speaker
    'Bambino-02	'Test InfraRed input
    'Bambino-02a	'Test Eye light values
    'Bambino-02b	'Test Whisker light values and put in EEPROM
    'Bambino-03	'Play the inbuilt tunes using keys 1 to 4 and beep on 5
    'Bambino-04	'Set servos to mid position	
    'Bambino-05	'Calibrate servo mid positions and put in EEPROM.
    'Bambino-06	'Introduce _iStand:- initialise with feet in mid position
    'Bambino-07	'Set rollR
    
    
    'Set rollR
    '---------
    'edit rollR and reload program until left foot is just off the ground
    
    'modified
    '--------
    'initialise:
    'start
    '_iStand
    
    'New
    '---
    'rollR
    'rollspeed
    'rollat
    'sframe:
    '_rollR
    
    
    symbol servopace      =c.0    'left connector
    symbol servoroll      =c.4    'right connector
    symbol VoiceLed_      =c.5
    symbol eyeLedL_       =c.2    'low =>LED on 
    symbol eyeLedR_       =b.1    'low =>LED on
    symbol whiskerLedL_   =c.3    'low =>whisker LED on
    symbol whiskerLedR_   =b.3    'low =>whisker LED on
    symbol iIRin          =c.6
    symbol oIRout         =b.2
    
    symbol rollC	=150	'100 is roll to the left
    symbol paceC	=150	'100 is left foot back
    
    symbol i 		=b2
    symbol rollat 	=b3
    
    symbol rollR      =rollC+15
    symbol rollspeed  =1
    symbol sframe     =20   'time between servo pulses
    
    
    
    initialise:
    	low eyeLedR_    'make output
    	high eyeLedL_   'make output
    	gosub _iStand
    
    start:
    	toggle eyeLedR_	'alter eyeR so we know program is running
    	toggle eyeLedL_	'alter eyeR so we know program is running
    	gosub _rollR
    	end
    
    
    
    _rollR:
    	for i=rollat to rollR step rollspeed
    	  rollat =i
    	  pulsout servoroll,rollat	'pulse servo
    	  pause sframe
    	 next i
    	return 
    	 
    _iStand:
    'initialise with feet in mid position
    	for i=0 to 10
    	  pulsout servopace,paceC	'pulse servo paceC
    	  pulsout servoroll,rollC	'pulse servo rollC
    	  pause 70			'pause 70ms - do it slowly
    	 next i
     	rollat =rollC
    	return 
    

    [page top]

    'Bambino-08
    Sertxd("B08",cr)		'report program number
    
    #PicAxe 20M2
    #no_data
    
    'Bambino-01		'Test eyeLEDs, whiskerLEDs and speaker
    'Bambino-02		'Test InfraRed input
    'Bambino-02a	'Test Eye light values
    'Bambino-02b	'Test Whisker light values and put in EEPROM
    'Bambino-03		'Play the inbuilt tunes using keys 1 to 4 and beep on 5
    'Bambino-04		'Set servos to mid position	
    'Bambino-05		'Calibrate servo mid positions and put in EEPROM.
    'Bambino-06		'Introduce _iStand:- initialise with feet in mid position
    'Bambino-07		'Set rollR
    'Bambino-08		'Set rollL
    
    
    'Set rollL
    '---------
    'edit rollL and reload program 
    '	until left foot is just off the ground.
    
    'modified
    '--------
    'start:
    
    'New
    '---
    'rollL
    '_rollL:
    
    
    symbol servopace      =c.0	'left connector
    symbol servoroll      =c.4	'right connector
    symbol VoiceLed_      =c.5
    symbol eyeLedL_       =c.2    'low =>LED on 
    symbol eyeLedR_       =b.1    'low =>LED on
    symbol whiskerLedL_   =c.3    'low =>whisker LED on
    symbol whiskerLedR_   =b.3    'low =>whisker LED on
    symbol iIRin          =c.6
    symbol oIRout         =b.2
    
    symbol rollC	=150	'100 is roll to the left
    symbol paceC	=150	'100 is left foot back
    
    symbol i 		=b2
    symbol rollat 	=b3
    
    symbol rollR      =rollC+15
    symbol rollL      =rollC-15
    symbol rollspeed  =1
    symbol sframe     =20	'time between servo pulses
    
    
    initialise:
    	low eyeLedR_		'make output
    	high eyeLedL_	'make output
    	gosub _iStand
    	
    start:
    	toggle eyeLedR_	'alter eyeR so we know program is running
    	toggle eyeLedL_	'alter eyeR so we know program is running
    	gosub _rollL
    	end
    
    
    
    _rollL:
    	for i=rollat to rollL step -rollspeed
    	  rollat =i
    	  pulsout servoroll,rollat	'pulse servo
    	  pause sframe
    	 next i
    	return 
    	 
    _rollR:
    	for i=rollat to rollR step rollspeed
    	  rollat =i
    	  pulsout servoroll,rollat	'pulse servo
    	  pause sframe
    	 next i
    	return 
    
    _iStand:
    'initialise with feet in mid position
    	for i=0 to 10
    	  pulsout servopace,paceC	'pulse servo paceC
    	  pulsout servoroll,rollC	'pulse servo rollC
    	  pause 70				'pause 70ms - do it slowly
    	 next i
    	rollat =rollC
    	return 
    

    [page top]

    'Bambino-09
    Sertxd("B09",cr)		'report program number
    
    #PicAxe 20M2
    #no_data
    
    'Bambino-01	'Test eyeLEDs, whiskerLEDs and speaker
    'Bambino-02	'Test InfraRed input
    'Bambino-02a	'Test Eye light values
    'Bambino-02b	'Test Whisker light values and put in EEPROM
    'Bambino-03	'Play the inbuilt tunes using keys 1 to 4 and beep on 5
    'Bambino-04	'Set servos to mid position	
    'Bambino-05	'Calibrate servo mid positions and put in EEPROM.
    'Bambino-06	'Introduce _iStand:- initialise with feet in mid position
    'Bambino-07	'Set rollR
    'Bambino-08	'Set rollL
    'Bambino-09	'Check rollR, rollL
    
    
    'Check rollR, rollL
    '------------------
    'edit rollR and rollL and reload program 
    '	until left and right roll is equal
    '	You might have to take out the download cable to 
    '	check what is right, because it pulls the robot.
    
    'Investigate effect of rollspeed
    '-------------------------------
    'edit rollspeed to see how Woodly performs
    
    
    'modified
    '--------
    'start:
    
    'New
    '---
    
    
    symbol servopace      =c.0    'left connector
    symbol servoroll      =c.4    'right connector
    symbol VoiceLed_      =c.5
    symbol eyeLedL_       =c.2    'low =>LED on 
    symbol eyeLedR_       =b.1    'low =>LED on
    symbol whiskerLedL_   =c.3    'low =>whisker LED on
    symbol whiskerLedR_   =b.3    'low =>whisker LED on
    symbol iIRin          =c.6
    symbol oIRout         =b.2
    
    symbol rollC	=150	'100 is roll to the left
    symbol paceC	=150	'100 is left foot back
    
    symbol i 		=b2
    symbol rollat 	=b3
    
    symbol rollR      =rollC+15
    symbol rollL      =rollC-15
    symbol rollspeed  =3    '4 is too fast, 0 won't move
    symbol sframe     =20	'time between servo pulses
    
    
    initialise:
    	low eyeLedR_	'make output
    	high eyeLedL_	'make output
    	gosub _iStand
    
    
    start:
    	toggle eyeLedR_	'alter eyeR so we know program is running
    	toggle eyeLedL_	'alter eyeR so we know program is running
    	gosub _rollR
    	toggle eyeLedR_	'alter eyeR so we know program is running
    	toggle eyeLedL_	'alter eyeR so we know program is running
    	gosub _rollL
    	goto start
    
    
    
    _rollL:
    	for i=rollat to rollL step -rollspeed
    	  rollat =i
    	  pulsout servoroll,rollat	'pulse servo
    	  pause sframe
    	 next i
    	return 
    	 
    _rollR:
    	for i=rollat to rollR step rollspeed
    	  rollat =i
    	  pulsout servoroll,rollat	'pulse servo
    	  pause sframe
    	 next i
    	return 
    
    _iStand:
    'initialise with feet in mid position
    	for i=0 to 10
    	  pulsout servopace,paceC	'pulse servo paceC
    	  pulsout servoroll,rollC	'pulse servo rollC
    	  pause 70				'pause 70ms - do it slowly
    	 next i
    	rollat =rollC
    	return 
    

    [page top]

    'Bambino-10
    Sertxd("B10",cr)		'report program number
    
    #PicAxe 20M2
    #no_data
    
    'Bambino-01	'Test eyeLEDs, whiskerLEDs and speaker
    'Bambino-02	'Test InfraRed input
    'Bambino-02a	'Test Eye light values
    'Bambino-02b	'Test Whisker light values and put in EEPROM
    'Bambino-03	'Play the inbuilt tunes using keys 1 to 4 and beep on 5
    'Bambino-04	'Set servos to mid position	
    'Bambino-05	'Calibrate servo mid positions and put in EEPROM.
    'Bambino-06	'Introduce _iStand:- initialise with feet in mid position
    'Bambino-07	'Set rollR
    'Bambino-08	'Set rollL
    'Bambino-09	'Check rollR, rollL
    'Bambino-10	'Introduction of _Stand
    
    'Introduction of _Stand
    '----------------------
    'You might have to take out the download cable to check what is right, because it pulls the robot.
    
    
    'modified
    '--------
    'initialise:
    'start:
    
    'New
    '---
    'i2
    'Stand	'stand with both feet flat
    
    symbol servopace      =c.0    'left connector
    symbol servoroll      =c.4    'right connector
    symbol VoiceLed_      =c.5
    symbol eyeLedL_       =c.2    'low =>LED on 
    symbol eyeLedR_       =b.1    'low =>LED on
    symbol whiskerLedL_   =c.3    'low =>whisker LED on
    symbol whiskerLedR_   =b.3    'low =>whisker LED on
    symbol iIRin          =c.6
    
    symbol rollC	=150	'100 is roll to the left
    symbol paceC	=150	'100 is left foot back
    
    symbol i 		=b2
    symbol i2 		=b3
    symbol rollat 	=b4
    
    symbol rollR      =rollC+15
    symbol rollL      =rollC-15
    symbol rollspeed  =3    '4 is too fast, 0 won't move
    symbol sframe     =20	'time between servo pulses
    
    
    initialise:
    	low eyeLedR_	'make output
    	high eyeLedL_	'make output
    	gosub _iStand
    
    start:
          for i2=1 to 5
            toggle eyeLedR_	'alter eyeR so we know program is running
    	  toggle eyeLedL_	'alter eyeR so we know program is running
    	  gosub _rollR
    	  toggle eyeLedR_	'alter eyeR so we know program is running
    	  toggle eyeLedL_	'alter eyeR so we know program is running
    	  gosub _rollL
    	 next i2
    	for i2=1 to 5
            toggle eyeLedR_	'alter eyeR so we know program is running
    	  toggle eyeLedL_	'alter eyeR so we know program is running
    	  gosub _rollR
    	  gosub Stand
    	  pause 500
    	  toggle eyeLedR_	'alter eyeR so we know program is running
    	  toggle eyeLedL_	'alter eyeR so we know program is running
    	  gosub _rollL
    	  gosub Stand
    	  pause 500
    	 next i2
    	goto start
    
    
    
    Stand:	'stand with both feet flat
    	if rollat<rollC then _StandR
    _StandL:
    	for i=rollat to rollC step -rollspeed
    	  rollat =i
    	  pulsout servoroll,rollat	'pulse servo
    	  pause sframe
    	 next i
    	return 
    _StandR:
    	for i=rollat to rollC step rollspeed
    	  rollat =i
    	  pulsout servoroll,rollat	'pulse servo
    	  pause sframe
    	 next i
    	return 
    
    _rollL:
    	for i=rollat to rollL step -rollspeed
    	  rollat =i
    	  pulsout servoroll,rollat	'pulse servo
    	  pause sframe
    	 next i
    	return 
    	 
    _rollR:
    	for i=rollat to rollR step rollspeed
    	  rollat =i
    	  pulsout servoroll,rollat	'pulse servo
    	  pause sframe
    	 next i
    	return 
    
    _iStand:
    'initialise with feet in mid position
    	for i=0 to 10
    	  pulsout servopace,paceC	'pulse servo paceC
    	  pulsout servoroll,rollC	'pulse servo rollC
    	  pause 70			'pause 70ms - do it slowly
    	 next i
    	rollat =rollC
    	return 
    

    [page top]

    'Bambino-11
    Sertxd("B11",cr)		'report program number
    
    #PicAxe 20M2
    #no_data
    
    'Bambino-01	'Test eyeLEDs, whiskerLEDs and speaker
    'Bambino-02	'Test InfraRed input
    'Bambino-02a	'Test Eye light values
    'Bambino-02b	'Test Whisker light values and put in EEPROM
    'Bambino-03	'Play the inbuilt tunes using keys 1 to 4 and beep on 5
    'Bambino-04	'Set servos to mid position	
    'Bambino-05	'Calibrate servo mid positions and put in EEPROM.
    'Bambino-06	'Introduce _iStand:- initialise with feet in mid position
    'Bambino-07	'Set rollR
    'Bambino-08	'Set rollL
    'Bambino-09	'Check rollR, rollL
    'Bambino-10	'Introduction of _Stand
    'Bambino-11	'Investigate effect of rollspeed;	watch roll for all three speeds
    
    'Investigate effect of rollspeed with rollat a variable
    '------------------------------------------------------
    'watch roll for all three speeds
    '	You might have to take out the download cable to 
    '	check what is right, because it pulls the robot.
    
    'modified
    '--------
    'initialise:
    'start:
    
    'New
    '---
    'rollspeed is now a variable
    
    
    symbol servopace      =c.0	'left connector
    symbol servoroll      =c.4	'right connector
    symbol VoiceLed_      =c.5
    symbol eyeLedL_       =c.2    'low =>LED on 
    symbol eyeLedR_       =b.1    'low =>LED on
    symbol whiskerLedL_   =c.3    'low =>whisker LED on
    symbol whiskerLedR_   =b.3    'low =>whisker LED on
    symbol iIRin          =c.6
    symbol oIRout         =b.2
    
    symbol rollC	=150	'100 is roll to the left
    symbol paceC	=150	'100 is left foot back
    
    symbol i 		=b2
    symbol i2 		=b3
    symbol rollat 	=b4
    
    symbol rollR      =rollC+15
    symbol rollL      =rollC-15
    symbol rollspeed  =b6   '4 is too fast, 0 won't move
    symbol sframe     =20	'time between servo pulses
    
    
    
    initialise:
    	low eyeLedR_	'make output
    	high eyeLedL_	'make output
    	gosub _iStand
    	rollspeed =1  
    
    start:
          for i2=1 to 5
            toggle eyeLedR_	'alter eyeR so we know program is running
    	  toggle eyeLedL_	'alter eyeR so we know program is running
    	  gosub _rollR
    	  toggle eyeLedR_	'alter eyeR so we know program is running
    	  toggle eyeLedL_	'alter eyeR so we know program is running
    	  gosub _rollL
    	 next i2
    	rollspeed =rollspeed +1  
    	if rollspeed>3 then initialise
    	goto start
    
    
    
    Stand:
    	if rollat<rollC then _StandR
    _StandL:
    	for i=rollat to rollC step -rollspeed
    	  rollat =i
    	  pulsout servoroll,rollat	'pulse servo
    	  pause sframe
    	 next i
    	return 
    _StandR:
    	for i=rollat to rollC step rollspeed
    	  rollat =i
    	  pulsout servoroll,rollat	'pulse servo
    	  pause sframe
    	 next i
    	return 
    
    _rollL:
    	for i=rollat to rollL step -rollspeed
    	  rollat =i
    	  pulsout servoroll,rollat	'pulse servo
    	  pause sframe
    	 next i
    	return 
    	 
    _rollR:
    	for i=rollat to rollR step rollspeed
    	  rollat =i
    	  pulsout servoroll,rollat	'pulse servo
    	  pause sframe
    	 next i
    	return 
    
    _iStand:
    'initialise with feet in mid position
    	for i=0 to 10
    	  pulsout servopace,paceC	'pulse servo paceC
    	  pulsout servoroll,rollC	'pulse servo rollC
    	  pause 70			'pause 70ms - do it slowly
    	 next i
    	rollat =rollC
    	return 
    

    [page top]

    'Bambino-12
    Sertxd("B12",cr)		'report program number
    
    #PicAxe 20M2
    #no_data
    
    'Bambino-01	'Test eyeLEDs, whiskerLEDs and speaker
    'Bambino-02	'Test InfraRed input
    'Bambino-02a	'Test Eye light values
    'Bambino-02b	'Test Whisker light values and put in EEPROM
    'Bambino-03	'Play the inbuilt tunes using keys 1 to 4 and beep on 5
    'Bambino-04	'Set servos to mid position	
    'Bambino-05	'Calibrate servo mid positions and put in EEPROM.
    'Bambino-06	'Introduce _iStand:- initialise with feet in mid position
    'Bambino-07	'Set rollR
    'Bambino-08	'Set rollL
    'Bambino-09	'Check rollR, rollL
    'Bambino-10	'Introduction of _Stand
    'Bambino-11	'Investigate effect of rollspeed;	watch roll for all three speeds
    'Bambino-12	'Investigate effect of rollspeed;	watch Roll and Stand for all three speeds
    
    
    'Investigate effect of rollspeed
    '-------------------------------
    'watch Roll and Stand for all three speeds
    '	You might have to take out the download cable to 
    '	check what is right, because it pulls the robot.
    
    'modified
    '--------
    'start:
    
    'New
    '---
    
    symbol servopace      =c.0    'left connector
    symbol servoroll      =c.4    'right connector
    symbol VoiceLed_      =c.5
    symbol eyeLedL_       =c.2    'low =>LED on 
    symbol eyeLedR_       =b.1    'low =>LED on
    symbol whiskerLedL_   =c.3    'low =>whisker LED on
    symbol whiskerLedR_   =b.3    'low =>whisker LED on
    symbol iIRin          =c.6
    
    symbol rollC	=150	'100 is roll to the left
    symbol paceC	=150	'100 is left foot back
    
    symbol spulse	=b2
    symbol i2 		=b3
    symbol rollat 	=b4
    
    symbol rollR      =rollC+15
    symbol rollL      =rollC-15
    symbol rollspeed  =b6   '4 is too fast, 0 won't move
    symbol sframe     =20	'time between servo pulses
    
    
    
    initialise:
    	low eyeLedR_	'make output
    	high eyeLedL_	'make output
    	gosub _iStand
    	rollspeed =1  
    
    start:
          for i2=1 to 3
            toggle eyeLedR_	'alter eyeR so we know program is running
    	  toggle eyeLedL_	'alter eyeR so we know program is running
    	  gosub _rollR
    	  toggle eyeLedR_	'alter eyeR so we know program is running
    	  toggle eyeLedL_	'alter eyeR so we know program is running
    	  gosub _rollL
    	 next i2
     	for i2=1 to 3
            toggle eyeLedR_	'alter eyeR so we know program is running
    	  toggle eyeLedL_	'alter eyeR so we know program is running
    	  gosub _rollR
    	  gosub Stand
    	  pause 500
    	  toggle eyeLedR_	'alter eyeR so we know program is running
    	  toggle eyeLedL_	'alter eyeR so we know program is running
    	  gosub _rollL
    	  gosub Stand
    	  pause 500
    	 next i2
    	rollspeed =rollspeed +1  
    	if rollspeed>3 then initialise
    	goto start
    
    
    
    Stand:
    	if rollat<rollC then _StandR
    _StandL:
    	for spulse=rollat to rollC step -rollspeed
    	  rollat =spulse
    	  pulsout servoroll,rollat	'pulse servo
    	  pause sframe
    	 next spulse
    	return 
    _StandR:
    	for spulse=rollat to rollC step rollspeed
    	  rollat =spulse
    	  pulsout servoroll,rollat	'pulse servo
    	  pause sframe
    	 next spulse
    	return 
    
    _rollL:
    	for spulse=rollat to rollL step -rollspeed
    	  rollat =spulse
    	  pulsout servoroll,rollat	'pulse servo
    	  pause sframe
    	 next spulse
    	return 
    	 
    _rollR:
    	for spulse=rollat to rollR step rollspeed
    	  rollat =spulse
    	  pulsout servoroll,rollat	'pulse servo
    	  pause sframe
    	 next spulse
    	return 
    
    _iStand:
    'initialise with feet in mid position
    	for spulse=0 to 10
    	  pulsout servopace,paceC	'pulse servo paceC
    	  pulsout servoroll,rollC	'pulse servo rollC
    	  pause 70			'pause 70ms - do it slowly
    	 next spulse
    	rollat =rollC
    	return 
    

    [page top]

    'Bambino-13
    Sertxd("B13",cr)		'report program number
    
    #PicAxe 20M2
    #no_data
    
    'Bambino-01	'Test eyeLEDs, whiskerLEDs and speaker
    'Bambino-02	'Test InfraRed input
    'Bambino-02a	'Test Eye light values
    'Bambino-02b	'Test Whisker light values and put in EEPROM
    'Bambino-03	'Play the inbuilt tunes using keys 1 to 4 and beep on 5
    'Bambino-04	'Set servos to mid position	
    'Bambino-05	'Calibrate servo mid positions and put in EEPROM.
    'Bambino-06	'Introduce _iStand:- initialise with feet in mid position
    'Bambino-07	'Set rollR
    'Bambino-08	'Set rollL
    'Bambino-09	'Check rollR, rollL
    'Bambino-10	'Introduction of _Stand
    'Bambino-11	'Investigate effect of rollspeed;	watch roll for all three speeds
    'Bambino-12	'Investigate effect of rollspeed;	watch Roll and Stand for all three speeds
    'Bambino-13	'Check paceFL paceFR;	Investigate effect of pacespeed
    
    'Check paceFL paceFR
    '-------------------
    'edit paceFL and paceFR and reload program 
    '	until left and right pace is equal
    
    'Investigate effect of pacespeed
    '-------------------------------
    'edit pacespeed to see how Bambino performs
    
    
    'modified
    '--------
    'init
    'start
    '_StandL:
    '_StandR
    '_rollL
    '_rollR
    
    'New
    '---
    'paceat
    'paceFR	'Right foot forward
    'paceFL	'Left  foot forward
    'pacespeed
    '_RF
    '_LF
    
    
    symbol servopace    =c.0 'left connector
    symbol servoroll    =c.4 'right connector
    symbol VoiceLed_    =c.5
    symbol eyeLedL_     =c.2 'low =>LED on 
    symbol eyeLedR_     =b.1 'low =>LED on
    symbol whiskerLedL_ =c.3    'low =>whisker LED on
    symbol whiskerLedR_ =b.3    'low =>whisker LED on
    symbol iIRin        =c.6
    symbol oIRout       =b.2
    
    symbol rollC	=150	'100 is roll to the left
    symbol paceC	=150	'100 is left foot back
    
    symbol spulse 	=b2
    'symbol i2 		=b3
    symbol rollat 	=b4
    symbol paceat 	=b5
    
    symbol rollR      =rollC+15
    symbol rollL      =rollC-15
    symbol rollspeed  =b6   '4 is too fast, 0 won't move
    symbol paceFR	=paceC-20	'Right foot forward
    symbol paceFL	=paceC+20	'Left  foot forward
    symbol paceFRmax	=100	'Right foot forward
    symbol paceFLmax	=190	'Left  foot forward
    symbol sframe     =20	'time between servo pulses
    symbol pacespeed  =b7    '6 is about max for servos to keep up
    
    
    
    initialise:
    	low eyeLedR_		'make output
    	high eyeLedL_	'make output
    	gosub _iStand
    	pacespeed =6  
    
    start:
    	toggle eyeLedR_	'alter eyeR so we know program is running
    	toggle eyeLedL_	'alter eyeR so we know program is running
    	gosub _RF
    	pause 500
    	gosub _LF
    	pause 500
    	goto start
    
    
    
    
    _RF:
    	for spulse=paceat to paceFR step -pacespeed
    	  paceat =spulse
    	  pulsout servopace,paceat	'pulse servo
    	  pulsout servoroll,rollat	'pulse servo hold in position
    	  pause sframe
    	 next spulse
    	return 
    _LF:
    	for spulse=paceat to paceFL step pacespeed
    	  paceat =spulse
    	  pulsout servopace,paceat	'pulse servo
    	  pulsout servoroll,rollat	'pulse servo hold in position
    	  pause sframe
    	 next spulse
    	return 
    
    Stand:	'stand with both feet flat
    	if rollat<rollC then _StandR
    _StandL:
    	for spulse=rollat to rollC step -rollspeed
    	  rollat =spulse
    	  pulsout servoroll,rollat	'pulse servo
    	  pulsout servopace,paceat	'pulse servo hold in position
    	  pause sframe
    	 next spulse
    	return 
    _StandR:
    	for spulse=rollat to rollC step rollspeed
    	  rollat =spulse
    	  pulsout servoroll,rollat	'pulse servo
    	  pulsout servopace,paceat	'pulse servo hold in position
    	  pause sframe
    	 next spulse
    	return 
    
    _rollL:
    	for spulse=rollat to rollL step -rollspeed
    	  rollat =spulse
    	  pulsout servoroll,rollat	'pulse servo
    	  pulsout servopace,paceat	'pulse servo hold in position
    	  pause sframe
    	 next spulse
    	return 
    	 
    _rollR:
    	for spulse=rollat to rollR step rollspeed
    	  rollat =spulse
    	  pulsout servoroll,rollat	'pulse servo
    	  pulsout servopace,paceat	'pulse servo hold in position
    	  pause sframe
    	 next spulse
    	return 
    
    _iStand:
    'initialise with feet in mid position
    	for spulse=0 to 10
    	  pulsout servopace,paceC	'pulse servo paceC
    	  pulsout servoroll,rollC	'pulse servo rollC
    	  pause 70				'pause 70ms - do it slowly
    	 next spulse
    	rollat =rollC
    	paceat =paceC 
    	return 
    

    [page top]

    'Bambino-14
    Sertxd("B14",cr)		'report program number
    
    #PicAxe 20M2
    #no_data
    
    'Bambino-01	'Test eyeLEDs, whiskerLEDs and speaker
    'Bambino-02	'Test InfraRed input
    'Bambino-02a	'Test Eye light values
    'Bambino-02b	'Test Whisker light values and put in EEPROM
    'Bambino-03	'Play the inbuilt tunes using keys 1 to 4 and beep on 5
    'Bambino-04	'Set servos to mid position	
    'Bambino-05	'Calibrate servo mid positions and put in EEPROM.
    'Bambino-06	'Introduce _iStand:- initialise with feet in mid position
    'Bambino-07	'Set rollR
    'Bambino-08	'Set rollL
    'Bambino-09	'Check rollR, rollL
    'Bambino-10	'Introduction of _Stand
    'Bambino-11	'Investigate effect of rollspeed;	watch roll for all three speeds
    'Bambino-12	'Investigate effect of rollspeed;	watch Roll and Stand for all three speeds
    'Bambino-13	'Check paceFL paceFR;	Investigate effect of pacespeed
    'Bambino-14	'Check Fd
    
    
    
    'Check paceFL paceFR
    '-------------------
    'edit paceFL and paceFR and reload program 
    '	until left and right pace are equal
    
    'Investigate effect of rollspeed
    '-------------------------------
    'edit pacespeed to see how Bambino performs
    
    
    'modified
    '--------
    'start:
    
    'New
    '---
    'Fd:
    
    symbol servopace    =c.0 'left connector
    symbol servoroll    =c.4 'right connector
    symbol VoiceLed_    =c.5
    symbol eyeLedL_     =c.2 'low =>LED on 
    symbol eyeLedR_     =b.1 'low =>LED on
    symbol whiskerLedL_ =c.3    'low =>whisker LED on
    symbol whiskerLedR_ =b.3    'low =>whisker LED on
    symbol iIRin        =c.6
    symbol oIRout       =b.2
    
    symbol spulse 	=b2
    'symbol i 		=b3
    symbol rollat 	=b4
    symbol paceat 	=b5
    
    symbol rollC	=150	'100 is roll to the left
    symbol rollR      =rollC+15
    symbol rollL      =rollC-15
    symbol rollspeed  =b6   '4 is too fast, 0 won't move
    	rollspeed =2  	'4 is too fast, 0 won't move
    symbol paceC	=150	'100 is left foot back
    symbol paceFR	=paceC-20	'Right foot forward
    symbol paceFL	=paceC+20	'Left  foot forward
    symbol paceFRmax	=100	'Right foot forward
    symbol paceFLmax	=190	'Left  foot forward
    symbol sframe     =20	'time between servo pulses
    symbol pacespeed  =b7   '6 is about max for servos to keep up
    	pacespeed =5   	'6 is about max for servos to keep up  
    
    
    
    initialise:
    	low eyeLedR_	'make output
    	high eyeLedL_	'make output
    	gosub _iStand
    	
    
    start:
    	toggle eyeLedR_	'alter eyeR so we know program is running
    	toggle eyeLedL_	'alter eyeR so we know program is running
    	gosub Fd
    	goto start
    
    
    Fd:
    sertxd (" Fd")
    	if paceat<paceC then _FdL 'else _FdR
    _FdR:
    'sertxd ("_FdR")
    	gosub _rollL
    	gosub _RF
    	gosub Stand
    	return
    _FdL:
    'sertxd ("_FdL")
    	gosub _rollR
    	gosub _LF
    	gosub Stand
    	return
    	
    	
    	
    _RF:
    'sertxd ("_RF")
    	for spulse=paceat to paceFR step -pacespeed
    	  paceat =spulse
    	  pulsout servopace,paceat	'pulse servo
    	  pulsout servoroll,rollat	'pulse servo hold in position
    	  pause sframe
    	 next spulse
    	return 
    _LF:
    'sertxd ("_LF")
    	for spulse=paceat to paceFL step pacespeed
    	  paceat =spulse
    	  pulsout servopace,paceat	'pulse servo
    	  pulsout servoroll,rollat	'pulse servo hold in position
    	  pause sframe
    	 next spulse
    	return 
    
    Stand:	'stand with both feet flat
    sertxd (" Sd")
    	if rollat<rollC then _StandR 'else _StandL
    _StandL:
    'sertxd ("_SL")
    	for spulse=rollat to rollC step -rollspeed
    	  rollat =spulse
    	  pulsout servoroll,rollat	'pulse servo
    	  pulsout servopace,paceat	'pulse servo hold in position
    	  pause sframe
    	 next spulse
    	return 
    _StandR:
    'sertxd ("_SR")
    	for spulse=rollat to rollC step rollspeed
    	  rollat =spulse
    	  pulsout servoroll,rollat	'pulse servo
    	  pulsout servopace,paceat	'pulse servo hold in position
    	  pause sframe
    	 next spulse
    	return 
    
    
    _rollL:
    'sertxd ("_rL")
    	for spulse=rollat to rollL step -rollspeed
    	  rollat =spulse
    	  pulsout servoroll,rollat	'pulse servo
    	  pulsout servopace,paceat	'pulse servo hold in position
    	  pause sframe
    	 next spulse
    	return 
    	 
    _rollR:
    'sertxd ("_rR")
    	for spulse=rollat to rollR step rollspeed
    	  rollat =spulse
    	  pulsout servoroll,rollat	'pulse servo
    	  pulsout servopace,paceat	'pulse servo hold in position
    	  pause sframe
    	 next spulse
    	return 
    
    _iStand:
    'initialise with feet in mid position
    	for spulse=0 to 10
    	  pulsout servopace,paceC	'pulse servo paceC
    	  pulsout servoroll,rollC	'pulse servo rollC
    	  pause 70				'pause 70ms - do it slowly
    	 next spulse
    	rollat =rollC
    	paceat =paceC 
    	return 
    

    [page top]

    'Bambino-15
    Sertxd("B15",cr)		'report program number
    
    #PicAxe 20M2
    #no_data
    
    'Bambino-01	'Test eyeLEDs, whiskerLEDs and speaker
    'Bambino-02	'Test InfraRed input
    'Bambino-02a	'Test Eye light values
    'Bambino-02b	'Test Whisker light values and put in EEPROM
    'Bambino-03	'Play the inbuilt tunes using keys 1 to 4 and beep on 5
    'Bambino-04	'Set servos to mid position	
    'Bambino-05	'Calibrate servo mid positions and put in EEPROM.
    'Bambino-06	'Introduce _iStand:- initialise with feet in mid position
    'Bambino-07	'Set rollR
    'Bambino-08	'Set rollL
    'Bambino-09	'Check rollR, rollL
    'Bambino-10	'Introduction of _Stand
    'Bambino-11	'Investigate effect of rollspeed;	watch roll for all three speeds
    'Bambino-12	'Investigate effect of rollspeed;	watch Roll and Stand for all three speeds
    'Bambino-13	'Check paceFL paceFR;	Investigate effect of pacespeed
    'Bambino-14	'Check Fd
    'Bambino-15	'Test Rt, Lt
    
    
    'Test Rt, Lt
    '-------------
    '	edit rollC to tune the turns
    
    'modified
    '--------
    'start:
    
    'New
    '---
    'Rt
    'Lt
    
    symbol servopace    =c.0 'left connector
    symbol servoroll    =c.4 'right connector
    symbol VoiceLed_    =c.5
    symbol eyeLedL_     =c.2 'low =>LED on 
    symbol eyeLedR_     =b.1 'low =>LED on
    symbol whiskerLedL_ =c.3    'low =>whisker LED on
    symbol whiskerLedR_ =b.3    'low =>whisker LED on
    symbol iIRin        =c.6
    symbol oIRout       =b.2
    
    symbol spulse 	=b2
    'symbol i 		=b3
    symbol rollat 	=b4
    symbol paceat 	=b5
    
    symbol rollC	=150	'100 is roll to the left
    symbol rollR      =rollC+15
    symbol rollL      =rollC-15
    symbol rollspeed  =b6   '4 is too fast, 0 won't move
    	rollspeed =1  	'4 is too fast, 0 won't move
    symbol paceC	=150	'100 is left foot back
    symbol paceFR	=paceC-20	'Right foot forward
    symbol paceFL	=paceC+20	'Left  foot forward
    symbol paceFRmax	=100	'Right foot forward
    symbol paceFLmax	=190	'Left  foot forward
    symbol sframe     =20	'time between servo pulses
    symbol pacespeed  =b7   '6 is about max for servos to keep up
    	pacespeed =4   	'6 is about max for servos to keep up  
    
    
    
    initialise:
    	low eyeLedR_	'make output
    	high eyeLedL_	'make output
    	gosub _iStand
    	
    
    start:
    	toggle eyeLedR_	'alter eyeR so we know program is running
    	toggle eyeLedL_	'alter eyeR so we know program is running
    	gosub Rt
    	gosub Rt
    	gosub Rt
    	gosub Rt
    	toggle eyeLedR_	'alter eyeR so we know program is running
    	toggle eyeLedL_	'alter eyeR so we know program is running
    	gosub Lt
    	gosub Lt
    	gosub Lt
    	gosub Lt
    	goto start
    
    
    Fd:
    sertxd (" Fd")
    	if paceat<paceC then _FdL 'else _FdR
    _FdR:
    'sertxd ("_FdR")
    	gosub _rollL
    	gosub _RF
    	gosub Stand
    	return
    _FdL:
    'sertxd ("_FdL")
    	gosub _rollR
    	gosub _LF
    	gosub Stand
    	return
    	
    
    Rt:
    	if paceat<paceC then gosub Fd	'need left foot forward
    	gosub _RF
    	return
    	
    Lt:
    	if paceat>paceC then gosub Fd	'need right foot forward
    	gosub _LF
    	return
    
    _RF:
    'sertxd ("_RF")
    	for spulse=paceat to paceFR step -pacespeed
    	  paceat =spulse
    	  pulsout servopace,paceat	'pulse servo
    	  pulsout servoroll,rollat	'pulse servo hold in position
    	  pause sframe
    	 next spulse
    	return 
    _LF:
    'sertxd ("_LF")
    	for spulse=paceat to paceFL step pacespeed
    	  paceat =spulse
    	  pulsout servopace,paceat	'pulse servo
    	  pulsout servoroll,rollat	'pulse servo hold in position
    	  pause sframe
    	 next spulse
    	return 
    
    Stand:	'stand with both feet flat
    sertxd (" Sd")
    	if rollat<rollC then _StandR 'else _StandL
    _StandL:
    'sertxd ("_SL")
    	for spulse=rollat to rollC step -rollspeed
    	  rollat =spulse
    	  pulsout servoroll,rollat	'pulse servo
    	  pulsout servopace,paceat	'pulse servo hold in position
    	  pause sframe
    	 next spulse
    	return 
    _StandR:
    'sertxd ("_SR")
    	for spulse=rollat to rollC step rollspeed
    	  rollat =spulse
    	  pulsout servoroll,rollat	'pulse servo
    	  pulsout servopace,paceat	'pulse servo hold in position
    	  pause sframe
    	 next spulse
    	return 
    
    
    _rollL:
    'sertxd ("_rL")
    	for spulse=rollat to rollL step -rollspeed
    	  rollat =spulse
    	  pulsout servoroll,rollat	'pulse servo
    	  pulsout servopace,paceat	'pulse servo hold in position
    	  pause sframe
    	 next spulse
    	return 
    	 
    _rollR:
    'sertxd ("_rR")
    	for spulse=rollat to rollR step rollspeed
    	  rollat =spulse
    	  pulsout servoroll,rollat	'pulse servo
    	  pulsout servopace,paceat	'pulse servo hold in position
    	  pause sframe
    	 next spulse
    	return 
    
    _iStand:
    'initialise with feet in mid position
    	for spulse=0 to 10
    	  pulsout servopace,paceC	'pulse servo paceC
    	  pulsout servoroll,rollC	'pulse servo rollC
    	  pause 70				'pause 70ms - do it slowly
    	 next spulse
    	rollat =rollC
    	paceat =paceC 
    	return 
    

    [page top]

    'Bambino-15a
    'Bambino-15a
    Sertxd("B15a",cr)		'report program number
    
    #PicAxe 20M2
    #no_data
    
    'Bambino-01	'Test eyeLEDs, whiskerLEDs and speaker
    'Bambino-02	'Test InfraRed input
    'Bambino-02a	'Test Eye light values
    'Bambino-02b	'Test Whisker light values and put in EEPROM
    'Bambino-03	'Play the inbuilt tunes using keys 1 to 4 and beep on 5
    'Bambino-04	'Set servos to mid position	
    'Bambino-05	'Calibrate servo mid positions and put in EEPROM.
    'Bambino-06	'Introduce _iStand:- initialise with feet in mid position
    'Bambino-07	'Set rollR
    'Bambino-08	'Set rollL
    'Bambino-09	'Check rollR, rollL
    'Bambino-10	'Introduction of _Stand
    'Bambino-11	'Investigate effect of rollspeed;	watch roll for all three speeds
    'Bambino-12	'Investigate effect of rollspeed;	watch Roll and Stand for all three speeds
    'Bambino-13	'Check paceFL paceFR;	Investigate effect of pacespeed
    'Bambino-14	'Check Fd
    'Bambino-15	'Test Rt, Lt
    'Bambino-15a	'Test T2L Turn to Light, T2D Turn to Dark
    
    'Test T2L Turn to Light, T2D Turn to Dark
    '----------------------------------------
    
    'modified
    '--------
    'start:
    
    'New
    '---
    'T2L
    'T2D
    
    symbol servopace    =c.0	'left connector
    symbol servoroll    =c.4	'right connector
    symbol VoiceLed_    =c.5
    symbol eyeLedL_     =c.2
    symbol eyeLedR_     =b.1
    symbol whiskerLedL_ =c.3    'low =>whisker LED on
    symbol whiskerLedR_ =b.3    'low =>whisker LED on
    symbol iIRin        =c.6
    symbol oIRout       =b.2
    symbol eyeR         =c.7		  	
    symbol eyeL         =c.1		  	
    
    
    symbol spulse 	=b2
    'symbol i 		=b3
    symbol rollat 	=b4
    symbol paceat 	=b5
    
    symbol rollC	=150	'100 is roll to the left
    symbol rollR      =rollC+15
    symbol rollL      =rollC-15
    symbol rollspeed  =b6   '4 is too fast, 0 won't move
    	rollspeed =1  	'4 is too fast, 0 won't move
    symbol paceC	=150	'100 is left foot back
    symbol paceFR	=paceC-20	'Right foot forward
    symbol paceFL	=paceC+20	'Left  foot forward
    symbol paceFRmax	=100	'Right foot forward
    symbol paceFLmax	=190	'Left  foot forward
    symbol sframe     =20	'time between servo pulses
    symbol pacespeed  =b7   '6 is about max for servos to keep up
    	pacespeed =4   	'6 is about max for servos to keep up  
    
    
    
    initialise:
    	low eyeLedR_	'make output
    	high eyeLedL_	'make output
    	gosub _iStand
    	
    
    start:
    	toggle eyeLedR_	'alter eyeR so we know program is running
    	toggle eyeLedL_	'alter eyeR so we know program is running
    	gosub Rt
    	gosub Rt
    	gosub Rt
    	gosub Rt
    	toggle eyeLedR_	'alter eyeR so we know program is running
    	toggle eyeLedL_	'alter eyeR so we know program is running
    	gosub Lt
    	gosub Lt
    	gosub Lt
    	gosub Lt
    	goto start
    
    
    T2L:
    
    
    
    Fd:
    sertxd (" Fd")
    	if paceat<paceC then _FdL 'else _FdR
    _FdR:
    'sertxd ("_FdR")
    	gosub _rollL
    	gosub _RF
    	gosub Stand
    	return
    _FdL:
    'sertxd ("_FdL")
    	gosub _rollR
    	gosub _LF
    	gosub Stand
    	return
    	
    
    Rt:
    	if paceat<paceC then gosub Fd	'need left foot forward
    	gosub _RF
    	return
    	
    Lt:
    	if paceat>paceC then gosub Fd	'need right foot forward
    	gosub _LF
    	return
    
    _RF:
    'sertxd ("_RF")
    	for spulse=paceat to paceFR step -pacespeed
    	  paceat =spulse
    	  pulsout servopace,paceat	'pulse servo
    	  pulsout servoroll,rollat	'pulse servo hold in position
    	  pause sframe
    	 next spulse
    	return 
    _LF:
    'sertxd ("_LF")
    	for spulse=paceat to paceFL step pacespeed
    	  paceat =spulse
    	  pulsout servopace,paceat	'pulse servo
    	  pulsout servoroll,rollat	'pulse servo hold in position
    	  pause sframe
    	 next spulse
    	return 
    
    Stand:	'stand with both feet flat
    sertxd (" Sd")
    	if rollat<rollC then _StandR 'else _StandL
    _StandL:
    'sertxd ("_SL")
    	for spulse=rollat to rollC step -rollspeed
    	  rollat =spulse
    	  pulsout servoroll,rollat	'pulse servo
    	  pulsout servopace,paceat	'pulse servo hold in position
    	  pause sframe
    	 next spulse
    	return 
    _StandR:
    'sertxd ("_SR")
    	for spulse=rollat to rollC step rollspeed
    	  rollat =spulse
    	  pulsout servoroll,rollat	'pulse servo
    	  pulsout servopace,paceat	'pulse servo hold in position
    	  pause sframe
    	 next spulse
    	return 
    
    
    _rollL:
    'sertxd ("_rL")
    	for spulse=rollat to rollL step -rollspeed
    	  rollat =spulse
    	  pulsout servoroll,rollat	'pulse servo
    	  pulsout servopace,paceat	'pulse servo hold in position
    	  pause sframe
    	 next spulse
    	return 
    	 
    _rollR:
    'sertxd ("_rR")
    	for spulse=rollat to rollR step rollspeed
    	  rollat =spulse
    	  pulsout servoroll,rollat	'pulse servo
    	  pulsout servopace,paceat	'pulse servo hold in position
    	  pause sframe
    	 next spulse
    	return 
    
    _iStand:
    'initialise with feet in mid position
    	for spulse=0 to 10
    	  pulsout servopace,paceC	'pulse servo paceC
    	  pulsout servoroll,rollC	'pulse servo rollC
    	  pause 70				'pause 70ms - do it slowly
    	 next spulse
    	rollat =rollC
    	paceat =paceC 
    	return 
    

    [page top]

    'Bambino-16
    '>Bambino-16
    '>Robot R-Bambino
    Sertxd("B16",cr)		'report program number
    
    #PicAxe 20M2
    #no_data
    
    'Bambino-01	'Test eyeLEDs, whiskerLEDs and speaker
    'Bambino-02	'Test InfraRed input
    'Bambino-02a	'Test Eye light values
    'Bambino-02b	'Test Whisker light values and put in EEPROM
    'Bambino-03	'Play the inbuilt tunes using keys 1 to 4 and beep on 5
    'Bambino-04	'Set servos to mid position	
    'Bambino-05	'Calibrate servo mid positions and put in EEPROM.
    'Bambino-06	'Introduce _iStand:- initialise with feet in mid position
    'Bambino-07	'Set rollR
    'Bambino-08	'Set rollL
    'Bambino-09	'Check rollR, rollL
    'Bambino-10	'Introduction of _Stand
    'Bambino-11	'Investigate effect of rollspeed;	watch roll for all three speeds
    'Bambino-12	'Investigate effect of rollspeed;	watch Roll and Stand for all three speeds
    'Bambino-13	'Check paceFL paceFR;	Investigate effect of pacespeed
    'Bambino-14	'Check Fd
    'Bambino-15	'Test Rt, Lt
    'Bambino-15a	'Test T2L Turn to Light, T2D Turn to Dark
    'Bambino-16	'Test Bk
    
    
    'Test Bk
    '--------
    
    'modified
    '--------
    'start:
    
    'New
    '---
    'Bk
    '_BkR
    '_BkL
    
    symbol servopace    =c.0 'left connector
    symbol servoroll    =c.4 'right connector
    symbol VoiceLed     =c.5 'low =>LED on 
    symbol eyeLedL_     =c.2 'low =>LED on 
    symbol eyeLedR_     =b.1 'low =>LED on
    symbol whiskerLedL_ =c.3    'low =>whisker LED on
    symbol whiskerLedR_ =b.3    'low =>whisker LED on
    symbol iIRin        =c.6
    symbol oIRout       =b.2
    
    symbol spulse 	=b2
    'symbol i 		=b3
    symbol rollat 	=b4
    symbol paceat 	=b5
    
    symbol rollC	=150	'100 is roll to the left
    symbol rollR      =rollC+15
    symbol rollL      =rollC-15
    symbol rollspeed  =b6   '4 is too fast, 0 won't move
    	rollspeed =2  	'4 is too fast, 0 won't move
    symbol paceC	=150	'100 is left foot back
    symbol paceFR	=paceC-20	'Right foot forward
    symbol paceFL	=paceC+20	'Left  foot forward
    symbol paceFRmax	=100	'Right foot forward
    symbol paceFLmax	=190	'Left  foot forward
    symbol sframe     =20	'time between servo pulses
    symbol pacespeed  =b7   '6 is about max for servos to keep up
    	pacespeed =2   	'6 is about max for servos to keep up  
    
    
    
    
    initialise:
    	low eyeLedR_		'make output
    	high eyeLedL_	'make output
    	gosub _iStand
    	
    
    start:
    	toggle eyeLedR_	'alter eyeR so we know program is running
    	toggle eyeLedL_	'alter eyeR so we know program is running
    	gosub Fd
    	gosub Fd
    	gosub Fd
    	gosub Fd
    	toggle eyeLedR_	'alter eyeR so we know program is running
    	toggle eyeLedL_	'alter eyeR so we know program is running
    	gosub Bk
    	gosub Bk
    	gosub Bk
    	gosub Bk
    	toggle eyeLedR_	'alter eyeR so we know program is running
    	toggle eyeLedL_	'alter eyeR so we know program is running
    	goto start
    
    
    Fd:
    sertxd (" Fd")
    	if paceat<paceC then _FdL 'else _FdL
    _FdR:
    'sertxd ("_FdR")
    	gosub _rollL
    	gosub _RF
    	gosub Stand
    	return
    _FdL:
    'sertxd ("_FdL")
    	gosub _rollR
    	gosub _LF
    	gosub Stand
    	return
    	
    
    Bk:
    sertxd (" Bk")
    	if paceat<paceC then _BkR 'else _BkL
    _BkL:
    	gosub _rollR
    	gosub _RF
    	gosub Stand
    	return
    _BkR:
    	gosub _rollL
    	gosub _LF
    	gosub Stand
    	return
    
    
    Rt:
    	if paceat<paceC then gosub Fd	'need left foot forward
    	gosub _RF
    	return
    	
    Lt:
    	if paceat>paceC then gosub Fd	'need right foot forward
    	gosub _LF
    	return
    
    _RF:
    'sertxd ("_RF")
    	for spulse=paceat to paceFR step -pacespeed
    	  paceat =spulse
    	  pulsout servopace,paceat	'pulse servo
    	  pulsout servoroll,rollat	'pulse servo hold in position
    	  pause sframe
    	 next spulse
    	return 
    _LF:
    'sertxd ("_LF")
    	for spulse=paceat to paceFL step pacespeed
    	  paceat =spulse
    	  pulsout servopace,paceat	'pulse servo
    	  pulsout servoroll,rollat	'pulse servo hold in position
    	  pause sframe
    	 next spulse
    	return 
    
    Stand:	'stand with both feet flat
    sertxd (" Sd")
    	if rollat<rollC then _StandR 'else _StandL
    _StandL:
    'sertxd ("_SL")
    	for spulse=rollat to rollC step -rollspeed
    	  rollat =spulse
    	  pulsout servoroll,rollat	'pulse servo
    	  pulsout servopace,paceat	'pulse servo hold in position
    	  pause sframe
    	 next spulse
    	return 
    _StandR:
    'sertxd ("_SR")
    	for spulse=rollat to rollC step rollspeed
    	  rollat =spulse
    	  pulsout servoroll,rollat	'pulse servo
    	  pulsout servopace,paceat	'pulse servo hold in position
    	  pause sframe
    	 next spulse
    	return 
    
    
    _rollL:
    'sertxd ("_rL")
    	for spulse=rollat to rollL step -rollspeed
    	  rollat =spulse
    	  pulsout servoroll,rollat	'pulse servo
    	  pulsout servopace,paceat	'pulse servo hold in position
    	  pause sframe
    	 next spulse
    	return 
    	 
    _rollR:
    'sertxd ("_rR")
    	for spulse=rollat to rollR step rollspeed
    	  rollat =spulse
    	  pulsout servoroll,rollat	'pulse servo
    	  pulsout servopace,paceat	'pulse servo hold in position
    	  pause sframe
    	 next spulse
    	return 
    
    _iStand:
    'initialise with feet in mid position
    	for spulse=0 to 10
    	  pulsout servopace,paceC	'pulse servo paceC
    	  pulsout servoroll,rollC	'pulse servo rollC
    	  pause 70				'pause 70ms - do it slowly
    	 next spulse
    	rollat =rollC
    	paceat =paceC 
    	return 
    

    [page top]
    Revisions