Ok I am desperate now, I just tried uncommenting the code in the dashboard format and I still don't get anything on my driver station dashboard. Can someone please help me.
I have tried the same code that you saw in the first post above, and I also tried this code for my myRobot.cpp.
Code:
#include "WPILib.h"
#include "DashboardDataFormat.h"
/**
* This is a demo program showing the use of the RobotBase class.
* The SimpleRobot class is the base of a robot application that will automatically call your
* Autonomous and OperatorControl methods at the right time as controlled by the switches on
* the driver station or the field controls.
*/
class RobotDemo : public SimpleRobot
{
RobotDrive myRobot; // robot drive system
Joystick leftstick; // left joystick
Joystick rightstick; //right joystick
DashboardDataFormat DataPlease;
public:
RobotDemo(void):
myRobot(1, 3, 2, 4), // PWMs for drive
//1,3 - Left Motors
//2,4 - Right Motors
leftstick(1), // Left Joystick.
rightstick(2) // Right Joystick.
{
myRobot.SetInvertedMotor(RobotDrive::kFrontLeftMotor, false);
myRobot.SetInvertedMotor(RobotDrive::kFrontRightMotor, false);
myRobot.SetInvertedMotor(RobotDrive::kRearLeftMotor, false);
myRobot.SetInvertedMotor(RobotDrive::kRearRightMotor, false);
GetWatchdog().SetExpiration(0.1);
}
/**
* Drive left & right motors for 2 seconds then stop
*/
void Autonomous(void)
{
GetWatchdog().SetEnabled(false);
myRobot.Drive(0.5, 0.0); // drive forwards half speed
Wait(2.0); // for 2 seconds
myRobot.Drive(0.0, 0.0); // stop robot
}
/**
* Runs the motors with tank steering.
*/
void OperatorControl(void)
{
// Create and set up a camera instance. first wait for the camera to start
// if the robot was just powered on. This gives the camera time to boot.
//Wait(10.0);
//printf("Getting camera instance\n");
//AxisCamera &camera = AxisCamera::getInstance();
//printf("Setting camera parameters\n");
//camera.writeResolution(k320x240);
//camera.writeBrightness(0);
// set watchdog
GetWatchdog().SetExpiration(1.0);
GetWatchdog().SetEnabled(true);
while (IsOperatorControl())
{
GetWatchdog().Feed();
myRobot.TankDrive(leftstick, rightstick); // drive
// send the dashboard data associated with the I/O ports
DataPlease.sendIOPortData();
Wait(0.005); // wait for a motor update time
}
}
};
START_ROBOT_CLASS(RobotDemo);
And to top things off here is my DashboardDataFormat.cpp code where I uncommented the things that should have polled the cRio I thought.
Code:
#include "DashboardDataFormat.h"
void sendVisionData() {
Dashboard &dash = DriverStation::GetInstance()->GetHighPriorityDashboardPacker();
dash.AddCluster(); // wire (2 elements)
{
dash.AddCluster(); // tracking data
{
dash.AddDouble(1.0); // Joystick X
dash.AddDouble(135.0); // angle
dash.AddDouble(3.0); // angular rate
dash.AddDouble(5.0); // other X
}
dash.FinalizeCluster();
dash.AddCluster(); // target Info (2 elements)
{
dash.AddCluster(); // targets
{
dash.AddDouble(100.0); // target score
dash.AddCluster(); // Circle Description (5 elements)
{
dash.AddCluster(); // Position (2 elements)
{
dash.AddDouble(30.0); // X
dash.AddDouble(50.0); // Y
}
dash.FinalizeCluster();
}
dash.FinalizeCluster(); // Position
dash.AddDouble(45.0); // Angle
dash.AddDouble(21.0); // Major Radius
dash.AddDouble(15.0); // Minor Radius
dash.AddDouble(324.0); // Raw score
}
dash.FinalizeCluster(); // targets
}
dash.FinalizeCluster(); // target Info
}
dash.FinalizeCluster(); // wire
dash.Finalize();
}
void sendIOPortData() {
Dashboard &dash = DriverStation::GetInstance()->GetLowPriorityDashboardPacker();
dash.AddCluster();
{
dash.AddCluster();
{ //analog modules
dash.AddCluster();
{
for (int i = 1; i <= 8; i++) {
dash.AddFloat((float) AnalogModule::GetInstance(1)->GetAverageVoltage(i));
//dash.AddFloat((float) i * 5.0 / 8.0);
}
}
dash.FinalizeCluster();
dash.AddCluster();
{
for (int i = 1; i <= 8; i++) {
dash.AddFloat((float) AnalogModule::GetInstance(2)->GetAverageVoltage(i));
}
}
dash.FinalizeCluster();
}
dash.FinalizeCluster();
dash.AddCluster();
{ //digital modules
dash.AddCluster();
{
dash.AddCluster();
{
int module = 4;
dash.AddU8(DigitalModule::GetInstance(module)->GetRelayForward());
dash.AddU8(DigitalModule::GetInstance(module)->GetRelayReverse());
dash.AddU16((short)DigitalModule::GetInstance(module)->GetDIO());
//dash.AddU16((short) 0xAAAA);
dash.AddU16((short)DigitalModule::GetInstance(module)->GetDIODirection());
//dash.AddU16((short) 0x7777);
dash.AddCluster();
{
for (int i = 1; i <= 10; i++) {
dash.AddU8((unsigned char) DigitalModule::GetInstance(module)->GetPWM(i));
//dash.AddU8((unsigned char) (i-1) * 255 / 9);
}
}
dash.FinalizeCluster();
}
dash.FinalizeCluster();
}
dash.FinalizeCluster();
dash.AddCluster();
{
dash.AddCluster();
{
int module = 6;
dash.AddU8(DigitalModule::GetInstance(module)->GetRelayForward());
dash.AddU8(DigitalModule::GetInstance(module)->GetRelayForward());
dash.AddU16((short)DigitalModule::GetInstance(module)->GetDIO());
dash.AddU16(DigitalModule::GetInstance(module)->GetDIODirection());
dash.AddCluster();
{
for (int i = 1; i <= 10; i++) {
dash.AddU8((unsigned char) DigitalModule::GetInstance(module)->GetPWM(i));
//dash.AddU8((unsigned char) i * 255 / 10);
}
}
dash.FinalizeCluster();
}
dash.FinalizeCluster();
}
dash.FinalizeCluster();
}
dash.FinalizeCluster();
// Can't read solenoids without an instance of the object
dash.AddU8((char) 0);
}
dash.FinalizeCluster();
dash.Finalize();
}
I'm not too proud to beg, can someone give me a hint here please. It shouldn't be this hard. Another two hours gone so far with different variations now. And I still don't know what the dashboard is expecting and in what order, how do you guys know? Is there documentation of that somewhere, and I would prefer a direct page reference please instead of just telling me to read the manual, because I don't know what manual to even look in.