Chief Delphi

Chief Delphi (http://www.chiefdelphi.com/forums/index.php)
-   Programming (http://www.chiefdelphi.com/forums/forumdisplay.php?f=51)
-   -   A New Programmer (http://www.chiefdelphi.com/forums/showthread.php?t=62010)

blaxbb 21-01-2008 23:09

Relays and IR Board
 
Quote:

Originally Posted by Spartan151 (Post 683237)
Okay. Once I get the basics done, I will need help programming the IR board functions, and programming the pneumatics for our claw to the arm joystick. I'll let you know when we get to that stage, but please, feel free to explain ahead of time. It'll help our team get a better understanding so there's no head-scratching later.

This is where the electronics and programming team/person has to work together.

The pneumatic cylinders are piped by solenoids (electronic valves,) which are controlled by a spike (relay.)

Relays don't use the analog 0-254 scale. They are essentially digital outputs that can be either forward, off, or reverse.

You map the relays the same way that you map speed controllers.

Code:

relay1_fwd = p1_sw_trig;
That would set relay1 to be forward every time your joystick 1 trigger is held.

IFI has a list of the joystick inputs here. pdf warning



As far as the IR, you need to read the digital input (1 or 0) and pass it through a conditional (if, else, switch) to execute a command.

Code:

if (rc_dig_in01 == 1) {
    pwm01 = pwm02 = 200;
    }
else {
    pwm01 = pwm02 = 127;
}

change rc_dig_in01 to match up with the digital input that was wired to your bot

the reference docs to wire and train the IR board are here. pdf warning

Spartan151 22-01-2008 19:30

Re: A New Programmer
 
Okay. Next question: Is it possible to program the joystick trigger to, when squeezed the first time, open the claw, and when pressed a second time, closes the claw?

Also, where do these code lines fit in at?

blaxbb 22-01-2008 23:21

Re: A New Programmer
 
Quote:

Originally Posted by Spartan151 (Post 683846)
Okay. Next question: Is it possible to program the joystick trigger to, when squeezed the first time, open the claw, and when pressed a second time, closes the claw?

Also, where do these code lines fit in at?

I've been trying to figure that out too, can anyone else fill in.

I'm pretty sure you would have to write a toggle function, but I'm not exactly sure how it should work.

Alan Anderson 22-01-2008 23:41

Re: A New Programmer
 
Examples of toggle functions are common on the Chief Delphi forums. Here's another:
Code:

  :
  :
  static char prev_trig = 0;
  static char toggle = 0;
  :
  if (p1_trig && !prev_trig)
  {
    toggle = !toggle;
  }
  prev_trig = p1_trig;
  :

This will switch toggle from 0 to 1, or vice versa, each time the port 1 joystick trigger is depressed. You can test its value to decide what to do next.

Jim E 23-01-2008 00:06

Re: A New Programmer
 
Hi,

You can try this, but I don't make any guarantee.

Toggle_gripper(current state)
{
int temp_state;
If ((p3_sw_trig==TRUE)&&( current _state== CLOSED)
temp_state=current_state;

else if (p3_sw_trig==TRUE)
temp_state=OPEN;

else if ((p3_sw_trig==FALSE)&&(current_state==OPEN))
temp_state=current_state;

else if ((p3_sw_trig==FALSE)
temp_state=CLOSED;

} return (temp_state);

In you Default _Routine, simply call the function:


pwm_state=Toggle_Gripper(current_pwm);
if (current_pwm<>pwm_state)
pwm=pwm_state;

I'm writing this off the cuff, you will need to correct the syntax and apply your own values for the pwm assignments, but it looks plausable. Good luck.

Spartan151 23-01-2008 09:12

Re: A New Programmer
 
Quote:

Originally Posted by Alan Anderson (Post 684061)
Examples of toggle functions are common on the Chief Delphi forums. Here's another:
Code:

  :
  :
  static char prev_trig = 0;
  static char toggle = 0;
  :
  if (p1_trig && !prev_trig)
  {
    toggle = !toggle;
  }
  prev_trig = p1_trig;
  :

This will switch toggle from 0 to 1, or vice versa, each time the port 1 joystick trigger is depressed. You can test its value to decide what to do next.

Okay. Taking this code, where do I write in the relay values, if they need to be written in? Or is that done with the previous code for the relay values?

Spartan151 23-01-2008 17:50

Re: A New Programmer
 
Okay. Here's another problem. I have the code written, but I keep getting a syntax error every time I try to build. How exactly do I run MPLAB? Also, where do those codes involving the toggling and pneumatics fit in?

blaxbb 23-01-2008 18:34

Re: A New Programmer
 
A syntax error means that typed something in your code wrong, forgot a semicolon, mistyped a variable, etc.

in MPLAB where it says syntax error
Code:

user_routines_fast.c:27:Error: syntax error
The number 27 after the file matches the line that the error is on.

Can you compile the default code?

brittanys 23-01-2008 19:00

Re: A New Programmer
 
Another general comment on your original bit of code...besides defining variables to use in place of direct values. You will want to include some sort of "deadband" into almost all of your drive code to account for the dynamic trim of the joysticks, prevent twitching/jerking, et cetera.

As somebody posted previously (sorry, I don't remember the name!), true neutral usually ends up at a value higher or lower than 127 (132 is quite common). To compensate for this fluctuation, we include a deadband of 6 in either direction, so "neutral" is really a range around 127.

Good luck! :]

Spartan151 23-01-2008 19:47

Re: A New Programmer
 
Haven't ied compliling the default code yet. I'll give it a shot. But as to the toggling.....I'm stumped as everyone on the team is. Yeah...we're gonna need a lot of help.

Spartan151 23-01-2008 22:25

Re: A New Programmer
 
This programming issue is putting us behind schedule, sadly. I just can't figure out where certain lines go. However, there may be a solution to it tomorrow, if we can get hold of Team 462. Got a lot more work to do. I'll be getting about 3 hours of sleep tonight, but our team doesn't back down from a challenge.

Laaba 80 23-01-2008 22:35

Re: A New Programmer
 
Quote:

Originally Posted by brittanys (Post 684563)
Another general comment on your original bit of code...besides defining variables to use in place of direct values. You will want to include some sort of "deadband" into almost all of your drive code to account for the dynamic trim of the joysticks, prevent twitching/jerking, et cetera.

As somebody posted previously (sorry, I don't remember the name!), true neutral usually ends up at a value higher or lower than 127 (132 is quite common). To compensate for this fluctuation, we include a deadband of 6 in either direction, so "neutral" is really a range around 127.

Good luck! :]

Make sure you do this! We just got our motors moving today and I didnt make the buffer zone yet so the motors were real jerky.
Joey

Spartan151 25-01-2008 12:05

Re: A New Programmer
 
Okay. I had someone walk me through the autonomous programming, and now I need to know how to put the OI in disabled mode so I can test the autonomous code WITHOUT SHUTTING DOWN THE PWM OUTPUTS. How would I go about doing that?

Alan Anderson 25-01-2008 13:08

Re: A New Programmer
 
Quote:

Originally Posted by Spartan151 (Post 685614)
Okay. I had someone walk me through the autonomous programming, and now I need to know how to put the OI in disabled mode so I can test the autonomous code WITHOUT SHUTTING DOWN THE PWM OUTPUTS. How would I go about doing that?

What you're asking for is probably not what you want. Putting the system in disabled mode will certainly shut down the PWMs, along with the relay outputs. That's the whole purpose of disabled mode.

I think what you want to know is how to put it in autonomous mode and have it actually provide outputs. For that, you need to connect to the competition port and close a switch between the proper pins. See the Competition Port Pinout Guide (it's on the OI section of the IFI Robotics web site).

Spartan151 25-01-2008 14:52

Re: A New Programmer
 
Quote:

Originally Posted by Alan Anderson (Post 685660)
What you're asking for is probably not what you want. Putting the system in disabled mode will certainly shut down the PWMs, along with the relay outputs. That's the whole purpose of disabled mode.

I think what you want to know is how to put it in autonomous mode and have it actually provide outputs. For that, you need to connect to the competition port and close a switch between the proper pins. See the Competition Port Pinout Guide (it's on the OI section of the IFI Robotics web site).

Okay. How would I go about closing the switch? What do I need?


All times are GMT -5. The time now is 20:27.

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