# Resistor Code with Matlab GUI

 In this article we're going to decipher the colored Resistor Code with a Matlab GUI. The intention is to be able to use pull-down menus to decode the colors of four-band resistors. Colorbands are commonly used (especially on resistors) because they are easily printed on tiny components, decreasing manufacturing costs.

Use the following table and explanation to distinguish a color band's value and how to use it.

 Black = 0 Brown = 1 Red = 2 Orange = 3 Yellow = 4 Green = 5 Blue = 6 Violet = 7 Gray = 8 White = 9 Gold =   +/-5% Silver = +/-10%

Find one of the four-band resistors. Hold the resistor with the gold or silver band to the right. The first two bands from the left show the value. If they are red and red, the value is 22. The third band shows the number of zeros after the value. If it is yellow, then the number of zeros is 4.

So the above resistor is 220000, or 220 K ohms (for easier reading).
The 'K' multiplier means 1,000 (kilo-ohms); the 'M' multiplier means 1,000,000 (mega-ohms).

The gold band indicates that the resistors are of 5% tolerance. A silver band indicates a 10% tolerance.

An orange-red-brown-gold code equals a 320 +/-5% resistor.

Now with Matlab...

If this is your first GUI, I suggest you read these two initial articles,
and then come-back and continue with this new project.

If you're ready, then type on the command window

> guide

and a GUI window appears. Choose 'Blank GUI' and you'll get something like this figure:

Use the buttons on the left to drag-and-drop 4 'pop-up' menus, 4 'axes', and 3 'static-text' boxes.

'Static-text1' is used to give the message below the menus. It's 'String' property is 'Select one color from each pull-down menu'. You can make it a bold font (double-click on each menu and choose the different properties).

'Static-text2' is used to display the resistor value. It starts with a '0' (zero) in its string property. 'Static-text3' just displays the word 'ohms'.

Arrange the elements and change their properties to achieve something like this:

Include these values in the 'String' property of the first 3 pop-up menus
(double-click on each menu and choose the 'String' property):

For the 4th menu, you have to write ' 5% gold' and '10% silver' in its 'String' property.

Save the figure as resistor_code.fig. A template code is automatically created with the name 'resitor_code.m'. We're going to modify it and we're going to create other functions to make it work...

We'll create some Matlab functions and then we'll link them to this initial template.

First, a function to initialize the GUI axes. I suggest the following code:

% Initialize resistor code (bands)
% Show 0 ohm +/- 5%

function init_bands(handles)

axes(handles.axes1);
'black.jpg'));
axis
off;

axes(handles.axes2);
axis off;

axes(handles.axes3);
axis
off;

axes(handles.axes4);
axis
off;

This will display a 0-value with a 5% tolerance code in the GUI (colors for the 4 bands are black  - black - black - gold).

Now, to update the colors when the values are entered using the pull-down menus, I suggest the following code:

function update_color(ax, val, handles)
% Select the appropriate color to update
switch ax

case 1
axes(handles.axes1);

case 2
axes(handles.axes2);

case 3
axes(handles.axes3);

case 4
axes(handles.axes4);

end

% Choose the correct image to display
color = val(5 : length(val));
'.jpg']));
axis
off;

The input parameters of this function are 'ax' (includes the correct band number), 'val' (includes the selected option), and 'handles' (all the handles to the objects in our created figure). We have to choose the correct image to display. The name of the image is included in the 'val' parameter. You have to have .jpg images for each color.

Then, to update the total value of the resistor (values are entered using the pull-down menus, too) I suggest the following code:

function update_value(handles)
b = handles.b;

b_ttl = (b(1) + b(2)) * b(3);

if b_ttl < 1000
b_str = num2str(b_ttl);

end

% Format the number to make it more readable
% Consider to format only values >= 1000 k ohms

bs1 = num2str(b(1)/10);
bs2 = num2str(b(2));

switch b(3)

case 1e2
b_str = [bs1
'.' bs2 ' K'];

case 1e3
b_str = [bs1 bs2
' K'];

case 1e4
b_str = [bs1 bs2
'0 K'];

case 1e5
b_str = [bs1
'.' bs2 ' M'];

case 1e6
b_str = [bs1 bs2
' M'];

case 1e7
b_str = [bs1 bs2
'0 M'];

case 1e8
b_str = [bs1
'.' bs2 ' G'];

case 1e9
b_str = [bs1 bs2
' G'];
end

% Actual display of the value in the 'static text'
set(handles.text2, 'String', b_str);

This function reads the total value of the resistor bands and formats it to make it more readable. It displays the number as a string, not as a number, and adds appropriate multipliers (such as 'K' or 'M'). The resulting string is displayed in 'Static-Text2'.

Please note that not all the combinations are real standard resistor values.

This is a portion of the script that appears in the 'resistor_code.m' file (the template created by Matlab). We have to fill in the necessary code to achieve what we need.

Instructions contents = get(hObject,'String'), and
contents{get(hObject,'Value')}
are the key Matlab functions to read data from a pull down menu.

This code is for pop-up menu1. We read the menu, then we call our previous function to update the color of the corresponding image, we update the value of the resistor and finally save current data in the handles. This has to be adapted for the other three menus and axes.

% - Executes on selection change in popupmenu1.
% Hints:
% contents = get(hObject,'String') returns menu1 contents as
% cell array
% contents{get(hObject,'Value')} returns selected item from

contents = get(hObject,'String');
v = contents{get(hObject,
'Value')};

% Update color of appropriate band
update_color(1, v, handles);

% Update resistor value
handles.b(1) = str2num(v(1)) * 10;
update_value(handles);

% Save data
guidata(hObject, handles);

This is a sample run:

The full code for the main routine is:

function varargout = resistor_code(varargin)
% RESISTOR_CODE M-file for resistor_code.fig
%
% Begin initialization code - DO NOT EDIT

gui_Singleton = 1;
gui_State = struct(
'gui_Name',       mfilename, ...
'gui_Singleton',  gui_Singleton, ...
'gui_OpeningFcn', @resistor_code_OpeningFcn, ...
'gui_OutputFcn',  @resistor_code_OutputFcn, ...
'gui_LayoutFcn',  [] , ...
'gui_Callback',   []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});

end

if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT

% --- Executes just before resistor_code is made visible.
function resistor_code_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to resistor_code (see VARARGIN)

% Choose default command line output for resistor_code
clc
handles.output = hObject;

% Initialize color of bands
init_bands(handles);
% Initialize and save resistor value
b(1) = 0;
b(2) = 0;
b(3) = 1;
handles.b = b;

% Update handles structure
guidata(hObject, handles);

% --- Outputs from this function are returned to the command line.
function varargout = resistor_code_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;

% --- Executes on selection change in popupmenu1.
% Hints:
% contents = get(hObject,'String') returns menu1 contents as cell array
% contents{get(hObject,'Value')} returns selected item from menu1

contents = get(hObject,'String');
v = contents{get(hObject,
'Value')};

% Update color of appropriate band
update_color(1, v, handles);

% Update resistor value
handles.b(1) = str2num(v(1)) * 10;
update_value(handles);

% Save data
guidata(hObject, handles);

% - Executes during object creation, after setting all properties.
if ispc && isequal(get(hObject,'BackgroundColor'), ...
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,
'BackgroundColor','white');
end

% --- Executes on selection change in popupmenu2.
% Hints:
% contents = get(hObject,'String') returns menu1 contents as cell array
% contents{get(hObject,'Value')} returns selected item from menu1

contents = get(hObject,'String');
v = contents{get(hObject,
'Value')};

% Update color of appropriate band
update_color(2, v, handles);

% Update resistor value
handles.b(2) = str2num(v(1));
update_value(handles);

% Save data
guidata(hObject, handles);

% --- Executes during object creation, after setting all properties.
if ispc && isequal(get(hObject,'BackgroundColor'), ...
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,
'BackgroundColor','white');
end

% --- Executes on selection change in popupmenu3.
% Hints:
% contents = get(hObject,'String') returns menu1 contents as cell array
% contents{get(hObject,'Value')} returns selected item from menu1

contents = get(hObject,'String');
v = contents{get(hObject,
'Value')};

% Update color of appropriate band
update_color(3, v, handles);

% Update resistor value
handles.b(3) = 10^(str2num(v(1)));
update_value(handles);

% Save data
guidata(hObject, handles);

% --- Executes during object creation, after setting all properties.
if ispc && isequal(get(hObject,'BackgroundColor'), ...
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,
'BackgroundColor','white');
end

% --- Executes on selection change in popupmenu4.
% Hints:
% contents = get(hObject,'String') returns menu1 contents as cell array
% contents{get(hObject,'Value')} returns selected item from menu1

contents = get(hObject,'String');

% Update color of appropriate band
update_color(4, contents{get(hObject,'Value')}, handles);

% Save data
guidata(hObject, handles);

% --- Executes during object creation, after setting all properties.
if ispc && isequal(get(hObject,'BackgroundColor'), ...
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,
'BackgroundColor','white');
end