Edit addresses the issue implied by #52. In simple tests with improvised hardware, frame cannot complete in less than 450ms, which is half a full frame. Will add another check to proj_stop() to evaluate the time elapsed and throw an error if too high or low (+/- 20%)

This commit is contained in:
sixteenmillimeter 2020-09-29 15:13:22 -04:00
parent 5e481e77b0
commit 65292524b1
2 changed files with 13 additions and 9 deletions

View File

@ -285,7 +285,7 @@ void proj_microswitch () {
proj_micro_state = val; //unneeded?
proj_stop();
} else {
//delay(1); //some smothing value
//delay(2); //some smothing value
}
}

View File

@ -310,20 +310,24 @@ void proj_direction (boolean state) {
void proj_microswitch () {
int val = digitalRead(PROJECTOR_MICROSWITCH);
long now = millis();
if (!proj_primed && val != proj_micro_state && val == PROJECTOR_MICROSWITCH_OPENED) {
if (!proj_primed // if not primed
&& val != proj_micro_state // AND if state changes
&& val == PROJECTOR_MICROSWITCH_OPENED // AND state changes to open
&& now - proj_time > PROJECTOR_HALF_TIME) {
//prime
log("projector primed to stop");
log("proj_primed => true");
proj_micro_state = val;
proj_primed = true;
} else if (proj_primed && val != proj_micro_state
&& val == PROJECTOR_MICROSWITCH_CLOSED
&& now - proj_time > PROJECTOR_HALF_TIME) {
//turn off
} else if (proj_primed //if primed
&& val != proj_micro_state //AND if state changes
&& val == PROJECTOR_MICROSWITCH_CLOSED //AND state changes to open
&& now - proj_time > PROJECTOR_HALF_TIME) { //AND total elapsed time is greater than half frame time
//stop
proj_primed = false;
proj_micro_state = val;
proj_micro_state = val; //unneeded?
proj_stop();
} else {
//delay(1); //some smothing value
//delay(2); //some smothing value
}
}