make manual drive better comply with iot
This commit is contained in:
parent
2ef0cf5b69
commit
a6e668f263
27
src/main.cpp
27
src/main.cpp
|
@ -7,7 +7,6 @@
|
|||
/*
|
||||
TODO:
|
||||
- implement failure detection (timeouts),
|
||||
- in classifySensorValue() only allow a certain time of unclassified reading
|
||||
- has to stop when driving upwards (or in general) for too long (for example end marker missing)
|
||||
- manual mover function should work better with iot commands (set position, no errors)
|
||||
*/
|
||||
|
@ -74,7 +73,9 @@ uint8_t sensorreadID=0;
|
|||
#define MODE_FIND_END 1
|
||||
#define MODE_MEASURE_SPEED 2
|
||||
#define MODE_GO_TO_POS 3
|
||||
#define MODE_ERROR 4
|
||||
#define MODE_MANUAL 4
|
||||
#define MODE_ERROR 5
|
||||
|
||||
|
||||
//model parameters/variables
|
||||
struct blindmodel
|
||||
|
@ -342,13 +343,13 @@ void loopHandler() {
|
|||
checkModes(blind1, blind1Node);
|
||||
checkModes(blind2, blind2Node);
|
||||
|
||||
errorCheck(blind1, blind1Node);
|
||||
errorCheck(blind2, blind2Node);
|
||||
|
||||
//Estimate blind position and correct
|
||||
estimatePosition(blind1, blind1Node);
|
||||
estimatePosition(blind2, blind2Node);
|
||||
|
||||
errorCheck(blind1, blind1Node);
|
||||
errorCheck(blind2, blind2Node);
|
||||
|
||||
//Update Motor Driver
|
||||
if (millis() > last_motor_send + MOTOR_UPDATE_INTERVAL) {
|
||||
updateMotor(blind1, M1);
|
||||
|
@ -408,19 +409,20 @@ void checkButton(button &btn) {
|
|||
void manualMoveHandler(button &btn, blindmodel &blind)
|
||||
{
|
||||
if (btn.changed) {
|
||||
blind.mode=MODE_IDLE;
|
||||
if (btn.down) { //changed to pressed
|
||||
if (btn.manual_drive_direction) {
|
||||
blind.mode=MODE_MANUAL;
|
||||
if (btn.manual_drive_direction) { //drive up
|
||||
//M1.setmotor( _CW, 100);
|
||||
blind.speed=-100;
|
||||
//Serial.print("CW PWM: ");
|
||||
}else{
|
||||
}else{ //drive down
|
||||
blind.speed=100;
|
||||
//Serial.print("CCW PWM: ");
|
||||
}
|
||||
btn.manual_drive_direction=!btn.manual_drive_direction; //switch direction every new press
|
||||
}else{ //changed to released
|
||||
//Serial.println("Motor STOP");
|
||||
blind.mode=MODE_IDLE;
|
||||
blind.speed=0;
|
||||
}
|
||||
}
|
||||
|
@ -458,6 +460,11 @@ void errorCheck(blindmodel &blind, HomieNode &node) {
|
|||
blind.speed=0;
|
||||
}
|
||||
}
|
||||
if (blind.position>=blind.softlimit_max) { //reached bottom
|
||||
if (blind.speed>0) { //stop driving down
|
||||
blind.speed=0;
|
||||
}
|
||||
}
|
||||
|
||||
if (abs(blind.position_last_classified_ok-blind.position) > MAX_ALLOWED_CLASSIFY_LENGTH ) { //sensor reading havent been classified for too far
|
||||
setError(blind, ERRORCODE_CLASSIFY_LENGTH, node);
|
||||
|
@ -679,6 +686,10 @@ void checkModes(blindmodel &blind, HomieNode &node) {
|
|||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case MODE_MANUAL:
|
||||
blind.set_position=blind.position; //use current position as set position
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue