Exemplo n.º 1
0
void robotStatusMenu() {
	int screen = 0;
	int maxScreen = 6;
	int minScreen = 0;

	lcdSetBacklight(uart1, true);
	while (button != LCD_BTN_CENTER) {
		switch (screen) {
			case 0:
				lcdSetText(uart1, 1, "  Main Battery");
				lcdPrint(uart1, 2, "%d mV", powerLevelMain());
				break;
			case 1:
				lcdSetText(uart1, 1, " Backup Battery");
				lcdPrint(uart1, 2, "%d mV", powerLevelBackup());
				break;
			case 2:
				lcdSetText(uart1, 1, "    Joystick");
				lcdSetText(uart1, 2, isJoystickConnected(1) ? "    Connected" : "  Not Connected");
				break;
			case 3:
				lcdSetText(uart1, 1, "Field Controller");
				lcdSetText(uart1, 2, isOnline() ? "    Connected" : "  Not Connected");
				break;
			case 4:
				lcdSetText(uart1, 1, " IMEs Connected");
				lcdSetText(uart1, 2, "xxxxxxxxxxxxxxxx");
				break;
			case 5:
				lcdPrint(uart1, 1, "Left Pot %d", analogRead(potLiftLeft));
				lcdPrint(uart1, 2, "Left Mtr %d", motorGet(liftLeft));
				break;
			case 6:
				lcdPrint(uart1, 1, "Right Pot %d", analogRead(potLiftRight));
				lcdPrint(uart1, 2, "Right Mtr %d", motorGet(liftRight));
				break;
		}

		button = getLcdButtons();
		if (button == LCD_BTN_RIGHT) {
			if (++screen > maxScreen)
				screen = minScreen;
		} else if (button == LCD_BTN_LEFT) {
			if (--screen < minScreen)
				screen = maxScreen;
		}

		taskDelay(10);
	}
}
Exemplo n.º 2
0
/*
 * Runs the user autonomous code. This function will be started in its own task with the default
 * priority and stack size whenever the robot is enabled via the Field Management System or the
 * VEX Competition Switch in the autonomous mode. If the robot is disabled or communications is
 * lost, the autonomous task will be stopped by the kernel. Re-enabling the robot will restart
 * the task, not re-start it from where it left off.
 *
 * Code running in the autonomous task cannot access information from the VEX Joystick. However,
 * the autonomous function can be invoked from another task if a VEX Competition Switch is not
 * available, and it can access joystick information if called in this way.
 *
 * The autonomous task may exit, unlike operatorControl() which should never exit. If it does
 * so, the robot will await a switch to another mode or disable/enable cycle.
 */
void autonomous() {
	//lfilterClear();
	int8_t shooterSpeed = shooterSpeedPresets[2];
	int8_t n = 0;

	while (true) {
		if (abs(motorGet(SHOOTER_MOTOR_CHANNEL)) == shooterSpeed && abs(motorGet(SHOOTER_MOTOR_CHANNEL2)) == shooterSpeed) {
			if (n < 75) {
				++n;
			} else {
				lifter(60);
				takeInInternal(60);
			}
		}
		shooter(shooterSpeed);
		delay(20);
	}
}
Exemplo n.º 3
0
bool inMotion() {
	for (int i = 1; i <= 10; i++) {
		// printf("DEBUG: %d %d\n\r", i, motorGet(i));
		if (motorGet(i) != 0) {
			return true;
		}
	}
	return false;
}
Exemplo n.º 4
0
/*void lcdAutonRecorder(){
  if ((lcdReadButtons(uart1) == LCD_BTN_CENTER && previousLCD == LCD_BTN_CENTER) || menuStay == LCD_BTN_CENTER){
    lcdClear(uart1);
    menuStay == LCD_BTN_CENTER;
    arbitraryVariable = 1;
    lcdSetText(uart1, 1, "CONFIRM");
    if (((lcdReadButtons(uart1) == LCD_BTN_RIGHT && previousLCD == LCD_BTN_RIGHT) || endResultMenu == LCD_BTN_RIGHT) && arbitraryValueTwo = 0){
      for (int j = 1; j < 4; j ++){
        lcdClear(uart1);
        lcdSetText(uart1, 1, "Recording in...");
        lcdSetText(uart1, 2, j);
      }
      lcdClear(uart1);
      lcdSetText(uart1, 1, "Recording");
      record();
      lcdClear(uart1);
      lcdSetText(uart1, 1, "Finished");
      delay(1000);
      lcdClear(uart1);
      lcdSetText(uart1, 1, "Save?");
      lcdSetText(uart1, 2, "No     Yes");
      if((lcdReadButtons(uart1) == LCD_BTN_RIGHT && previousLCD == LCD_BTN_RIGHT) || endResult_Menu_Inner == LCD_BTN_RIGHT){
        endResult_Menu_Inner = LCD_BTN_RIGHT;
        arbitraryValueTwo = 1;
        if (lcdReadButtons(uart1) == LCD_BTN_LEFT && previousLCD != LCD_BTN_LEFT){// if clicked now, and not clicked 100 ms before
          autonRecorderMenuCount--;
        }
        else if (lcdReadButtons(uart1) == LCD_BTN_RIGHT && previousLCD != LCD_BTN_RIGHT){
          autonRecorderMenuCount++;
        }
        if (autonRecorderMenuCount < 0){
          autonRecorderMenuCount = autonRecorderMaxNumberMenus;
        }
        else if (autonRecorderMenuCount > autonRecorderMaxNumberMenus){
          autonRecorderMenuCount = 0;
        }
        switch(autonRecorderMenuCount){
          case 0:
            lcdClear(uart1);
            lcdSetText(uart1, 1, "Auton Left");
            if(lcdReadButtons(uart1) == LCD_BTN_CENTER && previousLCD != LCD_BTN_CENTER){
              saveAuton(Auton_one, "Auton_1");
              menuCount = 0;
              menuStay = 0;
              arbitraryVariable = 0;
              endResultMenu = 0;
              endResult_Menu_Inner = 0;
              arbitraryValueTwo = 0;
            }
            break;
          case 1:
            lcdClear(uart1);
            lcdSetText(uart1, 1, "Auton Right");
            if (lcdReadButtons(uart1) == LCD_BTN_CENTER && previousLCD != LCD_BTN_CENTER){
              saveAuton(Auton_two, "Auton_2");
              menuCount = 0;
              menuStay = 0;
              arbitraryVariable = 0;
              endResultMenu = 0;
              endResult_Menu_Inner = 0;
              arbitraryValueTwo = 0;
            }
            break;
        }
      }
      else if((lcdReadButtons(uart1) == LCD_BTN_LEFT && previousLCD == LCD_BTN_LEFT) && arbitraryValueTwo = 0){
        menuCount = 0;
        menuStay = 0;
        arbitraryVariable = 0;
        endResultMenu = 0;
      }
    }
    else if ((lcdReadButtons(uart1) == LCD_BTN_LEFT && previousLCD == LCD_BTN_LEFT)){
      menuCount = 0;
      menuStay = 0;
      arbitraryVariable = 0;
      endResultMenu = 0;
    }
  }
}
*/
void lcdMotor(){// code for the motor sub menu and displays
  if ((lcdReadButtons(uart1) == LCD_BTN_CENTER && previousLCD == LCD_BTN_CENTER) || menuStay == LCD_BTN_CENTER){
    lcdClear(uart1);
    arbitraryVariable = 1;
    menuStay = LCD_BTN_CENTER;
    // motor menu!!
    if (lcdReadButtons(uart1) == LCD_BTN_LEFT && previousLCD != LCD_BTN_LEFT){// if clicked now, and not clicked 100 ms before
      motorMenuCount--;
    }
    else if (lcdReadButtons(uart1) == LCD_BTN_RIGHT && previousLCD != LCD_BTN_RIGHT){
      motorMenuCount++;
    }
    if (motorMenuCount < 0){
      motorMenuCount = motorMaxNumberMenus;
    }
    else if (motorMenuCount > motorMaxNumberMenus){
      motorMenuCount = 0;
    }
    switch(motorMenuCount){
      case 0:
        lcdClear(uart1);
        lcdSetText(uart1, 1, "Top Left Drive");
        snprintf(front_left_driveLCD, 17, "%d", (motorGet(front_left_drive)));
        lcdSetText(uart1, 2, front_left_driveLCD);
        if (lcdReadButtons(uart1) == LCD_BTN_CENTER && previousLCD != LCD_BTN_CENTER){
          menuCount = 0;
          menuStay = 0;
          arbitraryVariable = 0;
          endResultMenu = 0;
        }
      break;
      case 1:
        lcdClear(uart1);
        lcdSetText(uart1, 1, "Top Right Drive");
        snprintf(front_right_driveLCD, 17, "%d", (motorGet(front_right_drive)));
        lcdSetText(uart1, 2, front_right_driveLCD);
        if (lcdReadButtons(uart1) == LCD_BTN_CENTER && previousLCD != LCD_BTN_CENTER){
          menuCount = 0;
          menuStay = 0;
          arbitraryVariable = 0;
          endResultMenu = 0;
        }
      break;
      case 2:
        lcdClear(uart1);
        lcdSetText(uart1, 1, "Back Left Drive");
        snprintf(back_left_driveLCD, 17, "%d", (motorGet(back_left_drive)));
        lcdSetText(uart1, 2, back_left_driveLCD);
        if (lcdReadButtons(uart1) == LCD_BTN_CENTER && previousLCD != LCD_BTN_CENTER){
          menuCount = 0;
          menuStay = 0;
          arbitraryVariable = 0;
          endResultMenu = 0;
        }
      break;
      case 3:
        lcdClear(uart1);
        lcdSetText(uart1, 1, "Back Right Drive");
        snprintf(back_right_driveLCD, 17, "%d", (motorGet(back_right_drive)));
        lcdSetText(uart1, 2, back_right_driveLCD);
        if (lcdReadButtons(uart1) == LCD_BTN_CENTER && previousLCD != LCD_BTN_CENTER){
          menuCount = 0;
          menuStay = 0;
          arbitraryVariable = 0;
          endResultMenu = 0;
        }
      break;
      case 4:
        lcdClear(uart1);
        lcdSetText(uart1, 1, "Lift 1");
        snprintf(left_lift_Motor1LCD, 17, "%d", (motorGet(left_lift_Motor1)));
        lcdSetText(uart1, 2, left_lift_Motor1LCD);
        if (lcdReadButtons(uart1) == LCD_BTN_CENTER && previousLCD != LCD_BTN_CENTER){
          menuCount = 0;
          menuStay = 0;
          arbitraryVariable = 0;
          endResultMenu = 0;
        }
      break;
      case 5:
        lcdClear(uart1);
        lcdSetText(uart1, 1, "Lift 2");
        snprintf(left_lift_Motor2LCD, 17, "%d", (motorGet(left_lift_Motor2)));
        lcdSetText(uart1, 2, left_lift_Motor2LCD);
        if (lcdReadButtons(uart1) == LCD_BTN_CENTER && previousLCD != LCD_BTN_CENTER){
          menuCount = 0;
          menuStay = 0;
          arbitraryVariable = 0;
          endResultMenu = 0;
        }
      break;
      case 6:
        lcdClear(uart1);
        lcdSetText(uart1, 1, "Lift 3");
        snprintf(right_lift_Motor3LCD, 17, "%d", (motorGet(right_lift_Motor3)));
        lcdSetText(uart1, 2, right_lift_Motor3LCD);
        if (lcdReadButtons(uart1) == LCD_BTN_CENTER && previousLCD != LCD_BTN_CENTER){
          menuCount = 0;
          menuStay = 0;
          arbitraryVariable = 0;
          endResultMenu = 0;
        }
      break;
      case 7:
        lcdClear(uart1);
        lcdSetText(uart1, 1, "Lift 4");
        snprintf(right_lift_Motor4LCD, 17, "%d", (motorGet(right_lift_Motor4)));
        lcdSetText(uart1, 2, right_lift_Motor4LCD);
        if (lcdReadButtons(uart1) == LCD_BTN_CENTER && previousLCD != LCD_BTN_CENTER){
          menuCount = 0;
          menuStay = 0;
          arbitraryVariable = 0;
          endResultMenu = 0;
        }
      break;
      case 8:
      lcdClear(uart1);
      lcdSetText(uart1, 1, "Pincer Left");
      snprintf(pincer_leftLCD, 17, "%d", (motorGet(pincer_left)));
      lcdSetText(uart1, 2, pincer_leftLCD);
      if (lcdReadButtons(uart1) == LCD_BTN_CENTER && previousLCD != LCD_BTN_CENTER){
        menuCount = 0;
        menuStay = 0;
        arbitraryVariable = 0;
        endResultMenu = 0;
      }
      break;
      case 9:
      lcdClear(uart1);
      lcdSetText(uart1, 1, "Pincer Right");
      snprintf(pincer_rightLCD, 17, "%d", (motorGet(pincer_right)));
      lcdSetText(uart1, 2, pincer_rightLCD);
        if (lcdReadButtons(uart1) == LCD_BTN_CENTER && previousLCD != LCD_BTN_CENTER){
          menuCount = 0;
          menuStay = 0;
          arbitraryVariable = 0;
          endResultMenu = 0;
        }
      break;
    }
  }
}
Exemplo n.º 5
0
void handleLcdInput(unsigned int input)
{
	switch(currentPage)
	{
	case(startLink)://Link Status
	{
		switch(input)
		{
		case(LCD_BTN_LEFT):
		{
			currentPage = startFPS;
			break;
		}
		case(LCD_BTN_RIGHT):
		{
			currentPage = startBattery;
			break;
		}
		case(LCD_BTN_CENTER):
		{
			//check link status
			//if connected go to connected
			//else go to not connected
			if (isJoystickConnected(1))
			{
				currentPage = startLink + 1;
			}
			else
			{
				currentPage = startLink + 2;
			}
			break;
		}
		}
		break;
	}
	case(startBattery)://Battery Status
	{
		switch(input)
		{
		case(LCD_BTN_LEFT):
		{
			currentPage = startLink;
			break;
		}
		case(LCD_BTN_RIGHT):
		{
			currentPage = startSensor;
			break;
		}
		case(LCD_BTN_CENTER):
		{
			currentPage = startBattery + 1;
			break;
		}
		}
		break;
	}
	case(startSensor)://Sensor Status
	{
		switch(input)
		{
		case(LCD_BTN_LEFT):
		{
			currentPage = startBattery;
			break;
		}
		case(LCD_BTN_RIGHT):
		{
			currentPage = startMotor;
			break;
		}
		case(LCD_BTN_CENTER):
		{
			quadNum = 0;
			imeNum = 0;
			sensIndex = 1;

			currentPage = startSensor + 1;
			break;
		}
		}
		break;
	}
	case(startMotor)://Motor Status
	{
		switch(input)
		{
		case(LCD_BTN_LEFT):
		{
			currentPage = startSensor;
			break;
		}
		case(LCD_BTN_RIGHT):
		{
			currentPage = startAuton;
			break;
		}
		case(LCD_BTN_CENTER):
		{
			currentMotorNum = 1;
			currentPage = startMotor + 1;
			break;
		}
		}
		break;
	}
	case(startAuton)://Auton Status
	{
		switch(input)
		{
		case(LCD_BTN_LEFT):
		{
			currentPage = startMotor;
			break;
		}
		case(LCD_BTN_RIGHT):
		{
			currentPage = startMode;
			break;
		}
		case(LCD_BTN_CENTER):
		{
			currentPage = startAuton + 1;
			break;
		}
		}
		break;
	}
	case(startMode)://Op Mode status
	{
		switch(input)
		{
		case(LCD_BTN_LEFT):
		{
			currentPage = startAuton;
			break;
		}
		case(LCD_BTN_RIGHT):
		{
			currentPage = startFPS;;
			break;
		}
		case(LCD_BTN_CENTER):
		{
			currentPage = startMode + 1;
			break;
		}
		}
		break;
	}
	case(startFPS):
	{
		switch(input)
		{
		case(LCD_BTN_LEFT):
		{
			currentPage = startMode;
			break;
		}
		case(LCD_BTN_RIGHT):
		{
			currentPage = startLink;
			break;
		}
		case(LCD_BTN_CENTER):
		{
			currentPage = startFPS + 1;
			break;
		}
		}
		break;
	}
	case(startLink + 1)://Link Status - Link Est.
	{
		switch(input)
		{
		case(LCD_BTN_LEFT):
		{
			//nothing
			break;
		}
		case(LCD_BTN_RIGHT):
		{
			//nothing
			break;
		}
		case(LCD_BTN_CENTER):
		{
			//returns to top of branch
			currentPage = startLink;
			break;
		}
		}
		break;
	}
	case(startLink + 2)://Link Status - Link Not Est.
	{
		switch(input)
		{
		case(LCD_BTN_LEFT):
		{
			//nothing
			break;
		}
		case(LCD_BTN_RIGHT):
		{
			//nothing
			break;
		}
		case(LCD_BTN_CENTER):
		{
			//return to top of branch
			currentPage = startLink;
			break;
		}
		}
		break;
	}
	case(startBattery + 1)://Battery Status - Battery Selector
	{
		switch(input)
		{
		case(LCD_BTN_LEFT):
		{
			currentPage = startBattery + 2;
			break;
		}
		case(LCD_BTN_RIGHT):
		{
			currentPage = startBattery + 3;
			break;
		}
		case(LCD_BTN_CENTER):
		{
			currentPage = startBattery;
			break;
		}
		}
		break;
	}
	case(startBattery + 2)://Battery Status - Battery Selector - Prims Battery Status
	{
		switch(input)
		{
		case(LCD_BTN_LEFT):
		{
			//nothing
			break;
		}
		case(LCD_BTN_RIGHT):
		{
			//nothing
			break;
		}
		case(LCD_BTN_CENTER):
		{
			currentPage = startBattery;
			break;
		}
		}
		break;
	}
	case(startBattery + 3)://Battery Status - Battery Selector - Backup
	{
		switch(input)
		{
		case(LCD_BTN_LEFT):
		{
			//nothing
			break;
		}
		case(LCD_BTN_RIGHT):
		{
			//nothing
			break;
		}
		case(LCD_BTN_CENTER):
		{
			currentPage = startBattery;
			break;
		}
		}
		break;
	}
	case(startSensor + 1):
	{
		/*
		 * SENSOR SELECTION MENU
		 *
		 * 	Menu for selecting individual types of sensors such
		 * which can then have individual sensors. This screen
		 * will display the name of the Sensor Group along with
		 * the Buttons to select the sensor group and iterate
		 * between individual sensor groups.
		 *
		 */
		switch(input)
		{
			/*
			 * LEFT BUTTON: Previous Sensor Group
			 * CENTER BUTTON: Select Current Sensor Group
			 * RIGHT BUTTON: Next Sensor Group
			 *
			 */
			case(LCD_BTN_LEFT):
			{
				sensIndex--;
				if(sensIndex < 1){
					sensIndex = 4;
				}
				break;
			}
			case(LCD_BTN_RIGHT):
			{
				sensIndex++;
				if(sensIndex > 4){
					sensIndex = 1;
				}
				break;
			}
			case(LCD_BTN_CENTER):
			{
				//the +1 must be added to go beyond this page(startSensor + 1)
				currentPage = startSensor + sensIndex + 1;
				break;
			}
		}
		break;
	}
	case(startSensor + 2):
	{
		/*
		 * QUADRATURE: Button Control
		 *
		 * 	There can be multiple Quadratures meaning the
		 * case has functions to iterate between the
		 * individual Quadratures. The screen will display
		 * both the data of the current Quadrature and
		 * the buttons to iterate between the other
		 * individual Quadratures.
		 *
		 */
		switch(input)
		{
			/*
			 * LEFT BUTTON: Previous Quadrature
			 * CENTER BUTTON: Return to Main Page
			 * RIGHT BUTTON: Next Quadrature
			 *
			 */
			case(LCD_BTN_LEFT):
			{
				quadNum--;
				if(quadNum < 0)
					quadNum = 3;
				break;
			}
			case(LCD_BTN_RIGHT):
			{
				quadNum++;
				if(quadNum > 3)
					quadNum = 0;

				break;
			}
			case(LCD_BTN_CENTER):
			{
				currentPage = startSensor;
				break;
			}
		}
		break;
	}
	case(startSensor + 3):
	{
		/*
		 * IME: Button Control
		 *
		 * 	There can be multiple IME's meaning the IME
		 * case has functions to iterate between the
		 * individual IME's. The screen will display
		 * both the data and the buttons to iterate
		 * between the individual IME's.
		 *
		 */
		switch(input)
		{
			/*
			 * LEFT BUTTON: Previous IME
			 * CENTER BUTTON: Return to Main Page
			 * RIGHT BUTTON: Next IME
			 *
			 */
			case(LCD_BTN_LEFT):
			{
				imeNum--;
				if(imeNum < 0)
					imeNum = 1;
				break;
			}
			case(LCD_BTN_RIGHT):
			{
				imeNum++;
				if(imeNum > 1)
					imeNum = 0;
				break;
			}
			case(LCD_BTN_CENTER):
			{
				currentPage = startSensor;
				break;
			}
		}
		break;
	}
	case(startSensor + 4):
	{
		/*
		 * GYROSCOPE: Button Control
		 *
		 * 	There will only be one Gyroscope at all times,
		 * meaning the side buttons will have to do nothing.
		 * This results in the only usage of the middle
		 * button to be returning to the main Sensor screen.
		 *
		 */
		switch(input)
		{
			/*
			 * LEFT BUTTON: No Function
			 * CENTER BUTTON: Return to aMain Page
			 * RIGHT BUTTON: No Function
			 *
			 */
			case(LCD_BTN_LEFT):
			{
				break;
			}
			case(LCD_BTN_RIGHT):
			{
				break;
			}
			case(LCD_BTN_CENTER):
			{
				currentPage = startSensor;
				break;
			}
		}
		break;
	}
	case(startSensor + 5):
	{
		switch(input)
		{
			case(LCD_BTN_LEFT):
			{
				break;
			}
			case(LCD_BTN_RIGHT):
			{
				break;
			}
			case(LCD_BTN_CENTER):
			{
				currentPage = startSensor;
				break;
			}
		}
		break;
	}
	case(startMotor + 1):
	{
		switch(input)
		{
		case(LCD_BTN_LEFT):
		{
			currentGroupNum = 0;
			currentPage = startMotor + 2;
			break;
		}
		case(LCD_BTN_RIGHT):
		{
			currentMotorNum = 1;
			currentPage = startMotor + 9;
			break;
		}
		case(LCD_BTN_CENTER):
		{
			currentPage = startMotor;
			break;
		}
		}
		break;
	}
	case(startMotor + 2):
	{
		switch(input)
		{
		case(LCD_BTN_LEFT):
		{
			currentGroupNum--;
			if(currentGroupNum < 0)
			{
				currentGroupNum = NUM_GROUPS - 1;
			}
			//currentPage = startMotor + 2;
			//stay on to this page
			break;
		}
		case(LCD_BTN_RIGHT):
		{
			currentGroupNum++;
			if(currentGroupNum == NUM_GROUPS)
			{
				currentGroupNum = 0;
			}
			//currentPage = startMotor + 2;
			//stay on to this page
			break;
		}
		case(LCD_BTN_CENTER):
		{
			currentPage = startMotor + 3;
			break;
		}
		}
		break;
	}
	case(startMotor + 3):
	{
		switch(input)
		{
		case(LCD_BTN_LEFT):
		{
			/*int avg = 0;
			int counter = 0;
			for (int i = 0; i < groups[currentGroupNum].validMotors; i++)
			{
				avg += motorGet(groups[currentGroupNum].motors[i]);
				counter++;
			}
			if(counter != 0)
			{
				avg /= counter;
			}
			currentGroupSpeed = avg;*/
			currentPage = startMotor + 4;
			break;
		}
		case(LCD_BTN_RIGHT):
		{
			currentGroupIndex = 0;
			currentPage = startMotor + 6;
			break;
		}
		case(LCD_BTN_CENTER):
		{
			currentPage = startMotor + 1;
			break;
		}
		}
		break;
	}
	case(startMotor + 4):
	{
		switch(input)
		{
		case(LCD_BTN_LEFT):
		{
			for (int i = 0; i < groups[currentGroupNum].validMotors; i++)
			{
				motorStop(groups[currentGroupNum].motors[i]);
			}
			//currentGroupSpeed = 0;
			//currentPage = startMotor + 4;
			//stay on this page
			break;
		}
		case(LCD_BTN_RIGHT):
		{
			currentPage = startMotor + 5;
			break;
		}
		case(LCD_BTN_CENTER):
		{
			currentPage = startMotor + 3;
			break;
		}
		}
		break;
	}
	case(startMotor + 5):
	{
		switch(input)
		{
		case(LCD_BTN_LEFT):
		{
			for (int i = 0; i < groups[currentGroupNum].validMotors; i++)
			{
				motorSet(groups[currentGroupNum].motors[i], -127);
			}
			//currentGroupSpeed = -127;
			currentPage = startMotor + 4;
			break;
		}
		case(LCD_BTN_RIGHT):
		{
			for (int i = 0; i < groups[currentGroupNum].validMotors; i++)
			{
				motorSet(groups[currentGroupNum].motors[i], 127);
			}
			//currentGroupSpeed = 127;
			currentPage = startMotor + 4;
			break;
		}
		case(LCD_BTN_CENTER):
		{
			currentPage = startMotor + 4;
			break;
		}
		}
		break;
	}
	case(startMotor + 6):
	{
		switch(input)
		{
		case(LCD_BTN_LEFT):
		{
			currentGroupIndex--;
			if (currentGroupIndex < 0)
			{
				currentGroupIndex = groups[currentGroupNum].validMotors - 1;
			}
			//currentPage = startMotor + 6;
			//stay on this page
			break;
		}
		case(LCD_BTN_RIGHT):
		{
			currentGroupIndex++;
			if (currentGroupIndex == groups[currentGroupNum].validMotors)
			{
				currentGroupIndex = 0;
			}
			//currentPage = startMotor + 6;
			//stay on this page
			break;
		}
		case(LCD_BTN_CENTER):
		{
			//currentGroupSpeed = 0;
			currentPage = startMotor + 7;
			break;
		}
		}
		break;
	}
	case(startMotor + 7):
	{
		switch(input)
		{
		case(LCD_BTN_LEFT):
		{
			motorStop(groups[currentGroupNum].motors[currentGroupIndex]);
			//currentGroupSpeed = 0;
			//currentPage = startMotor + 7;
			//stay on this page
			break;
		}
		case(LCD_BTN_RIGHT):
		{
			currentPage = startMotor + 8;
			break;
		}
		case(LCD_BTN_CENTER):
		{
			currentPage = startMotor + 3;
			break;
		}
		}
		break;
	}
	case(startMotor + 8):
	{
		switch(input)
		{
		case(LCD_BTN_LEFT):
		{
			motorSet(groups[currentGroupNum].motors[currentGroupIndex], -127);
			currentPage = startMotor + 7;
			break;
		}
		case(LCD_BTN_RIGHT):
		{
			motorSet(groups[currentGroupNum].motors[currentGroupIndex], 127);
			currentPage = startMotor + 7;
			break;
		}
		case(LCD_BTN_CENTER):
		{
			currentPage = startMotor + 7;
			break;
		}
		}
		break;
	}
	case(startMotor + 9):
	{
		switch(input)
		{
		case(LCD_BTN_LEFT):
		{
			currentMotorNum--;
			if(currentMotorNum < 1)
			{
				currentMotorNum = 10;
			}
			//currentPage = startMotor + 9
			//stay on this page
			break;
		}
		case(LCD_BTN_RIGHT):
		{
			currentMotorNum++;
			if(currentMotorNum > 10)
			{
				currentMotorNum = 1;
			}
			//currentPage = startMotor + 9
			//stay on this page
			break;
		}
		case(LCD_BTN_CENTER):
		{
			currentMotorSpeed = motorGet(currentMotorNum);
			currentPage = startMotor + 10;
			break;
		}
		}
		break;
	}
	case(startMotor + 10):
	{
		switch(input)
		{
		case(LCD_BTN_LEFT):
		{
			motorStop(currentMotorNum);
			//currentMotorSpeed = 0;
			//currentPage = startMotor + 10;
			//stay on this page
			break;
		}
		case(LCD_BTN_RIGHT):
		{
			currentPage = startMotor + 11;
			break;
		}
		case(LCD_BTN_CENTER):
		{
			currentPage = startMotor + 1;
			break;
		}
		}
		break;
	}
	case(startMotor + 11):
	{
		switch(input)
		{
		case(LCD_BTN_LEFT):
		{
			//currentMotorSpeed = -127;
			motorSet(currentMotorNum, -127);
			currentPage = startMotor + 10;
			break;
		}
		case(LCD_BTN_RIGHT):
		{
			//currentMotorSpeed = 127;
			motorSet(currentMotorNum, 127);
			currentPage = startMotor + 10;
			break;
		}
		case(LCD_BTN_CENTER):
		{
			currentPage = startMotor + 10;
			break;
		}
		}
		break;
	}
	case(startAuton + 1):
	{
		switch(input)
		{
		case(LCD_BTN_LEFT):
		{
			autonMode--;
			if(autonMode < 0)
				autonMode = 1;
			break;
		}
		case(LCD_BTN_RIGHT):
		{
			autonMode++;
			if(autonMode > 1)
				autonMode = 0;
			break;
		}
		case(LCD_BTN_CENTER):
		{
			currentPage = startAuton;
			break;
		}
		}
		break;
	}
	case(startMode + 1):
	{
		if (input == LCD_BTN_LEFT || input == LCD_BTN_RIGHT) {
			if (opMode == 1) {
				imeReset(IME_RIGHT_CHAIN_NUMBER);
				imeReset(IME_LEFT_CHAIN_NUMBER);
			}
			else if (opMode == 2) {
				setShooter(0);
			}
		}

		switch(input)
		{
		case(LCD_BTN_LEFT):
		{
			opMode--;
			if (opMode == -1) {
				opMode = 2;
			}
			break;
		}
		case(LCD_BTN_RIGHT):
		{
			opMode++;
			if (opMode == 3) {
				opMode = 0;
			}
			break;
		}
		case(LCD_BTN_CENTER):
		{
			currentPage = startMode;
			break;
		}
		}
		break;
	}
	case(startFPS + 1):
	{
		switch(input)
		{
		case(LCD_BTN_LEFT):
		{

			break;
		}
		case(LCD_BTN_RIGHT):
		{

			break;
		}
		case(LCD_BTN_CENTER):
		{
			currentPage = startFPS;
			break;
		}
		}
		break;
	}
	}
}
Exemplo n.º 6
0
void handleLcdUpdateExceptions()
{
	switch(currentPage)
	{
	case(startLink + 1):
	case(startLink + 2):
	{
		currentPage = startLink + (isJoystickConnected(1) ? 1 : 2);
		break;
	}
	case(startBattery + 2):
	{
		lcdPrint(uart1, 1, "Main mVolt: Secn");
		lcdPrint(uart1, 2, "%u   Rtn  %d", powerLevelMain(), (int)((analogRead(BATTERY_SECOND_PORT) * 1000)/280.0f));//70.0f * 4.0f
		break;
	}
	case(startBattery + 3):
	{
		lcdPrint(uart1, 1, "Back mVolt: %u", powerLevelBackup());
		lcdPrint(uart1, 2, "       Rtn");
		break;
	}
	case(startSensor + 2):
	{
		/*
		 * QUADRATURE: Rapid Updating
		 *
		 * 	Reads the data recieved from the Encoder.
		 * It then is able to handle any exceptions that
		 * are thrown by the Encoder. It prints the
		 * index of the Encoder (it's location) followed
		 * by the data that it is recieving. On the
		 * second line it prints buttons that are to
		 * iterate between the Encoders.
		 *
		 * *( See handleLcdInput() )*
		 *
		 */

		int quad = 0;
		switch(quadNum)
		{
		case(0):
		{
			quad = encoderGet(encoderBaseLeft);
			lcdPrint(uart1, 1, "Quad bL : %d", quad );
			lcdPrint(uart1, 2, "Prev  Rtn  Next");
			break;
		}
		case(1):
		{
			quad = encoderGet(encoderBaseRight);
			lcdPrint(uart1, 1, "Quad bR : %d", quad );
			lcdPrint(uart1, 2, "Prev  Rtn  Next");
			break;
		}
		case(2):
		{
			quad = encoderGet(encoderShooterLeft);
			lcdPrint(uart1, 1, "Quad sL : %d", quad );
			lcdPrint(uart1, 2, "Prev  Rtn  Next");
			break;
		}
		case(3):
		{
			quad = encoderGet(encoderShooterRight);
			lcdPrint(uart1, 1, "Quad sR : %d", quad );
			lcdPrint(uart1, 2, "Prev  Rtn  Next");
			break;
		}
		}
		break;
	}
	case(startSensor + 3):
	{
		/*
		 * IME: Rapid Updating
		 *
		 * 	Reads the data from the IME. It then is able to
		 * handle any exceptions thrown by the IME. It then
		 * prints the IME's index (location) and the data
		 * recieved by the IME. On the second line it prints
		 * the buttons needed to iterate between the IME's.
		 *
		 * *(See handleLcdUpdating() )*
		 *
		 */
		int ime;
		switch(imeNum){
		case(0):
		{
			ime = imeLMem;
			ime *= IME_LEFT_MULTIPLIER;
			lcdPrint(uart1, 1, "IME bL : %d", ime );
			lcdPrint(uart1, 2, "Prev  Rtn  Next");
			break;
		}
		case(1):
		{
			ime = imeRMem;
			ime *= IME_RIGHT_MULTIPLIER;
			lcdPrint(uart1, 1, "IME bR : %d", ime );
			lcdPrint(uart1, 2, "Prev  Rtn  Next");
			break;
		}
		}
		break;
	}
	case(startSensor + 4):
	{
		/*
		 * GYROSCOPE: Rapid Updating
		 *
		 * 	Reads the data recieved from the Gyroscope.
		 * It then is able to handle any exceptions that
		 * are thrown by the Gyroscope. It prints "Gyro"
		 * followed by the data that it is recieving. On the
		 * second line it prints the button to return back
		 * to the Sensor Selection.
		 *
		 * *( See handleLcdInput() )*
		 *
		 */
		int gy = gyroGet(gyroscope) % 360;
		lcdPrint(uart1, 1, "Gyroscope : %d", gy);
		lcdPrint(uart1, 2, "      Rtn");
		break;
	}
	case(startSensor + 5):
	{
		/*
		 * Shooting Information: Rapid Updating
		 *
		 * Reads the data from the rotor IME's and from the shooter shaft encoder.
		 * It then processes that information to give all the relavent information
		 * for shooting on one screen. Does not have room to display the return
		 * button text. Does not have any action for the left and right buttons.
		 * The center button returns to the startSensor page.
		 */
		int iL = imeLMem;
		int iR = imeRMem;

		iL *= IME_LEFT_MULTIPLIER;
		iR *= IME_RIGHT_MULTIPLIER;

		float sL = avgLeftShooterSpd * (50 / 6.0f) * 5.0f;//25.0f;
		float sR = avgRightShooterSpd * (50 / 6.0f) * 5.0f;//25.0f;

		lcdPrint(uart1, 1, "l:%5d, r:%5d", (int)sL, (int)sR);
		lcdPrint(uart1, 2, "L%6d  R%6d", iL, iR);

		break;
	}
	case(startMotor + 4):
	{
		int avg = 0;
		int counter = 0;
		for (int i = 0; i < groups[currentGroupNum].validMotors; i++)
		{
			avg += motorGet(groups[currentGroupNum].motors[i]);
			counter++;
		}
		if (counter != 0)
		{
			avg /= counter;
		}
		if (currentGroupSpeed != avg)
		{
			currentGroupSpeed = avg;
			lcdPrint(uart1, 1, "Grp Avg Spd:%d", currentGroupSpeed);
		}
		break;
	}
	case(startMotor + 7):
	{
		int temp = motorGet(groups[currentGroupNum].motors[currentGroupIndex]);
		if (currentGroupSpeed != temp)
		{
			currentGroupSpeed = temp;
			lcdPrint(uart1, 1, "Spd-GrIn-%s:%d",
					groups[currentGroupNum].groupName,
					currentGroupSpeed);
		}
		break;
	}
	case(startMotor + 10):
	{
		int temp = motorGet(currentMotorNum);
		if (currentMotorSpeed != temp)
		{
			currentMotorSpeed = temp;
			lcdPrint(uart1, 1, "Spd-Ind-%d:%d",
					currentMotorNum,
					currentMotorSpeed);
		}
		break;
	}
	case(startAuton + 1):
	{
		char* temp1 = "15S";
		char* temp2 = "1Min";

		char* s1 = (void*)"";
		char* s2 = (void*)"";

		if (autonMode == 0) {
			s1 = (void*)temp1;
			s2 = (void*)temp2;
		}
		else {
			s1 = (void*)temp2;
			s2 = (void*)temp1;
		}


		lcdPrint(uart1, 1, " AutonMode: %s", s1);
		lcdPrint(uart1, 2, "%s  Rtn %s", s2, s2);
		break;
	}
	case(startMode + 1):
	{
		char* temp1 = "comp";
		char* temp2 = "rotor";
		char* temp3 = "shoot";//max 6 characters

		char* s1 = "";
		char* s2 = "";
		char* s3 = "";

		if (opMode == 0)
		{
			s1 = (void*)temp1;
			s2 = (void*)temp2;
			s3 = (void*)temp3;
		}
		else if (opMode == 1)
		{
			s1 = (void*)temp2;
			s2 = (void*)temp3;
			s3 = (void*)temp1;
		}
		else if (opMode == 2)
		{
			s1 = (void*)temp3;
			s2 = (void*)temp1;
			s3 = (void*)temp2;
		}

		lcdPrint(uart1, 1, "OpMode: %s", s1);
		lcdPrint(uart1, 2, "%s Rtn %s", s3, s2);
		break;
	}
	case(startFPS + 1):
	{
		lcdPrint(uart1, 1, "x:%5d, y:%5d", position.x, position.y);
		lcdPrint(uart1, 2, "g:%4d, a:%d",
				//getLocalAngle(gyroscope), getGlobalAngle(FPSBase.correction, gyroscope));
				getGlobalAngle(FPSBase.correction, gyroscope), FPSBase.axis);
		break;
	}
	}
}
Exemplo n.º 7
0
	void runNode(void *data) {
		MoveNode *currNode = (MoveNode *)data;
		MoveNode *currChild = currNode->child;

		if (currNode->nodeId == NULL) {
			return;
		}

		for (int i = 0; i < pairMap[currNode->nPairId].numSensors; i++) {
			Sensor *sensor = &pairMap[currNode->nPairId].sensors[i];
			// createSensor(sensor);
			/*if (sensor->type == SHAFT_ENCODER) {
				sensor->enc = encoderInit(sensor->port, sensor->port + 1, false);
			}*/
			startSensor(sensor);
			sensor = NULL;
		}

		signed char *saveState = NULL;

		printDebug("Started node.");
		// printf("Started node %d.\n\r", currNode->nodeId);
		// printf("Node's child: %d\n\r", currChild->nodeId);
		int nextPoint = 0;
		setMotorSpeeds(currNode, nextPoint);
		nextPoint++;
		while (nextPoint < currNode->numPoints) {
			// printf("DEBUG: %d\n\r", nextPoint);
			while (joystickGetDigital(1, 5, JOY_UP)) { // pause
				if (saveState == NULL) {
					saveState = malloc(pairMap[currNode->nPairId].numPorts * sizeof(*(saveState)));
					if (saveState == NULL) {
						return; // break completely
					}
					for (int i = 0; i < pairMap[currNode->nPairId].numPorts; i++) {
						saveState[i] = motorGet(pairMap[currNode->nPairId].motorPorts[i]);
						motorStop(pairMap[currNode->nPairId].motorPorts[i]);
					}
					for (int i = 0; i < pairMap[currNode->nPairId].numSensors; i++) {
						if (pairMap[currNode->nPairId].sensors[i].type == TIME) {
							pauseTimer(pairMap[currNode->nPairId].sensors[i].port, true);
						}
					}
					printDebug("Paused!");
				}

				if (joystickGetDigital(1, 8, JOY_DOWN)) { // stop it entirely
					printDebug("Stopping!");
					for (int i = 0; i < pairMap[currNode->nPairId].numSensors; i++) {
						if (pairMap[currNode->nPairId].sensors[i].type == TIME) {
							resumeTimer(pairMap[currNode->nPairId].sensors[i].port, true);
						}
					}
					free(saveState);
					saveState = NULL;
					return;
				}
				delay(20);
			}

			if (outOfMemory) {
				return;
			}

			if (saveState != NULL) {
				for (int i = 0; i < pairMap[currNode->nPairId].numPorts; i++) {
					motorSet(pairMap[currNode->nPairId].motorPorts[i], saveState[i]);
				}

				for (int i = 0; i < pairMap[currNode->nPairId].numSensors; i++) {
					if (pairMap[currNode->nPairId].sensors[i].type == TIME) {
						resumeTimer(pairMap[currNode->nPairId].sensors[i].port, true);
					}
				}
				free(saveState);
				saveState = NULL;
			}

			if (reachedPoint(currNode, currNode->points[nextPoint].endSensorVal, currNode->points[nextPoint - 1].endSensorVal)) {
				setMotorSpeeds(currNode, nextPoint);
				nextPoint++;
			}

			if (currChild != NULL) {
				// printf("DEBUG: %d %d %d\n\r", currChild->nodeId, nextPoint, currChild->startPoint);
				if (nextPoint + 1 >= currChild->startPoint && needToStart(currNode, currChild)) {
					void *param = (void *)currChild;
					taskCreate(runNode, TASK_DEFAULT_STACK_SIZE / 2, param, TASK_PRIORITY_DEFAULT);
					currChild = currChild->sibling;
				}
			}
			delay(5);
		}

		printDebug("Finished node.");
		// printf("Finished node %d.", currNode->nodeId);
		if (findParent(currNode)->nodeId == rootNode->nodeId) {
			while (inMotion()) {
				delay(20);
			}
			if (currNode->sibling != NULL) {
				delay(currNode->sibling->startVal[0]);
				runNode(currNode->sibling);
			} else {
				printDebug("Done.");
				delay(500);
			}
		}
	}