How Do I Perform Decoding Morse Code Using GUI?

function varargout = morsecodetranslator(varargin)
% MORSECODETRANSLATOR MATLAB code for morsecodetranslator.fig
% MORSECODETRANSLATOR, by itself, creates a new MORSECODETRANSLATOR or raises the existing
% singleton*.
%
% H = MORSECODETRANSLATOR returns the handle to a new MORSECODETRANSLATOR or the handle to
% the existing singleton*.
%
% MORSECODETRANSLATOR('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in MORSECODETRANSLATOR.M with the given input arguments.
%
% MORSECODETRANSLATOR('Property','Value',...) creates a new MORSECODETRANSLATOR or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before morsecodetranslator_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to morsecodetranslator_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
% instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help morsecodetranslator
% Last Modified by GUIDE v2.5 18-Apr-2021 14:40:40
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @morsecodetranslator_OpeningFcn, ...
'gui_OutputFcn', @morsecodetranslator_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 morsecodetranslator is made visible.
function morsecodetranslator_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to morsecodetranslator (see VARARGIN)
% Choose default command line output for morsecodetranslator
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes morsecodetranslator wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line.
function varargout = morsecodetranslator_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Get default command line output from handles structure
varargout{1} = handles.output;
function wordinput_Callback(hObject, eventdata, handles)
% hObject handle to wordinput (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of wordinput as text
% str2double(get(hObject,'String')) returns contents of wordinput as a double
letters_input=get(hObject,'string');
handles.letters_input=letters_input;
guidata(hObject,handles);
% --- Executes during object creation, after setting all properties.
function wordinput_CreateFcn(hObject, eventdata, handles)
% hObject handle to wordinput (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
% --- Executes on button press in translatetomorse.
function translatetomorse_Callback(hObject, eventdata, handles)
% hObject handle to translatetomorse (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
input=char(get(handles.wordinput,'string')); %get string from edit text
input=upper(input); %change to capital
word_to_morse= '';
morse={'.----','..---','...--','....-','.....','-....','--...','---..','----.','-----','.-','-...','-.-.','-..','.','..-.','--.','....','..','.---','-.-','.-..','--','-.','---','.--.','--.-','.-.','...','-','..-','...-','.--','-..-','-.--','--..','/'};
number_and_letter={'1','2','3','4','5','6','7','8','9','0','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',' '};
%Translation Formula/Steps
for i=1:length(input)
character = input(i);
[~, index] = ismember(character, number_and_letter);
if ~isempty(index)
if isempty(word_to_morse)
word_to_morse = morse{index};
else
word_to_morse = [word_to_morse ' ' morse{index}];
end
end
end
set(handles.morseoutput,'string',word_to_morse);
% --- Executes on button press in translatetoword.
function translatetoword_Callback(hObject, eventdata, handles)
% hObject handle to translatetoword (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
input=char(get(handles.wordinput,'string'));
input=upper(input);
morse={'.----','..---','...--','....-','.....','-....','--...','---..','----.','-----','.-','-...','-.-.','-..','.','..-.','--.','....','..','.---','-.-','.-..','--','-.','---','.--.','--.-','.-.','...','-','..-','...-','.--','-..-','-.--','--..','/'};
number_and_letter = ['1':'9', '0', 'A':'Z'];

댓글 수: 1

Hi, I'm trying to perform decoding part for GUI. For example my input is SOS and my output should be in the form of
'...---...'.I've managed to translate morse code into text but for only one alphabet or one number and it wont show the translated word if I input more than 1 number or alphabet.

댓글을 달려면 로그인하십시오.

 채택된 답변

Hint:
strsplit() the morse, and ismember into the list of codes to figure out which is being matched.
morse={'.----','..---','...--','....-','.....','-....','--...','---..','----.','-----','.-','-...','-.-.','-..','.','..-.','--.','....','..','.---','-.-','.-..','--','-.','---','.--.','--.-','.-.','...','-','..-','...-','.--','-..-','-.--','--..','/'};
number_and_letter = ['1':'9', '0', 'A':'Z'];
number_and_letter(ismember(morse, '.-..'))
ans = 'L'

댓글 수: 11

I think I miss a part of a code, because I got blank when i typed in more than 2 characters
% --- Executes on button press in translatetoword.
function translatetoword_Callback(hObject, eventdata, handles)
% hObject handle to translatetoword (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
input=char(get(handles.wordinput,'string'));
input=upper(input);
input=strsplit(input);
morse={'.----','..---','...--','....-','.....','-....','--...','---..','----.','-----','.-','-...','-.-.','-..','.','..-.','--.','....','..','.---','-.-','.-..','--','-.','---','.--.','--.-','.-.','...','-','..-','...-','.--','-..-','-.--','--..','/'};
number_and_letter = ['1':'9', '0', 'A':'Z'];
output=number_and_letter(ismember(morse,input));
set(handles.morseoutput,'string',output);
Did I miss anything? because it still cant display more than 1 alphabet or number
Yes, you have missed something. The code I gave was for the case that the input is a single vector of morse code, and it only works in that case. You have to adapt the code to handle multiple vectors, such as taking them one at a time, or using ismember() differently.
Min Hao Soo
Min Hao Soo 2021년 4월 19일
편집: Min Hao Soo 2021년 4월 19일
Ok So I think I figured out how the code should look like but I'm getting the error: Array indices must be positive integers or logical values, on the line: morse_to_word=(number_and_letter(index)); ?
% --- Executes on button press in translatetoword.
function translatetoword_Callback(hObject, eventdata, handles)
% hObject handle to translatetoword (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
input=char(get(handles.wordinput,'string'));
input=upper(input);
morse={'.----','..---','...--','....-','.....','-....','--...','---..','----.','-----',...
'.-','-...','-.-.','-..','.','..-.','--.','....','..','.---','-.-','.-..','--','-.','---','.--.','--.-','.-.','...','-','..-','...-','.--','-..-','-.--','--..',...
'/'};
number_and_letter = ['1':'9', '0', 'A':'Z',' '];
text=strsplit(input,'');
[~, index] = ismember(text, morse);
morse_to_word=(number_and_letter(index));
set(handles.morseoutput,'string',morse_to_word);
It only occurs when I put a slash for example: .../---/...
However when I input ... --- ... with spaces, the output will show S O S in three seperated lines?
You have
text=strsplit(input,'');
but you need
text=strsplit(input,' ');
% ^
You also need to add
text(cellfun(@isempty, text)) = []; %extra spaces must be deleted
input=char(get(handles.morsetextbox,'string'));
morse={'.----','..---','...--','....-','.....','-....','--...','---..','----.','-----',...
'.-','-...','-.-.','-..','.','..-.','--.','....','..','.---','-.-','.-..','--','-.','---','.--.','--.-','.-.','...','-','..-','...-','.--','-..-','-.--','--..','/'};
number_and_letter={'1','2','3','4','5','6','7','8','9','0','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',' '};
text=strsplit(input,' ');
text(cellfun(@isempty, text)) = [];
[~, index] = ismember(text, morse);
morse_to_word=(number_and_letter(index));
set(handles.wordtextbox,'string',morse_to_word);
I'm sorry is this the correct arrangement for adding the line text(cellfun(@isempty, text)) = []; ?
Because I added the line:
translated=(number_and_letter(index));
morse_to_word=strjoin(translated);
And it seem to give me in a straight line with but with extra spaces?
Oh I found the solution, I just need to add(~isspace()) into the last line. Thank you so much for your time and help!
morse_to_word=strjoin(translated, '');

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Graphics Object Properties에 대해 자세히 알아보기

제품

릴리스

R2020b

질문:

2021년 4월 18일

댓글:

2021년 4월 19일

Community Treasure Hunt

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

Start Hunting!

Translated by