private async Task RunMotorSyncDegrees(BrickPortMotor[] ports, int[] speeds, int[] degrees)
{
if ((ports == null) || (speeds == null) || degrees == null)
return;
if ((ports.Length != speeds.Length) && (degrees.Length != speeds.Length))
return;
//make sure we have only positive degrees
for (int i = 0; i < degrees.Length; i++)
if (degrees[i] < 0)
degrees[i] = -degrees[i];
//initialize the speed and enable motors
int[] initval = new int[ports.Length];
for (int i = 0; i < ports.Length; i++)
{
initval[i] = brick.BrickPi.Motor[(int)ports[i]].Encoder;
StartMotor((int)ports[i], speeds[i]);
}
bool nonstop = true;
while(nonstop)
{
bool status = false;
for (int i = 0; i < ports.Length; i++)
{
if (speeds[i] > 0)
{
if (brick.BrickPi.Motor[(int)ports[i]].Encoder >= (initval[i] + degrees[i] * 2))
{
StopMotor((int)ports[i]);
}
} else
{
if (brick.BrickPi.Motor[(int)ports[i]].Encoder <= (initval[i] - degrees[i] * 2))
{
StopMotor((int)ports[i]);
}
}
status |= IsRunning(ports[i]);
}
nonstop = status;
}
}