Go to Post It's just another design constraint that needs to be dealt with. - Dave Scheck [more]
Home
Go Back   Chief Delphi > Technical > Programming > Java
CD-Media   CD-Spy  
portal register members calendar search Today's Posts Mark Forums Read FAQ rules

 
 
 
Thread Tools Rating: Thread Rating: 6 votes, 4.33 average. Display Modes
Prev Previous Post   Next Post Next
  #3   Spotlight this post!  
Unread 29-05-2012, 13:49
artdutra04's Avatar
artdutra04 artdutra04 is offline
VEX Robotics Engineer
AKA: Arthur Dutra IV; NERD #18
FRC #0148 (Robowranglers)
Team Role: Engineer
 
Join Date: Mar 2005
Rookie Year: 2002
Location: Greenville, TX
Posts: 3,078
artdutra04 has a reputation beyond reputeartdutra04 has a reputation beyond reputeartdutra04 has a reputation beyond reputeartdutra04 has a reputation beyond reputeartdutra04 has a reputation beyond reputeartdutra04 has a reputation beyond reputeartdutra04 has a reputation beyond reputeartdutra04 has a reputation beyond reputeartdutra04 has a reputation beyond reputeartdutra04 has a reputation beyond reputeartdutra04 has a reputation beyond repute
Re: Java Toggle Button

Quote:
Originally Posted by RoastBeefer View Post
Hello, we have a conveyor belt powered by a motor on our bot. We want to press a button and make it run until we press the same button again. We cannot figure out how to do this. Here is what we currently have for our code:
Code:
 //Conveyor Belt
       boolean belt = false;
       conveyorMotor.set(0);
       if(belt == false){
           if(stick.getRawButton(3)){
               belt = true;
               conveyorMotor.set(1);    
           }
           else if(belt == true){
               if(stick.getRawButton(3)){
               belt = false;
               conveyorMotor.set(0);    
               }              
           }
Currently this only turns on the belt while pressed and stops as soon as we let go. I feel like we're taking the totally wrong approach to this. Please help
Are you reinitializing the belt = false every time you execute the following code? If so, every time you run the above code, belt will get set to false and only become true if the button is currently pressed.

Also, to implement a toggling routine in code that takes input from a human, you need a way to slow it down or track previous states. For example, if a toggle function runs once every 10ms, a human pressing a button for 1/2 a second will cause the code to toggle 50 times.

There are two ways to overcome this: timers (only allowing the code to toggle once every ___ ms), or by only toggling the output on button transitions (such as from a not pressed state to a pressed state). Here's a real quick piece of [untested] code that works off the latter principle:

Code:
// Run this only once to initialize the variables
boolean beltStatus = false;
boolean previousButton = false;
boolean currentButton = false;
Code:
// Run the following code continuously
previousButton = currentButton
currentButton = stick.getRawButton(3);

if (currentButton && !previousButton) 
{
	beltStatus = beltStatus ? false : true; 
}

conveyorMotor.set((double)(beltStatus ? 1 : 0));
This code works by only looking for button transitions (e.g. last time the code ran the button was not pressed and this time it is pressed). It then toggles the state of beltStatus if this transition is detected. After that, the motor output is set by using another ternary operation to typecast the boolean belt state as a double.
__________________
Art Dutra IV
Robotics Engineer, VEX Robotics, Inc., a subsidiary of Innovation First International (IFI)
Robowranglers Team 148 | GUS Robotics Team 228 (Alumni) | Rho Beta Epsilon (Alumni) | @arthurdutra

世上无难事,只怕有心人.
Reply With Quote
 


Thread Tools
Display Modes Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump


All times are GMT -5. The time now is 10:12.

The Chief Delphi Forums are sponsored by Innovation First International, Inc.


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