diff --git a/dependency-reduced-pom.xml b/dependency-reduced-pom.xml
index 0211333..ca3dfe2 100644
--- a/dependency-reduced-pom.xml
+++ b/dependency-reduced-pom.xml
@@ -4,7 +4,7 @@
org.baxter.disco
ocr
Disco OCR Accuracy Over Life Testing
- 4.3.6
+ 4.3.7
Testing Discos for long-term accuracy, using automated optical character recognition.
Baxter International
diff --git a/originalJavaUML.xmi b/originalJavaUML.xmi
deleted file mode 100644
index 15aba98..0000000
--- a/originalJavaUML.xmi
+++ /dev/null
@@ -1,474 +0,0 @@
-
-
-
-
- umbrello uml modeller http://umbrello.kde.org
- 1.6.18
- UnicodeUTF8
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/pom.xml b/pom.xml
index 9ba0377..9cc91ad 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,7 +3,7 @@
4.0.0
org.baxter.disco
ocr
- 4.3.6
+ 4.3.7
jar
Disco OCR Accuracy Over Life Testing
Testing Discos for long-term accuracy, using automated optical character recognition.
@@ -186,7 +186,7 @@
3.4.1
+ -->
diff --git a/pythonUML.xmi b/pythonUML.xmi
deleted file mode 100644
index d2499f9..0000000
--- a/pythonUML.xmi
+++ /dev/null
@@ -1,920 +0,0 @@
-
-
-
-
- umbrello uml modeller http://umbrello.kde.org
- 1.6.18
- UnicodeUTF8
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/runScript.sh b/runScript.sh
index 9cb3eae..be18343 100644
--- a/runScript.sh
+++ b/runScript.sh
@@ -1,2 +1,2 @@
#! /usr/bin/env sh
-sudo java -jar discoTesting-4.3.6.jar 2>/dev/null
+sudo java -jar discoTesting-4.3.7.jar 2>/dev/null
diff --git a/src/main/java/org/baxter/disco/ocr/Cli.java b/src/main/java/org/baxter/disco/ocr/Cli.java
index 45c5181..1def78f 100644
--- a/src/main/java/org/baxter/disco/ocr/Cli.java
+++ b/src/main/java/org/baxter/disco/ocr/Cli.java
@@ -25,7 +25,7 @@ public class Cli
/**
* Complete build version number
*/
- private static final String version = "4.3.6";
+ private static final String version = "4.3.7";
/**
* Currently saved iteration count.
@@ -58,7 +58,7 @@ public class Cli
/**
* Number of options currently available in the camera configuration sub-menu.
*/
- private static final int cameraMenuOptionCount = 6;
+ private static final int cameraMenuOptionCount = 7;
/**
* Lock object, used for temporary interruption of {@link #runTests()}
@@ -85,7 +85,7 @@ public class Cli
int userInput = 0;
- ErrorLogging.logError("Calibrating motor movement. This may take several minutes...");
+ ErrorLogging.logError("Calibrating motor movement. ");
ErrorLogging.logError("The piston will fire momentarily when the motor calibration is complete.");
MovementFacade.pressButton();
@@ -191,6 +191,7 @@ public class Cli
*/
private static void printHelp()
{
+ println("\n\n");
println("========================================");
println("Explanations:");
println("----------------------------------------");
@@ -261,6 +262,7 @@ public class Cli
*/
private static void printCameraMenu(List cameraList)
{
+ println("\n\n");
println("Available cameras to configure:");
println("------------------------------------");
for(int index = 0; index < cameraList.size(); index++)
@@ -278,6 +280,7 @@ public class Cli
*/
private static void printSerialMenu(List cameraList)
{
+ println("\n\n");
println("Available serial numbers to set:");
println("------------------------------------");
for(int index = 0; index < cameraList.size(); index++)
@@ -299,6 +302,7 @@ public class Cli
*/
private static void printActiveToggleMenu(List cameraList)
{
+ println("\n\n");
println("Available cameras to toggle:");
println("------------------------------------");
for(int index = 0; index < cameraList.size(); index++)
@@ -337,10 +341,52 @@ public class Cli
println("3. Change Threshold Value");
println("4. Toggle crop");
println("5. Toggle threshold");
- println("6. Exit");
+ println("6. Help");
+ println("7. Exit");
println("====================================");
}
+ /**
+ * Pre-defined menu for printing camera configuration options
+ */
+ private static void printCameraConfigHelpMenu()
+ {
+ println("\n\n");
+ println("============================================================");
+ println("Camera Config Menu options:");
+ println("------------------------------------------------------------");
+ println("1. Change Crop Region:");
+ println("\tChange where to crop the image down to.");
+ println("\tThis crop should only include the numbers");
+ println("\ton the screen of the DUT, and not include");
+ println("\tthe battery symbol, the degree symbol, or");
+ println("\tany other additional items on the screen.");
+ println("2. Change Composite Frame Count:");
+ println("\tChange the number of images to stack on top of each other.");
+ println("\tA higher number here can compensate slightly for low ");
+ println("\tthreshold value.");
+ println("");
+ println("3. Change Threshold Value:");
+ println("\tChange the threshold point used on the image.");
+ println("\tValid numbers range from 0 to 255.");
+ println("\tA higher number will make more of the image black.");
+ println("\tA lower number will make more of the image white.");
+ println("");
+ println("4. Toggle crop:");
+ println("\tTurn off cropping for the preview.");
+ println("");
+ println("5. Toggle threshold:");
+ println("\tTurn off thesholding for the preview.");
+ println("");
+ println("6. Help:");
+ println("\tShow this menu");
+ println("");
+ println("7. Exit:");
+ println("\t Exit to the previous menu to pick another camera");
+ println("============================================================");
+ println("Press enter to continue...");
+ }
+
/**
* Sub-function used to configure cameras.
*/
@@ -404,6 +450,10 @@ public class Cli
modifiedProperty = ConfigProperties.THRESHOLD;
break;
case 6:
+ printCameraConfigHelpMenu();
+ inputScanner.nextLine();
+ break;
+ case 7:
modifiedProperty = ConfigProperties.PRIME;
break;
default:
diff --git a/src/main/java/org/baxter/disco/ocr/MovementFacade.java b/src/main/java/org/baxter/disco/ocr/MovementFacade.java
index 05166da..a1024ae 100644
--- a/src/main/java/org/baxter/disco/ocr/MovementFacade.java
+++ b/src/main/java/org/baxter/disco/ocr/MovementFacade.java
@@ -9,9 +9,6 @@ import com.pi4j.io.gpio.digital.DigitalOutput;
import com.pi4j.io.gpio.digital.DigitalOutputConfigBuilder;
import com.pi4j.io.gpio.digital.DigitalState;
import com.pi4j.io.gpio.digital.PullResistance;
-import com.pi4j.io.pwm.Pwm;
-import com.pi4j.io.pwm.PwmConfigBuilder;
-import com.pi4j.io.pwm.PwmType;
/**
* Facade for all movement of the fixture.
@@ -36,30 +33,9 @@ public class MovementFacade
private static Thread runSwitchThread;
/**
- * Max allowed speed by current fixture design.
- * Motor appears to start acting erratically over 192kHz.
+ * Fraction of the total travel time, so the arm won't push through the limit switch.
*/
- private static final int MAX_FREQUENCY = 192000;
-
- /**
- * Amount of buffer between the found absolute speed, and used speed.
- */
- private static final int SPEED_BUFFER = 7500;
-
- /**
- * Minimum allowed speed of the fixture arm; also used for reset travels.
- */
- private static final int MIN_FREQUENCY = 10000;
-
- /**
- * Fraction of the total travel time at speed to start slowing down.
- */
- private static final double SLOW_POLL_FACTOR = 3.0 / 4.0;
-
- /**
- * Amount to slow down the speed by.
- */
- private static final int SPEED_DOWN_FACTOR = 2;
+ private static final double SLOW_POLL_FACTOR = 0.95;
/**
* Amount of distance to travel.
@@ -68,17 +44,6 @@ public class MovementFacade
*/
private static double TRAVEL_DIST;
- /**
- * Frequency fed to the PWM pin, which the motor controller converts into movement speed.
- */
- private static int FREQUENCY = MIN_FREQUENCY;
-
- /**
- * PWM Duty Cycle.
- * Does not affect motor speed; necessary for PWM setup.
- */
- private static final int DUTY_CYCLE = 50;
-
//PWM Addresses
//All addresses are in BCM format.
@@ -97,11 +62,6 @@ public class MovementFacade
*/
private static final int PISTON_ADDR = 25;
- /**
- * PWM pin address.
- */
- private static final int PWM_PIN_ADDR = 12;
-
/**
* Input pin address for the run switch.
*/
@@ -122,11 +82,6 @@ public class MovementFacade
*/
private static final int POLL_WAIT = 10;
- /**
- * Multiply the time-out value by this value to get the number of polls to make.
- */
- private static final int TIME_CONVERSION = 1000 / POLL_WAIT;
-
//Pi GPIO pin objects
/**
@@ -177,12 +132,6 @@ public class MovementFacade
*/
private static DigitalOutput pistonActivate;
- /**
- * PWM pin object.
- * Never used, but needs to be initialised to get GPIO to work properly.
- */
- private static Pwm pwm;
-
/**
* {@link Pi4J} API interaction object.
*/
@@ -224,60 +173,9 @@ public class MovementFacade
motorDirection = outputBuilder("motorDirection", "Motor Direction", MOTOR_DIRECTION_ADDR);
pistonActivate = outputBuilder("piston" , "Piston Activate", PISTON_ADDR);
- pwm = pwmBuilder("pwm","PWM Pin",PWM_PIN_ADDR);
- pwm.on(DUTY_CYCLE, FREQUENCY);
-
- calibrate();
+ findDistance();
}
- /**
- * Builder function for PWM pins.
- *
- * @param id ID of the new PWM pin.
- * @param name Name of the new PWM pin.
- * @param address BCM address of the PWM pin.
- *
- * @return newly created PWM pin object.
- */
- private static Pwm pwmBuilder(String id, String name, int address)
- {
- PwmConfigBuilder configBuilder;
- switch (address)
- {
- //The following pins allow for hardware PWM support.
- case 12:
- case 13:
- case 18:
- case 19:
- case 40:
- case 41:
- case 45:
- case 52:
- case 53:
- configBuilder = Pwm.newConfigBuilder(pi4j)
- .id(id)
- .name(name)
- .address(address)
- .pwmType(PwmType.HARDWARE)
- .frequency(FREQUENCY)
- .provider("pigpio-pwm")
- .initial(1)
- .shutdown(0);
- break;
- //Any pin not listed above must be software PWM controlled.
- default:
- configBuilder = Pwm.newConfigBuilder(pi4j)
- .id(id)
- .name(name)
- .address(address)
- .pwmType(PwmType.SOFTWARE)
- .frequency(FREQUENCY)
- .provider("pigpio-pwm")
- .initial(1)
- .shutdown(0);
- }
- return pi4j.create(configBuilder);
- }
/**
* Builder function for DigitalInput pins.
@@ -328,7 +226,6 @@ public class MovementFacade
ErrorLogging.logError("DEBUG: --------------------------------------");
int counter;
ErrorLogging.logError("DEBUG: Setting minimum frequency of PWM...");
- pwm.on(DUTY_CYCLE, MIN_FREQUENCY);
if(upperLimit.isHigh())
{
ErrorLogging.logError("DEBUG: Motor at highest point! Lowering to reset.");
@@ -362,22 +259,6 @@ public class MovementFacade
return counter;
}
- /**
- * Used to programmatically determine the motor's max speed.
- */
- private static void calibrate()
- {
- ErrorLogging.logError("Determining distance to limit switches...");
- findDistance();
- ErrorLogging.logError("Resetting arm to set speed.");
- resetArm();
- ErrorLogging.logError("Calibrating...");
- FREQUENCY = calib(MIN_FREQUENCY, MAX_FREQUENCY, 10000);
- ErrorLogging.logError("Calibration complete!");
- ErrorLogging.logError("DEBUG: Speed set to " + (FREQUENCY - SPEED_BUFFER));
- setFrequency(FREQUENCY - SPEED_BUFFER);
- }
-
/**
* Used to programmatically find the distance between the upper and lower limit switches.
*/
@@ -386,7 +267,7 @@ public class MovementFacade
resetArm();
int downTravelCounter = 0;
int upTravelCounter = 0;
- pwm.on(DUTY_CYCLE, MIN_FREQUENCY);
+ //pwm.on(DUTY_CYCLE, MIN_FREQUENCY);
motorDirection.low();
motorEnable.on();
for(downTravelCounter = 0; downTravelCounter < Integer.MAX_VALUE; downTravelCounter++)
@@ -401,8 +282,6 @@ public class MovementFacade
motorEnable.off();
if(lowerLimit.isOff()) ErrorLogging.logError("DEBUG: False positive on findDistance down!");
- int downTravelDist = downTravelCounter * MIN_FREQUENCY;
- ErrorLogging.logError("DEBUG: Down travel distance found to be: " + downTravelDist);
ErrorLogging.logError("DEBUG: Down travel count: " + downTravelCounter);
motorDirection.high();
@@ -419,95 +298,10 @@ public class MovementFacade
motorEnable.off();
if(upperLimit.isOff()) ErrorLogging.logError("DEBUG: False positive on findDistance up!");
- int upTravelDist = upTravelCounter * MIN_FREQUENCY;
- ErrorLogging.logError("DEBUG: Up travel distance found to be: " + upTravelDist);
ErrorLogging.logError("DEBUG: Up travel count: " + downTravelCounter);
- if(Math.abs(upTravelCounter - downTravelCounter) > 3)
- {
- ErrorLogging.logError("DEBUG: Values differ too far to be error. Setting to lower value.");
- }
int travelCounter = Math.min(upTravelCounter, downTravelCounter);
- TRAVEL_DIST = travelCounter * MIN_FREQUENCY;
- }
-
-
- /**
- * Find the max frequency to feed to the motor.
- *
- * @param start Lowest frequency to check
- * @param max Highest frequency to check
- * @param iterate How much to iterate by
- *
- * @return The largest safe value between start and max.
- */
- private static int calib(int start, int max, int iterate)
- {
- for(int i = start; i < max; i+=iterate)
- {
- if(!setFrequency(i))
- {
- ErrorLogging.logError("DEBUG: Speed set unsuccessfully! returning " + MIN_FREQUENCY + "...");
- return MIN_FREQUENCY;
- }
- ErrorLogging.logError("DEBUG: Motor travelling down.");
- motorDirection.low();
- ErrorLogging.logError("DEBUG: Motor Frequency: " + FREQUENCY);
- ErrorLogging.logError("DEBUG: Motor calibrate on.");
- motorEnable.on();
- int TWO_SECONDS = 2 * TIME_CONVERSION;
- for(int j = 0; j < TWO_SECONDS; j++)
- {
- try{ Thread.sleep(POLL_WAIT); } catch(Exception e){ ErrorLogging.logError(e); }
- if(lowerLimit.isHigh())
- {
- ErrorLogging.logError("DEBUG: Breaking loop early!");
- break;
- }
- }
- motorEnable.off();
- ErrorLogging.logError("DEBUG: Motor calibrate off.");
- if(upperLimit.isHigh())
- {
- ErrorLogging.logError("DEBUG: Motor failed to move! Returning " + (i - iterate));
- return i-iterate;
- }
- else
- {
-
- ErrorLogging.logError("DEBUG: Motor moved at speed " + i + ". Checking for errors.");
- if(resetArm() < 10)
- {
- ErrorLogging.logError("DEBUG: Motor failed to move! Returning " + (i - iterate));
- return i - iterate;
- }
- }
- }
- return max-iterate;
- }
-
- /**
- * Safely set the speed of the motor and fixture.
- *
- * @return true if set successfully, else false
- */
- private static boolean setFrequency(int newFrequency)
- {
- boolean output;
- if(newFrequency < MIN_FREQUENCY || newFrequency > MAX_FREQUENCY)
- {
- ErrorLogging.logError("DEBUG: Invalid MovementFacade.setFrequency() value, setting to minfrequency!");
- FREQUENCY = MIN_FREQUENCY;
- output = false;
- }
- else
- {
- FREQUENCY = newFrequency;
- output = true;
- }
- ErrorLogging.logError("DEBUG: Setting frequency to " + FREQUENCY);
- pwm.on(DUTY_CYCLE, FREQUENCY);
- return output;
+ TRAVEL_DIST = travelCounter;
}
/**
@@ -526,32 +320,22 @@ public class MovementFacade
{
motorDirection.high();
limitSense = upperLimit;
- ErrorLogging.logError("Sending fixture up...");
+ ErrorLogging.logError("DEBUG: Sending fixture up...");
}
else
{
motorDirection.low();
limitSense = lowerLimit;
- ErrorLogging.logError("Sending fixture down...");
+ ErrorLogging.logError("DEBUG: Sending fixture down...");
}
if(limitSense.isHigh()) return FinalState.SAFE;
- pwm.on(DUTY_CYCLE, FREQUENCY);
- int totalPollCount = (int)(TRAVEL_DIST / FREQUENCY);
+ int totalPollCount = (int)(TRAVEL_DIST);
int highSpeedPolls = (int)(totalPollCount * SLOW_POLL_FACTOR);
- int notHighSpeedPolls = totalPollCount - highSpeedPolls;
- int medSpeedPolls = (int)(notHighSpeedPolls * SLOW_POLL_FACTOR);
- int lowSpeedPolls = notHighSpeedPolls - medSpeedPolls;
-
- medSpeedPolls *= SPEED_DOWN_FACTOR;
- lowSpeedPolls *= 2 * SPEED_DOWN_FACTOR;
-
ErrorLogging.logError("DEBUG: =============================");
ErrorLogging.logError("DEBUG: Travel time: " + totalPollCount);
ErrorLogging.logError("DEBUG: High speed poll count: " + highSpeedPolls);
- ErrorLogging.logError("DEBUG: Medium speed poll count: " + medSpeedPolls);
- ErrorLogging.logError("DEBUG: Low speed poll count: " + lowSpeedPolls);
ErrorLogging.logError("DEBUG: =============================");
motorEnable.on();
for(int i = 0; i < highSpeedPolls; i++)
@@ -560,53 +344,13 @@ public class MovementFacade
if(limitSense.isOn())
{
motorEnable.off();
- ErrorLogging.logError("DEBUG: Motor moved too fast! Stopping motor early.");
- ErrorLogging.logError("DEBUG: Breaking high-speed loop and turning off motor!");
- ErrorLogging.logError("DEBUG: Iteration count: " + i);
- output = FinalState.FAILED;
break;
}
}
-
- if(motorEnable.isOn())
- {
- output = FinalState.UNSAFE;
- pwm.on(DUTY_CYCLE, (FREQUENCY / SPEED_DOWN_FACTOR));
- for(int i = 0; i < medSpeedPolls; i++)
- {
- try{ Thread.sleep(POLL_WAIT); } catch(Exception e){ ErrorLogging.logError(e); }
- if(limitSense.isOn())
- {
- motorEnable.off();
- ErrorLogging.logError("DEBUG: Motor only partially slowed down! Stopping motor early.");
- ErrorLogging.logError("DEBUG: Breaking medium-speed loop and turning off motor!");
- ErrorLogging.logError("DEBUG: Iteration count: " + i);
- break;
- }
- }
- }
-
- if(motorEnable.isOn())
- {
- output = FinalState.SAFE;
- pwm.on(DUTY_CYCLE, (FREQUENCY / (2 * SPEED_DOWN_FACTOR)));
- for(int i = 0; i < lowSpeedPolls; i++)
- {
- try{ Thread.sleep(POLL_WAIT); } catch(Exception e){ ErrorLogging.logError(e); }
- if(limitSense.isOn())
- {
- motorEnable.off();
- ErrorLogging.logError("DEBUG: Motor slowed down completely, but hit limit switch early.");
- ErrorLogging.logError("DEBUG: Breaking low-speed loop and turning off motor!");
- ErrorLogging.logError("DEBUG: Iteration count: " + i);
- break;
- }
- }
- }
-
motorEnable.off();
-
- pwm.on(DUTY_CYCLE, FREQUENCY);
+
+ output = (limitSense.isOn() ? FinalState.UNSAFE : FinalState.SAFE);
+
return output;
}
diff --git a/src/main/java/org/baxter/disco/ocr/OpenCVFacade.java b/src/main/java/org/baxter/disco/ocr/OpenCVFacade.java
index fe20f69..13b5a91 100644
--- a/src/main/java/org/baxter/disco/ocr/OpenCVFacade.java
+++ b/src/main/java/org/baxter/disco/ocr/OpenCVFacade.java
@@ -249,6 +249,16 @@ public class OpenCVFacade
{
Mat uncroppedImage = takePicture(cameraName);
Rect roi = selectROI("Pick Crop Location", uncroppedImage);
+ if(roi.x() == 0 && roi.y() == 0 && roi.width() == 0 && roi.height() == 0)
+ {
+ ErrorLogging.logError("Crop error! - Invalid crop selection.");
+ ErrorLogging.logError("If the crop region did not have a box indicating is location, please restart the program.");
+ ConfigFacade.setValue(cameraName,ConfigProperties.CROP_X,ConfigProperties.CROP_X.getDefaultValue());
+ ConfigFacade.setValue(cameraName,ConfigProperties.CROP_Y,ConfigProperties.CROP_Y.getDefaultValue());
+ ConfigFacade.setValue(cameraName,ConfigProperties.CROP_W,ConfigProperties.CROP_W.getDefaultValue());
+ ConfigFacade.setValue(cameraName,ConfigProperties.CROP_H,ConfigProperties.CROP_H.getDefaultValue());
+ return;
+ }
ConfigFacade.setValue(cameraName,ConfigProperties.CROP_X, roi.x());
ConfigFacade.setValue(cameraName,ConfigProperties.CROP_Y, roi.y());
ConfigFacade.setValue(cameraName,ConfigProperties.CROP_W, roi.width());
diff --git a/umlAndStateFlow.xmi b/umlAndStateFlow.xmi
new file mode 100644
index 0000000..a1edaa8
--- /dev/null
+++ b/umlAndStateFlow.xmi
@@ -0,0 +1,144 @@
+
+
+
+
+ umbrello uml modeller 2.32.3 http://umbrello.kde.org
+ 1.7.3
+ UnicodeUTF8
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+