How do I end this Matlab App Designer switch callback?
4 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Stylianos Vamvakas
el 31 de Mayo de 2020
Comentada: Kojiro Saito
el 2 de Jun. de 2020
I have a switch that I want to let the piston fire to change between 0 and 1 while its on and then end the loop when its off. No matter what I am unable to break the loop.
function FireSwitchValueChanged(app, event)
value = app.FireSwitch.Value;
while strcmp(value,"On")
app.piston_state = 1;
disp(app.piston_state)
pause(0.05)
app.piston_state = 0;
disp(app.piston_state)
drawnow %didnt change anything
if strcmp(value,"Off")
app.piston_state = 0;
disp(app.piston_state)
break
end
end
0 comentarios
Respuesta aceptada
Kojiro Saito
el 1 de Jun. de 2020
Editada: Kojiro Saito
el 1 de Jun. de 2020
Updated answer
First, you need to create a private property.
and name the timer property, say timerObj.
properties (Access = private)
timerObj % Description
end
Then, you need to create a private function.
and name the function like myTimerFcn and define it as the following.
methods (Access = private)
function myTimerFcn(app)
if app.piston_state == 0
app.piston_state = 1;
else
app.piston_state = 0;
end
disp(app.piston_state)
end
end
Next, add startupFcn from Callbacks tab.
and define it as follows. It creates a timer class.
function startupFcn(app)
app.timerObj = timer;
app.timerObj.TimerFcn = @(~, ~)myTimerFcn(app);
app.timerObj.Period = 0.1;
app.timerObj.ExecutionMode = 'fixedSpacing';
end
Finally, you can call this timer from swithc value changed function.
function FireSwitchValueChanged(app, event)
value = app.FireSwitch.Value;
if strcmp(value,"On")
start(app.timerObj)
else
stop(app.timerObj)
end
end
I hope this work!
--
Original answer
Switch value changed functions are called once when the switch is pushed, so I don't think while loop is necessary in your FireSwitchValueChanged.
function FireSwitchValueChanged(app, event)
value = app.FireSwitch.Value;
if strcmp(value,"On") % or, if value == "On" is also OK.
app.piston_state = 1;
disp(app.piston_state)
else
app.piston_state = 0;
disp(app.piston_state)
end
end
Does this meet your requirement?
4 comentarios
Más respuestas (0)
Ver también
Categorías
Más información sobre Develop Apps Using App Designer en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!