Chief Delphi

Chief Delphi (http://www.chiefdelphi.com/forums/index.php)
-   Programming (http://www.chiefdelphi.com/forums/forumdisplay.php?f=51)
-   -   Python: button no attribute to wpilib ? (http://www.chiefdelphi.com/forums/showthread.php?t=133292)

team-4480 21-01-2015 17:05

Python: button no attribute to wpilib ?
 
Hi! We are trying to use a joystick button with wpilib.buttons.JoystickButton but we keep getting a "buttons has no attribute to wpilib". We really need help on this because we would love to use pneumatics. We are using python and robotpy. Any help would be greatly appreciated!

virtuald 21-01-2015 17:14

Re: Python: button no attribute to wpilib ?
 
You don't actually need to use the JoystickButton object, you can just use joystick.getRawButton() or joystick.getTrigger(), etc.

Otherwise, make sure you import wpilib.buttons, not just import wpilib.

team-4480 21-01-2015 18:03

Re: Python: button no attribute to wpilib ?
 
Quote:

Originally Posted by virtuald (Post 1431723)
You don't actually need to use the JoystickButton object, you can just use joystick.getRawButton() or joystick.getTrigger(), etc.

Otherwise, make sure you import wpilib.buttons, not just import wpilib.

For some really annoying reason, I can't have an "If" statement in my code or the Driver Station will not recognize the code. I tried --nc and it shows nothing. Thanks!

TimTheGreat 21-01-2015 18:29

Re: Python: button no attribute to wpilib ?
 
Quote:

Originally Posted by team-4480 (Post 1431754)
For some really annoying reason, I can't have an "If" statement in my code or the Driver Station will not recognize the code. I tried --nc and it shows nothing. Thanks!

Are you typing 'If'? Make sure it's lowercase.
if xyz:
blah blah blah
And it might be helpful to put your code in pastebin and share a link so we can take a look at it.

virtuald 21-01-2015 18:31

Re: Python: button no attribute to wpilib ?
 
Quote:

Originally Posted by team-4480 (Post 1431754)
For some really annoying reason, I can't have an "If" statement in my code or the Driver Station will not recognize the code. I tried --nc and it shows nothing. Thanks!

Highly recommend using the pyfrc simulator then. It will help you find any logical issues with your code. If it runs in the simulator, it has a high chance of running on your robot.

team-4480 21-01-2015 18:59

Re: Python: button no attribute to wpilib ?
 
Quote:

Originally Posted by virtuald (Post 1431762)
Highly recommend using the pyfrc simulator then. It will help you find any logical issues with your code. If it runs in the simulator, it has a high chance of running on your robot.

With this code: http://pastebin.com/DRa0hbVy I get this error in the sim
Code:

Robot Drive... Output not updated often enough.
I don't think that would stop the code from being recognized though. Thanks!

TimTheGreat 21-01-2015 19:46

Re: Python: button no attribute to wpilib ?
 
So I ran your code and noticed that the error was wpilib.motorsafety... to fix this, under
Code:

self.robot_drive=wpilib.RobotDrive(self.motor1,self.motor2)
insert
Code:

self.robot_drive.setSafetyEnabled(False)
Also, no need for
Code:

self.teleopPeriodic()
. I think Peter Johnson mentioned this. Wpilib will call it on its own. And keep the while loop in teleop, and add
Code:

wpilib.Timer.delay(.01)
inside the loop.

team-4480 21-01-2015 23:07

Re: Python: button no attribute to wpilib ?
 
Quote:

Originally Posted by TimTheGreat (Post 1431811)
So I ran your code and noticed that the error was wpilib.motorsafety... to fix this, under
Code:

self.robot_drive=wpilib.RobotDrive(self.motor1,self.motor2)
insert
Code:

self.robot_drive.setSafetyEnabled(False)
Also, no need for
Code:

self.teleopPeriodic()
. I think Peter Johnson mentioned this. Wpilib will call it on its own. And keep the while loop in teleop, and add
Code:

wpilib.Timer.delay(.01)
inside the loop.

So that would be why the Driver Station rejects the code? Thanks a bunch and I will try that tomorrow!!

virtuald 22-01-2015 01:28

Re: Python: button no attribute to wpilib ?
 
Quote:

Originally Posted by team-4480 (Post 1431921)
So that would be why the Driver Station rejects the code? Thanks a bunch and I will try that tomorrow!!

When you say 'rejects the code', what do you mean? Is there an error message, or some other indicator that is telling you this?

team-4480 22-01-2015 09:15

Re: Python: button no attribute to wpilib ?
 
Quote:

Originally Posted by virtuald (Post 1431985)
When you say 'rejects the code', what do you mean? Is there an error message, or some other indicator that is telling you this?

The Robot code indicator is red on the Driver Station and there is no errors that show up.

TimTheGreat 22-01-2015 09:31

Re: Python: button no attribute to wpilib ?
 
Quote:

Originally Posted by team-4480 (Post 1432048)
The Robot code indicator is red on the Driver Station and there is no errors that show up.

So that's not the driver station rejecting the code, its the code on the robot breaking. Adding the safety code line should prevent this, and to test just run it in the simulator

virtuald 22-01-2015 11:38

Re: Python: button no attribute to wpilib ?
 
Quote:

Originally Posted by TimTheGreat (Post 1432058)
So that's not the driver station rejecting the code, its the code on the robot breaking. Adding the safety code line should prevent this, and to test just run it in the simulator

No, do NOT disable the motor safety error. In previous years, the motor safety stuff didn't always work as well as we would have liked previously, but this year it should work without any problems. If one is getting the motor safety error, that means that you aren't feeding the motors often enough.

Looking at the code which was pasted the robot drive motor call is commented out, so it's not feeding it at all -- which means the error message is correct. Once you uncomment it out, the error message goes away.

Additionally, since the OP is using IterativeRobot, no Timer.delay call is required.

I modified your code slightly, and http://pastebin.com/CLDhyuc5 works for me without any problems in the simulator. You'll note that I changed 'aracadeDrive' to 'arcadeDrive', which could be what caused your robot to crash. I don't have access to a robot to run it on.

Also, you don't need the from __future__ import division at the top, that is only needed for python 2.

virtuald 22-01-2015 11:42

Re: Python: button no attribute to wpilib ?
 
Also, looking further, your controller adjustment code is wrong. The values returned from the joystick are in the range [-1, 1], so you don't need to divide by 255.

Additionally, you shouldn't have the 'else: pass' at the end of your statement. If you ever hit that condition, then x1 won't be set, and your code will die with an exception. It should be 'else: x1=??', where ?? is the default value (probably 0?).

Looking around CD, you'll see that most people adjust the joystick curve by squaring the inputs instead of a sequence of if statements as you have there.

team-4480 22-01-2015 15:51

Re: Python: button no attribute to wpilib ?
 
Quote:

Originally Posted by virtuald (Post 1432170)
Also, looking further, your controller adjustment code is wrong. The values returned from the joystick are in the range [-1, 1], so you don't need to divide by 255.

Additionally, you shouldn't have the 'else: pass' at the end of your statement. If you ever hit that condition, then x1 won't be set, and your code will die with an exception. It should be 'else: x1=??', where ?? is the default value (probably 0?).

Looking around CD, you'll see that most people adjust the joystick curve by squaring the inputs instead of a sequence of if statements as you have there.

Thanks with your help, we got our buttons to work! When I am using cmath for square root of the getX and getY, I get a...
Code:

TypeError: unorderable types: complex() > float()
Again, I can not thank you enough for your help!

TimTheGreat 24-01-2015 00:24

Re: Python: button no attribute to wpilib ?
 
Quote:

Originally Posted by team-4480 (Post 1432286)
When I am using cmath for square root of the getX and getY, I get a...
Code:

TypeError: unorderable types: complex() > float()

Well the joystick ranges are -1:1, and if you take the square root of -1 you get a complex number (i). What are you using the square root for?


All times are GMT -5. The time now is 02:37.

Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Copyright © Chief Delphi