diff --git a/app/data/cfg.json b/app/data/cfg.json index 42a3d9d..f79e162 100644 --- a/app/data/cfg.json +++ b/app/data/cfg.json @@ -1,5 +1,5 @@ { - "version": "1.8.122", + "version": "1.8.123", "ext_port": 1111, "profiles": { "mcopy": { diff --git a/app/package-lock.json b/app/package-lock.json index 3a59e9c..38bd0c4 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -1,6 +1,6 @@ { "name": "mcopy-app", - "version": "1.8.122", + "version": "1.8.123", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/app/package.json b/app/package.json index 765edd9..b95bf83 100644 --- a/app/package.json +++ b/app/package.json @@ -1,6 +1,6 @@ { "name": "mcopy-app", - "version": "1.8.122", + "version": "1.8.123", "description": "GUI for the mcopy small gauge film optical printer platform", "main": "main.js", "scripts": { diff --git a/data/cfg.json b/data/cfg.json index 3bba373..9e09799 100644 --- a/data/cfg.json +++ b/data/cfg.json @@ -1,5 +1,5 @@ { - "version": "1.8.122", + "version": "1.8.123", "ext_port": 1111, "profiles": { "mcopy": { diff --git a/ino/lib/EndstopCameraShield/EndstopCameraShield.cpp b/ino/lib/EndstopCameraShield/EndstopCameraShield.cpp index 96ad745..21e9c5d 100644 --- a/ino/lib/EndstopCameraShield/EndstopCameraShield.cpp +++ b/ino/lib/EndstopCameraShield/EndstopCameraShield.cpp @@ -129,7 +129,7 @@ uint32_t EndstopCameraShield::toOpen() { return i; } -uint32_t EndstopCameraShield::toClosed() { +uint32_t EndstopCameraShield::toClose() { bool primed = false; bool running = true; uint32_t i = 0; diff --git a/ino/lib/EndstopCameraShield/EndstopCameraShield.h b/ino/lib/EndstopCameraShield/EndstopCameraShield.h index c24d828..ce69762 100644 --- a/ino/lib/EndstopCameraShield/EndstopCameraShield.h +++ b/ino/lib/EndstopCameraShield/EndstopCameraShield.h @@ -59,7 +59,7 @@ class EndstopCameraShield { void loop(); uint32_t frame(); uint32_t toOpen(); - uint32_t toClosed(); + uint32_t toClose(); void setDirection(bool direction); bool isOpened(); bool isClosed(); diff --git a/ino/mcopy_mitchell_camera/EndstopCameraShield.cpp b/ino/mcopy_mitchell_camera/EndstopCameraShield.cpp index 96ad745..21e9c5d 100644 --- a/ino/mcopy_mitchell_camera/EndstopCameraShield.cpp +++ b/ino/mcopy_mitchell_camera/EndstopCameraShield.cpp @@ -129,7 +129,7 @@ uint32_t EndstopCameraShield::toOpen() { return i; } -uint32_t EndstopCameraShield::toClosed() { +uint32_t EndstopCameraShield::toClose() { bool primed = false; bool running = true; uint32_t i = 0; diff --git a/ino/mcopy_mitchell_camera/EndstopCameraShield.h b/ino/mcopy_mitchell_camera/EndstopCameraShield.h index c24d828..ce69762 100644 --- a/ino/mcopy_mitchell_camera/EndstopCameraShield.h +++ b/ino/mcopy_mitchell_camera/EndstopCameraShield.h @@ -59,7 +59,7 @@ class EndstopCameraShield { void loop(); uint32_t frame(); uint32_t toOpen(); - uint32_t toClosed(); + uint32_t toClose(); void setDirection(bool direction); bool isOpened(); bool isClosed(); diff --git a/ino/mcopy_mitchell_camera/mcopy_mitchell_camera.ino b/ino/mcopy_mitchell_camera/mcopy_mitchell_camera.ino new file mode 100644 index 0000000..345ddc1 --- /dev/null +++ b/ino/mcopy_mitchell_camera/mcopy_mitchell_camera.ino @@ -0,0 +1,159 @@ +#include "EndstopCameraShield.h" +#include "McopySerial.h" + +const bool DEBUG = false; + +//const uint8_t enableButtonPin = 9; //enable feature +const uint8_t directionSwitchPin = 10; +const uint8_t cameraButtonPin = 11; +const uint8_t openCloseSwitchPin = 12; +const uint8_t LEDPin = 13; + +const uint32_t usPulse = 300; +const uint8_t microsteps = 2; +volatile char cmdChar = 'z'; +volatile long now; + +volatile long exposureAvg = -1; //pre-fill +volatile String exposureString; +volatile long exposureTarget = -1; + +volatile bool direction = true; + +volatile bool directionSwitch = true; + +EndstopCameraShield cam(usPulse, microsteps); +McopySerial mc; + +void setup () { + pinMode(directionSwitchPin, INPUT_PULLUP); + pinMode(openCloseSwitchPin, INPUT_PULLUP); + pinMode(cameraButtonPin, INPUT_PULLUP); + + mc.begin(mc.CAMERA_IDENTIFIER); + mc.debug(DEBUG); + cam.setup(); + + if (cam.isOpened()) { + mc.log("Camera is OPENED"); + } else if (cam.isClosed()) { + mc.log("Camera is CLOSED"); + } else { + mc.log("Camera is in UNKNOWN state"); + } +} + +void loop () { + now = millis(); + cmdChar = mc.loop(); + cmd(cmdChar); + cam.loop(); +} + +void cmd (char val) { + if (val == mc.CAMERA_FORWARD) { + camera_direction(true); + } else if (val == mc.CAMERA_BACKWARD) { + camera_direction(false); + } else if (val == mc.CAMERA) { + camera(); + } else if (val == mc.CAMERA_OPEN) { + camera_open(); + } else if (val == mc.CAMERA_CLOSE) { + camera_close(); + } else if (val == mc.CAMERA_EXPOSURE) { + exposure(); + } else if (val == mc.STATE) { + state(); + } +} + +void exposure () { + exposureString = mc.getString(); + parseExposureString(); + exposureAvg = exposureTarget; + mc.confirm(mc.CAMERA_EXPOSURE); +} + +void parseExposureString () { + exposureTarget = exposureString.toInt(); +} + +void camera_direction (boolean state) { + direction = state; + cam.setDirection(direction); + if (state) { + mc.confirm(mc.CAMERA_FORWARD); + mc.log("camera_direction(true)"); + } else { + mc.confirm(mc.CAMERA_BACKWARD); + mc.log("camera_direction(false)"); + } +} + +void camera () { + long start = millis(); + long half; + long pause; + long ms; + + if (exposureTarget > -1) { + half = exposureAvg / 2; //assume a 180 shutter + pause = exposureTarget - half; + if (pause < exposureAvg) { + cam.frame(); + } else { + cam.toOpen(); + delay(pause); + cam.toClose(); + } + } else{ + cam.frame(); + } + ms = millis() - start; + if (exposureTarget < 0) { + updateAvg(ms); + } + mc.log("camera()"); + mc.log(String(ms) + "ms"); + mc.confirm(mc.CAMERA); +} + +void camera_open () { + long start = millis(); + long ms; + cam.toOpen(); + ms = millis() - start; + mc.log("camera_open()"); + mc.log(String(ms) + "ms"); + mc.confirm(mc.CAMERA_OPEN); +} + +void camera_close () { + long start = millis(); + long ms; + cam.toClose(); + ms = millis() - start; + mc.log("camera_close()"); + mc.log(String(ms) + "ms"); + mc.confirm(mc.CAMERA_CLOSE); +} + +void state () { + String stateString = String(mc.STATE); + stateString += String(mc.CAMERA_EXPOSURE); + if (exposureTarget > -1) { + stateString += String(exposureTarget); + } else { + stateString += String(exposureAvg); + } + stateString += String(mc.STATE); + mc.sendString(stateString); +} + +void updateAvg (long value) { + exposureAvg = round((exposureAvg + value) / 2); +} +/** + * Button logic + **/ \ No newline at end of file diff --git a/ino/mcopy_mitchell_camera/mcopy_oxberry_camera.ino b/ino/mcopy_mitchell_camera/mcopy_oxberry_camera.ino deleted file mode 100644 index 8f56ce2..0000000 --- a/ino/mcopy_mitchell_camera/mcopy_oxberry_camera.ino +++ /dev/null @@ -1,10 +0,0 @@ -#include "EndstopCameraShield.h" -#include "McopySerial.h" - -void setup () { - -} - -void loop () { - -} \ No newline at end of file diff --git a/ino/mcopy_oxberry_camera/EndstopCameraShield.cpp b/ino/mcopy_oxberry_camera/EndstopCameraShield.cpp index 96ad745..21e9c5d 100644 --- a/ino/mcopy_oxberry_camera/EndstopCameraShield.cpp +++ b/ino/mcopy_oxberry_camera/EndstopCameraShield.cpp @@ -129,7 +129,7 @@ uint32_t EndstopCameraShield::toOpen() { return i; } -uint32_t EndstopCameraShield::toClosed() { +uint32_t EndstopCameraShield::toClose() { bool primed = false; bool running = true; uint32_t i = 0; diff --git a/ino/mcopy_oxberry_camera/EndstopCameraShield.h b/ino/mcopy_oxberry_camera/EndstopCameraShield.h index c24d828..ce69762 100644 --- a/ino/mcopy_oxberry_camera/EndstopCameraShield.h +++ b/ino/mcopy_oxberry_camera/EndstopCameraShield.h @@ -59,7 +59,7 @@ class EndstopCameraShield { void loop(); uint32_t frame(); uint32_t toOpen(); - uint32_t toClosed(); + uint32_t toClose(); void setDirection(bool direction); bool isOpened(); bool isClosed(); diff --git a/ino/mcopy_oxberry_camera/mcopy_oxberry_camera.ino b/ino/mcopy_oxberry_camera/mcopy_oxberry_camera.ino index a4ba366..a7070bc 100644 --- a/ino/mcopy_oxberry_camera/mcopy_oxberry_camera.ino +++ b/ino/mcopy_oxberry_camera/mcopy_oxberry_camera.ino @@ -2,11 +2,6 @@ #include "McopySerial.h" const bool DEBUG = false; - -const uint8_t enableButtonPin = 9; -const uint8_t enableButtonPin = 10; -const uint8_t enableButtonPin = 11; -const uint8_t enableButtonPin = 12; const uint8_t LEDPin = 13; const uint32_t usPulse = 300; @@ -19,7 +14,6 @@ volatile String exposureString; volatile long exposureTarget = -1; volatile bool direction = true; -volatile bool directionSwitch = true; EndstopCameraShield cam(usPulse, microsteps); McopySerial mc; @@ -29,9 +23,13 @@ void setup () { mc.debug(DEBUG); cam.setup(); if (cam.isOpened()) { - mc.log("Camera is OPENED"); + mc.log("Camera is OPENED, closing..."); + cam.toClose(); } else if (cam.isClosed()) { mc.log("Camera is CLOSED"); + } else { + mc.log("Camera is in UNKNOWN state, closing..."); + cam.toClose(); } } @@ -49,6 +47,10 @@ void cmd (char val) { camera_direction(false); } else if (val == mc.CAMERA) { camera(); + } else if (val == mc.CAMERA_OPEN) { + camera_open(); + } else if (val == mc.CAMERA_CLOSE) { + camera_close(); } else if (val == mc.CAMERA_EXPOSURE) { exposure(); } else if (val == mc.STATE) { @@ -59,7 +61,7 @@ void cmd (char val) { void exposure () { exposureString = mc.getString(); parseExposureString(); - cameraFrame = exposureTarget; + exposureAvg = exposureTarget; mc.confirm(mc.CAMERA_EXPOSURE); } @@ -80,7 +82,11 @@ void camera_direction (boolean state) { } void camera () { - long start, half, pause; + long start = millis(); + long half; + long pause; + long ms; + if (exposureTarget > -1) { half = exposureAvg / 2; //assume a 180 shutter pause = exposureTarget - half; @@ -91,15 +97,38 @@ void camera () { delay(pause); cam.toClose(); } - } else{ - millis(); cam.frame(); - updateAvg(millis() - start); } + ms = millis() - start; + if (exposureTarget < 0) { + updateAvg(ms); + } + mc.log("camera()"); + mc.log(String(ms) + "ms"); mc.confirm(mc.CAMERA); } +void camera_open () { + long start = millis(); + long ms; + cam.toOpen(); + ms = millis() - start; + mc.log("camera_open()"); + mc.log(String(ms) + "ms"); + mc.confirm(mc.CAMERA_OPEN); +} + +void camera_close () { + long start = millis(); + long ms; + cam.toClose(); + ms = millis() - start; + mc.log("camera_close()"); + mc.log(String(ms) + "ms"); + mc.confirm(mc.CAMERA_CLOSE); +} + void state () { String stateString = String(mc.STATE); stateString += String(mc.CAMERA_EXPOSURE); @@ -114,8 +143,4 @@ void state () { void updateAvg (long value) { exposureAvg = round((exposureAvg + value) / 2); -} - -/** - * Button logic - **/ \ No newline at end of file +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 2398c80..c5d5baa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "mcopy", - "version": "1.8.122", + "version": "1.8.123", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "mcopy", - "version": "1.8.122", + "version": "1.8.123", "license": "MIT", "dependencies": { "alert": "file:app/lib/alert", diff --git a/package.json b/package.json index deedbc4..1024027 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mcopy", - "version": "1.8.122", + "version": "1.8.123", "description": "Small gauge film optical printer platform", "main": "build.js", "directories": { diff --git a/processing/mcopy/cfg.json b/processing/mcopy/cfg.json index 42a3d9d..f79e162 100644 --- a/processing/mcopy/cfg.json +++ b/processing/mcopy/cfg.json @@ -1,5 +1,5 @@ { - "version": "1.8.122", + "version": "1.8.123", "ext_port": 1111, "profiles": { "mcopy": {