|
|
|
![]() |
|
|||||||
|
||||||||
![]() |
| Thread Tools | Rate Thread | Display Modes |
|
#1
|
|||
|
|||
|
[FTC]: Java in RobotC for TeleOp
I need help with programming. I found that you can use certain Java commands in RobotC. So I thought that I could use the Switch command which worked for some things but I have no idea how to make it work for the buttons in the TeleOp phrase.
The syntax for the Switch command is Code:
switch (variable)
{
case condition:
action
break;
case condition2:
action
break;
default:
action
break;
}
http://www.youtube.com/watch?v=RVRPmeccFT0 This is my proof of concept code for Java in RobotC. It is supposed to display what button is being pressed on the NXT screen. Since this was only a proof of concept, only wrote code for Buttons 1-4 on Game controller #1(Logitech Dual action). The purpose of using the Switch command was to shorten up the code and make it less massive instead of using an IF and ELSE command for every button that will be used. Code:
#pragma config(Hubs, S1, HTMotor, HTMotor, HTMotor, HTServo)
#pragma config(Motor, mtr_S1_C1_1, Intake, tmotorNormal, openLoop)
#pragma config(Motor, mtr_S1_C1_2, Lift, tmotorNormal, openLoop)
#pragma config(Motor, mtr_S1_C2_1, DriveL, tmotorNormal, openLoop, reversed)
#pragma config(Motor, mtr_S1_C2_2, ShooterR, tmotorNormal, openLoop)
#pragma config(Motor, mtr_S1_C3_1, DriveR, tmotorNormal, openLoop)
#pragma config(Motor, mtr_S1_C3_2, ShooterL, tmotorNormal, openLoop)
#pragma config(Servo, srvo_S1_C4_1, WingL, tServoNormal)
#pragma config(Servo, srvo_S1_C4_2, WingR, tServoNormal)
//*!!Code automatically generated by 'ROBOTC' configuration wizard !!*//
#include "JoystickDriver.c" //Include file to "handle" the Bluetooth messages.
void initializeRobot()
{
servo[WingL] = 127; // Reset Left wing position
servo[WingR] = 127; // Reset Right wing position
return;
}
task main()
{
initializeRobot();
waitForStart(); // wait for start of tele-op phase
int buttons = joystick.joy1_Buttons; // shortens the joystick.joy1_Buttons variable
while(1)
{
getJoystickSettings(joystick); //Updates controls
switch (buttons)
{
case 1: // checks if button 1 on Joy 1 is being pressed down
nxtDisplayCenteredTextLine(2, "Button : %d", 1); // Display "Button: 1"
break;
case 2: // checks if button 2 on Joy 1 is being pressed down
nxtDisplayCenteredTextLine(2, "Button : %d", 2); // Display "Button: 2"
break;
case 3: // checks if button 3 on Joy 1 is being pressed down
nxtDisplayCenteredTextLine(2, "Button : %d", 3); // Display "Button: 3"
break;
case 4: // checks if button 4 on Joy 1 is being pressed down
nxtDisplayCenteredTextLine(2, "Button : %d", 4); // Display "Button: 4"
break;
default: // if nothing is being pressed
nxtDisplayCenteredTextLine(2, "Button : %d", ); // Display "Button: "
break;
}
}
}
Mason Tran FTC Team 3385 Lead Programmer Last edited by lmnotran : 29-01-2010 at 23:59. Reason: Typo's |
|
#2
|
|||
|
|||
|
Re: [FTC]: Java in RobotC for TeleOp
The problem is the button commands you are using. "joystick.joy1_Buttons" doesn't work like Joy1Btn, where it outputs the actual button number. Instead, it outputs numbers to the power of 2, like this:
button 1 = 1 button 2 = 2 button 3 = 4 button 4 = 8 button 5 = 16 button 6 = 32 etc... This is useful to allow for commands where multiple buttons are pressed at once, but can be a pain otherwise. In your script, button 3 should activate case 4, with button 4 activating case 8. Case 3 currently displays when 1 and 2 are pressed togethor, and case 4 displays when button 3 is pressed. Last edited by rzoeller : 31-01-2010 at 18:27. |
|
#3
|
||||
|
||||
|
Re: [FTC]: Java in RobotC for TeleOp
Quote:
In addition, the joy1_buttons int adds the numbers together if multiple buttons are pressed at once (ex if button 3 (button 3 is 4) and button 4 (button 4 is 8) were pressed at the same time, the result in joy1_buttons would be 12). Also, your code would only check to see if a single button is pressed each time the loop runs, because you're using a single switch statement. So, if you had buttons 3 and 4 pressed, the program would only see button 3 as pressed. You may want to try a loop that checks each button, something like... Code:
for(int i=1;i<=12;i++) {
if(joy1Btn(i)) {
switch(i) {
case 1: /* Button 1 code */ break;
//...
}
if(joy2Btn(i)) {
switch(i) {
case 1: /* Button 1 code */ break;
//...
}
}
Last edited by buddyb : 01-02-2010 at 00:19. Reason: Elaboration. |
![]() |
| Thread Tools | |
| Display Modes | Rate This Thread |
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| [FTC]: Buttons RobotC | JohnFogarty | FIRST Tech Challenge | 2 | 25-11-2009 19:13 |
| [FTC]: Programming Clarification [RobotC] | basicxman | FIRST Tech Challenge | 3 | 11-02-2009 20:21 |
| [FTC]: [FTC]: RobotC Template Problem (causing an FMS issue) and Potential Servo Prob | PackersFan | FIRST Tech Challenge | 11 | 26-01-2009 21:25 |
| [FTC]: RobotC Template | gdo | FIRST Tech Challenge | 14 | 10-11-2008 06:26 |