Implement the button and switch logic for physical interfaces to the camera. In the case that the open/close switch is changed, move to that state, otherwise allow for digital control.
This commit is contained in:
parent
7cecef3de5
commit
0b59f4906f
|
@ -18,9 +18,10 @@ volatile long exposureAvg = 250;
|
||||||
volatile String exposureString;
|
volatile String exposureString;
|
||||||
volatile long exposureTarget = -1;
|
volatile long exposureTarget = -1;
|
||||||
|
|
||||||
volatile bool direction = true;
|
volatile bool direction = true; //true forward, false backward
|
||||||
|
|
||||||
volatile bool directionSwitch = true;
|
volatile bool directionSwitch = true; //true forward, false backward
|
||||||
|
volatile bool openCloseSwitch = true; //true closed, false opened
|
||||||
|
|
||||||
EndstopCameraShield cam(usPulse, microsteps);
|
EndstopCameraShield cam(usPulse, microsteps);
|
||||||
McopySerial mc;
|
McopySerial mc;
|
||||||
|
@ -48,6 +49,7 @@ void loop () {
|
||||||
cmdChar = mc.loop();
|
cmdChar = mc.loop();
|
||||||
cmd(cmdChar);
|
cmd(cmdChar);
|
||||||
cam.loop();
|
cam.loop();
|
||||||
|
buttons();
|
||||||
}
|
}
|
||||||
|
|
||||||
void cmd (char val) {
|
void cmd (char val) {
|
||||||
|
@ -97,6 +99,11 @@ void camera () {
|
||||||
long pause;
|
long pause;
|
||||||
long ms;
|
long ms;
|
||||||
|
|
||||||
|
if (cam.isOpened()) {
|
||||||
|
cam.toClose();
|
||||||
|
start = millis();
|
||||||
|
}
|
||||||
|
|
||||||
if (exposureTarget > -1) {
|
if (exposureTarget > -1) {
|
||||||
half = exposureAvg / 2; //assume a 180 shutter
|
half = exposureAvg / 2; //assume a 180 shutter
|
||||||
pause = exposureTarget - half;
|
pause = exposureTarget - half;
|
||||||
|
@ -154,6 +161,69 @@ void state () {
|
||||||
void updateAvg (long value) {
|
void updateAvg (long value) {
|
||||||
exposureAvg = round((exposureAvg + value) / 2);
|
exposureAvg = round((exposureAvg + value) / 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Button logic
|
* Button/Switch logic
|
||||||
**/
|
**/
|
||||||
|
|
||||||
|
void buttons () {
|
||||||
|
int cameraButtonState = digitalRead(cameraButtonPin);
|
||||||
|
int directionSwitchState = digitalRead(directionSwitchPin);
|
||||||
|
int openCloseSwitchState = digitalRead(openCloseSwitchPin);
|
||||||
|
|
||||||
|
if (directionSwitchState == LOW && directionSwitch == false) {
|
||||||
|
directionSwitch = true;
|
||||||
|
} else if (directionSwitchState == HIGH && directionSwitch == true) {
|
||||||
|
directionSwitch = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (openCloseSwitchState == LOW && openCloseSwitch == false) {
|
||||||
|
openCloseSwitch = true;
|
||||||
|
switch_open_close();
|
||||||
|
} else if (openCloseSwitchState == HIGH && openCloseSwitch == true) {
|
||||||
|
openCloseSwitch = false;
|
||||||
|
switch_open_close();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cameraButtonState == LOW) {
|
||||||
|
button_camera();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void button_camera () {
|
||||||
|
long start = millis();
|
||||||
|
long ms;
|
||||||
|
|
||||||
|
if (direction != directionSwitch) {
|
||||||
|
cam.setDirection(directionSwitch);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cam.isOpened()) {
|
||||||
|
cam.toClose();
|
||||||
|
start = millis();
|
||||||
|
}
|
||||||
|
|
||||||
|
cam.frame();
|
||||||
|
ms = millis() - start;
|
||||||
|
updateAvg(ms);
|
||||||
|
|
||||||
|
mc.log("button_camera()");
|
||||||
|
|
||||||
|
if (direction != directionSwitch) {
|
||||||
|
cam.setDirection(direction);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void switch_open_close () {
|
||||||
|
if (direction != directionSwitch) {
|
||||||
|
cam.setDirection(directionSwitch);
|
||||||
|
}
|
||||||
|
if (openCloseSwitch && !cam.isClosed()) {
|
||||||
|
cam.toClose();
|
||||||
|
} else if (!openCloseSwitch && !cam.isOpened()) {
|
||||||
|
cam.toOpen();
|
||||||
|
}
|
||||||
|
if (direction != directionSwitch) {
|
||||||
|
cam.setDirection(direction);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue