int main(void) { systemInit(); while(1) { moveOnDirection(-228, 90, NULL); _delay_ms(500); rotate(78,60,NULL); _delay_ms(1000); moveOnDirection(-700, 40, releaseCarpets); rotate(-78, 40, NULL); moveOnDirection(-40, 65, NULL); _delay_ms(5000); while (1); } }
/************************************************************************************************************************************************************************************* ZELENA STRANA *************************************************************************************************************************************************************************************/ void greenSide(void) { position startingPosition; unsigned char currentPosition = 0, nextPosition = 0, odometryStatus; unsigned char activeState = TACTIC_ONE; startingPosition.x = 0; startingPosition.y = 0; startingPosition.angle = 0; setPosition(startingPosition); while (1) { switch(activeState) { case TACTIC_ONE: for (currentPosition = nextPosition; currentPosition < TACTIC_ONE_POSITION_COUNT; currentPosition++) { // mozda ubaciti if-else sa akcijama tipa regularno- kretanje, i alternativno- sta god odometryStatus = moveOnDirection(greenSideTacticOnePositions[currentPosition].distance, greenSideTacticOnePositions[currentPosition].speed, greenSideTacticOnePositions[currentPosition].detectionCallback); if(odometryStatus == ODOMETRY_FAIL) { } else if(odometryStatus == ODOMETRY_STUCK) { } if(currentPosition == 0) { _delay_ms(1000); rotate(-83,50,NULL);//rotira se za stepenice _delay_ms(1000); } else if(currentPosition == 1) { //rotacija _delay_ms(500); servo_position(250); while(1); } }//end for break; } }//end while(1) }
/************************************************************************************************************************************************************************************* ZUTA STRANA *************************************************************************************************************************************************************************************/ void yellowSide(void) { position startingPosition; unsigned char currentPosition = 0, nextPosition = 0, odometryStatus; unsigned char activeState = TACTIC_ONE; startingPosition.x = 0; startingPosition.y = 0; startingPosition.angle = 0; setPosition(startingPosition); while (1) { switch(activeState) { case 5: moveOnDirection(-8000, 60, detectEnemyYellow); while(1); case COLLISION: if(currentPosition == 1) while(1); //if(currentPosition == 0) //{ while(detectEnemyYellow(0) == 1) { PORTG = 0xFF; _delay_ms(100); } PORTG = 0; activeState = 5; nextPosition = currentPosition; //} break; case TACTIC_ONE: for (currentPosition = nextPosition; currentPosition < TACTIC_ONE_POSITION_COUNT; currentPosition++) { // mozda ubaciti if-else sa akcijama tipa regularno- kretanje, i alternativno- sta god odometryStatus = moveOnDirection(yellowSideTacticOnePositions[currentPosition].distance, yellowSideTacticOnePositions[currentPosition].speed, yellowSideTacticOnePositions[currentPosition].detectionCallback); if(odometryStatus == ODOMETRY_FAIL) { activeState = COLLISION; nextPosition = currentPosition; break; } else if(odometryStatus == ODOMETRY_STUCK) { } if(currentPosition == 0) { _delay_ms(1000); rotate(78,50,NULL);//rotira se za stepenice 76 _delay_ms(1000); } else if(currentPosition == 1) { //servo_position(250); while(1); } }//end for break; } }//end while(1) }