Hi guys,
One quick question, what function do I put my user control code into? Thanks in advance for the help.
Hi guys,
One quick question, what function do I put my user control code into? Thanks in advance for the help.
Add them to the Appropriate section of user_routines.h, user_routines.c, and user_routines_fast.c of the MPLAB Project downloaded from Vex Robotics Downloads.
Ok I know that but what are the appropriate sections?
In user_routines.c (Pay attention to the /* Add any other user initialization code here.*/ )
/*******************************************************************************
* FUNCTION NAME: User_Initialization
* PURPOSE: This routine is called first (and only once) in the Main function.
* You may modify and add to this function.
* The primary purpose is to set up the DIGITAL IN/OUT - ANALOG IN
* pins as analog inputs, digital inputs, and digital outputs.
* CALLED FROM: main.c
* ARGUMENTS: none
* RETURNS: void
*******************************************************************************/
void User_Initialization (void)
{
/* FIRST: Set up the pins you want to use as analog INPUTs. */
IO1 = IO2 = INPUT; /* Used for analog inputs. */
/*
Note: IO1 = IO2 = IO3 = IO4 = INPUT
is the same as the following:
IO1 = INPUT;
IO2 = INPUT;
IO3 = INPUT;
IO4 = INPUT;
*/
/* SECOND: Configure the number of analog channels. */
Set_Number_of_Analog_Channels(TWO_ANALOG); /* See ifi_aliases.h */
/* THIRD: Set up any extra digital inputs. */
/* The six INTERRUPTS are already digital inputs. */
/* If you need more then set them up here. */
/* IOxx = IOyy = INPUT; */
IO3 = IO4 = IO5 = IO6 = IO7 = IO8 = INPUT;
IO9 = IO10 = IO11 = IO12 = IO13 = IO15 = INPUT;
/* FOURTH: Set up the pins you want to use as digital OUTPUTs. */
IO14 = IO16 = OUTPUT;
/* FIFTH: Initialize the values on the digital outputs. */
rc_dig_out14 = rc_dig_out16 = 0;
/* SIXTH: Set your initial PWM values. Neutral is 127. */
pwm01 = pwm02 = pwm03 = pwm04 = pwm05 = pwm06 = pwm07 = pwm08 = 127;
/* SEVENTH: Choose which processor will control which PWM outputs. */
Setup_Who_Controls_Pwms(MASTER,MASTER,MASTER,MASTER,MASTER,MASTER,MASTER,MASTER);
/* EIGHTH: Set your PWM output type. Only applies if USER controls PWM 1, 2, 3, or 4. */
/* Choose from these parameters for PWM 1-4 respectively: */
/* IFI_PWM - Standard IFI PWM output generated with Generate_Pwms(...) */
/* USER_CCP - User can use PWM pin as digital I/O or CCP pin. */
Setup_PWM_Output_Type(IFI_PWM,IFI_PWM,IFI_PWM,IFI_PWM);
/*
Example: The following would generate a 40KHz PWM with a 50% duty cycle
on the CCP2 pin (PWM OUT 1):
Setup_Who_Controls_Pwms(USER,USER,MASTER,MASTER,MASTER,MASTER,MASTER,MASTER);
CCP2CON = 0x3C;
PR2 = 0xF9;
CCPR2L = 0x7F;
T2CON = 0;
T2CONbits.TMR2ON = 1;
Setup_PWM_Output_Type(USER_CCP,IFI_PWM,IFI_PWM,IFI_PWM);
*/
/* Add any other user initialization code here. */
Initialize_Serial_Comms();
Putdata(&txdata); /* DO NOT CHANGE! */
User_Proc_Is_Ready(); /* DO NOT CHANGE! - last line of User_Initialization */
#ifdef _SIMULATOR
statusflag.NEW_SPI_DATA = 1;
#else
/* This code receives the 1st packet from master to obtain the version # */
while (!statusflag.NEW_SPI_DATA); /* Wait for 1st packet from master */
Getdata(&rxdata);
printf("VEX - Master v%d, User v%d\n",(int)rxdata.master_version,(int)CODE_VERSION);
#endif
}
also (Pay attention to the Default_Routine(); /* Optional. See below. /
and / Add your own code here. */ )
/*******************************************************************************
* FUNCTION NAME: Process_Data_From_Master_uP
* PURPOSE: Executes every 17ms when it gets new data from the master
* microprocessor.
* CALLED FROM: main.c
* ARGUMENTS: none
* RETURNS: void
*******************************************************************************/
void Process_Data_From_Master_uP(void)
{
Getdata(&rxdata); /* Get fresh data from the master microprocessor. */
Default_Routine(); /* Optional. See below. */
/* Add your own code here. */
printf("%2x : %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x\n",(int)rxdata.rc_receiver_status_byte.allbits,
(int)PWM_in1,(int)PWM_in2,(int)PWM_in3,(int)PWM_in4,(int)PWM_in5,
(int)PWM_in6,(int)PWM_in7,(int)PWM_in8,(int)PWM_in9,(int)PWM_in10,
(int)PWM_in11,(int)PWM_in12); /* printf EXAMPLE */
Putdata(&txdata); /* DO NOT CHANGE! */
}
In user_routines_fast.c (Pay attention to the /* Add your own code here. */ )
/*******************************************************************************
* FUNCTION NAME: User_Autonomous_Code
* PURPOSE: Execute user's code during autonomous robot operation.
* You should modify this routine by adding code which you wish to run in
* autonomous mode. It will be executed every program loop, and not
* wait for or use any data from the Operator Interface.
* CALLED FROM: main.c file, main() routine when in Autonomous mode
* ARGUMENTS: none
* RETURNS: void
*******************************************************************************/
void User_Autonomous_Code(void)
{
/* Initialize all PWMs and Relays when entering Autonomous mode, or else it
will be stuck with the last values mapped from the joysticks. Remember,
even when Disabled it is reading inputs from the Operator Interface.
*/
pwm01 = pwm02 = pwm03 = pwm04 = 127;
pwm05 = pwm06 = pwm07 = pwm08 = 127;
pwm09 = pwm10 = pwm11 = pwm12 = 127;
while (autonomous_mode) /* DO NOT CHANGE! */
{
if (statusflag.NEW_SPI_DATA) /* 18.5ms loop area */
{
Getdata(&rxdata); /* DO NOT DELETE, or you will be stuck here forever! */
/* Add your own code here. */
printf("%2x : %2x %2x %2x %2x %2x %2x\n",(int)rxdata.rc_receiver_status_byte.allbits,
(int)PWM_in1,(int)PWM_in2,(int)pwm01,(int)pwm02,(int)pwm03,(int)pwm04);
Putdata(&txdata); /* DO NOT DELETE, or you will get no PWM outputs! */
}
}
}