MATLAB Answers

Linking pushbuttons to a callback function

2 views (last 30 days)
vedesh Mohit
vedesh Mohit on 21 Feb 2020
Answered: Spencer Chen on 21 Feb 2020
function Comb_logic_circuit
ANDB = uibutton(Gate,'push','Text','AND','Position',[5 450 110 60],'ButtonPushedFcn',@(ANDB,event)AND1);
ORB= uibutton(Gate,'push','Text','OR','Position',[5 380 110 60],'ButtonPushedFcn',@(ORB,event)OR1);
NOTB = uibutton(Gate,'push','Text','NOT','Position',[5 310 110 60],'ButtonPushedFcn',@(NOTB,event)NOT1);
NANDB = uibutton(Gate,'push','Text','NAND','Position',[5 240 110 60],'ButtonPushedFcn',@(NANDB,event)NAND1);
NORB= uibutton(Gate,'push','Text','NOR','Position',[5 170 110 60],'ButtonPushedFcn',@(NORB,event)NOR1);
%Static GUI placement
InputA=uieditfield(fig,'Position',[5 500 60 40]);
InputB=uieditfield(fig,'Position',[5 350 60 40]);
InputC=uieditfield(fig,'Position',[5 200 60 40]);
Section1=uieditfield(fig,'Position',[160 570 60 50]);
Input1=uieditfield(fig,'Position',[135 600 25 20]);
Input2=uieditfield(fig,'Position',[135 570 25 20]);
Output1=uieditfield(fig,'Position',[220 585 25 20]);
Section2=uieditfield(fig,'Position',[160 400 60 50]);
Input3=uieditfield(fig,'Position',[135 430 25 20]);
Input4=uieditfield(fig,'Position',[135 400 25 20]);
Output2=uieditfield(fig,'Position',[220 415 25 20]);
Section3=uieditfield(fig,'Position',[160 200 60 50]);
Input5=uieditfield(fig,'Position',[135 230 25 20]);
Input6=uieditfield(fig,'Position',[135 200 25 20]);
Output3=uieditfield(fig,'Position',[220 215 25 20]);
Section4=uieditfield(fig,'Position',[450 570 60 50]);
Input7=uieditfield(fig,'Position',[425 600 25 20]);
Input8=uieditfield(fig,'Position',[425 570 25 20]);
Output4=uieditfield(fig,'Position',[510 585 25 20]);
Section5=uieditfield(fig,'Position',[450 400 60 50]);
Input9=uieditfield(fig,'Position',[425 430 25 20]);
Input10=uieditfield(fig,'Position',[425 400 25 20]);
Output5=uieditfield(fig,'Position',[510 415 25 20]);
Section6=uieditfield(fig,'Position',[450 200 60 50]);
Input11=uieditfield(fig,'Position',[425 230 25 20]);
Input12=uieditfield(fig,'Position',[425 200 25 20]);
Output6=uieditfield(fig,'Position',[510 215 25 20]);
Section7=uieditfield(fig,'Position',[700 570 60 50]);
Input13=uieditfield(fig,'Position',[675 600 25 20]);
Input14=uieditfield(fig,'Position',[675 570 25 20]);
Output7=uieditfield(fig,'Position',[760 585 25 20]);
Section8=uieditfield(fig,'Position',[700 400 60 50]);
Input15=uieditfield(fig,'Position',[675 430 25 20]);
Input16=uieditfield(fig,'Position',[675 400 25 20]);
Output8=uieditfield(fig,'Position',[760 415 25 20]);
Section9=uieditfield(fig,'Position',[700 200 60 50]);
Input17=uieditfield(fig,'Position',[675 230 25 20]);
Input18=uieditfield(fig,'Position',[675 200 25 20]);
Output9=uieditfield(fig,'Position',[760 215 25 20]);
Section10=uieditfield(fig,'Position',[900 400 60 50]);
Input19=uieditfield(fig,'Position',[875 430 25 20]);
Input20=uieditfield(fig,'Position',[875 400 25 20]);
Output10=uieditfield(fig,'Position',[960 415 25 20]);
OutputF=uieditfield(fig,'Position',[1070 400 60 50]);
function AND1
AP=uipanel(fig1,'Position',[280 20 300 300]);
dd=uidropdown(AP,'Position',[60 230 170 30],'Items',{'Section1','Section2','Section3','Section4','Section5','Section6','Section7','Section8','Section9','Section10'},'Value','Section1');
I1=uieditfield(AP,'text','Position',[100 100 50 30]);
I2=uieditfield(AP,'text','Position',[160 100 50 30]);
O1=uieditfield(AP,'text','Position',[125 60 50 30]);
GA=uibutton(AP,'push','Position',[100 10 100 30],'Text','Place Gate','ButtonPushedFcn',@(GA,event)selectionChanged);
function selectionChanged
val=dd.Value;
val1=text.Value;
if strcmp(val,'Section1')
if strcmp(val1,'AND')
Section1.Value = 'AND';
elseif strcmp(val1,'OR')
Section1.Value = 'OR';
elseif strcmp(val1,'NOT')
Section1.Value = 'NOT';
elseif strcmp(val1,'NAND')
Section1.Value = 'NAND';
elseif strcmp(val1,'NOR')
Section1.Value = 'NOR';
end
Input1.Value= I1.Value;
Input2.Value=I2.Value;
Output1.Value=O1.Value;
elseif strcmp(val,'Section2')
if strcmp(val1,'AND')
Section2.Value = 'AND';
elseif strcmp(val1,'OR')
Section2.Value = 'OR';
elseif strcmp(val1,'NOT')
Section2.Value = 'NOT';
elseif strcmp(val1,'NAND')
Section2.Value = 'NAND';
elseif strcmp(val1,'NOR')
Section2.Value = 'NOR';
end
Input3.Value= I1.Value;
Input4.Value=I2.Value;
Output2.Value=O1.Value;
elseif strcmp(val,'Section3')
if strcmp(val1,'AND')
Section3.Value = 'AND';
elseif strcmp(val1,'OR')
Section3.Value = 'OR';
elseif strcmp(val1,'NOT')
Section3.Value = 'NOT';
elseif strcmp(val1,'NAND')
Section3.Value = 'NAND';
elseif strcmp(val1,'NOR')
Section3.Value = 'NOR';
end
Input5.Value= I1.Value;
Input6.Value=I2.Value;
Output3.Value=O1.Value;
elseif strcmp(val,'Section4')
if strcmp(val1,'AND')
Section4.Value = 'AND';
elseif strcmp(val1,'OR')
Section4.Value = 'OR';
elseif strcmp(val1,'NOT')
Section4.Value = 'NOT';
elseif strcmp(val1,'NAND')
Section4.Value = 'NAND';
elseif strcmp(val1,'NOR')
Section4.Value = 'NOR';
end
Input7.Value= I1.Value;
Input8.Value=I2.Value;
Output4.Value=O1.Value;
elseif strcmp(val,'Section5')
if strcmp(val1,'AND')
Section5.Value = 'AND';
elseif strcmp(val1,'OR')
Section5.Value = 'OR';
elseif strcmp(val1,'NOT')
Section5.Value = 'NOT';
elseif strcmp(val1,'NAND')
Section5.Value = 'NAND';
elseif strcmp(val1,'NOR')
Section5.Value = 'NOR';
end
Input9.Value= I1.Value;
Input10.Value=I2.Value;
Output5.Value=O1.Value;
elseif strcmp(val,'Section6')
if strcmp(val1,'AND')
Section6.Value = 'AND';
elseif strcmp(val1,'OR')
Section6.Value = 'OR';
elseif strcmp(val1,'NOT')
Section6.Value = 'NOT';
elseif strcmp(val1,'NAND')
Section6.Value = 'NAND';
elseif strcmp(val1,'NOR')
Section6.Value = 'NOR';
end
Input11.Value= I1.Value;
Input12.Value=I2.Value;
Output6.Value=O1.Value;
elseif strcmp(val,'Section7')
if strcmp(val1,'AND')
Section7.Value = 'AND';
elseif strcmp(val1,'OR')
Section7.Value = 'OR';
elseif strcmp(val1,'NOT')
Section7.Value = 'NOT';
elseif strcmp(val1,'NAND')
Section7.Value = 'NAND';
elseif strcmp(val1,'NOR')
Section7.Value = 'NOR';
end
Input13.Value= I1.Value;
Input14.Value=I2.Value;
Output7.Value=O1.Value;
elseif strcmp(val,'Section8')
if strcmp(val1,'AND')
Section8.Value = 'AND';
elseif strcmp(val1,'OR')
Section8.Value = 'OR';
elseif strcmp(val1,'NOT')
Section8.Value = 'NOT';
elseif strcmp(val1,'NAND')
Section8.Value = 'NAND';
elseif strcmp(val1,'NOR')
Section8.Value = 'NOR';
end
Input15.Value= I1.Value;
Input16.Value=I2.Value;
Output8.Value=O1.Value;
elseif strcmp(val,'Section9')
if strcmp(val1,'AND')
Section9.Value = 'AND';
elseif strcmp(val1,'OR')
Section9.Value = 'OR';
elseif strcmp(val1,'NOT')
Section9.Value = 'NOT';
elseif strcmp(val1,'NAND')
Section9.Value = 'NAND';
elseif strcmp(val1,'NOR')
Section9.Value = 'NOR';
end
Input17.Value= I1.Value;
Input18.Value=I2.Value;
Output9.Value=O1.Value;
elseif strcmp(val,'Section10')
if strcmp(val1,'AND')
Section10.Value = 'AND';
elseif strcmp(val1,'OR')
Section10.Value = 'OR';
elseif strcmp(val1,'NOT')
Section10.Value = 'NOT';
elseif strcmp(val1,'NAND')
Section10.Value = 'NAND';
elseif strcmp(val1,'NOR')
Section10.Value = 'NOR';
end
Input19.Value= I1.Value;
Input20.Value=I2.Value;
Output10.Value=O1.Value;
end
end
end
end
Hi i have attempted to create a static GUI where i have five pushbuttons, where the user can select a respective section to place the gate. So far I was able to get it to work for one pushbutton but while attempting to add the other four pushbuttons, I was unsuccesful as only the 'AND' button is working. Can anyone advise on the code above to incoprorate the other four pusbuttons('OR','NOT','NAND'&'NOR') with the callback function selectionChanged.

  0 Comments

Sign in to comment.

Answers (1)

Spencer Chen
Spencer Chen on 21 Feb 2020
I think the problem may lie in that you have nested your functions such that selectionChanged() is a nested function of AND1(). In which case, functions the same same level of AND1() has not access to it. You probably want to implement selectionChanged() at a higher hierarchy.

  0 Comments

Sign in to comment.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!