Example #1
0
def main():
    brick.sound.beep()
    joystickEvent = detectJoystick(['Controller'])
    if joystickEvent:
        robot = Robot(Motor(Port.D), Motor(Port.A), Motor(Port.B), 55, 200)
        t = threading.Thread(target=autoStopLoop, args=(robot, ))
        t.start()

        def onButtonPressed(code):
            if code == BUTTON_X:
                robot.inactive()
                return False
            if code == BUTTON_A:
                robot.fire()
            return True

        def onLeftJoyChanged(x, y):
            robot.drive(x, y)

        def onRightJoyChanged(x, y):
            robot.target(x)

        joystick = JoyStick(joystickEvent)
        joystick.setButtonHandler(onButtonPressed)
        joystick.setJoyLeftHandler(onLeftJoyChanged)
        joystick.setJoyRightHandler(onRightJoyChanged)
        joystick.startLoop()
    else:
        brick.sound.beep()
Example #2
0
 def __init__(self, master):
     # create GUI
     self.gpio = pigpio.pi()
     self.master = master
     self.master.title('JoyStick Test')
     label = tk.Label(root, text='Joystick')
     label.pack()
     self.gui = GuiRarm(master=root)
     self.gui.createCordinateLabelServo()
     self.gui.createButton(btn_name='Finish', callback=self.cleanup)
     #self.gui.createCircleJs2(200,200,220,220,'blue')
     #JoyStick instanse
     self.jsR = JoyStick(-1, 4, 27)
     self.val_horz = 0
     #self.jsL = JoyStick(7,4,22)
     self.jsL = JoyStick(2, -1, 22)
     self.val_vert = 0
     #Volume instance
     self.vol = Volume(6)
     self.val_vol = 0
     self.vol_sum = 0
     self.sampleCount = 0
     #ServMotor
     #self.servo= ServMotor(18,180,0)
     self.servo = I2cServo()
     #PWM Freq: 60Hz
     self.servo.setPWMFreq(60)
     # Led instance
     self.Led = Led(4)
     self.Led.setLedOn()
     # PowrSw
     self.PowSw = Sw(17, pud='pudup')
     self.PowSwCont = 0
Example #3
0
 def __init__(self, master):
     # create GUI
     self.master = master
     self.master.title('JoyStick Test')
     label = tk.Label(root, text='Joystick')
     label.pack()
     self.gui = GuiJs(master=root)
     self.gui.createCordinateLabelJs1()
     self.gui.createCordinateLabelJs2()
     self.gui.createCircleJs1(200, 200, 220, 220, 'red')
     self.gui.createButton(btn_name='Finish', callback=self.cleanup)
     self.gui.createCircleJs2(200, 200, 220, 220, 'blue')
     #JoyStick instanse
     self.js1 = JoyStick(0, 3, 27)
     self.val_vert1 = 0
     self.val_horz1 = 0
     self.move_vert1 = 0
     self.move_horz1 = 0
     self.js2 = JoyStick(7, 4, 22)
     self.val_vert2 = 0
     self.val_horz2 = 0
     self.move_vert2 = 0
     self.move_horz2 = 0
     #ServMotor
     #self.servo= ServMotor(18,180,0)
     #self.servo = I2cServo()
     # Led instance
     self.Led = Led(17)
Example #4
0
class App:
    
    def __init__(self,xp,yp,pp,ld):
        self.displayDelta  = 200  # ms
        self.led = ld
        self.led.off()
        try:
            self.js = JoyStick(xp,yp,pp, self.onButton)
            print('Starting up...')
        except Exception as e:
            print(e)
            print('JoyStick creation failed!')

    def onButton(self):
        self.led.toggle()
        print('\nPush Button!\n')
            
    def loop(self):
        lastDisplayTime = time.ticks_ms()
        while True:
            self.js.checkPB()
            now = time.ticks_ms()
            if now - lastDisplayTime > self.displayDelta:
                lastDisplayTime = now
                line = 'X: ' + str(self.js.readX()) + '  Y: ' + str(self.js.readY())
                print(line)
Example #5
0
 def __init__(self,xp,yp,pp,ld):
     self.displayDelta  = 200  # ms
     self.led = ld
     self.led.off()
     try:
         self.js = JoyStick(xp,yp,pp, self.onButton)
         print('Starting up...')
     except Exception as e:
         print(e)
         print('JoyStick creation failed!')
Example #6
0
 def __init__(self,master):
     # create GUI
     self.master = master
     self.master.title('JoyStick Test')
     label = tk.Label(root,text='Joystick')
     label.pack()
     self.gui = GuiJs(master=root)
     self.gui.createCordinateLabel()
     self.gui.createCircle(200,200,220,220,'red')
     self.gui.createButton(btn_name='Finish',callback=self.cleanup)
     #JoyStick instanse
     self.js = JoyStick()
     self.val_vert = 0
     self.val_horz = 0
     self.move_vert = 0
     self.move_horz = 0
     #ServMotor
     self.sm= ServMotor(18,180,0)
     # Led instance
     self.Led = Led(17)
     self.Sw = Sw(4,'either',self.callback_Sw)
Example #7
0
    #    draw.line((center, (center[0]+coordinates[0]*radius/rescale,center[1]-coordinates[1]*radius/rescale)), fill=255)
    #    print(coordinates)
    circleCenter = (center[0] + coordinates[0] * radius / 2,
                    center[1] - coordinates[1] * radius / 2)
    smallRadius = radius / 3.0
    draw.ellipse(
        (circleCenter[0] - smallRadius, circleCenter[1] - smallRadius,
         circleCenter[0] + smallRadius, circleCenter[1] + smallRadius),
        outline=255)
    #draw.ellipse((center[0]+coordinates[0]*radius/rescale,center[1]-coordinates[1]*radius/rescale)), fill=255)


screen = Screen()

servos = [Servo(channel) for channel in [0, 1, 2, 3]]
joyStick1 = JoyStick(1, JoyStick.Address_Ox48, [1, 0], 4)
joyStick2 = JoyStick(1, JoyStick.Address_Ox48, [3, 2], 17)

robot = Robot()

for servo in servos:
    servo.set_angle(90)


def applyPosition(servo, joyStick, axis, multiplier=1):
    position = joyStick.last_position[axis]
    print(position)
    threshhold = 0.11
    if position > threshhold or position < -threshhold:
        servo.go_to_angle(servo.angle + robot.speed * multiplier * position)
        return True
Example #8
0
	def testUpAdds10(self):
		p = JoyStick()
		self.failUnless(p.moveUp(10)=="PR ,1110")
Example #9
0
	def testAbs(self):
		p = JoyStick()
		self.failUnless(p.moveAbs(10,10)=="PA 28440,1110")
Example #10
0
	def testRightAdds10(self):
		p = JoyStick()
		self.failUnless(p.moveRight(10)=="PR 28440,")
Example #11
0
	def testLeftAdds10(self):
		p = JoyStick()
		self.failUnless(p.moveLeft(10)=="PR -28440,")
Example #12
0
	def testDownAdds10(self):
		p = JoyStick()
		self.failUnless(p.moveDown(10)=="PR ,-1110")
Example #13
0
class JoyStickTest(tk.Frame):
    def __init__(self, master):
        # create GUI
        self.master = master
        self.master.title('JoyStick Test')
        label = tk.Label(root, text='Joystick')
        label.pack()
        self.gui = GuiJs(master=root)
        self.gui.createCordinateLabelJs1()
        self.gui.createCordinateLabelJs2()
        self.gui.createCircleJs1(200, 200, 220, 220, 'red')
        self.gui.createButton(btn_name='Finish', callback=self.cleanup)
        self.gui.createCircleJs2(200, 200, 220, 220, 'blue')
        #JoyStick instanse
        self.js1 = JoyStick(0, 3, 27)
        self.val_vert1 = 0
        self.val_horz1 = 0
        self.move_vert1 = 0
        self.move_horz1 = 0
        self.js2 = JoyStick(7, 4, 22)
        self.val_vert2 = 0
        self.val_horz2 = 0
        self.move_vert2 = 0
        self.move_horz2 = 0
        #ServMotor
        #self.servo= ServMotor(18,180,0)
        #self.servo = I2cServo()
        # Led instance
        self.Led = Led(17)
        #display GUI
    def cleanup(self):
        print 'Test Finished'
        self.js1.cleanup()
        self.js2.cleanup()
        #self.servo.cleanup()
        self.Led.cleanup()
        sys.exit()

    #  Flashing LED Test No.1
    def setLed(self):
        if (self.js1.getSelState()== 'Released') and \
           (self.js2.getSelState()== 'Released'):
            if self.Led.getState() != 'Off': self.Led.setLedOff()
        else:
            if self.Led.getState() != 'On': self.Led.setLedOn()

    def test(self):
        self.val_vert1 = self.js1.getValVert()
        self.val_horz1 = self.js1.getValHorz()
        self.move_vert1 = self.move_vert(self.val_vert1)
        self.move_horz1 = self.move_horz(self.val_horz1)
        #print ('Js1'+'vert:%d'% self.val_vert1+'hortz:%d'% self.val_horz1+'sel:%d' % self.val_sel1)
        #print (self.val_vert1,self.val_horz1,self.move_vert1,self.move_horz1)
        self.val_vert2 = self.js2.getValVert()
        self.val_horz2 = self.js2.getValHorz()
        self.move_vert2 = self.move_vert(self.val_vert2)
        self.move_horz2 = self.move_horz(self.val_horz2)
        #print ('Js2'+'vert:%d'% self.val_vert2+'hortz:%d'% self.val_horz2+'sel:%d' % self.val_sel2)
        #        if self.move_vert1 == 0 and self.move_horz1 == 0:
        #            self.Led.setLedOff()
        #        else:self.Led.setLedOn()
        self.gui.renewCordinateJs1(self.val_vert1, self.val_horz1)
        self.gui.renewCordinateJs2(self.val_vert2, self.val_horz2)
        self.gui.moveCircle1(self.move_horz1, self.move_vert1)
        self.gui.moveCircle2(self.move_horz2, self.move_vert2)
        #self.movePwmServo()
        #self.moveI2cServo()
        self.setLed()
        # check Adc(vert,Horz) and Sw per 50ms
        self.master.after(30, self.test)

    def move_vert(self, val):
        move_val = 0
        if val >= 2: move_val = -10
        elif val <= 0: move_val = 10
        else: move_val = 0
        return move_val

    def move_horz(self, val):
        move_val = 0
        if val >= 2: move_val = -10
        elif val <= 0: move_val = 10
        else: move_val = 0
        return move_val

    def moveI2cServo(self):
        self.servo.setDuty(self.servo._I2CSERVO_HORZ_0, self.val_horz1, 0,
                           1024)
        self.servo.setDuty(self.servo._I2CSERVO_VERT_0, self.val_vert2, 0,
                           1024)

    def movePwmServo(self):
        deg = self.sm.getDeg()
        if self.val_horz1 > 100:
            if deg < 180:
                deg += 10
                self.sm.setDeg(float(deg))
        elif self.val_horz1 < -200:
            if deg >= 10:
                deg -= 10
                self.sm.setDeg(float(deg))
Example #14
0
class JoyStickTest(tk.Frame):
    def __init__(self,master):
        # create GUI
        self.master = master
        self.master.title('JoyStick Test')
        label = tk.Label(root,text='Joystick')
        label.pack()
        self.gui = GuiJs(master=root)
        self.gui.createCordinateLabel()
        self.gui.createCircle(200,200,220,220,'red')
        self.gui.createButton(btn_name='Finish',callback=self.cleanup)
        #JoyStick instanse
        self.js = JoyStick()
        self.val_vert = 0
        self.val_horz = 0
        self.move_vert = 0
        self.move_horz = 0
        #ServMotor
        self.sm= ServMotor(18,180,0)
        # Led instance
        self.Led = Led(17)
        self.Sw = Sw(4,'either',self.callback_Sw)
        #display GUI
    def cleanup(self):
        print 'Test Finished'
        self.js.cleanup()
        self.sm.cleanup()
        self.Led.cleanup()
        sys.exit()
    #  Flashing LED Test No.1
    def callback_Sw(self):
        if self.Sw.getState()== 'Released':
            if self.Led.getState() != 'Off':self.Led.setLedOff()
        else:
            if self.Led.getState() != 'On':self.Led.setLedOn()

    def test(self):
        self.val_vert = self.js.getValVert()
        self.val_horz = self.js.getValHorz()
        self.move_vert = self.movement(self.val_vert)
        self.move_horz = self.movement(self.val_horz)
        #:print (self.val_vert,self.val_horz,self.move_vert,self.move_horz)
        if self.move_vert == 0 and self.move_horz == 0:
            self.Led.setLedOff()
        else:self.Led.setLedOn()
        self.gui.renewCordinate(self.val_vert,self.val_horz)
        self.gui.moveCircle(self.move_vert,self.move_horz)
        self.moveServmoter()
        self.master.after(50,self.test)
    def movement(self,val):
        move_val = 0
        if val > 255:move_val = -10
        elif val > 63:move_val = -5
        elif val <= -512:move_val = 0 
        elif val < -255:move_val = 10
        elif val < -63: move_val = 5
        return move_val
    def moveServmoter(self):
        deg = self.sm.getDeg()
        if self.val_horz > 100:
            if deg  < 180:
                deg += 10
                print deg
                self.sm.setDeg(float(deg))
        elif self.val_horz < -200:
            if deg >= 10:
                deg -= 10
                print deg
                self.sm.setDeg(float(deg))
Example #15
0
class RobotArmTest(tk.Frame):
    def __init__(self, master):
        # create GUI
        self.gpio = pigpio.pi()
        self.master = master
        self.master.title('JoyStick Test')
        label = tk.Label(root, text='Joystick')
        label.pack()
        self.gui = GuiRarm(master=root)
        self.gui.createCordinateLabelServo()
        self.gui.createButton(btn_name='Finish', callback=self.cleanup)
        #self.gui.createCircleJs2(200,200,220,220,'blue')
        #JoyStick instanse
        self.jsR = JoyStick(-1, 4, 27)
        self.val_horz = 0
        #self.jsL = JoyStick(7,4,22)
        self.jsL = JoyStick(2, -1, 22)
        self.val_vert = 0
        #Volume instance
        self.vol = Volume(6)
        self.val_vol = 0
        self.vol_sum = 0
        self.sampleCount = 0
        #ServMotor
        #self.servo= ServMotor(18,180,0)
        self.servo = I2cServo()
        #PWM Freq: 60Hz
        self.servo.setPWMFreq(60)
        # Led instance
        self.Led = Led(4)
        self.Led.setLedOn()
        # PowrSw
        self.PowSw = Sw(17, pud='pudup')
        self.PowSwCont = 0
        #display GUI
    def shutdown(self):
        self.Led.setLedOff()
        self.jsR.cleanup()
        self.jsL.cleanup()
        self.vol.cleanup()
        self.servo.cleanup()
        self.Led.cleanup()
        # release pigpio resources
        self.gpio.stop()
        os.system("sudo shutdown -h now")

    def cleanup(self):
        print('Test Finished')
        self.Led.setLedOff()
        self.jsR.cleanup()
        self.jsL.cleanup()
        self.vol.cleanup()
        self.servo.cleanup()
        self.Led.cleanup()
        # release pigpio resources
        self.gpio.stop()
        sys.exit()

    #  Flashing LED Test No.1
    def test(self):
        if self.PowSw.getState() == 'Pressed':
            self.PowSwCont += 1
            if self.PowSwCont == 10:
                print 'Pressed'
                print 'Shutdown!'
                self.shutdown()
        else:
            self.PowSwCont = 0

        self.val_horz = self.jsR.getValHorz()
        self.val_vol = self.vol.getValVol() / 4
        self.val_vert = self.jsL.getValVert()
        self.moveI2cServoHorz()
        self.moveI2cServoVert()
        self.moveI2cServoVol()
        self.gui.renewCordinateServo(self.duty_horz, self.duty_vert,
                                     self.val_vol)
        #call self.test() per 6msec
        self.master.after(6, self.test)

    def moveI2cServoHorz(self):
        self.duty_horz = self.servo.getDuty(self.servo._I2CSERVO_HORZ_0)
        #        print ('horzduty :%d' %duty)
        # turn to -90
        if self.val_horz >= 2:
            self.duty_horz += 5
            # turn to 90
        elif self.val_horz <= 0:
            self.duty_horz -= 5
            # dont turn
        else:
            return
        self.servo.setDuty(self.servo._I2CSERVO_HORZ_0, self.duty_horz)

    def moveI2cServoVert(self):
        self.duty_vert = self.servo.getDuty(self.servo._I2CSERVO_VERT_0)
        #       print ('vertduty :%d' %duty)
        # turn to -90
        if self.val_vert >= 2:
            self.duty_vert -= 5
            # turn to 90
        elif self.val_vert <= 0:
            self.duty_vert += 5
            # dont turn
        else:
            return
        self.servo.setDuty(self.servo._I2CSERVO_VERT_0, self.duty_vert)

    def moveI2cServoVol(self):
        if self.sampleCount < 5:
            self.vol_sum += self.val_vol
            self.sampleCount += 1
        else:
            val = self.vol_sum / 5
            self.servo.setAdValtoDuty(self.servo._I2CSERVO_VOL_0, val, 0, 255)
            self.sampleCount = 0
            self.vol_sum = 0
Example #16
0
from __future__ import division
from __future__ import print_function

import sys

sys.path.append('..')
from joystick import JoyStick
from servo import ServoController

if __name__ == '__main__':
    sc = ServoController(angle_range=80)
    js = JoyStick()
    while True:
        # read serial
        v = js.read()
        # convert to servo angle
        angle = sc.analog2deg(v)
        print(angle)
        for i in range(len(angle)):
            sc.control([i, angle[i]])