bool checkIsLeaf(void) {
	int direction = currentDirection();
	while(!isDark()) {
		if( abs(angleDifference(currentDirection(), direction)) > 170) {
			return true;
		}
	}
	return false;
}
void faceForward(int forwards){
	if(angleDifference(currentDirection(), forwards) > 0){//too far to the right
		motor[left] = -SPEED; //turn left
	} else {
		motor[right] = -SPEED; //turn right
	}
	while(abs(angleDifference(currentDirection(), forwards)) != 0){
		wait1Msec(1);
	}
}
void turnToAngle(int angle, int undershoot) {
  if( angleDifference(angle, currentDirection()) < 0 ) {
      direction = LEFT;
  } else {
    direction = RIGHT;
  }
  spinInDirection();

	while(abs(angleDifference(currentDirection(), angle)) > undershoot){
		wait1Msec(1);
	}
	motor[left] = 0;
	motor[right] = 0;
}
Esempio n. 4
0
void turnToDirection(int turnDirection) {
	adjustAngle();
	int currentDir;
	currentDir = currentDirection();
	double target = (currentDir + turnDirection) * M_PI / 2;

	while(fabs(currentHeading() - target) > turnThreshold) {
		if(fabs(currentHeading() - target) < slowThreshold) {
			if(currentHeading() > target) {
				set_motors(-5,5);
			}
			if(currentHeading() < target) {
				set_motors(5,-5);
			}
		} else {
			if(currentHeading() > target) {
				set_motors(-15,15);
			}
			if(currentHeading() < target) {
				set_motors(15,-15);
			}
		}
		calcPos();
	}
	set_motors(0,0);
	adjustAngle();
	usleep(10000);
}
Esempio n. 5
0
void CountProducerWidget::on_directionCombo_activated(int /*index*/)
{
    if (m_producer) {
        m_producer->set("direction", currentDirection().toLatin1().constData());
        m_producer->set(kShotcutDetailProperty, detail().toUtf8().constData());
        emit producerChanged(producer());
    }
}
/**
 * Turns around until black is found
 */
void turnToLine(void) {
  spinInDirection();

	while(!isDark()) {
		abortTimeslice();
	}
	int startDir = currentDirection();

	while(isDark()) {
	  abortTimeslice();
  }
	motor[left] = 0;
	motor[right] = 0;
	int centre = startDir + (angleDifference(currentDirection(), startDir)/2);
	nxtDisplayCenteredTextLine(6, "cen: %i", centre);
	turnToAngle(centre, 0);
}
Esempio n. 7
0
Mlt::Properties CountProducerWidget::getPreset() const
{
    Mlt::Properties p;
    p.set("direction", currentDirection().toLatin1().constData());
    p.set("style", currentStyle().toLatin1().constData());
    p.set("sound", currentSound().toLatin1().constData());
    p.set("background", currentBackground().toLatin1().constData());
    p.set("drop", ui->dropCheckBox->isChecked());
    setLength(&p, ui->durationSpinBox->value());
    return p;
}
Esempio n. 8
0
Mlt::Producer* CountProducerWidget::newProducer(Mlt::Profile& profile)
{
    Mlt::Producer* p = new Mlt::Producer(profile, "count:");
    p->set("direction", currentDirection().toLatin1().constData());
    p->set("style", currentStyle().toLatin1().constData());
    p->set("sound", currentSound().toLatin1().constData());
    p->set("background", currentBackground().toLatin1().constData());
    p->set("drop", ui->dropCheckBox->isChecked());
    setLength(p, ui->durationSpinBox->value());
    p->set(kShotcutCaptionProperty, ui->nameLabel->text().toUtf8().constData());
    p->set(kShotcutDetailProperty, detail().toUtf8().constData());
    return p;
}
int gatherForwardsData(void) {
  wait10Msec(100);
  PlaySound(soundBlip);
	time100[T2] = 0;
	int timeToWait = minDistance*10/(2*sweepSpeed) - 10;

	int count = 0;
	int total = 0;
	int forwards = 0;

	while(time100[T2] < timeToWait) {
		//forwards = forwards + (angleDifference(currentDirection(), forwards))/++count;
	  count+= 2;
	  total += count;
	  //This formula give more weight to recent samples
	  forwards = forwards + (count * (angleDifference(currentDirection(), forwards))/total);

	  nxtDisplayCenteredTextLine(5, "%i", forwards);
		wait10Msec(5);
	}
	PlaySound(soundBlip);
	PlaySound(soundBlip);
	return forwards;
}
Esempio n. 10
0
void Straight()
{
	adjustAngle();
	// Going Up

	int i;
	int motorSpeed;

	for (i = 0; i < 11; i++) {
		set_motors(3 * i, 3 * i);
		usleep(100000);
	}

	if(currentDirection() == 0 || currentDirection() == 4) {
		idealY += 60;
		printf("UP TargetY: %f\n",idealY);

		while(fabs(currentY()-idealY) > 1) {
			if(fabs(currentY()-idealY) < 10) {
				if(currentY() < idealY) {
					correctToStraight(2 * fabs(currentY()-idealY));
					// set_motors(motorSpeed, motorSpeed);
				} else {
					correctToStraight(-2 * fabs(currentY()-idealY));
					// set_motors(-5 -2 * fabs(currentY()-idealY),-5 -2 * fabs(currentY()-idealY));
				}
			} else if(currentY() < idealY) {
				set_motors(40,40);
			} else if(currentY() > idealY) {
				set_motors(-40,-40);
			}
			calcPos();
			//printf("X:%f Y:%f\n", currentX(),currentY());
		}
		set_motors(0,0);
		bCoord.y += 1;
	}

	// Going Down
	if(currentDirection() == 2) {
		idealY -= 60;
		printf("DOWN TargetY: %f\n",idealY);

		while(fabs(currentY()-idealY) > 1) {
			if(fabs(currentY()-idealY) < 10) {
				if(currentY() > idealY) {
					correctToStraight(2 * fabs(currentY()-idealY));
					// set_motors(5 + 2 * fabs(currentY()-idealY), 5 + 2 * fabs(currentY()-idealY));
				} else {
					correctToStraight(-2 * fabs(currentY()-idealY));
					// set_motors(-5 -2 * fabs(currentY()-idealY),-5 -2 * fabs(currentY()-idealY));
				}
			} else if(currentY() < idealY) {
				set_motors(-40,-40);
			} else if(currentY() > idealY) {
				set_motors(40,40);
			}
			calcPos();
			//printf("X:%f Y:%f\n", currentX(),currentY());
		}
		set_motors(0,0);
		bCoord.y -= 1;
	}

	// Going Right
	if(currentDirection() == 1) {
		idealX += 60;
		printf("RIGHT TargetX: %f\n",idealX);

		while(fabs(currentX()-idealX) > 1) {
			if(fabs(currentX()-idealX) < 10) {
				if(currentX() < idealX) {
					correctToStraight(2 * fabs(currentX()-idealX));
					// set_motors(5 + 2 * fabs(currentX()-idealX),5 + 2 * fabs(currentX()-idealX));
				} else {
					correctToStraight(-2 * fabs(currentX()-idealX));
					// set_motors(-5 -2 * fabs(currentX()-idealX),-5 -2 * fabs(currentX()-idealX));
				}
			} else if(currentX() < idealX) {
				set_motors(40,40);
			} else if(currentX() > idealX) {
				set_motors(-40,-40);
			}

			calcPos();
			//printf("X:%f Y:%f\n", currentX(),currentY());
		}
		set_motors(0,0);
		bCoord.x += 1;
	}

	// Going Left
	if(currentDirection() == 3) {
		idealX -= 60;
		printf("LEFT TargetX: %f\n",idealX);

		while(fabs(currentX()-idealX) > 1) {
			if(fabs(currentX()-idealX) < 10) {
				if(currentX() > idealX) {
					correctToStraight(2 * fabs(currentX()-idealX));
					// set_motors(5 + 2 * fabs(currentX()-idealX),5 + 2 * fabs(currentX()-idealX));
				} else {
					correctToStraight(-2 * fabs(currentX()-idealX));
					// set_motors(-5 -2 * fabs(currentX()-idealX),-5 -2 * fabs(currentX()-idealX));
				}
			} else if(currentX() < idealX) {
				set_motors(-40,-40);
			} else if(currentX() > idealX) {
				set_motors(40,40);
			}
			calcPos();
			//printf("X:%f Y:%f\n", currentX(),currentY());
		}
		set_motors(0,0);
		bCoord.x -= 1;
	}
}
bool detectNode(int forwards) {
	return abs(angleDifference(currentDirection(), forwards)) > ANGLE_THRESHOLD;
}