Nie wiem czy to się kwalifikuje jako pełnoprawny MOC, bo chodzi o ledwie parę linijek kodu, ale będę tego intensywnie używał więc może jeszcze komuś się przyda. Męczyło mnie zagadnienie jak prosto sterować dwoma silnikami napędowymi w układzie lewy/prawy kiedy na subtraktor nie ma miejsca albo obciążenie jest za duże żeby wytrzymał. Napisałem więc prosty programik, który pozwala sterować nimi jedną gałką standardowego pada, z kontrolą prędkości, tak jakby były połączone subtraktorem. Co ważne, kontrola prędkości działa we wszystkich kombinacjach - również przód/lewa, tył/prawa itd.
Kod:
Kod: Zaznacz cały
#include "JoystickDriver.c"
task main()
{
bMotorReflected[motorA] = false;
bMotorReflected[motorB] = false;
while(true)
{
getJoystickSettings(joystick);
motor[motorA] = 0;
motor[motorB] = 0;
if (joystick.joy1_y1 != -6)
{
motor[motorA] = joystick.joy1_y1 / 1.28;
motor[motorB] = joystick.joy1_y1 / 1.28;
if (joystick.joy1_x1 != -5)
{
motor[motorA] = (joystick.joy1_y1 + joystick.joy1_x1) / 2.56;
motor[motorB] = (joystick.joy1_y1 - joystick.joy1_x1) / 2.56;
}
}
else if (joystick.joy1_x1 != -5)
{
motor[motorA] = joystick.joy1_x1 / 1.28;
motor[motorB] = joystick.joy1_x1 / -1.28;
}
nxtDisplayCenteredTextLine(0, "BATTERY: %3.1fV", nImmediateBatteryLevel / (float) 1000);
nxtDisplayTextLine(2, "Y1: %d", joystick.joy1_y1);
nxtDisplayTextLine(3, "X1: %d", joystick.joy1_x1);
}
}
[youtube]http://www.youtube.com/watch?v=CAq6RBeseac[/youtube]