Work on oxberry camera firmware. Basics are there. Will add button features to mitchell.

This commit is contained in:
Matt McWilliams 2024-07-05 23:56:45 -04:00
parent 84fe1b71be
commit c0e7422920
18 changed files with 706 additions and 59 deletions

View File

@ -1,5 +1,5 @@
{
"version": "1.8.120",
"version": "1.8.121",
"ext_port": 1111,
"profiles": {
"mcopy": {

2
app/package-lock.json generated
View File

@ -1,6 +1,6 @@
{
"name": "mcopy-app",
"version": "1.8.120",
"version": "1.8.121",
"lockfileVersion": 2,
"requires": true,
"packages": {

View File

@ -1,6 +1,6 @@
{
"name": "mcopy-app",
"version": "1.8.120",
"version": "1.8.121",
"description": "GUI for the mcopy small gauge film optical printer platform",
"main": "main.js",
"scripts": {

View File

@ -1,5 +1,5 @@
{
"version": "1.8.120",
"version": "1.8.121",
"ext_port": 1111,
"profiles": {
"mcopy": {

View File

@ -1,7 +1,12 @@
#include "EndstopCameraShield.h"
EndstopCameraShield::EndstopCameraShield (uint32_t usPulse, uint8_t microsteps) : motorUsPulse(usPulse), motorMicrosteps(microsteps), motor(motorEnablePin, motorDirectionPin, motorPulsePin, motorUsPulse, motorMicrosteps) {
volatile bool EndstopCameraShield::_direction = true; //true = forward, false = backward
volatile bool EndstopCameraShield::_enabled = false;
volatile bool EndstopCameraShield::_isClosed = false;
volatile bool EndstopCameraShield::_isOpened = false;
EndstopCameraShield::EndstopCameraShield (uint32_t usPulse, uint8_t microsteps) : _motorUsPulse(usPulse), _motorMicrosteps(microsteps), _motor(_motorEnablePin, _motorDirectionPin, _motorPulsePin, _motorUsPulse, _motorMicrosteps) {
_stepAngle = (double) 360 / ((double) microsteps * (double) 200);
}
void EndstopCameraShield::loop () {
@ -9,7 +14,154 @@ void EndstopCameraShield::loop () {
}
void EndstopCameraShield::setup () {
motor.setup();
pinMode(emitterOpenPin, OUTPUT);
pinMode(emitterClosePin, OUTPUT);
_motor.setup();
pinMode(_emitterOpenPin, OUTPUT);
pinMode(_emitterClosePin, OUTPUT);
_checkState();
_enableMotor();
}
void EndstopCameraShield::_enableCloseInterrupt() {
attachInterrupt(digitalPinToInterrupt(_receiverClosePin), EndstopCameraShield::_handleCloseInterrupt, FALLING);
}
void EndstopCameraShield::_enableOpenInterrupt() {
attachInterrupt(digitalPinToInterrupt(_receiverOpenPin), EndstopCameraShield::_handleOpenInterrupt, FALLING);
}
void EndstopCameraShield::_enableCloseEmitter() {
digitalWrite(_emitterClosePin, HIGH);
}
void EndstopCameraShield::_enableOpenEmitter() {
digitalWrite(_emitterOpenPin, HIGH);
}
void EndstopCameraShield::_enableMotor() {
_enabled = true;
_motor.enable();
}
void EndstopCameraShield::_disableCloseInterrupt() {
detachInterrupt(digitalPinToInterrupt(_receiverClosePin));
}
void EndstopCameraShield::_disableOpenInterrupt() {
detachInterrupt(digitalPinToInterrupt(_receiverOpenPin));
}
void EndstopCameraShield::_disableCloseEmitter() {
digitalWrite(_emitterClosePin, LOW);
}
void EndstopCameraShield::_disableOpenEmitter() {
digitalWrite(_emitterOpenPin, LOW);
}
void EndstopCameraShield::_disableMotor() {
_enabled = false;
_motor.release();
}
void EndstopCameraShield::_handleCloseInterrupt() {
_isClosed = true;
}
void EndstopCameraShield::_handleOpenInterrupt() {
_isOpened = true;
}
void EndstopCameraShield::_checkState() {
_enableCloseEmitter();
_enableOpenEmitter();
if (digitalRead(_receiverClosePin) == LOW) {
_isClosed = true;
} else if (digitalRead(_receiverOpenPin) == LOW) {
_isOpened = true;
}
_disableCloseEmitter();
_disableOpenEmitter();
}
uint32_t EndstopCameraShield::frame() {
bool primed = false;
bool running = true;
uint32_t i = 0;
_isClosed = false;
_enableMotor();
while (running) {
if (!primed && (double) i * _stepAngle > _ledAngle) {
_enableCloseEmitter();
_enableCloseInterrupt();
primed = true;
}
if (primed && _isClosed) {
running = false;
}
i++;
}
_disableCloseInterrupt();
_disableCloseEmitter();
return i;
}
uint32_t EndstopCameraShield::toOpen() {
bool primed = false;
bool running = true;
uint32_t i = 0;
_isOpened = false;
_enableMotor();
while (running) {
if (!primed && (double) i * _stepAngle > _ledAngle) {
_enableOpenEmitter();
_enableOpenInterrupt();
primed = true;
}
if (primed && _isOpened) {
running = false;
}
i++;
}
_disableOpenInterrupt();
_disableOpenEmitter();
return i;
}
uint32_t EndstopCameraShield::toClosed() {
bool primed = false;
bool running = true;
uint32_t i = 0;
_isClosed = false;
_enableMotor();
while (running) {
if (!primed && (double) i * _stepAngle > _ledAngle) {
_enableCloseEmitter();
_enableCloseInterrupt();
primed = true;
}
if (primed && _isClosed) {
running = false;
}
i++;
}
_disableCloseInterrupt();
_disableCloseEmitter();
return i;
}
void EndstopCameraShield::setDirection(bool direction) {
if (direction != _direction) {
_direction = direction;
_motor.setDirection(_direction);
}
}
bool EndstopCameraShield::isOpened() {
return _isOpened;
}
bool EndstopCameraShield::isClosed() {
return _isClosed;
}

View File

@ -14,19 +14,42 @@
class EndstopCameraShield {
private:
const uint8_t receiverClosePin = 2;
const uint8_t receiverOpenPin = 3;
const uint8_t emitterOpenPin = 4;
const uint8_t emitterClosePin = 5;
const uint8_t _receiverClosePin = 2;
const uint8_t _receiverOpenPin = 3;
const uint8_t _emitterOpenPin = 4;
const uint8_t _emitterClosePin = 5;
const uint8_t motorEnablePin = 6;
const uint8_t motorDirectionPin = 7;
const uint8_t motorPulsePin = 8;
const uint8_t _motorEnablePin = 6;
const uint8_t _motorDirectionPin = 7;
const uint8_t _motorPulsePin = 8;
const double _ledAngle = 7.0;
volatile uint32_t motorUsPulse = 300;
volatile uint8_t motorMicrosteps = 2; //half stepping
volatile uint32_t _motorUsPulse = 300;
volatile uint8_t _motorMicrosteps = 2; //half stepping
volatile double _stepAngle = (double) 360 / ((double) 2 * (double) 200);
TB6600MotorDriver motor;
TB6600MotorDriver _motor;
static volatile bool _direction; //true = forward, false = backward
static volatile bool _enabled;
static volatile bool _isClosed;
static volatile bool _isOpened;
void _checkState();
void _enableCloseInterrupt();
void _enableOpenInterrupt();
void _enableCloseEmitter();
void _enableOpenEmitter();
void _enableMotor();
void _disableCloseInterrupt();
void _disableOpenInterrupt();
void _disableCloseEmitter();
void _disableOpenEmitter();
void _disableMotor();
static void _handleCloseInterrupt();
static void _handleOpenInterrupt();
public:
@ -34,6 +57,12 @@ class EndstopCameraShield {
void setup();
void loop();
uint32_t frame();
uint32_t toOpen();
uint32_t toClosed();
void setDirection(bool direction);
bool isOpened();
bool isClosed();
};
#endif

View File

@ -1,7 +1,12 @@
#include "EndstopCameraShield.h"
EndstopCameraShield::EndstopCameraShield (uint32_t usPulse, uint8_t microsteps) : motorUsPulse(usPulse), motorMicrosteps(microsteps), motor(motorEnablePin, motorDirectionPin, motorPulsePin, motorUsPulse, motorMicrosteps) {
volatile bool EndstopCameraShield::_direction = true; //true = forward, false = backward
volatile bool EndstopCameraShield::_enabled = false;
volatile bool EndstopCameraShield::_isClosed = false;
volatile bool EndstopCameraShield::_isOpened = false;
EndstopCameraShield::EndstopCameraShield (uint32_t usPulse, uint8_t microsteps) : _motorUsPulse(usPulse), _motorMicrosteps(microsteps), _motor(_motorEnablePin, _motorDirectionPin, _motorPulsePin, _motorUsPulse, _motorMicrosteps) {
_stepAngle = (double) 360 / ((double) microsteps * (double) 200);
}
void EndstopCameraShield::loop () {
@ -9,7 +14,154 @@ void EndstopCameraShield::loop () {
}
void EndstopCameraShield::setup () {
motor.setup();
pinMode(emitterOpenPin, OUTPUT);
pinMode(emitterClosePin, OUTPUT);
_motor.setup();
pinMode(_emitterOpenPin, OUTPUT);
pinMode(_emitterClosePin, OUTPUT);
_checkState();
_enableMotor();
}
void EndstopCameraShield::_enableCloseInterrupt() {
attachInterrupt(digitalPinToInterrupt(_receiverClosePin), EndstopCameraShield::_handleCloseInterrupt, FALLING);
}
void EndstopCameraShield::_enableOpenInterrupt() {
attachInterrupt(digitalPinToInterrupt(_receiverOpenPin), EndstopCameraShield::_handleOpenInterrupt, FALLING);
}
void EndstopCameraShield::_enableCloseEmitter() {
digitalWrite(_emitterClosePin, HIGH);
}
void EndstopCameraShield::_enableOpenEmitter() {
digitalWrite(_emitterOpenPin, HIGH);
}
void EndstopCameraShield::_enableMotor() {
_enabled = true;
_motor.enable();
}
void EndstopCameraShield::_disableCloseInterrupt() {
detachInterrupt(digitalPinToInterrupt(_receiverClosePin));
}
void EndstopCameraShield::_disableOpenInterrupt() {
detachInterrupt(digitalPinToInterrupt(_receiverOpenPin));
}
void EndstopCameraShield::_disableCloseEmitter() {
digitalWrite(_emitterClosePin, LOW);
}
void EndstopCameraShield::_disableOpenEmitter() {
digitalWrite(_emitterOpenPin, LOW);
}
void EndstopCameraShield::_disableMotor() {
_enabled = false;
_motor.release();
}
void EndstopCameraShield::_handleCloseInterrupt() {
_isClosed = true;
}
void EndstopCameraShield::_handleOpenInterrupt() {
_isOpened = true;
}
void EndstopCameraShield::_checkState() {
_enableCloseEmitter();
_enableOpenEmitter();
if (digitalRead(_receiverClosePin) == LOW) {
_isClosed = true;
} else if (digitalRead(_receiverOpenPin) == LOW) {
_isOpened = true;
}
_disableCloseEmitter();
_disableOpenEmitter();
}
uint32_t EndstopCameraShield::frame() {
bool primed = false;
bool running = true;
uint32_t i = 0;
_isClosed = false;
_enableMotor();
while (running) {
if (!primed && (double) i * _stepAngle > _ledAngle) {
_enableCloseEmitter();
_enableCloseInterrupt();
primed = true;
}
if (primed && _isClosed) {
running = false;
}
i++;
}
_disableCloseInterrupt();
_disableCloseEmitter();
return i;
}
uint32_t EndstopCameraShield::toOpen() {
bool primed = false;
bool running = true;
uint32_t i = 0;
_isOpened = false;
_enableMotor();
while (running) {
if (!primed && (double) i * _stepAngle > _ledAngle) {
_enableOpenEmitter();
_enableOpenInterrupt();
primed = true;
}
if (primed && _isOpened) {
running = false;
}
i++;
}
_disableOpenInterrupt();
_disableOpenEmitter();
return i;
}
uint32_t EndstopCameraShield::toClosed() {
bool primed = false;
bool running = true;
uint32_t i = 0;
_isClosed = false;
_enableMotor();
while (running) {
if (!primed && (double) i * _stepAngle > _ledAngle) {
_enableCloseEmitter();
_enableCloseInterrupt();
primed = true;
}
if (primed && _isClosed) {
running = false;
}
i++;
}
_disableCloseInterrupt();
_disableCloseEmitter();
return i;
}
void EndstopCameraShield::setDirection(bool direction) {
if (direction != _direction) {
_direction = direction;
_motor.setDirection(_direction);
}
}
bool EndstopCameraShield::isOpened() {
return _isOpened;
}
bool EndstopCameraShield::isClosed() {
return _isClosed;
}

View File

@ -14,19 +14,42 @@
class EndstopCameraShield {
private:
const uint8_t receiverClosePin = 2;
const uint8_t receiverOpenPin = 3;
const uint8_t emitterOpenPin = 4;
const uint8_t emitterClosePin = 5;
const uint8_t _receiverClosePin = 2;
const uint8_t _receiverOpenPin = 3;
const uint8_t _emitterOpenPin = 4;
const uint8_t _emitterClosePin = 5;
const uint8_t motorEnablePin = 6;
const uint8_t motorDirectionPin = 7;
const uint8_t motorPulsePin = 8;
const uint8_t _motorEnablePin = 6;
const uint8_t _motorDirectionPin = 7;
const uint8_t _motorPulsePin = 8;
const double _ledAngle = 7.0;
volatile uint32_t motorUsPulse = 300;
volatile uint8_t motorMicrosteps = 2; //half stepping
volatile uint32_t _motorUsPulse = 300;
volatile uint8_t _motorMicrosteps = 2; //half stepping
volatile double _stepAngle = (double) 360 / ((double) 2 * (double) 200);
TB6600MotorDriver motor;
TB6600MotorDriver _motor;
static volatile bool _direction; //true = forward, false = backward
static volatile bool _enabled;
static volatile bool _isClosed;
static volatile bool _isOpened;
void _checkState();
void _enableCloseInterrupt();
void _enableOpenInterrupt();
void _enableCloseEmitter();
void _enableOpenEmitter();
void _enableMotor();
void _disableCloseInterrupt();
void _disableOpenInterrupt();
void _disableCloseEmitter();
void _disableOpenEmitter();
void _disableMotor();
static void _handleCloseInterrupt();
static void _handleOpenInterrupt();
public:
@ -34,6 +57,12 @@ class EndstopCameraShield {
void setup();
void loop();
uint32_t frame();
uint32_t toOpen();
uint32_t toClosed();
void setDirection(bool direction);
bool isOpened();
bool isClosed();
};
#endif

View File

@ -23,10 +23,10 @@ void TB6600MotorDriver::setup() {
pinMode(_pulsePin, OUTPUT);
digitalWrite(_directionPin, LOW);
digitalWrite(_enablePin, HIGH);
digitalWrite(_enablePin, _enabled ? HIGH : LOW);
}
void TB6600MotorDriver::setDirection(uint8_t direction) {
void TB6600MotorDriver::setDirection(bool direction) {
if (direction != _direction) {
_direction = direction;
_setDirection();

View File

@ -35,10 +35,9 @@ class TB6600MotorDriver {
TB6600MotorDriver();
TB6600MotorDriver(uint8_t enablePin, uint8_t directionPin, uint8_t pulsePin, uint32_t usPulse, uint8_t microsteps);
void setup();
void setDirection(uint8_t direction);
void setDirection(bool direction);
void setSpeed(uint16_t rpm);
//full

View File

@ -1,7 +1,12 @@
#include "EndstopCameraShield.h"
EndstopCameraShield::EndstopCameraShield (uint32_t usPulse, uint8_t microsteps) : motorUsPulse(usPulse), motorMicrosteps(microsteps), motor(motorEnablePin, motorDirectionPin, motorPulsePin, motorUsPulse, motorMicrosteps) {
volatile bool EndstopCameraShield::_direction = true; //true = forward, false = backward
volatile bool EndstopCameraShield::_enabled = false;
volatile bool EndstopCameraShield::_isClosed = false;
volatile bool EndstopCameraShield::_isOpened = false;
EndstopCameraShield::EndstopCameraShield (uint32_t usPulse, uint8_t microsteps) : _motorUsPulse(usPulse), _motorMicrosteps(microsteps), _motor(_motorEnablePin, _motorDirectionPin, _motorPulsePin, _motorUsPulse, _motorMicrosteps) {
_stepAngle = (double) 360 / ((double) microsteps * (double) 200);
}
void EndstopCameraShield::loop () {
@ -9,7 +14,154 @@ void EndstopCameraShield::loop () {
}
void EndstopCameraShield::setup () {
motor.setup();
pinMode(emitterOpenPin, OUTPUT);
pinMode(emitterClosePin, OUTPUT);
_motor.setup();
pinMode(_emitterOpenPin, OUTPUT);
pinMode(_emitterClosePin, OUTPUT);
_checkState();
_enableMotor();
}
void EndstopCameraShield::_enableCloseInterrupt() {
attachInterrupt(digitalPinToInterrupt(_receiverClosePin), EndstopCameraShield::_handleCloseInterrupt, FALLING);
}
void EndstopCameraShield::_enableOpenInterrupt() {
attachInterrupt(digitalPinToInterrupt(_receiverOpenPin), EndstopCameraShield::_handleOpenInterrupt, FALLING);
}
void EndstopCameraShield::_enableCloseEmitter() {
digitalWrite(_emitterClosePin, HIGH);
}
void EndstopCameraShield::_enableOpenEmitter() {
digitalWrite(_emitterOpenPin, HIGH);
}
void EndstopCameraShield::_enableMotor() {
_enabled = true;
_motor.enable();
}
void EndstopCameraShield::_disableCloseInterrupt() {
detachInterrupt(digitalPinToInterrupt(_receiverClosePin));
}
void EndstopCameraShield::_disableOpenInterrupt() {
detachInterrupt(digitalPinToInterrupt(_receiverOpenPin));
}
void EndstopCameraShield::_disableCloseEmitter() {
digitalWrite(_emitterClosePin, LOW);
}
void EndstopCameraShield::_disableOpenEmitter() {
digitalWrite(_emitterOpenPin, LOW);
}
void EndstopCameraShield::_disableMotor() {
_enabled = false;
_motor.release();
}
void EndstopCameraShield::_handleCloseInterrupt() {
_isClosed = true;
}
void EndstopCameraShield::_handleOpenInterrupt() {
_isOpened = true;
}
void EndstopCameraShield::_checkState() {
_enableCloseEmitter();
_enableOpenEmitter();
if (digitalRead(_receiverClosePin) == LOW) {
_isClosed = true;
} else if (digitalRead(_receiverOpenPin) == LOW) {
_isOpened = true;
}
_disableCloseEmitter();
_disableOpenEmitter();
}
uint32_t EndstopCameraShield::frame() {
bool primed = false;
bool running = true;
uint32_t i = 0;
_isClosed = false;
_enableMotor();
while (running) {
if (!primed && (double) i * _stepAngle > _ledAngle) {
_enableCloseEmitter();
_enableCloseInterrupt();
primed = true;
}
if (primed && _isClosed) {
running = false;
}
i++;
}
_disableCloseInterrupt();
_disableCloseEmitter();
return i;
}
uint32_t EndstopCameraShield::toOpen() {
bool primed = false;
bool running = true;
uint32_t i = 0;
_isOpened = false;
_enableMotor();
while (running) {
if (!primed && (double) i * _stepAngle > _ledAngle) {
_enableOpenEmitter();
_enableOpenInterrupt();
primed = true;
}
if (primed && _isOpened) {
running = false;
}
i++;
}
_disableOpenInterrupt();
_disableOpenEmitter();
return i;
}
uint32_t EndstopCameraShield::toClosed() {
bool primed = false;
bool running = true;
uint32_t i = 0;
_isClosed = false;
_enableMotor();
while (running) {
if (!primed && (double) i * _stepAngle > _ledAngle) {
_enableCloseEmitter();
_enableCloseInterrupt();
primed = true;
}
if (primed && _isClosed) {
running = false;
}
i++;
}
_disableCloseInterrupt();
_disableCloseEmitter();
return i;
}
void EndstopCameraShield::setDirection(bool direction) {
if (direction != _direction) {
_direction = direction;
_motor.setDirection(_direction);
}
}
bool EndstopCameraShield::isOpened() {
return _isOpened;
}
bool EndstopCameraShield::isClosed() {
return _isClosed;
}

View File

@ -14,19 +14,42 @@
class EndstopCameraShield {
private:
const uint8_t receiverClosePin = 2;
const uint8_t receiverOpenPin = 3;
const uint8_t emitterOpenPin = 4;
const uint8_t emitterClosePin = 5;
const uint8_t _receiverClosePin = 2;
const uint8_t _receiverOpenPin = 3;
const uint8_t _emitterOpenPin = 4;
const uint8_t _emitterClosePin = 5;
const uint8_t motorEnablePin = 6;
const uint8_t motorDirectionPin = 7;
const uint8_t motorPulsePin = 8;
const uint8_t _motorEnablePin = 6;
const uint8_t _motorDirectionPin = 7;
const uint8_t _motorPulsePin = 8;
const double _ledAngle = 7.0;
volatile uint32_t motorUsPulse = 300;
volatile uint8_t motorMicrosteps = 2; //half stepping
volatile uint32_t _motorUsPulse = 300;
volatile uint8_t _motorMicrosteps = 2; //half stepping
volatile double _stepAngle = (double) 360 / ((double) 2 * (double) 200);
TB6600MotorDriver motor;
TB6600MotorDriver _motor;
static volatile bool _direction; //true = forward, false = backward
static volatile bool _enabled;
static volatile bool _isClosed;
static volatile bool _isOpened;
void _checkState();
void _enableCloseInterrupt();
void _enableOpenInterrupt();
void _enableCloseEmitter();
void _enableOpenEmitter();
void _enableMotor();
void _disableCloseInterrupt();
void _disableOpenInterrupt();
void _disableCloseEmitter();
void _disableOpenEmitter();
void _disableMotor();
static void _handleCloseInterrupt();
static void _handleOpenInterrupt();
public:
@ -34,6 +57,12 @@ class EndstopCameraShield {
void setup();
void loop();
uint32_t frame();
uint32_t toOpen();
uint32_t toClosed();
void setDirection(bool direction);
bool isOpened();
bool isClosed();
};
#endif

View File

@ -23,10 +23,10 @@ void TB6600MotorDriver::setup() {
pinMode(_pulsePin, OUTPUT);
digitalWrite(_directionPin, LOW);
digitalWrite(_enablePin, HIGH);
digitalWrite(_enablePin, _enabled ? HIGH : LOW);
}
void TB6600MotorDriver::setDirection(uint8_t direction) {
void TB6600MotorDriver::setDirection(bool direction) {
if (direction != _direction) {
_direction = direction;
_setDirection();

View File

@ -35,10 +35,9 @@ class TB6600MotorDriver {
TB6600MotorDriver();
TB6600MotorDriver(uint8_t enablePin, uint8_t directionPin, uint8_t pulsePin, uint32_t usPulse, uint8_t microsteps);
void setup();
void setDirection(uint8_t direction);
void setDirection(bool direction);
void setSpeed(uint16_t rpm);
//full

View File

@ -1,15 +1,121 @@
#include "EndstopCameraShield.h"
#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;
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 () {
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");
}
}
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_EXPOSURE) {
exposure();
} else if (val == mc.STATE) {
state();
}
}
void exposure () {
exposureString = mc.getString();
parseExposureString();
cameraFrame = 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, half, pause;
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{
millis();
cam.frame();
updateAvg(millis() - start);
}
mc.confirm(mc.CAMERA);
}
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
**/

4
package-lock.json generated
View File

@ -1,12 +1,12 @@
{
"name": "mcopy",
"version": "1.8.120",
"version": "1.8.121",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "mcopy",
"version": "1.8.120",
"version": "1.8.121",
"license": "MIT",
"dependencies": {
"alert": "file:app/lib/alert",

View File

@ -1,6 +1,6 @@
{
"name": "mcopy",
"version": "1.8.120",
"version": "1.8.121",
"description": "Small gauge film optical printer platform",
"main": "build.js",
"directories": {

View File

@ -1,5 +1,5 @@
{
"version": "1.8.120",
"version": "1.8.121",
"ext_port": 1111,
"profiles": {
"mcopy": {