From 9a23407b4c169fa862a95989ed4d274d1623a1bc Mon Sep 17 00:00:00 2001 From: Peter Wu Date: Wed, 17 Jun 2015 14:54:55 +0200 Subject: Attempt to explain timerTurret. BUG: timerTurret is never reset to 0 once -1. --- Venus_Skeleton/Venus_Skeleton.ino | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/Venus_Skeleton/Venus_Skeleton.ino b/Venus_Skeleton/Venus_Skeleton.ino index 14e1ae8..e50709f 100644 --- a/Venus_Skeleton/Venus_Skeleton.ino +++ b/Venus_Skeleton/Venus_Skeleton.ino @@ -105,7 +105,16 @@ int currValDirectionDegree = 0; unsigned long timerMovementStart = 0; unsigned long timerMovementStop = 0; //unsigned long timerInitialSequence = 0; // TODO unused? +/** + * If set to 0, then the turret is not rotating and in a stable position. + * Else the turret is apparently rotating and cannot be stopped. + */ unsigned long timerTurret = 0; +/** + * Always read the sensors on the turret, unless disabled (for example, when + * the measurements become unreliable due to a rotating robot). + */ +bool turretSensingEnabled = true; // Counters int counterInit = 0; @@ -308,7 +317,7 @@ void sensObstacleTurret() { // BE AWARE, LOCALISATION OF OBSTACLE IS y DISTANCE FROM CENTER OF ROBOT // (creates triangle with centerOfRobot, centerOfSensor and Obstacle as its corners) - if (timerTurret == 0) { + if (turretSensingEnabled && timerTurret == 0) { long distance = sensPing(PIN_SENS_OBSTACLE_TURRET); if (data.obstacle_turret_distances[counterTurret] != distance) { data.obstacle_turret_distances[counterTurret] = distance; @@ -349,7 +358,7 @@ void sensSampleTurret() { // BE AWARE, LOCALISATION OF OBSTACLE IS y DISTANCE FROM CENTER OF ROBOT // (creates triangle with centerOfRobot, centerOfSensor and Obstacle as its corners) - if (timerTurret == 0) { + if (turretSensingEnabled && timerTurret == 0) { int i; bool sample = false; @@ -402,7 +411,7 @@ void sensBeaconTurret() { // BE AWARE, LOCALISATION OF OBSTACLE IS y DISTANCE FROM CENTER OF ROBOT // (creates triangle with centerOfRobot, centerOfSensor and Obstacle as its corners) - if (timerTurret == 0) { + if (turretSensingEnabled && timerTurret == 0) { bool beacon; beacon = sensIRRemote(); // SENSORDATA HERE @@ -470,8 +479,9 @@ bool moveTurnTo(int degree) { return true; } - // Make sure turret doesn't move - timerTurret = 1; + // when rotating, the data collected with sensors on the turret becomes + // useless as the orientation is not fixed. + turretSensingEnabled = false; // if movementtimer is not started, start timer or something and initiate movement // else continue movement and return false @@ -512,9 +522,15 @@ bool moveTurnTo(int degree) { if (timerMovementStop < millis()) { DEBUG_PRINT("\n Stop turn move") stopMovement(); + + // reset the ultrasound measurements for (int k = 0; k < NUM_TURRET_DIRECTIONS; k++) { data.obstacle_turret_distances[k] = OBSTACLE_FAR_AWAY; } + + // allow the sensors to be read out again + turretSensingEnabled = true; + // rotation is completed. return true; } @@ -581,6 +597,7 @@ void turnTurretToNext() { timerTurret = millis(); turnTurretTo(deg); } + // If the turret is finished with rotating, mark it as idle. if ((timerTurret + 100) < millis()) { timerTurret = 0; } -- cgit v1.2.1