mirror of
https://github.com/arendst/Tasmota.git
synced 2025-07-27 20:56:35 +00:00
Update xdrv_27_shutter.ino
This commit is contained in:
parent
65be8e6b59
commit
834244d2e1
@ -47,6 +47,7 @@ int32_t current_stop_way = 0;
|
|||||||
int32_t next_possible_stop_position = 0;
|
int32_t next_possible_stop_position = 0;
|
||||||
int32_t current_real_position = 0;
|
int32_t current_real_position = 0;
|
||||||
int32_t current_pwm_velocity = 0;
|
int32_t current_pwm_velocity = 0;
|
||||||
|
int8_t savedata_original = 0;
|
||||||
|
|
||||||
const uint8_t MAX_MODES = 7;
|
const uint8_t MAX_MODES = 7;
|
||||||
enum Shutterposition_mode {SHT_UNDEF, SHT_TIME, SHT_TIME_UP_DOWN, SHT_TIME_GARAGE, SHT_COUNTER, SHT_PWM_VALUE, SHT_PWM_TIME,};
|
enum Shutterposition_mode {SHT_UNDEF, SHT_TIME, SHT_TIME_UP_DOWN, SHT_TIME_GARAGE, SHT_COUNTER, SHT_PWM_VALUE, SHT_PWM_TIME,};
|
||||||
@ -516,6 +517,8 @@ void ShutterPowerOff(uint8_t i)
|
|||||||
ExecuteCommand(scmnd, SRC_BUTTON);
|
ExecuteCommand(scmnd, SRC_BUTTON);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Settings->save_data = savedata_original;
|
||||||
|
TasmotaGlobal.save_data_counter = Settings->save_data;
|
||||||
delay(MOTOR_STOP_TIME);
|
delay(MOTOR_STOP_TIME);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -601,7 +604,7 @@ void ShutterAllowPreStartProcedure(uint8_t i)
|
|||||||
|
|
||||||
void ShutterStartInit(uint32_t i, int32_t direction, int32_t target_pos)
|
void ShutterStartInit(uint32_t i, int32_t direction, int32_t target_pos)
|
||||||
{
|
{
|
||||||
AddLog(LOG_LEVEL_DEBUG_MORE, PSTR("SHT: dir %d, delta1 %d, delta2 %d"),direction, (Shutter[i].open_max - Shutter[i].real_position) / Shutter[i].close_velocity, Shutter[i].real_position / Shutter[i].close_velocity);
|
//AddLog(LOG_LEVEL_DEBUG_MORE, PSTR("SHT: dir %d, delta1 %d, delta2 %d"),direction, (Shutter[i].open_max - Shutter[i].real_position) / Shutter[i].close_velocity, Shutter[i].real_position / Shutter[i].close_velocity);
|
||||||
if ( ( ( (1 == direction) && ((Shutter[i].open_max - Shutter[i].real_position) <= Shutter[i].min_realPositionChange))
|
if ( ( ( (1 == direction) && ((Shutter[i].open_max - Shutter[i].real_position) <= Shutter[i].min_realPositionChange))
|
||||||
|| ( (-1 == direction) && (Shutter[i].real_position <= Shutter[i].min_realPositionChange)) )
|
|| ( (-1 == direction) && (Shutter[i].real_position <= Shutter[i].min_realPositionChange)) )
|
||||||
&& abs(Shutter[i].tilt_real_pos-Shutter[i].tilt_target_pos) <= Shutter[i].min_TiltChange) {
|
&& abs(Shutter[i].tilt_real_pos-Shutter[i].tilt_target_pos) <= Shutter[i].min_TiltChange) {
|
||||||
@ -617,12 +620,19 @@ void ShutterStartInit(uint32_t i, int32_t direction, int32_t target_pos)
|
|||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
Shutter[i].accelerator = ShutterGlobal.open_velocity_max / (Shutter[i].motordelay>0 ? Shutter[i].motordelay : 1);
|
Shutter[i].accelerator = ShutterGlobal.open_velocity_max / (Shutter[i].motordelay>0 ? Shutter[i].motordelay : 1);
|
||||||
Shutter[i].target_position = target_pos;
|
Shutter[i].target_position = target_pos;
|
||||||
Shutter[i].start_position = Shutter[i].real_position;
|
Shutter[i].start_position = Shutter[i].real_position;
|
||||||
TasmotaGlobal.rules_flag.shutter_moving = 1;
|
TasmotaGlobal.rules_flag.shutter_moving = 1;
|
||||||
ShutterAllowPreStartProcedure(i);
|
ShutterAllowPreStartProcedure(i);
|
||||||
Shutter[i].time = 0;
|
Shutter[i].time = 0;
|
||||||
|
|
||||||
|
// avoid file system writes during move to minimize missing steps
|
||||||
|
savedata_original = Settings->save_data;
|
||||||
|
Settings->save_data = 0; // will be restored after movement
|
||||||
|
TasmotaGlobal.save_data_counter = Settings->save_data;
|
||||||
|
|
||||||
Shutter[i].direction = direction;
|
Shutter[i].direction = direction;
|
||||||
Shutter[i].last_reported_time = 1;
|
Shutter[i].last_reported_time = 1;
|
||||||
ShutterGlobal.skip_relay_change = 0;
|
ShutterGlobal.skip_relay_change = 0;
|
||||||
@ -633,11 +643,12 @@ void ShutterStartInit(uint32_t i, int32_t direction, int32_t target_pos)
|
|||||||
if (Shutter[i].tilt_config[1]-Shutter[i].tilt_config[0] != 0) {
|
if (Shutter[i].tilt_config[1]-Shutter[i].tilt_config[0] != 0) {
|
||||||
Shutter[i].venetian_delay = (Shutter[i].direction > 0 ? Shutter[i].tilt_config[1]-Shutter[i].tilt_real_pos : Shutter[i].tilt_real_pos-Shutter[i].tilt_config[0]) * Shutter[i].tilt_config[2] / (Shutter[i].tilt_config[1]-Shutter[i].tilt_config[0]);
|
Shutter[i].venetian_delay = (Shutter[i].direction > 0 ? Shutter[i].tilt_config[1]-Shutter[i].tilt_real_pos : Shutter[i].tilt_real_pos-Shutter[i].tilt_config[0]) * Shutter[i].tilt_config[2] / (Shutter[i].tilt_config[1]-Shutter[i].tilt_config[0]);
|
||||||
//AddLog(LOG_LEVEL_DEBUG_MORE, PSTR("SHT: real %d, start %d, counter %d,freq_max %d, dir %d, freq %d"),Shutter[i].real_position, Shutter[i].start_position ,RtcSettings.pulse_counter[i],ShutterGlobal.open_velocity_max , Shutter[i].direction ,ShutterGlobal.open_velocity_max );
|
//AddLog(LOG_LEVEL_DEBUG_MORE, PSTR("SHT: real %d, start %d, counter %d,freq_max %d, dir %d, freq %d"),Shutter[i].real_position, Shutter[i].start_position ,RtcSettings.pulse_counter[i],ShutterGlobal.open_velocity_max , Shutter[i].direction ,ShutterGlobal.open_velocity_max );
|
||||||
AddLog(LOG_LEVEL_DEBUG_MORE, PSTR("SHT: %d VenetianDelay: %d, Pos: %d, Dir: %d, Delta: %d, Durat: %d, Start: %d, Target: %d"),
|
AddLog(LOG_LEVEL_DEBUG_MORE, PSTR("SHT: VenetianDelay: %d, Pos: %d, Dir: %d, Delta: %d, Dur: %d, StartP: %d, TgtP: %d"),
|
||||||
i, Shutter[i].venetian_delay, Shutter[i].tilt_real_pos,Shutter[i].direction,(Shutter[i].tilt_config[1]-Shutter[i].tilt_config[0]), Shutter[i].tilt_config[2],Shutter[i].tilt_start_pos,Shutter[i].tilt_target_pos);
|
Shutter[i].venetian_delay, Shutter[i].tilt_real_pos,Shutter[i].direction,(Shutter[i].tilt_config[1]-Shutter[i].tilt_config[0]), Shutter[i].tilt_config[2],Shutter[i].tilt_start_pos,Shutter[i].tilt_target_pos);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
AddLog(LOG_LEVEL_DEBUG, PSTR("SHT: Start shtr%d from %d to %d in direction %d"), i, Shutter[i].start_position, Shutter[i].target_position, Shutter[i].direction);
|
//AddLog(LOG_LEVEL_DEBUG, PSTR("SHT: Start shtr%d from %d to %d in dir: %d"), i, Shutter[i].start_position, Shutter[i].target_position, direction);
|
||||||
|
Shutter[i].direction = direction; // Last action. This causes RTC to start.
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t ShutterCalculatePosition(uint32_t i)
|
int32_t ShutterCalculatePosition(uint32_t i)
|
||||||
@ -957,7 +968,7 @@ void ShutterSetPosition(uint32_t device, uint32_t position)
|
|||||||
|
|
||||||
void ShutterToggle(bool dir)
|
void ShutterToggle(bool dir)
|
||||||
{
|
{
|
||||||
AddLog(LOG_LEVEL_DEBUG, PSTR("SHT: Payload toggle: %d, i %d, dir %d, lastdir %d"), XdrvMailbox.payload, XdrvMailbox.index, dir, Shutter[XdrvMailbox.index-1].lastdirection);
|
AddLog(LOG_LEVEL_DEBUG, PSTR("SHT: Toggle: %d, i %d, dir %d, lastdir %d"), XdrvMailbox.payload, XdrvMailbox.index, dir, Shutter[XdrvMailbox.index-1].lastdirection);
|
||||||
if ((1 == XdrvMailbox.index) && (XdrvMailbox.payload != -99)) {
|
if ((1 == XdrvMailbox.index) && (XdrvMailbox.payload != -99)) {
|
||||||
XdrvMailbox.index = XdrvMailbox.payload;
|
XdrvMailbox.index = XdrvMailbox.payload;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user