So I want to know how to use header files in robotC. Do I have to save all my files as header files first except main.c and #include them as xyz.h? Or do I keep the files as .c files then #include them as xyz.c?
Header files are not generally used in RobotC (because RobotC is an intentionally simplified Frankenstein of C/C++). I would suggest you keep the .c extension and
#include "xyz.c"
like the competition template does.
You can include files from a different directory by adding a “Directory for User Include Files (common).” View > Preferences > Detailed preferences > Menu level = Expert > Compiler > Include directories.
Will this work. I attached an image.
You still need task autonomous, pre_auton & usercontrol. Unless you have very large sections of code I would suggest putting it all in one file, that way it’s easier to find everything (you don’t need to keep flicking between 6+ tabs).
drive.c, claw.c, mogo.c, etc.:
void drive() {
// do stuff to do with drive. This will be called 50 times a second in usercontrol
}
main.c:
#pragma config(Motor, port5, driveLeft, tmotorVex393_MC29, openLoop, driveLeft)
#pragma config(Motor, port6, driveRight, tmotorVex393_MC29, openLoop, reversed, driveRight)
// lift, mogo, other ports as well
//*!!Code automatically generated by 'ROBOTC' configuration wizard !!*//
// This code is for the VEX cortex platform
#pragma platform(VEX2)
// Select Download method as "competition"
#pragma competitionControl(Competition)
//Main competition background code...do not modify!
#include "Vex_Competition_Includes.c"
#include "lift.c"
#include "drive.c"
#include "turn.c" // what is this? It sounds like it should be in drive.c
#include "claw.c"
#include "chainbar.c"
#include "mogo.c"
void pre_auton() {
}
task autonomous() {
}
task usercontrol() {
while (true) {
sleep(20); // only run 50 times a second
lift();
drive(); // call the function that you included at the top (void drive() { ... })
turn();
claw();
chainbar();
mogo();
}
}
EDIT: also please copy paste your code into
code] ... /code]
(no spaces) blocks instead of posting pictures It means we don’t need to type up your code again for examples.
Oh sorry I didn’t know how to put the code without taking a picture. And also, what is the difference between sleep and wait1msec. And what do you mean by “// call the function that you included at the top (void drive() { … })”?
And do I just upload the main file to the cortex or all the files?
sleep
,
wait1msec
and
delay
are all exactly the same.
#include “drive.c” literally just copy pastes the contents of drive.c into main.c. In this case the contents of drive.c is a function called “drive”. The usercontrol code in my example runs (calls) each function (drive, lift, mogo, etc.) multiple times a second.
Just the main file. Before the upload starts the main file will #include all the files you want and the robot will just see one big file.