Stap 7: Autonome functies
Autonome functies, zijn een leuke en eenvoudige manier om uw code netjes en opgeruimd houden. Als het gaat om programmeren hen, zijn ze geplaatst voordat het vooraf autonome, maar na de competitie omvat (zie galerie). Een heleboel voorbeelden van de functie kan worden gevonden in de RobotC bestanden.
Programmeren van een standaard zet:
Hieronder vindt u een code voor een standaard zet, uitleg zijn commentaar in de code.
void standardMove(int time, int power) { // void is a type of loop, we are creating a motor[BackL] = power; // function called "standardMove", in this motor[FrontL] = power; // function, an int of time, and power is motor[BackR] = power; // created, and called within the loop. motor[FrontR] = power; // If you wanted the robot to move forward wait1Msec(time); // for 1 second, at the power of 80, you motor[BackL] = 0; // would write "standardMove(1000, 80);". motor[FrontL] = 0; // This works because the "1000" is replacing motor[BackR] = 0; // the "time", and 80 is replacing the "power". motor[FrontR] = 0; // Stop motors once done. }
Programmeren van een standaard lift:
Het programmeren van een standaard lift is in wezen hetzelfde als een station, allen u werkelijk moet doen is de motor namen wijzigen en de werkelijke functie van de naam. Daarom is een uitleg niet nodig.
void standardLift(int time, int power) { motor[BackL] = power; motor[TopL] = power; motor[BackR] = power; motor[TopR] = power; wait1Msec(time); motor[BackL] = 0; motor[TopL] = 0; motor[BackR] = 0; motor[TopR] = 0; }
Programmering een Gyro-beurt:
Nu hebben wij de meer netelige deel, programmeren van een gyro-beurt. Er zijn verschillende manieren om dit te doen, wat heel eenvoudig toch niet zo betrouwbaar, en wat meer ingewikkeld met drift correcties, die betrouwbaarder zijn. Gelukkig voor ons, heeft RobotC reeds verstrekt een drift correctie programma, dus het is allemaal kopiëren en plakken in onze eigen functie!
#define TURN_SLOWDOWN 100 int degrees = 0; int error = 5; void gyroTurn(int bearing) { int currentBearing = SensorValue[Gyro]; int targetBearing = bearing + currentBearing; if (bearing > 0) { // Left turn while (SensorValue[Gyro] < targetBearing - TURN_SLOWDOWN) { motor[BackL] = -50; motor[FrontL] = -50; motor[BackR] = 50; motor[FrontR] = 50; } while (SensorValue[Gyro] < targetBearing) { motor[BackL] = -20; motor[FrontL] = -20; motor[BackR] = 20; motor[FrontR] = 20; } motor[BackL] = 0; motor[FrontL] = 0; motor[BackR] = 0; motor[FrontR] = 0; } else { // Right turn while (SensorValue[Gyro] > targetBearing + TURN_SLOWDOWN) { motor[BackL] = 50; motor[FrontL] = 50; motor[BackR] = -50; motor[FrontR] = -50; } while (SensorValue[Gyro] > targetBearing) { motor[BackL] = 20; motor[FrontL] = 20; motor[BackR] = -20; motor[FrontR] = -20; } motor[BackL] = 0; motor[FrontL] = 0; motor[BackR] = 0; motor[FrontR] = 0; } }
Zorg ervoor dat u kopieert de hele code, met inbegrip van de "#define" en de gehele getallen.