From c3d2943dcc7047136a0d864468d415f9fdab7451 Mon Sep 17 00:00:00 2001 From: mattmcw Date: Tue, 30 Jul 2024 20:00:09 -0400 Subject: [PATCH] All updates to EndstopCameraShield library for Oxberry and Mitchell cameras (now working and tested). --- app/data/cfg.json | 2 +- app/package-lock.json | 2 +- app/package.json | 2 +- data/cfg.json | 2 +- .../EndstopCameraShield.cpp | 72 ++++++++++++++++--- .../EndstopCameraShield/EndstopCameraShield.h | 7 +- .../EndstopCameraShield.cpp | 72 ++++++++++++++++--- .../EndstopCameraShield.h | 7 +- .../EndstopCameraShield.cpp | 72 ++++++++++++++++--- .../EndstopCameraShield.h | 7 +- .../mcopy_oxberry_camera.ino | 3 + package-lock.json | 4 +- package.json | 2 +- processing/mcopy/cfg.json | 2 +- 14 files changed, 218 insertions(+), 38 deletions(-) diff --git a/app/data/cfg.json b/app/data/cfg.json index 9e09799..2d5a81e 100644 --- a/app/data/cfg.json +++ b/app/data/cfg.json @@ -1,5 +1,5 @@ { - "version": "1.8.123", + "version": "1.8.124", "ext_port": 1111, "profiles": { "mcopy": { diff --git a/app/package-lock.json b/app/package-lock.json index 38bd0c4..d38c480 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -1,6 +1,6 @@ { "name": "mcopy-app", - "version": "1.8.123", + "version": "1.8.124", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/app/package.json b/app/package.json index b95bf83..904eb12 100644 --- a/app/package.json +++ b/app/package.json @@ -1,6 +1,6 @@ { "name": "mcopy-app", - "version": "1.8.123", + "version": "1.8.124", "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 9e09799..2d5a81e 100644 --- a/data/cfg.json +++ b/data/cfg.json @@ -1,5 +1,5 @@ { - "version": "1.8.123", + "version": "1.8.124", "ext_port": 1111, "profiles": { "mcopy": { diff --git a/ino/lib/EndstopCameraShield/EndstopCameraShield.cpp b/ino/lib/EndstopCameraShield/EndstopCameraShield.cpp index 21e9c5d..a2b16fa 100644 --- a/ino/lib/EndstopCameraShield/EndstopCameraShield.cpp +++ b/ino/lib/EndstopCameraShield/EndstopCameraShield.cpp @@ -20,6 +20,7 @@ void EndstopCameraShield::setup () { _checkState(); _enableMotor(); + Serial.println(_minSteps); } void EndstopCameraShield::_enableCloseInterrupt() { @@ -75,6 +76,7 @@ void EndstopCameraShield::_handleOpenInterrupt() { void EndstopCameraShield::_checkState() { _enableCloseEmitter(); _enableOpenEmitter(); + delay(3); if (digitalRead(_receiverClosePin) == LOW) { _isClosed = true; } else if (digitalRead(_receiverOpenPin) == LOW) { @@ -84,6 +86,22 @@ void EndstopCameraShield::_checkState() { _disableOpenEmitter(); } +void EndstopCameraShield::_checkClose() { + if (digitalRead(_receiverClosePin) == LOW) { + _isClosed = true; + } else { + _isClosed = false; + } +} + +void EndstopCameraShield::_checkOpen() { + if (digitalRead(_receiverOpenPin) == LOW) { + _isOpened = true; + } else { + _isOpened = false; + } +} + uint32_t EndstopCameraShield::frame() { bool primed = false; bool running = true; @@ -92,17 +110,21 @@ uint32_t EndstopCameraShield::frame() { _enableMotor(); while (running) { - if (!primed && (double) i * _stepAngle > _ledAngle) { + if (!primed && i > _minSteps) { _enableCloseEmitter(); - _enableCloseInterrupt(); + _enableOpenEmitter(); + //_enableCloseInterrupt(); primed = true; } + _checkClose(); if (primed && _isClosed) { running = false; + break; } + _motor.step(); i++; } - _disableCloseInterrupt(); + //_disableCloseInterrupt(); _disableCloseEmitter(); return i; } @@ -114,17 +136,21 @@ uint32_t EndstopCameraShield::toOpen() { _isOpened = false; _enableMotor(); while (running) { - if (!primed && (double) i * _stepAngle > _ledAngle) { + if (!primed && i > _minSteps) { _enableOpenEmitter(); - _enableOpenInterrupt(); + _enableCloseEmitter(); + //_enableOpenInterrupt(); primed = true; } + _checkOpen(); if (primed && _isOpened) { running = false; + break; } + _motor.step(); i++; } - _disableOpenInterrupt(); + //_disableOpenInterrupt(); _disableOpenEmitter(); return i; } @@ -136,18 +162,22 @@ uint32_t EndstopCameraShield::toClose() { _isClosed = false; _enableMotor(); while (running) { - if (!primed && (double) i * _stepAngle > _ledAngle) { + if (!primed && i > _minSteps) { _enableCloseEmitter(); - _enableCloseInterrupt(); + _enableOpenEmitter(); + //_enableCloseInterrupt(); primed = true; } + _checkClose(); if (primed && _isClosed) { running = false; + break; } + _motor.step(); i++; } _disableCloseInterrupt(); - _disableCloseEmitter(); + //_disableCloseEmitter(); return i; } @@ -164,4 +194,28 @@ bool EndstopCameraShield::isOpened() { bool EndstopCameraShield::isClosed() { return _isClosed; +} + +void EndstopCameraShield::test () { + _enableCloseEmitter(); + _enableOpenEmitter(); + delay(1000); + for (uint32_t i = 0; i < _motorMicrosteps * 200; i++) { + _motor.step(); + Serial.print(i); + Serial.print(" "); + if (digitalRead(_receiverOpenPin) == HIGH) { + Serial.print("OPEN _ "); + } else { + Serial.print("OPEN x "); + } + if (digitalRead(_receiverClosePin) == HIGH) { + Serial.print("CLOSE _"); + } else { + Serial.print("CLOSE x"); + } + Serial.println(""); + } + _enableCloseEmitter(); + _enableOpenEmitter(); } \ No newline at end of file diff --git a/ino/lib/EndstopCameraShield/EndstopCameraShield.h b/ino/lib/EndstopCameraShield/EndstopCameraShield.h index ce69762..9377f1a 100644 --- a/ino/lib/EndstopCameraShield/EndstopCameraShield.h +++ b/ino/lib/EndstopCameraShield/EndstopCameraShield.h @@ -24,10 +24,12 @@ class EndstopCameraShield { const uint8_t _motorPulsePin = 8; const double _ledAngle = 7.0; + const uint32_t _motorSteps = 200; volatile uint32_t _motorUsPulse = 300; volatile uint8_t _motorMicrosteps = 2; //half stepping - volatile double _stepAngle = (double) 360 / ((double) 2 * (double) 200); + volatile double _stepAngle = (double) 360 / ((double) _motorMicrosteps * (double) _motorSteps); + volatile uint32_t _minSteps = 31; TB6600MotorDriver _motor; @@ -47,6 +49,8 @@ class EndstopCameraShield { void _disableCloseEmitter(); void _disableOpenEmitter(); void _disableMotor(); + void _checkClose(); + void _checkOpen(); static void _handleCloseInterrupt(); static void _handleOpenInterrupt(); @@ -63,6 +67,7 @@ class EndstopCameraShield { void setDirection(bool direction); bool isOpened(); bool isClosed(); + void test(); }; #endif \ No newline at end of file diff --git a/ino/mcopy_mitchell_camera/EndstopCameraShield.cpp b/ino/mcopy_mitchell_camera/EndstopCameraShield.cpp index 21e9c5d..a2b16fa 100644 --- a/ino/mcopy_mitchell_camera/EndstopCameraShield.cpp +++ b/ino/mcopy_mitchell_camera/EndstopCameraShield.cpp @@ -20,6 +20,7 @@ void EndstopCameraShield::setup () { _checkState(); _enableMotor(); + Serial.println(_minSteps); } void EndstopCameraShield::_enableCloseInterrupt() { @@ -75,6 +76,7 @@ void EndstopCameraShield::_handleOpenInterrupt() { void EndstopCameraShield::_checkState() { _enableCloseEmitter(); _enableOpenEmitter(); + delay(3); if (digitalRead(_receiverClosePin) == LOW) { _isClosed = true; } else if (digitalRead(_receiverOpenPin) == LOW) { @@ -84,6 +86,22 @@ void EndstopCameraShield::_checkState() { _disableOpenEmitter(); } +void EndstopCameraShield::_checkClose() { + if (digitalRead(_receiverClosePin) == LOW) { + _isClosed = true; + } else { + _isClosed = false; + } +} + +void EndstopCameraShield::_checkOpen() { + if (digitalRead(_receiverOpenPin) == LOW) { + _isOpened = true; + } else { + _isOpened = false; + } +} + uint32_t EndstopCameraShield::frame() { bool primed = false; bool running = true; @@ -92,17 +110,21 @@ uint32_t EndstopCameraShield::frame() { _enableMotor(); while (running) { - if (!primed && (double) i * _stepAngle > _ledAngle) { + if (!primed && i > _minSteps) { _enableCloseEmitter(); - _enableCloseInterrupt(); + _enableOpenEmitter(); + //_enableCloseInterrupt(); primed = true; } + _checkClose(); if (primed && _isClosed) { running = false; + break; } + _motor.step(); i++; } - _disableCloseInterrupt(); + //_disableCloseInterrupt(); _disableCloseEmitter(); return i; } @@ -114,17 +136,21 @@ uint32_t EndstopCameraShield::toOpen() { _isOpened = false; _enableMotor(); while (running) { - if (!primed && (double) i * _stepAngle > _ledAngle) { + if (!primed && i > _minSteps) { _enableOpenEmitter(); - _enableOpenInterrupt(); + _enableCloseEmitter(); + //_enableOpenInterrupt(); primed = true; } + _checkOpen(); if (primed && _isOpened) { running = false; + break; } + _motor.step(); i++; } - _disableOpenInterrupt(); + //_disableOpenInterrupt(); _disableOpenEmitter(); return i; } @@ -136,18 +162,22 @@ uint32_t EndstopCameraShield::toClose() { _isClosed = false; _enableMotor(); while (running) { - if (!primed && (double) i * _stepAngle > _ledAngle) { + if (!primed && i > _minSteps) { _enableCloseEmitter(); - _enableCloseInterrupt(); + _enableOpenEmitter(); + //_enableCloseInterrupt(); primed = true; } + _checkClose(); if (primed && _isClosed) { running = false; + break; } + _motor.step(); i++; } _disableCloseInterrupt(); - _disableCloseEmitter(); + //_disableCloseEmitter(); return i; } @@ -164,4 +194,28 @@ bool EndstopCameraShield::isOpened() { bool EndstopCameraShield::isClosed() { return _isClosed; +} + +void EndstopCameraShield::test () { + _enableCloseEmitter(); + _enableOpenEmitter(); + delay(1000); + for (uint32_t i = 0; i < _motorMicrosteps * 200; i++) { + _motor.step(); + Serial.print(i); + Serial.print(" "); + if (digitalRead(_receiverOpenPin) == HIGH) { + Serial.print("OPEN _ "); + } else { + Serial.print("OPEN x "); + } + if (digitalRead(_receiverClosePin) == HIGH) { + Serial.print("CLOSE _"); + } else { + Serial.print("CLOSE x"); + } + Serial.println(""); + } + _enableCloseEmitter(); + _enableOpenEmitter(); } \ No newline at end of file diff --git a/ino/mcopy_mitchell_camera/EndstopCameraShield.h b/ino/mcopy_mitchell_camera/EndstopCameraShield.h index ce69762..9377f1a 100644 --- a/ino/mcopy_mitchell_camera/EndstopCameraShield.h +++ b/ino/mcopy_mitchell_camera/EndstopCameraShield.h @@ -24,10 +24,12 @@ class EndstopCameraShield { const uint8_t _motorPulsePin = 8; const double _ledAngle = 7.0; + const uint32_t _motorSteps = 200; volatile uint32_t _motorUsPulse = 300; volatile uint8_t _motorMicrosteps = 2; //half stepping - volatile double _stepAngle = (double) 360 / ((double) 2 * (double) 200); + volatile double _stepAngle = (double) 360 / ((double) _motorMicrosteps * (double) _motorSteps); + volatile uint32_t _minSteps = 31; TB6600MotorDriver _motor; @@ -47,6 +49,8 @@ class EndstopCameraShield { void _disableCloseEmitter(); void _disableOpenEmitter(); void _disableMotor(); + void _checkClose(); + void _checkOpen(); static void _handleCloseInterrupt(); static void _handleOpenInterrupt(); @@ -63,6 +67,7 @@ class EndstopCameraShield { void setDirection(bool direction); bool isOpened(); bool isClosed(); + void test(); }; #endif \ No newline at end of file diff --git a/ino/mcopy_oxberry_camera/EndstopCameraShield.cpp b/ino/mcopy_oxberry_camera/EndstopCameraShield.cpp index 21e9c5d..a2b16fa 100644 --- a/ino/mcopy_oxberry_camera/EndstopCameraShield.cpp +++ b/ino/mcopy_oxberry_camera/EndstopCameraShield.cpp @@ -20,6 +20,7 @@ void EndstopCameraShield::setup () { _checkState(); _enableMotor(); + Serial.println(_minSteps); } void EndstopCameraShield::_enableCloseInterrupt() { @@ -75,6 +76,7 @@ void EndstopCameraShield::_handleOpenInterrupt() { void EndstopCameraShield::_checkState() { _enableCloseEmitter(); _enableOpenEmitter(); + delay(3); if (digitalRead(_receiverClosePin) == LOW) { _isClosed = true; } else if (digitalRead(_receiverOpenPin) == LOW) { @@ -84,6 +86,22 @@ void EndstopCameraShield::_checkState() { _disableOpenEmitter(); } +void EndstopCameraShield::_checkClose() { + if (digitalRead(_receiverClosePin) == LOW) { + _isClosed = true; + } else { + _isClosed = false; + } +} + +void EndstopCameraShield::_checkOpen() { + if (digitalRead(_receiverOpenPin) == LOW) { + _isOpened = true; + } else { + _isOpened = false; + } +} + uint32_t EndstopCameraShield::frame() { bool primed = false; bool running = true; @@ -92,17 +110,21 @@ uint32_t EndstopCameraShield::frame() { _enableMotor(); while (running) { - if (!primed && (double) i * _stepAngle > _ledAngle) { + if (!primed && i > _minSteps) { _enableCloseEmitter(); - _enableCloseInterrupt(); + _enableOpenEmitter(); + //_enableCloseInterrupt(); primed = true; } + _checkClose(); if (primed && _isClosed) { running = false; + break; } + _motor.step(); i++; } - _disableCloseInterrupt(); + //_disableCloseInterrupt(); _disableCloseEmitter(); return i; } @@ -114,17 +136,21 @@ uint32_t EndstopCameraShield::toOpen() { _isOpened = false; _enableMotor(); while (running) { - if (!primed && (double) i * _stepAngle > _ledAngle) { + if (!primed && i > _minSteps) { _enableOpenEmitter(); - _enableOpenInterrupt(); + _enableCloseEmitter(); + //_enableOpenInterrupt(); primed = true; } + _checkOpen(); if (primed && _isOpened) { running = false; + break; } + _motor.step(); i++; } - _disableOpenInterrupt(); + //_disableOpenInterrupt(); _disableOpenEmitter(); return i; } @@ -136,18 +162,22 @@ uint32_t EndstopCameraShield::toClose() { _isClosed = false; _enableMotor(); while (running) { - if (!primed && (double) i * _stepAngle > _ledAngle) { + if (!primed && i > _minSteps) { _enableCloseEmitter(); - _enableCloseInterrupt(); + _enableOpenEmitter(); + //_enableCloseInterrupt(); primed = true; } + _checkClose(); if (primed && _isClosed) { running = false; + break; } + _motor.step(); i++; } _disableCloseInterrupt(); - _disableCloseEmitter(); + //_disableCloseEmitter(); return i; } @@ -164,4 +194,28 @@ bool EndstopCameraShield::isOpened() { bool EndstopCameraShield::isClosed() { return _isClosed; +} + +void EndstopCameraShield::test () { + _enableCloseEmitter(); + _enableOpenEmitter(); + delay(1000); + for (uint32_t i = 0; i < _motorMicrosteps * 200; i++) { + _motor.step(); + Serial.print(i); + Serial.print(" "); + if (digitalRead(_receiverOpenPin) == HIGH) { + Serial.print("OPEN _ "); + } else { + Serial.print("OPEN x "); + } + if (digitalRead(_receiverClosePin) == HIGH) { + Serial.print("CLOSE _"); + } else { + Serial.print("CLOSE x"); + } + Serial.println(""); + } + _enableCloseEmitter(); + _enableOpenEmitter(); } \ No newline at end of file diff --git a/ino/mcopy_oxberry_camera/EndstopCameraShield.h b/ino/mcopy_oxberry_camera/EndstopCameraShield.h index ce69762..9377f1a 100644 --- a/ino/mcopy_oxberry_camera/EndstopCameraShield.h +++ b/ino/mcopy_oxberry_camera/EndstopCameraShield.h @@ -24,10 +24,12 @@ class EndstopCameraShield { const uint8_t _motorPulsePin = 8; const double _ledAngle = 7.0; + const uint32_t _motorSteps = 200; volatile uint32_t _motorUsPulse = 300; volatile uint8_t _motorMicrosteps = 2; //half stepping - volatile double _stepAngle = (double) 360 / ((double) 2 * (double) 200); + volatile double _stepAngle = (double) 360 / ((double) _motorMicrosteps * (double) _motorSteps); + volatile uint32_t _minSteps = 31; TB6600MotorDriver _motor; @@ -47,6 +49,8 @@ class EndstopCameraShield { void _disableCloseEmitter(); void _disableOpenEmitter(); void _disableMotor(); + void _checkClose(); + void _checkOpen(); static void _handleCloseInterrupt(); static void _handleOpenInterrupt(); @@ -63,6 +67,7 @@ class EndstopCameraShield { void setDirection(bool direction); bool isOpened(); bool isClosed(); + void test(); }; #endif \ No newline at end of file diff --git a/ino/mcopy_oxberry_camera/mcopy_oxberry_camera.ino b/ino/mcopy_oxberry_camera/mcopy_oxberry_camera.ino index a7070bc..8b9177f 100644 --- a/ino/mcopy_oxberry_camera/mcopy_oxberry_camera.ino +++ b/ino/mcopy_oxberry_camera/mcopy_oxberry_camera.ino @@ -25,12 +25,15 @@ void setup () { if (cam.isOpened()) { mc.log("Camera is OPENED, closing..."); cam.toClose(); + mc.log("Camera is CLOSED"); } else if (cam.isClosed()) { mc.log("Camera is CLOSED"); } else { mc.log("Camera is in UNKNOWN state, closing..."); cam.toClose(); + mc.log("Camera is CLOSED"); } + //cam.test(); } void loop () { diff --git a/package-lock.json b/package-lock.json index c5d5baa..e34f722 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "mcopy", - "version": "1.8.123", + "version": "1.8.124", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "mcopy", - "version": "1.8.123", + "version": "1.8.124", "license": "MIT", "dependencies": { "alert": "file:app/lib/alert", diff --git a/package.json b/package.json index 1024027..5ce6af8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mcopy", - "version": "1.8.123", + "version": "1.8.124", "description": "Small gauge film optical printer platform", "main": "build.js", "directories": { diff --git a/processing/mcopy/cfg.json b/processing/mcopy/cfg.json index 9e09799..2d5a81e 100644 --- a/processing/mcopy/cfg.json +++ b/processing/mcopy/cfg.json @@ -1,5 +1,5 @@ { - "version": "1.8.123", + "version": "1.8.124", "ext_port": 1111, "profiles": { "mcopy": {