'********************************************************************************************* ' gripper-remote.bas ' Robot remote control program with gripper. ' PicBasic Pro compiler - MicroEngineering Labs. '********************************************************************************************* trisa = %00000011 ' set porta pins 0&1 to inputs trisb = %00001000 ' set portb pin 3 to input m_servo var byte ' define variables and constants l_servo var byte r_servo var byte timer var byte right_led var PORTB.0 left_led var PORTB.1 piezo var PORTB.4 right_servo var PORTB.5 left_servo var PORTB.6 mid_servo var PORTB.7 chan_1 var PORTA.0 chan_2 var PORTA.1 Channel_1 var byte Channel_2 var byte low left_led ' turn off left LED low right_led ' turn off right LED sound piezo,[100,10,50,5,70,10,50,2] ' Make startup sound trans_power: pulsin chan_1,1,channel_1 ' check to see if the transmitter is pulsin chan_2,1,channel_2 ' turned on or not if (channel_1 > 155 or channel_1 < 145) or (channel_2 > 155 or channel_2 < 145) then sound piezo,[100,5] goto trans_power ' if transmitter is off then keep endif ' checking main: pulsin chan_1,1,channel_1 ' get receiver values for channels 1 & 2 pulsin chan_2,1,channel_2 if channel_1 = 0 or channel_2 = 0 then ' check to see if the transmitter is off goto trans_power ' or out of range. endif If channel_2 > 180 and (channel_1 > 145 and channel_1 < 155) then gosub walk_forward endif If channel_2 < 120 and (channel_1 > 145 and channel_1 < 155) then gosub walk_reverse endif If channel_1 < 120 and (channel_2 > 145 and channel_2 < 155) then gosub turn_right endif If channel_1 > 180 and (channel_2 > 145 and channel_2 < 155) then gosub turn_left endif If channel_1 < 120 and channel_2 > 180 then gosub right_forward endif If channel_1 > 180 and channel_2 > 180 then gosub left_forward endif If channel_1 < 120 and channel_2 < 120 then gosub right_reverse endif If channel_1 > 180 and channel_2 < 120 then gosub left_reverse endif Goto main walk_forward: ' walk forward subroutine m_servo = 170 gosub servo l_servo = 160 r_servo = 160 gosub servo m_servo = 100 gosub servo l_servo = 120 r_servo = 120 gosub servo return walk_reverse: ' walk reverse subroutine m_servo = 170 gosub servo l_servo = 120 r_servo = 120 gosub servo m_servo = 100 gosub servo l_servo = 160 r_servo = 160 gosub servo return turn_left: ' rotate the robot left 18 degrees m_servo = 170 gosub servo l_servo = 120 r_servo = 160 gosub servo m_servo = 100 gosub servo l_servo = 160 r_servo = 120 gosub servo return turn_right: ' rotate the robot right 18 degrees m_servo = 170 gosub servo l_servo = 160 r_servo = 120 gosub servo m_servo = 100 gosub servo l_servo = 120 r_servo = 160 gosub servo return right_forward: ' right forward subroutine m_servo = 170 gosub servo l_servo = 160 r_servo = 140 gosub servo m_servo = 100 gosub servo l_servo = 120 r_servo = 130 gosub servo return left_forward: ' left forward ward subroutine m_servo = 170 gosub servo l_servo = 140 r_servo = 160 gosub servo m_servo = 100 gosub servo l_servo = 130 r_servo = 120 gosub servo return right_reverse: ' right reverse subroutine m_servo = 170 gosub servo l_servo = 130 r_servo = 120 gosub servo m_servo = 100 gosub servo l_servo = 140 r_servo = 160 gosub servo return left_reverse: ' left reverse subroutine m_servo = 170 gosub servo l_servo = 120 r_servo = 130 gosub servo m_servo = 100 gosub servo l_servo = 160 r_servo = 140 gosub servo return servo: ' subroutine to set servos for timer = 1 to 10 pulsout mid_servo,m_servo pulsout left_servo,l_servo pulsout right_servo,r_servo pause 13 next timer return End