Artigo EPD2
Artigo EPD2
Artigo EPD2
Frequencímetro Digital
Engenharia de Processamento Digital II
Paulo Augusto Garay Marcio Couto da Rosa Luis Fernando Espinosa Cocian
Graduando do Curso de Engenharia Graduando do Curso de Engenharia Professor do Departamento de
Elétrica Elétrica Engenharia Elétrica
Universidade Luterana do Brasil Universidade Luterana do Brasil Universidade Luterana do Brasil
Canoas, Brasil Canoas, Brasil Canoas, Brasil
pauloagaray@gmail.com marcio.eletrica@gmail.com cocian@ulbra.edu.br
Resumo – Este trabalho referente a disciplina de poderá ser manipulada. Usa-se o nível de acesso mais
Engenharia de Processamento Digital II do Curso de restritivo, private, que faça sentido para um membro
Engenharia Elétrica da Ulbra apresenta um software de particular. Sempre private, a menos que tenha um bom
desenvolvimento de um frequencimetro digital, que através motivo para deixá-lo com outro nível de acesso. Não se
de um supervisório faz a comunicação e aquisição de dados
através de uma interface visual orientada a objetos. O
deve permitir o acesso público aos membros, exceto em
desenvolvimento do software, monitoramento e aquisição de caso de ser constantes. Isso porque membros públicos
dados é feito através de uma interface visual simples tendem a nos ligar a uma implementação em particular e
orientada a objetos. O software possui duas classes que tem limita a flexibilidade em mudar o código.
características onde a classe mais complexa usa o conceito de O Encapsulamento é dividido em dois níveis:
herança da classe menos complexa, além de permitir a Nível de classe: Quando se determina o acesso de uma
alocação de dados em memória permitindo assim a gravação classe inteira que pode ser public ou private (padrão);
e leitura em um arquivo. Com a construção da interface Nível de membro: Quando se determina o acesso de
gráfica, edição do código fonte e aquisição do sinal do
atributos ou métodos de uma classe que podem ser public,
gerador de funções, o software apresentou resultados
satisfatórios diante da proposta inicial do trabalho, onde o private ou protectec. Para ter um método encapsulado
mesmo tinha o objetivo de realizar a coleta e controle dos utiliza-se um modificador de acesso que geralmente é
dados enviados a placa. public, além do tipo de retorno dele. Para se ter acesso a
algum atributo ou método que esteja encapsulado utiliza-
Palavras Chaves – Monitoramento, aquisição de dados, se o conceito de get e set. Por definição, com SET é feita
interface gráfica. uma atribuição a algum atributo, ou seja, define, diz o
valor que algum atributo deve ter. E com GET é possível
recuperar esse valor a partir do momento que temos a
I. INTRODUÇÃO disposição uma coleção de classes devidamente testadas e
com um funcionamento a prova de erros, para criar novos
A programação Orientada a objetos surgiu com o principal sistemas basta usar estas classes, sem nenhuma
objetivo de unir os dados e funções em um único necessidade de reescrever e adaptar código. Isto dá, sem
elemento: o objeto. Esta metodologia utilizada traz uma sombra de dúvida, maior rapidez e, conseqüentemente,
série de vantagens sobre outras linguagens de produtividade, produtividade no desenvolvimento de
programação, como: sistemas.
Reusabilidade: as classes que compõem um sistema
podem ser aproveitadas em outros sistemas, sem qualquer
alteração, pois dados e funções estão contidos dentro da
classe. Caso haja necessidade, podem-se criar novas
classes baseadas em outras já existentes, herdando as
características da classe pai.
Encapsulamento: vem de encapsular, que em
programação orientada a objetos significa separar o
programa em partes, o mais isolado possível. A idéia é
tornar o software mais flexível, fácil de modificar e de
criar novas implementações. O Encapsulamento serve para
controlar o acesso aos atributos e métodos de uma classe.
É uma forma eficiente de proteger os dados manipulados
dentro da classe, além de determinar onde esta classe
Classe cequipamento:
voidcEquipamento::setNomeInstrumento(std::string
nome){
NomeInstrumento = nome; Fig. 2. Botão configurar
}
Fig. 4. Log
Fig. 5. Arquivo
Fig.6. Comunicação
VI. CONCLUSÕES
//variáveis globais
#ifndefcEquipamentoH
#define cEquipamentoH cFrequencimetro.h
#include <string> //biblioteca para usar string //--------------------------------------------------------------------
-------
classcEquipamento{ #ifndefcFrequencimetroH
public: #define cFrequencimetroH
cEquipamento(); //construtor padrão da classe #include <string> //biblioteca para usar string
cEquipamento(std::string nome); //sobrecarga do
construtor //uso de herença da classe cEquipamento
~cEquipamento(); //destrutor padrão da classe #include "cEquipamento.h"
private: floatgetlimiteInferior();
std::stringNomeInstrumento, Fabricante; floatgetlimiteSuperior();
};
//-------------------------------------------------------------------- private:
------- floatlimiteInferior, limiteSuperior;
#endif };
//--------------------------------------------------------------------
-------
cFrequencimetro.cpp #endif
//--------------------------------------------------------------------
-------
#pragmahdrstop dadosEquipamento.cpp
#pragmahdrstop
#include "cFrequencimetro.h"
///#include "frequencimetro.h" #include "dadosEquipamento.h"
cFrequencimetro::cFrequencimetro(){} //construtor #include "frequencimetro.h"
padrão da classe //--------------------------------------------------------------------
cFrequencimetro::~cFrequencimetro(){} //destrutor -------
padrão da classe #pragmapackage(smart_init)
#pragmaresource "*.dfm"
TFormDadosEquipamento *FormDadosEquipamento;
voidcFrequencimetro::setFaixaTrabalho(float //--------------------------------------------------------------------
_limiteInferior, float _limiteSuperior){ -------
limiteInferior = _limiteInferior; __fastcallTFormDadosEquipamento::TFormDadosEquipa
limiteSuperior = _limiteSuperior; mento(TComponent* Owner)
} : TForm(Owner)
{
floatcFrequencimetro::getlimiteInferior(){ }
returnlimiteInferior; //--------------------------------------------------------------------
} -------
floatcFrequencimetro::getlimiteSuperior(){ void
returnlimiteSuperior; __fastcallTFormDadosEquipamento::FormShow(TObject
} *Sender)
{
//carrega informações do formInicial
Paulo Garay e Marcio Couto
8
EPD II
LabelFabricante->Caption = FormInicial->fabricante; //--------------------------------------------------------------------
LabelLI->Caption = FloatToStr(FormInicial- -------
>limiteInferior);
LabelLS->Caption = FloatToStr(FormInicial- #include <vcl.h>
>limiteSuperior); #pragmahdrstop
}
//-------------------------------------------------------------------- #include "grafico.h"
------- //--------------------------------------------------------------------
void -------
__fastcallTFormDadosEquipamento::Button1Click(TObje #pragmapackage(smart_init)
ct *Sender) #pragmaresource "*.dfm"
{ TFormGrafico *FormGrafico;
Close(); //--------------------------------------------------------------------
} -------
//-------------------------------------------------------------------- __fastcallTFormGrafico::TFormGrafico(TComponent*
------- Owner)
: TForm(Owner)
{
dadosEquipamento.h }
//-------------------------------------------------------------------- //--------------------------------------------------------------------
------- -------
void __fastcallTFormGrafico::Button1Click(TObject
#ifndefdadosEquipamentoH *Sender)
#define dadosEquipamentoH {
//-------------------------------------------------------------------- Close();
------- }
#include <Classes.hpp> //--------------------------------------------------------------------
#include <Controls.hpp> -------
#include <StdCtrls.hpp>
#include <Forms.hpp>
//-------------------------------------------------------------------- grafico.h
------- //--------------------------------------------------------------------
classTFormDadosEquipamento : publicTForm -------
{
__published: // IDE-managedComponents #ifndefgraficoH
TLabel *Label1; #define graficoH
TLabel *LabelLI; //--------------------------------------------------------------------
TLabel *Label3; -------
TLabel *Label4; #include <Classes.hpp>
TLabel *LabelLS; #include <Controls.hpp>
TLabel *Label6; #include <StdCtrls.hpp>
TLabel *LabelFabricante; #include <Forms.hpp>
TButton *Button1; #include <Chart.hpp>
void __fastcallFormShow(TObject *Sender); #include <ExtCtrls.hpp>
void __fastcall Button1Click(TObject *Sender); #include <Series.hpp>
private: // Userdeclarations #include <TeEngine.hpp>
public: // Userdeclarations #include <TeeProcs.hpp>
__fastcallTFormDadosEquipamento(TComponent* //--------------------------------------------------------------------
Owner); -------
}; classTFormGrafico : publicTForm
//-------------------------------------------------------------------- {
------- __published: // IDE-managedComponents
extern PACKAGE TFormDadosEquipamento TPanel *Panel1;
*FormDadosEquipamento; TChart *Chart1;
//-------------------------------------------------------------------- TLineSeries *Series1;
------- TButton *Button1;
#endif void __fastcall Button1Click(TObject *Sender);
private: // Userdeclarations
public: // Userdeclarations
grafico.cpp __fastcallTFormGrafico(TComponent* Owner);
};
Paulo Garay e Marcio Couto
9
EPD II
//-------------------------------------------------------------------- void __fastcallTFormLog::ButtonLimparClick(TObject
------- *Sender)
extern PACKAGE TFormGrafico *FormGrafico; {
//-------------------------------------------------------------------- if( Application->MessageBox("Deseja limpar o arquivo
------- de log?", "Arquivo de Log", MB_YESNO |
#endif MB_ICONQUESTION) == IDYES )
MemoRegistros->Clear();
}
log.cpp //--------------------------------------------------------------------
//-------------------------------------------------------------------- -------
------- void __fastcallTFormLog::printCabecalho()
{
#include <vcl.h> MemoRegistros->Clear();
#pragmahdrstop MemoRegistros->Lines-
>Add("====================================
#include "log.h" ====");
//-------------------------------------------------------------------- MemoRegistros->Lines->Add("..:: Frequêncimetro
------- Digital Arduino ::..");
#pragmapackage(smart_init) MemoRegistros->Lines-
#pragmaresource "*.dfm" >Add("====================================
TFormLog *FormLog; ====");
//-------------------------------------------------------------------- MemoRegistros->Lines->Add("Coleta de dados
------- inicializada: "+TimeToStr(Time()));
__fastcallTFormLog::TFormLog(TComponent* Owner) }
: TForm(Owner) void __fastcallTFormLog::FormShow(TObject *Sender)
{ {
} printCabecalho();
//-------------------------------------------------------------------- }
------- //--------------------------------------------------------------------
void __fastcallTFormLog::ButtonSalvarClick(TObject -------
*Sender) void __fastcallTFormLog::ButtonFecharClick(TObject
{ *Sender)
//direciona para a pasta Medições que esta junto ao {
executável Close();
SaveDialog1->InitialDir = ExtractFilePath(Application- }
>ExeName)+"\Medições"; //--------------------------------------------------------------------
//se executou o SaveDialog, ou seja, mandou salvar -------
if (SaveDialog1->Execute()){
MemoRegistros->Lines->SaveToFile(SaveDialog1-
>FileName); log.h
ShowMessage("Arquivo de medições salvo."); //--------------------------------------------------------------------
} -------
}
//-------------------------------------------------------------------- #ifndeflogH
------- #define logH
void __fastcallTFormLog::ButtonCarregarClick(TObject //--------------------------------------------------------------------
*Sender) -------
{ #include <Classes.hpp>
OpenDialog1->InitialDir = ExtractFilePath(Application- #include <Controls.hpp>
>ExeName)+"\Medições"; #include <StdCtrls.hpp>
//se executou o OpenDialog, ou seja, mandou abrir um #include <Forms.hpp>
arquivo #include <ExtCtrls.hpp>
if (OpenDialog1->Execute()){ #include <Dialogs.hpp>
MemoRegistros->Lines->LoadFromFile(OpenDialog1- //--------------------------------------------------------------------
>FileName); -------
ShowMessage("Arquivo de medições carregado."); classTFormLog : publicTForm
} {
} __published: // IDE-managedComponents
//-------------------------------------------------------------------- TPanel *Panel4;
------- TMemo *MemoRegistros;
TButton *ButtonLimpar;
Paulo Garay e Marcio Couto
10
EPD II
TButton *ButtonSalvar; Application->ShowException(&exception);
TButton *ButtonCarregar; }
TSaveDialog *SaveDialog1; catch (...)
TOpenDialog *OpenDialog1; {
TButton *ButtonFechar; try
void __fastcallButtonSalvarClick(TObject *Sender); {
void __fastcallButtonCarregarClick(TObject *Sender); throwException("");
void __fastcallButtonLimparClick(TObject *Sender); }
void __fastcallFormShow(TObject *Sender); catch (Exception&exception)
void __fastcallButtonFecharClick(TObject *Sender); {
private: // Userdeclarations Application->ShowException(&exception);
public: // Userdeclarations }
__fastcallTFormLog(TComponent* Owner); }
//função que imprime um cabeçalho return 0;
void __fastcallprintCabecalho(); }
}; //--------------------------------------------------------------------
//-------------------------------------------------------------------- -------
-------
extern PACKAGE TFormLog *FormLog;
//-------------------------------------------------------------------- sobre.cpp
------- //--------------------------------------------------------------------
#endif -
#include <vcl.h>
#pragmahdrstop
prjFrequencimetro.cpp
//-------------------------------------------------------------------- #include "sobre.h"
------- //--------------------------------------------------------------------
-
#include <vcl.h> #pragmaresource "*.dfm"
#pragmahdrstop TFormSobre *FormSobre;
//-------------------------------------------------------------------- //--------------------------------------------------------------------
------- -
USEFORM("frequencimetro.cpp", FormInicial); __fastcallTFormSobre::TFormSobre(TComponent*
USEFORM("sobre.cpp", FormSobre); AOwner)
USEFORM("grafico.cpp", FormGrafico); : TForm(AOwner)
USEFORM("log.cpp", FormLog); {
USEFORM("dadosEquipamento.cpp", }
FormDadosEquipamento); //--------------------------------------------------------------------
//-------------------------------------------------------------------- -
-------
WINAPI WinMain(HINSTANCE, HINSTANCE,
LPSTR, int) sobre.h
{ //--------------------------------------------------------------------
try --------
{ #ifndefsobreH
Application->Initialize(); #define sobreH
Application->CreateForm(__classid(TFormInicial), //--------------------------------------------------------------------
&FormInicial); --------
Application->CreateForm(__classid(TFormLog), #include <vcl\System.hpp>
&FormLog); #include <vcl\Windows.hpp>
Application->CreateForm(__classid(TFormGrafico), #include <vcl\SysUtils.hpp>
&FormGrafico); #include <vcl\Classes.hpp>
Application->CreateForm(__classid(TFormSobre), #include <vcl\Graphics.hpp>
&FormSobre); #include <vcl\Forms.hpp>
Application- #include <vcl\Controls.hpp>
>CreateForm(__classid(TFormDadosEquipamento), #include <vcl\StdCtrls.hpp>
&FormDadosEquipamento); #include <vcl\Buttons.hpp>
Application->Run(); #include <vcl\ExtCtrls.hpp>
}
catch (Exception&exception) //--------------------------------------------------------------------
{ --------
Paulo Garay e Marcio Couto
11
EPD II
classTFormSobre : publicTForm
{
__published:
TPanel *Panel1;
TImage *ProgramIcon;
TLabel *Version;
TLabel *Copyright;
TLabel *Comments;
TButton *OKButton;
TLabel *Label1;
private:
public:
virtual __fastcallTFormSobre(TComponent*
AOwner);
};
//--------------------------------------------------------------------
--------
extern PACKAGE TFormSobre *FormSobre;
//--------------------------------------------------------------------
--------
#endif