Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/prusa3d/PrusaSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'ArduinoAddons/Arduino_1.6.x/libraries/TMC26XStepper/examples/TMC26XMotorTester/processing/TMC26XMotorTest/DataRendering.pde')
-rwxr-xr-xArduinoAddons/Arduino_1.6.x/libraries/TMC26XStepper/examples/TMC26XMotorTester/processing/TMC26XMotorTest/DataRendering.pde327
1 files changed, 327 insertions, 0 deletions
diff --git a/ArduinoAddons/Arduino_1.6.x/libraries/TMC26XStepper/examples/TMC26XMotorTester/processing/TMC26XMotorTest/DataRendering.pde b/ArduinoAddons/Arduino_1.6.x/libraries/TMC26XStepper/examples/TMC26XMotorTester/processing/TMC26XMotorTest/DataRendering.pde
new file mode 100755
index 000000000..56a08332f
--- /dev/null
+++ b/ArduinoAddons/Arduino_1.6.x/libraries/TMC26XStepper/examples/TMC26XMotorTester/processing/TMC26XMotorTest/DataRendering.pde
@@ -0,0 +1,327 @@
+/*
+ TMC26XMotorTest.pde - - TMC26X Stepper Tester for Processing
+
+ Copyright (c) 2011, Interactive Matter, Marcus Nowotny
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
+
+ */
+
+//our graph dimensions
+int plotBottom, plotTop;
+int plotLeft, plotRight;
+
+
+//we already know the minima and maxima of certain dates
+int stallGuardMin = 0;
+int stallGuardMax =1024;
+
+int positionMin = 0;
+int positionMax = 1024;
+
+int dataPointsWidth = 3;
+int dataLineWidth = 2;
+int highLightWidth = 7;
+
+int numberOfDataPoints=1000;
+
+int legendTitleSize = 10;
+int legendTextSize = 10;
+int currentLabelInterval = 500;
+int currentMinorTickInterval = 25;
+DecimalFormat currentLabelFormat = new DecimalFormat("#0.0A");
+
+int stallGuardLabelInterval = 100;
+int stallGuardMinorTickInterval = 10;
+int positionLabelInterval = 64;
+int positionMinorTickInterval = 8;
+
+int coolStepActiveStroke = 2;
+int coolStepInactiveStroke = 1;
+int stallGuardHighLightDistance = 1;
+int positionHighLightDistance = 3;
+int currentHighLightDistance = 3;
+
+DataTable stallGuardTable = new DataTable(numberOfDataPoints);
+DataTable positionTable = new DataTable(numberOfDataPoints);
+DataTable currentTable = new DataTable(numberOfDataPoints);
+
+int logoLeft = 10;
+int logoTop = 50;
+int logoWidth = 75;
+int logoHeight = 75;
+
+void setupData() {
+ plotBottom = height-50;
+ plotTop = 300;
+
+ plotLeft = 150;
+ plotRight= width-50;
+ //recalculate the image dimension for the Logo
+ logoHeight = (int)((float)logoWidth/(float)TMCLogo.width*(float)TMCLogo.height);
+ logoTop = height - 10 - logoHeight;
+}
+
+void drawData() {
+
+ if (motor_connected && activeTab!=null && runTab.equals(activeTab)) {
+ fill(diagramBackgroundColor);
+ noStroke();
+ rect(plotLeft, plotTop, plotRight, plotBottom);
+ noFill();
+ rectMode(CORNERS);
+ noStroke();
+ //rect(plotLeft, plotBottom, plotRight, plotTop);
+
+ strokeWeight(dataLineWidth);
+ stroke(positionColor);
+ drawDataLine(positionTable, positionMin, positionMax);
+ drawDataHighLight(positionTable, positionMin, positionMax, positionHighLightDistance, labelColor, "Microstep Position", false);
+
+ strokeWeight(dataLineWidth);
+ stroke(coolStepColor);
+ drawCurrentLine(currentTable);
+ drawCurrentHighLight(positionTable, currentHighLightDistance, labelColor, "Current Ratio", false);
+
+ strokeWeight(dataPointsWidth);
+ stroke(stallGuardColor);
+ drawDataPoints(stallGuardTable, stallGuardMin, stallGuardMax);
+ drawDataHighLight(stallGuardTable, stallGuardMin, stallGuardMax, stallGuardHighLightDistance, labelColor, "Stall Guard", true);
+
+ if (coolStepActive) {
+ strokeWeight(coolStepActiveStroke);
+ } else {
+ strokeWeight(coolStepInactiveStroke);
+ }
+ stroke(coolStepColor);
+ float coolStepMinHeight = map(coolStepMin, 0, stallGuardMax, plotBottom, plotTop);
+ line(plotLeft,coolStepMinHeight, plotRight, coolStepMinHeight);
+ float coolStepMaxHeight = map(coolStepMin+coolStepMax+1, 0, stallGuardMax, plotBottom, plotTop);
+ line(plotLeft,coolStepMaxHeight, plotRight, coolStepMaxHeight);
+
+ textSize(legendTitleSize);
+ textAlign(RIGHT);
+ fill(coolStepColor);
+ text("Motor Current", plotLeft - 50, plotTop - 10);
+ textSize(legendTextSize);
+ textAlign(RIGHT);
+ strokeWeight(1);
+ stroke(coolStepColor);
+ int currentScaleMax = (int)(maxCurrent*1000.0);
+ for (int i=0; i<=currentScaleMax; i++) {
+ float y = map(i, 0, currentScaleMax, plotBottom, plotTop);
+ if (i % currentLabelInterval == 0) {
+ if (i==0) {
+ textAlign(RIGHT, BOTTOM);
+ }
+ else if (i==currentScaleMax) {
+ textAlign(RIGHT, TOP);
+ }
+ else {
+ textAlign(RIGHT, CENTER);
+ }
+ text(currentLabelFormat.format((float)i/1000.0), plotLeft-58, y);
+ line (plotLeft-55, y, plotLeft-50, y);
+ }
+ else if (i % currentMinorTickInterval == 0) {
+ line (plotLeft-53, y, plotLeft-50, y);
+ }
+
+ }
+
+ textSize(legendTitleSize);
+ textAlign(LEFT);
+ fill(stallGuardColor);
+ text("Stall Guard Reading", plotLeft - 30, plotTop - 10);
+ textSize(legendTextSize);
+ textAlign(RIGHT);
+ strokeWeight(1);
+ stroke(stallGuardColor);
+ for (int i=stallGuardMin; i<=stallGuardMax; i++) {
+ float y = map(i, stallGuardMin, stallGuardMax, plotBottom, plotTop);
+ if (i % stallGuardLabelInterval == 0) {
+ if (i==stallGuardMin) {
+ textAlign(RIGHT, BOTTOM);
+ }
+ else if (i==stallGuardMax) {
+ textAlign(RIGHT, TOP);
+ }
+ else {
+ textAlign(RIGHT, CENTER);
+ }
+ text(i, plotLeft-8, y);
+ line (plotLeft-5, y, plotLeft, y);
+ }
+ else if (i % stallGuardMinorTickInterval == 0) {
+ line (plotLeft-3, y, plotLeft, y);
+ }
+ }
+
+ textSize(legendTitleSize);
+ fill(positionColor);
+ textAlign(RIGHT);
+ text("Position", plotRight + 30, plotTop - 10);
+ textSize(legendTextSize);
+ textAlign(LEFT);
+ strokeWeight(1);
+ stroke(positionColor);
+ for (int i=positionMin; i<=positionMax; i++) {
+ float y = map(i, positionMin, positionMax, plotBottom, plotTop);
+ if (i % positionLabelInterval == 0) {
+ if (i==positionMin) {
+ textAlign(LEFT, BOTTOM);
+ }
+ else if (i==stallGuardMax) {
+ textAlign(LEFT, TOP);
+ }
+ else {
+ textAlign(LEFT, CENTER);
+ }
+ text(i, plotRight+8, y);
+ line (plotRight, y, plotRight+5, y);
+ }
+ else if (i % positionMinorTickInterval == 0) {
+ line (plotRight, y, plotRight+3, y);
+ }
+ }
+ //draw the channel status
+ textSize(legendTextSize);
+ textAlign(CENTER);
+ strokeWeight(1);
+ int statusY = height - 20;
+ int channelAX = width/4;
+ int temperatureX = width/2;
+ int channelBX = width/4*3;
+ if (channelAStatus==null) {
+ fill(goodStatusColor);
+ text("Channel A: OK", channelAX, statusY);
+ }
+ else {
+ fill(badStatusColor);
+ text("Channel A: "+channelAStatus, channelAX, statusY);
+ }
+ if (channelBStatus==null) {
+ fill(goodStatusColor);
+ text("Channel B: OK", channelBX, statusY);
+ }
+ else {
+ fill(badStatusColor);
+ text("Channel B: "+channelBStatus, channelBX, statusY);
+ }
+ if (temperatureStatus==null) {
+ fill(goodStatusColor);
+ text("Temperature: OK", temperatureX, statusY);
+ }
+ else {
+ fill(badStatusColor);
+ text("Temperature: "+temperatureStatus, temperatureX, statusY);
+ }
+ }
+}
+void drawDataPoints(DataTable table, int minValue, int maxValue) {
+ int dataCount = table.getSize();
+ for (int i=0; i<dataCount; i++) {
+ int value = table.getEntry(i);
+ float x = map(i, 0, numberOfDataPoints-1, plotLeft+dataPointsWidth, plotRight-dataPointsWidth);
+ float y = map(value, minValue, maxValue, plotBottom-dataPointsWidth, plotTop+dataPointsWidth);
+ point(x, y);
+ }
+}
+
+void drawDataLine(DataTable table, int minValue, int maxValue) {
+ beginShape();
+ int dataCount = table.getSize();
+ for (int i=0; i<dataCount; i++) {
+ int value = table.getEntry(i);
+ float x = map(i, 0, numberOfDataPoints-1, plotLeft+dataPointsWidth, plotRight-dataPointsWidth);
+ float y = map(value, minValue, maxValue, plotBottom-dataPointsWidth, plotTop+dataPointsWidth);
+ vertex(x, y);
+ }
+ endShape();
+}
+
+void drawDataHighLight(DataTable table, int minValue, int maxValue, int distance, color textColor, String name, boolean top) {
+ int dataCount = table.getSize();
+ for (int i=0; i<dataCount; i++) {
+ int value = table.getEntry(i);
+ float x = map(i, 0, numberOfDataPoints-1, plotLeft+dataPointsWidth, plotRight-dataPointsWidth);
+ float y = map(value, minValue, maxValue, plotBottom-dataPointsWidth, plotTop+dataPointsWidth);
+ if (dist(mouseX, mouseY, x, y) < distance) {
+ strokeWeight(highLightWidth);
+ point(x, y);
+ fill(textColor);
+ textSize(10);
+ textAlign(CENTER);
+ if (top) {
+ text(name+": "+value, x, y-8);
+ }
+ else {
+ text(name+": "+value, x, y+8);
+ }
+ }
+ }
+}
+
+void drawCurrentLine(DataTable table) {
+ noFill();
+ beginShape();
+ int dataCount = table.getSize();
+ for (int i=0; i<dataCount; i++) {
+ float value = (table.getEntry(i)+1)/1000.0;
+ float x = map(i, 0, numberOfDataPoints-1, plotLeft+dataPointsWidth, plotRight-dataPointsWidth);
+ float y = map(value, 0.0, maxCurrent, (float)plotBottom-dataPointsWidth, (float)plotTop+dataPointsWidth);
+ vertex(x, y);
+ }
+ endShape();
+}
+
+void drawCurrentHighLight(DataTable table, int distance, color textColor, String name, boolean top) {
+ int dataCount = table.getSize();
+ for (int i=0; i<dataCount; i++) {
+ float value = (table.getEntry(i)+1)/1000.0;
+ float x = map(i, 0, numberOfDataPoints-1, plotLeft+dataPointsWidth, plotRight-dataPointsWidth);
+ float y = map(value, 0.0, maxCurrent, plotBottom-dataPointsWidth, plotTop+dataPointsWidth);
+ if (dist(mouseX, mouseY, x, y) < distance) {
+ strokeWeight(highLightWidth);
+ point(x, y);
+ fill(textColor);
+ textSize(10);
+ textAlign(CENTER);
+ if (top) {
+ text(name+": "+value, x, y-8);
+ }
+ else {
+ text(name+": "+value, x, y+8);
+ }
+ }
+ }
+}
+
+void addStallGuardReading(int value) {
+ stallGuardTable.addData(value);
+}
+
+void addPositionReading(int value) {
+ positionTable.addData(value);
+}
+
+void addCurrentReading(int value) {
+ currentTable.addData(value);
+}
+