void LEDHandler::setRightEye(LEDRequest& ledRequest) { //right eye -> groundContact ? role : role -> blinking // + penalty shootout: native_{striker,keeper} ? {striker,keeper} : off LEDRequest::LEDState state = theBehaviorLEDRequest.modifiers[BehaviorLEDRequest::rightEye]; //no groundContact if(!theGroundContactState.contact/* && (theFrameInfo.time & 512)*/) setEyeColor(ledRequest, false, BehaviorLEDRequest::blue, state); //overwrite else if(theBehaviorLEDRequest.rightEyeColor != BehaviorLEDRequest::defaultColor) setEyeColor(ledRequest, false, theBehaviorLEDRequest.rightEyeColor, state); else { switch(theBehaviorControlOutput.behaviorStatus.role) { case Role::keeper: setEyeColor(ledRequest, false, BehaviorLEDRequest::blue, state); break; case Role::defender: setEyeColor(ledRequest, false, BehaviorLEDRequest::white, state); break; case Role::striker: setEyeColor(ledRequest, false, BehaviorLEDRequest::red, state); break; case Role::undefined: case Role::none: //off break; default: ASSERT(false); } } }
void LEDHandler::setLeftEye(LEDRequest& ledRequest) { //left eye -> groundContact ? ballSeen and GoalSeen : blue LEDRequest::LEDState state = theBehaviorLEDRequest.modifiers[BehaviorLEDRequest::leftEye]; //no groundContact if(!theGroundContactState.contact/* && (theFrameInfo.time & 512)*/) setEyeColor(ledRequest, true, BehaviorLEDRequest::blue, state); //overwrite else if(theBehaviorLEDRequest.leftEyeColor != BehaviorLEDRequest::defaultColor) //blue setEyeColor(ledRequest, true, theBehaviorLEDRequest.leftEyeColor, state); //default else { bool ballSeen = theFrameInfo.getTimeSince(theBallModel.timeWhenLastSeen) < 250; // TODO: this used to be seeing a whole goal, now it's only at least one post bool goalSeen = theFrameInfo.getTimeSince(theGoalPercept.timeWhenCompleteGoalLastSeen) < 250; if(ballSeen && goalSeen) //red setEyeColor(ledRequest, true, BehaviorLEDRequest::red, state); else if(ballSeen) //white setEyeColor(ledRequest, true, BehaviorLEDRequest::white, state); else if(goalSeen) //green setEyeColor(ledRequest, true, BehaviorLEDRequest::green, state); } }
// executes one of Dash's autonomous behaviors void DashBot::executeAutoMode(void){ auto_flag = 1; // indicates an autonomous mode is on, if an all_stop is called, resets to zero to end auto behavior switch (receivedRadioPacket[1]) { case DASH_TEST: dashTest(); Serial1.write('3'); case DASH_CIRCLE: dashCircle(); Serial1.write('3'); break; case DASH_FIG_8: dashFig8(); Serial1.write('3'); break; case DASH_DANCE: dashDance(); Serial1.write('3'); break; case DASH_BUMP: dashBump(); Serial1.write('3'); break; default: setEyeColor(0,0,0); } }
void DashBot::executeRadioCommand(void) { /* switch (receivedRadioPacket[0]) { case ALL_STOP: mode = STOP_MODE; allStop(); clearRadioPacket(); auto_flag = 0; break; case SET_NAME: setName(); break; case JOYSTICK_DRIVE: // joystick drive mode = JOYSTICK_MODE; directDrive(receivedRadioPacket[1], receivedRadioPacket[2], receivedRadioPacket[3], receivedRadioPacket[4]); clearRadioPacket(); break; case GYRO_DRIVE: // gyro-assisted driving stabilizedDrive(); break; case SET_EYE_COLOR: setEyeColor(receivedRadioPacket[1], receivedRadioPacket[2], receivedRadioPacket[3]); clearRadioPacket(); break; case SEND_INFO_PACKET: // send name and color to iOS device sendInfoPacket(); break; case SET_INFO_PACKET: // set whether a name/color or sensor packet is being sent setInfoPacketMode(); break; case EXECUTE_AUTO_MODE: executeAutoMode(); clearRadioPacket(); break; default: debugBlinkOn(); clearRadioPacket(); */ switch (receivedRadioPacket[0]){ case 1: setEyeColor(0,100,0); //green clearRadioPacket(); break; case 2: setEyeColor(0,0,100); //blue clearRadioPacket(); break; case 3: setEyeColor(100,0,0); //red clearRadioPacket(); break; case 4: setEyeColor(0,0,0); //clear clearRadioPacket(); break; case 5: setMessage(); break; case 6: setInfoPacketMode(); break; case 7: motorL_pwm = receivedRadioPacket[1]; motorR_pwm = receivedRadioPacket[2]; duration = (receivedRadioPacket[3] << 16) + (receivedRadioPacket[4] << 8) + receivedRadioPacket[5]; if (motorL_pwm > 100){ motorL_pwm = motorL_pwm - 100; motorL_pwm = -1* motorL_pwm; } if (motorR_pwm > 100){ motorR_pwm = motorR_pwm - 100; motorR_pwm = -1* motorR_pwm; } driveForTime(motorL_pwm, motorR_pwm, duration); break; case 8: delay_between_sensor_emissions = receivedRadioPacket[1]; break; case 9: switch (receivedRadioPacket[3]){ case 1: servo1.write(receivedRadioPacket[1], receivedRadioPacket[2], false); break; case 2: servo2.write(receivedRadioPacket[1], receivedRadioPacket[2], false); break; case 3: servo3.write(receivedRadioPacket[1], receivedRadioPacket[2], false); break; default: setEyeColor(100,0,100); //purple clearRadioPacket(); } break; /*case 10: //servo1.write(180, 30, false); servo2.write(receivedRadioPacket[1], receivedRadioPacket[2], false); break;*/ case 11: servo1port = receivedRadioPacket[1]; servo2port = receivedRadioPacket[2]; servo3port = receivedRadioPacket[3]; servo1.attach(servo1port); // attaches the servo on pin 9 to the servo object servo2.attach(servo2port); servo3.attach(servo3port); break; case 12: motor_pwm = receivedRadioPacket[1]; if (motor_pwm > 100){ motor_pwm = motor_pwm - 100; motor_pwm = -1*motor_pwm; } motorDriveR(motor_pwm); break; case 13: motor_pwm = receivedRadioPacket[1]; if (motor_pwm > 100){ motor_pwm = motor_pwm - 100; motor_pwm = -1*motor_pwm; } motorDriveL(motor_pwm); break; case 14: servo3.write(receivedRadioPacket[1], receivedRadioPacket[2], false); break; default: setEyeColor(100,0,100); //purple clearRadioPacket(); } }