Ot, platforma Killougha w wersji powered by NXT. Nic nowego, zbudowałem jedną pięć lat temu, tylko tamta była na samych PFach i sterowanie trzema silnikami jednocześnie wymagało małpiej zręczności. Na starość zrobiłem się wygodny, więc siadłem z padem do Xboxa i pogrzebałem w RobotC tak, żeby ruchy joysticka przekładały się na ruch platformy. Cały kod poniżej. W teorii działa jak powinno, w praktyce trochę całym tym biznesem trzęsie bo jeździ to na omnikołach z 12 rolkami w każdym, co daje 30 stopni odstępu między jedną rolką a drugą. Stąd czasem ciężko nad tym zapanować, szczególnie przy jeździe w bok - mam wrażenie, że jest to kwestia nierównego obciążenia omnikół, do którego dokłada się wspomniana trzęsionka.
Podziękowanie dla 3doma za użyczenie baterii do NXT. Nie taki był plan wykorzystania, ale przynajmniej będzie wstrząśnięta, nie zmieszana ;)
Kod:
Kod: Zaznacz cały
#include "JoystickDriver.c"
task main()
{
bMotorReflected[motorA] = true;
bMotorReflected[motorB] = true;
bMotorReflected[motorC] = true;
while(true)
{
getJoystickSettings(joystick);
int goY = joystick.joy1_y1 /20;
int goX = joystick.joy1_x1 /20;
wait1Msec(100);
if (joystick.joy1_x2 == 126) // rotate left
{
motor[motorA] = 100;
motor[motorB] = 100;
motor[motorC] = 100;
}
else if (joystick.joy1_x2 == -128) // rotate right
{
motor[motorA] = -100;
motor[motorB] = -100;
motor[motorC] = -100;
}
else if (goY == 0 && goX == 0)
{
motor[motorA] = 0;
motor[motorB] = 0;
motor[motorC] = 0;
}
else
{
motor[motorA] = (goY - goX) * -40;
motor[motorB] = goX * -20;
motor[motorC] = (goY + goX) * 40;
}
nxtDisplayCenteredTextLine(0, "BATTERY: %3.1fV", nImmediateBatteryLevel / (float) 1000);
nxtDisplayTextLine(2, "Y1: %d", goY);
nxtDisplayTextLine(3, "X1: %d", goX);
}
}
Kilka fotek:
I film z obowiązkową wkładką mięsną:
[youtube]http://www.youtube.com/watch?v=f8FuMf6R9P0[/youtube]