Chief Delphi

Chief Delphi (http://www.chiefdelphi.com/forums/index.php)
-   C/C++ (http://www.chiefdelphi.com/forums/forumdisplay.php?f=183)
-   -   Live C++ help (http://www.chiefdelphi.com/forums/showthread.php?t=101921)

Bongle 04-02-2012 10:44

Live C++ help
 
I'm at the school all day, but none of my programming students are expected to be here today. The school network doesn't block google docs, and it has a live chat component. So if you've got a C++ or maybe a Java (I know Java, but I don't know the WPILib specifics) question today, head to this document and ask a question:
https://docs.google.com/spreadsheet/...=en_US# gid=0

To open the chat window, click the coloured square in the top right

I'd probably be best at:
-Syntax/"why isn't this compiling" question
-How to use the camera
-How to use the gyro/accelerometer
-Some amount of cRio debugging

So, ask away! Make my day go by quicker!

You can also ask in the thread, but I may not notice it right away.

Bongle 04-02-2012 16:57

Re: Live C++ help
 
Alright, I'm done.

This was pretty workable though - the only problem is that google docs doesn't make a noise when a collaborator chats, so sometimes I didn't notice when I had a new message.

agartner01 06-02-2012 20:53

Re: Live C++ help
 
Hey there, I saw this thread and was wondering if you could help me get the accelerometer (and possibly the gyro) setup. The following is copied and pasted from the official FIRST forums.


I have my accelerometer plugged into the digital sidecar via the I2C bus. I try to set it up but just get compile errors. Can't understand why. Can someone help me out? Code below. Bold indicates complie errors.

Code:

ADXL345_I2C *accelerometer;
...
accelerometer = new ADXL345_I2C (1,kRange_2G);
...
std::cout<<accelerometer->GetAcceleration(Axes kAxis_X);


mikets 07-02-2012 08:04

Re: Live C++ help
 
Try the following:
Code:

ADXL345_I2C *accelerometer;
...
accelerometer = new ADXL345_I2C (1,ADXL345_I2C::kRange_2G);
...
std::cout<<accelerometer->GetAcceleration(ADXL345_I2C::kAxis_X);


agartner01 07-02-2012 14:55

Re: Live C++ help
 
Alright, now it complies. But when I look at the console all I see is a bunch of zeros. I read in the accelerometer manual I have to apply power, but I'm unsure how to do that. (something with the PowerCtlFields)

jpolitano 07-02-2012 16:18

Re: Live C++ help
 
Hey Does anybody know how to get a camera tracker to work? Ours just prints out random lines. The program basically makes random lines in all directions to look for different colors. If anyone wants to help me please contact me somehow.

mikets 07-02-2012 17:05

Re: Live C++ help
 
Quote:

Originally Posted by agartner01 (Post 1121728)
Alright, now it complies. But when I look at the console all I see is a bunch of zeros. I read in the accelerometer manual I have to apply power, but I'm unsure how to do that. (something with the PowerCtlFields)

I am not sure what you meant by apply power. If you have connected the accelerometer correctly to the I2C bus, the I2C bus has power pins that supply power to the accelerometer. You don't need to have code to "apply power". The moment you turn on the Robot, the accelerometer should be powered. I would check the wiring of the accelerometer to make sure you have the +5, GND, SCL and SDA pins connected correctly and the digital side car has power and you have fixed your DB37 cable.

mikets 07-02-2012 17:17

Re: Live C++ help
 
Quote:

Originally Posted by jpolitano (Post 1121788)
Hey Does anybody know how to get a camera tracker to work? Ours just prints out random lines. The program basically makes random lines in all directions to look for different colors. If anyone wants to help me please contact me somehow.

Have you looked at the provided VisionSample2012 code? If you have installed the latest update (http://firstforge.wpi.edu/sf/frs/do/...2_update_for_c), you will see the vision tracking sample. We wrote our code based on that with some mminor optimization and it seems working well.

agartner01 07-02-2012 18:58

Re: Live C++ help
 
Quote:

Originally Posted by mikets (Post 1121827)
I am not sure what you meant by apply power. If you have connected the accelerometer correctly to the I2C bus, the I2C bus has power pins that supply power to the accelerometer. You don't need to have code to "apply power". The moment you turn on the Robot, the accelerometer should be powered. I would check the wiring of the accelerometer to make sure you have the +5, GND, SCL and SDA pins connected correctly and the digital side car has power and you have fixed your DB37 cable.

I checked the connections, I'm pretty sure they're right. Other digital sidecar functions works (pwm's & relay's). I have no idea what's wrong. I'll include some pictures




agartner01 07-02-2012 19:00

Re: Live C++ help
 
If that dosen't work, could someone show me how to hook it up the other way (and the code accompanying it).

mikets 07-02-2012 19:16

Re: Live C++ help
 
Two things:
1. It doesn't solve your problem but your picture showed that the +5 wire is black and the GND wire is red. The robot inspector will probably frown on this since this is opposite to the convention.
2. Could you change your line to the following instead? If you are not moving, the X axis will read zero. But Z will give you approx. 1 (since earth has 1G). Or you should move the accelerometer board around to see if the reading changes.
Code:

std::cout<<accelerometer->GetAcceleration(Axes kAxis_Z);

agartner01 07-02-2012 20:19

Re: Live C++ help
 
1. I didn't really realize the opposite wiring convention, kinda just plugged it in
2. When it was x, i turned it in all direction and it still remained 0.

All I can think right now is defective/static/faulty connectors(digital board), bad cables, etc...

Could you tell me how to hook it up the other way and see if that works? I have no idea how to do it.

mikets 07-02-2012 21:10

Re: Live C++ help
 
If you have a voltmeter, you can check the voltage between the +5 and the GND pins on the accelerometer to make sure it indeed gets power (in case you have bad connector). If you have an oscilloscope, check the SCK line, it should give you a train of square wave. No matter what color wires you hook it up, make sure +5 is connected to +5, Gnd to Gnd, SCL to SCL and SDA to SDA. By convention, +5 should be RED and Gnd should be BLACK.

agartner01 07-02-2012 21:19

Re: Live C++ help
 
Alright... Thanks for all the help, I really appreciate it. I'll try it out tomorrow.

Bob649 08-02-2012 09:27

Re: Live C++ help
 
Hello,
I use the i2c pins closest to the NXT connector. I read in a post that the ones you are plugged into are a slower i2c bus, but I don't have the formal documentation on that. Try the other pins and double check that you have the order on the 2x2 cables correct to the board. It is easy to turn one around with these types of cables. When I go in tonight, I'll try my working system on the pins you are on and see if it works there too.
Regards,
Bob

agartner01 08-02-2012 15:05

Re: Live C++ help
 
Quote:

Originally Posted by mikets (Post 1122002)
If you have a voltmeter, you can check the voltage between the +5 and the GND pins on the accelerometer to make sure it indeed gets power (in case you have bad connector). If you have an oscilloscope, check the SCK line, it should give you a train of square wave. No matter what color wires you hook it up, make sure +5 is connected to +5, Gnd to Gnd, SCL to SCL and SDA to SDA. By convention, +5 should be RED and Gnd should be BLACK.

Alright, I took the voltmeter to the pins on the accelermoneter and it did get power. I'll have to ask around to see if anyone has an oscilloscope.

agartner01 08-02-2012 16:38

Re: Live C++ help
 
Alright, I'm going to try and use the gyro for what I need instead. I have no idea what up with the accelerometer

mikets 08-02-2012 16:42

Re: Live C++ help
 
Did you try what Bob649 suggested? I think we connected to the other set of pins, not the one you showed in your picture.

agartner01 08-02-2012 16:49

Re: Live C++ help
 
yeah... nothing changed. I did change the port to 2 in the code.

mikets 08-02-2012 17:06

Re: Live C++ help
 
Quote:

Originally Posted by agartner01 (Post 1122546)
I did change the port to 2 in the code.

What do you mean by that? Are you saying you specified module number 2 when instantiating the ADXL345 class? If so, do you really have two Digital modules in your cRIO and what slots are they plugged into?

agartner01 08-02-2012 17:08

Re: Live C++ help
 
Quote:

Originally Posted by mikets (Post 1122554)
What do you mean by that?

Bold = change.

accelerometer = new ADXL345_I2C(2, ADXL345_I2C::kRange_2G);

agartner01 08-02-2012 17:11

Re: Live C++ help
 
I thought thats what you did to tell the crio which port the sensor was on (1= left sides, 2 = right side). How else would it know where it was?

mikets 08-02-2012 17:12

Re: Live C++ help
 
Quote:

Originally Posted by agartner01 (Post 1122557)
Bold = change.

accelerometer = new ADXL345_I2C(2, ADXL345_I2C::kRange_2G);

By putting a 2 there, you are saying you have TWO digital modules which means you must have an 8-slot cRIO and the second digital module must be inserted in slot 6 of the 8-slot cRIO and your accelerometer is connected to the I2C of the digital side car that is connected to the digital module in slot 6. Is that really your configuration?

mikets 08-02-2012 17:14

Re: Live C++ help
 
Quote:

Originally Posted by agartner01 (Post 1122561)
I thought thats what you did to tell the crio which port the sensor was on (1= left sides, 2 = right side). How else would it know where it was?

No, the left side and the right side set of pins are not modules. The '2' you specified is the "module number". That's the cRIO modules. I2C is a bus, you don't need to differentiate it.

agartner01 08-02-2012 17:23

Re: Live C++ help
 
Quote:

Originally Posted by mikets (Post 1122564)
No, the left side and the right side set of pins are not modules. The '2' you specified is the "module number". That's the cRIO modules. I2C is a bus, you don't need to differentiate it.

nope still nothing

msulaimain 09-02-2012 08:41

Re: Live C++ help
 
Hi, I have the following error on my driver station when I enable teleop:

ERROR: A timeout has been exceeded: RobotDrive...Output not updated often enough. ...in Check() in c:/Windriver/workspace/WPILib/MotorSafetyHelper.cpp at line 123

I have that error and it repeats continuously on the driver station.

I am deploying SimpleRobot example code.

Any solutions?

tlemmons 14-02-2012 18:38

Re: Live C++ help
 
I dont know if you got this working but looking at your pictures you are plugged into the pins that they call multipurpose I/O and not the I2C port. They is the four pins closest to the NXT connector.

agartner01 14-02-2012 22:15

Re: Live C++ help
 
Could You provide a picture? I'm not sure what your talking about

mikets 15-02-2012 01:32

Re: Live C++ help
 
That's the same thing as what we've been talking about. Look at your own picture. There are two columns of pins, the one closer to the NXT connector are the I2C pins. The other set of pins that you plugged into are actually something else.


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

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