documentação da calculadora java
DESCRIPTION
explicando os códigos utilizados em uma calculadora virtual feita na linguagem javaTRANSCRIPT
FACULDADE SUMARÉ
BACHARELADO EM CIÊNCIA DA COMPUTAÇÃO
ATIVIDADE DE LABORATÓRIO DE PROGRAMAÇÃO I
Filipe Augusto Santos Chaves1421631
Ciência da Computação 3°Semestre
CALCULADORA EM JAVA
São Paulo2015
. 1
SUMÁRIO
1 INTRODUÇÃO .........................................................................................................12
2 DESENVOLVIMENTO.................................................................................................14
3 CONCLUSÃO .........................................................................................................27
. 2
INTRODUÇÃO
A presente atividade tem como proposito apresentar uma calculadora sem
bugs e com todas as aplicações que uma calculadora, normal, apresenta. A
calculadora foi feita em linguagem java utilizando a IDE NetBeans.
No início a calculadora apresentava alguns bugs, mas me dediquei, pesquisei
é foi possível corrigir esses erros. O que mais implicou no desenvolvimento da
atividade foi a falta de conhecimento na linguagem java, pois estava me dedicando
apenas na linguagem C. No entanto, a calculadora funciona normalmente e os bugs
foram corrigidos.
A calculadora apresenta vinte seis botões, sendo 10 botões numéricos
(0,1,2,3,4,5,6,7,8,9), 9 botões representam expressões matemáticas (soma,
subtração, divisão, multiplicação, potência, Raiz quadrada, Inverso, oposto, igual), 3
botões para apagar dados (Backspace, Clear, All Clear), 3 botões para controle dos
números que serão armazenados na memória [MS(Guardar na memória), MR (Retorna
memória) e MC (Limpa a memória) ].
. 3
DESENVOLVIMENTO
A respeitável atividade apresentada foi iniciada na primeira semana de
outubro, porém, por alguns problemas, foi na terceira semana que conclui a
atividade. Basicamente, fiz o projeto todo em um único dia (27/10/2015) e no dia
seguinte finalizei corrigindo alguns bugs e nos dias finais fiz a parte da
documentação.
Bom, iniciei tratando dos funcionamentos dos botões numéricos e em seguida
das operações matemáticas mais simples e depois as mais complexas, por último
finalizei tratando dos botões MS, MR e MC.
Funcionamentos dos botões
Dos botões numéricos:Os botões que representam os números inteiros de 0 a 9.
Foi aplicado a seguinte logica:
temp = jt_tela.getText();-- Vai pegar o que tem no visor(no caso a tela) e
armazenar na variável temp que é do tipo string.
temp = temp + "7";-- Vai adicionar o que tem no visor mais o número 7 ( que foi
usado como exemplo
jt_tela.setText(temp);-- Aqui irá mostrar na tela o temp atualizado, ou seja, com
o números digitado anteriormente mais o 7 que foi adicionado recentemente.
Dos botões de expressões matemáticas mais simples:Tomaremos como exemplo a expressão de adição
1° passo:
operacao = '+'; --Variável ira guardar o sinal + para quando o usuário aperta o
botão de ‘=’ cair em um switch e fazer a operação.
. 4
n1 = Float.parseFloat(jt_tela.getText());-- Armazena em na variável N1 o
número que estiver na tela e passar de string para o tipo float.
jt_tela.setText("");-- Depois limpa a tela para ser digitado o próximo número
2°passo:
Quando o usuário aperta o próximo botão e o sinal de igual.
n2 = Float.parseFloat(jt_tela.getText()); -- Aqui o usuário apertou o segundo
número que foi armazenado na variável n2 e foi passado, automaticamente para o
tipo float.
switch(operacao){ O switch foi utilizado, pois a mais de uma expressão
matemática na calculadora
case '+':-- Se o botão + foi apertado, foi armazenado na variável operação o sinal
de mais.
resultado = n1 + n2; -- Com os valores armazenados nas duas variáveis,
foi criado outra variável para receber o resultado dos dois números conforme a
expressão escolhida.
break;
}
jt_tela.setText(String.valueOf(resultado));-- Mostrará na tela o resultado da
expressão.
Dos botões de expressões matemáticas mais complexas:Tomaremos como exemplo a expressão de potência
n1 = Float.parseFloat(jt_tela.getText());-- Armazenado em na variável n1 o
valor da tela e passa para o tipo float para ser feito o cálculo, pois como uma string
não é possível fazer o cálculo.
resultado = n1*n1;-- O com valor armazenado em uma variável e estando como
tipo float é possível fazer o calculo,e é que foi feito e foi armazenado o resultado na
variável resultado.
. 5
jt_tela.setText(String.valueOf(resultado));-- Depois de ser feito o cálculo
será inserido na tela o valor armazenado na variável resultado.
Dos botões MS, MR e MC
Primeiramente é preciso saber o que esses botões fazem.
MS -- Quando você tiver um valor e quiser guardá-lo, você usa este botão. Quando você quiser
somar um valor ao valor armazenado no MS é só aperta-lo novamente que irá só com o número
armazenado o novo número.
MR -- dá a você o valor guardado na memória. Cada vez que você aperta este botão, ele traz o
valor armazenado anteriormente.
MC -- Apaga o valor armazenado na memória.
Vamos lá:
O usuário quer armazenar o valor na memória, então ele aperta o MS.
memoria = Double.parseDouble(jt_tela.getText());-- Apertando o botão
automaticamente irá armazenar na variável memoria.
somamemoria = somamemoria + memoria – Com o valor armazenado na
variável memoria, caso o usuário aperte novamente o MS irá somar em outra
variável somamemoria.
Após ser armazenado o valor na memória, o usuário quer ver o valor. Então ele
aperta o MR.
jt_tela.setText(String.valueOf(somamemoria)); -- Automaticamente, irá
aparecer na tela o valor armazenado e convertendo o valor para uma string
Caso o usuário queira apagar o valor armazenado ele apertará o botão MC
memoria=0; -- Zera o valor, ou seja, muda o valor da memória por zero
somamemoria=0; -- Zera o valor, ou seja, muda o valor da memória por zero
. 6
Dos botões com função de apagar o que estiver na tela
O usuário apertando o botão backspace
String str = jt_tela.getText(); -- Foi criado uma variável str, que irá receber o
valor na tela.
StringBuilder w = new StringBuilder(str); -- A classe stringbuilder permite criar
ou manipular dados de uma strig, é preciso utilizar esse método para construir o
botão backspace.
str = String.valueOf( w.deleteCharAt(str.length() - 1) ); -- A variável str será
igual o valor recebido na tela menos um caracter
jt_tela.setText(str);-- mostrará o valor da variável str em tela.
Os códigos utilizados nos botões
VARIAVELQUAISQUER.jt_tela.setText("");-- Bom, esse código insere o valor
da variável na tela jt_tela.
VARIAVELQUAISQUER = Double.parseDouble(jt_tela.getText());-- Esse
código recebe para a variável QUAISQUER um valor inserido. Nesse caso, a
variável erá uma string e foi passado para o tipo double.
. 7
. 8
FIGURA 2: Fluxograma do processo. Após a ativação da chave geral há a
verificação de como está o nível se este estiver normal o programa vai para o final.
Caso contrario o programa verifica se o nível está baixo, se sim a válvula é ativada.
Caso contrario o programa verifica se o nível está alto se sim a válvula é desligada.
Caso contraria, o programa irá para o final. Esta verificação deverá ser feita a todo
tempo.
.
INICIO
LIGA CHAVE GERAL
NÃO
NÃONÍVEL ESTÁ ALTO?
SIM
NÍVEL ESTÁ BAIXO?
SIM
LIGA VÁLVULA
DESLIGA VÁLVULA
FIM
NÍVEL ESTÁ NORMAL?
NÃO
SIM
9
Partindo-se do fluxograma foi possível a realização do programa no Ldmicro.
Este software possui uma biblioteca de componentes que engloba desde contatos
normalmente aberto e fechado (NA e NF) até contadores, temporizadores (Santos,
2006) e controle do tipo PWM (Ahmed, 1999). A figura 3 abaixo mostra a biblioteca
de componentes do Ldmicro.
Figura 3: Biblioteca de componentes do software Ldmicro. Aqui podemos localizar
uma gama razoável de componentes, eles podem variar desde contatos até chaves,
temporizadas e controle PWM.
A lógica obtida para o funcionamento do automatismo de controle de nível foi
relativamente simples, sendo que os únicos componentes de controle que deverão
ser utilizados serão os contatos NA (normalmente abertos) os contatos NF
(normalmente fechados) e saídas comuns (Santos, 2006) Vemos na figura 4 o
programa feito no Ldmicro, nota-se também que foi necessário o uso de memórias
. 10
internas do microcontrolador (Flores, 2005). As saídas e entradas do sistema devem
ser endereçadas de forma coerente com as saídas e entradas do microcontrolador,
estes endereços podem ser encontrados nos datasheet´s dos microcontroladores
(Marques, 2004). No caso do software Ldmicro as entradas de dados são sempre
denominadas de “X” seguidas de algum numero ou texto, já as saídas são
denominadas de “Y” também seguidas de números ou textos. A relação entre as
saídas e entradas do software com as saídas e entrada do microcontrolador pode
ser vista na Tabela 1. Outra vantagem deste software está no fato de podermos
simular a situação. Ou seja, antes de conectarmos qualquer componente ao circuito
é possível a verificação da lógica de programação no próprio software. Está
ferramenta é muito útil, já a simulação será um primeiro teste relacionado com o
funcionamento da lógica.
Figura 4: Software de controle feito no Ldmicro. Vemos que só com o uso de
contatos NA, NF e saídas normais foi possível realizarmos a programação,
respeitando a lógica proposta.Temos também o endereçamento utilizado (Tabela 1).
O R1 indica o uso de um endereço interno de memória (Flores, 2005).
Depois de feitas a programação e a simulação é hora de compilarmos
(Pereira, 2005). O processo de compilação consiste em convertermos uma
linguagem de programação de alto nível, conhecida também como linguagem de
. 11
usuário, no nosso caso o LADDER, em linguagem de baixo nível, linguagem de
máquina ou hexadecimal (Pereira, 2005).
Tabela 1: Relação entre as entradas e saídas (E/S) do microcontrolador com as
entradas e saídas programadas no Ldmicro e estruturas externas (sensores,
atuadores e indicadores) .RA e RB indicam as portas utilizadas do microcontrolador
(Pereira, 2005).
E/S
Microcontrolador
E/S
Software Ldmicro
Estrutura a ser
controlada
RA2 - Pino 1 Xalto Sensor de nível alto
RA4 - Pino 3 Xbaixo Sensor de nível baixo
RB4 - Pino 10 YLED1 Indica entrada de liquido
RB6 - Pino 12 YLED2 Indica nível normal
RA1 - Pino 18 Ysolenoide Controla a entrada
O processo de compilação irá gerar um arquivo hexadecimal que poderá ser
gravado no microcontrolador. Para que a gravação possa ocorrer é necessário que
se tenha um software de gravação, este software é única e exclusivamente utilizado
para que sejam feitos a comunicação do computador com o microcontrolador e o
envio do código hexadecimal para o microcontrolador, neste trabalho foi utilizado o
Icprog (Gtronica, 2007). Além do software para gravação e também necessário um
hardware de gravação (Pereira, 2005). Este hardware nada mais é que um circuito
eletrônico capaz de fazer a comunicação física entre o microcontrolador e o
computador, este processo pode ser visto na figura 5. Um exemplo de circuito
eletrônico de gravação para microcontroladores PIC16f628 pode ser visto na figura
6, estes circuitos são facilmente encontrados em lojas especializadas.
. 12
Figura 5: Temos o processo de transferência do arquivo em hexadecimal para o
microcontrolador. O hardware de gravação é o circuito eletrônico capaz de realizar a
interface entre computador e microcontrolador. E o software de gravação é o
responsável pelo envio do arquivo hexadecimal.
Figura 6: Exemplo de placa de circuito para gravação de microcontroladores
PIC16f628. Esta placa é utilizada na comunicação entre o computador e o
microcontrolador.
Após o microcontrolador estar programado ele já está praticamente apto a
executar a função de controlar o enchimento automático do recipiente com liquido.
Porém antes disso faz-se necessário a criação de um circuito eletrônico de
acionamento e proteção para o microcontrolador (driver´s de potencia).
. 13
2.2 Descrição do Hardware.
O hardware de controle do automatismo tem duas funções básicas, controlar
os componentes de saída e entrada de informações e proteger o microcontrolador
de altas correntes e tensões, já que esse normalmente trabalha com tensões e
correntes relativamente baixas (Pereira, 2005).
O que irá controlar todo o processo será o microcontrolador. O
processamento do programa é feito na estrutura interna do mesmo que é composta
por diversos periféricos (Pereira, 2005).
Quando um sinal é enviado a porta de entrada de um microcontrolador este
irá processar a informação e ligará está ao programa. Após a lógica ter sido
executada o microcontrolador enviará para uma de suas saídas um sinal, agora
processado, que terá a função especifica determinada pelo programa.
Um exemplo para este processo pode ser visto no presente trabalho. Quando
o liquido se encontra em um nível abaixo do esperado o sensor de nível baixo irá
enviar um sinal para a entrada do microcontrolador especificada no programa, este
sinal será processado. Em seguida o microcontrolador enviará um sinal processado
a saída que foi previamente determinada. Neste caso o sinal de saída servirá para
ativar a válvula solenóide.
O hardware aqui proposto irá exatamente servir para “interfacear” as portas
de entrada e saída do microcontrolador com os sensores, sinalizadores e válvula
solenóide.
. 14
Figura 7: Circuito eletrônico utilizado para controlar os dispositivos de entrada e
saída do sistema.
O circuito eletrônico pode ser dividido em quatro grupos, são eles: O
microcontrolador, os circuitos de entrada de dados, os circuitos de saídas de dados
e o oscilador.
O microcontrolador pode ser considerado o “cérebro” do circuito, já que é ele
que executará as informações programadas. A escolha da pinagem a ser utilizada
deve estar de acordo com o endereçamento dado no programa. A figura 8 abaixo
ilustra a pinagem do microcontrolador PIC16F628.
Figura 8: Descrição da pinagem do microcontrolador PIC16F62X, classe que
engloba o PIC16F628 . As entradas e saídas são representadas por RA e RB (ver
Anexo A).
Os circuitos de entrada são aqueles que receberão o sinal dos sensores de
nível. Os pinos utilizados para este fim foram o pino 1 e o pino 3 (ver figura 7). O
circuito básico de entrada pode ser visto na figura 9. Temos dois resistores, sendo
que o R1 é utilizado como limitador de corrente, e o R2 é utilizado para forçar a
entrada a zero quando não temos nível alto (Capuano, 2006).
. 15
PIC16F628
1
2
3
4
5
6
7
8
9
13
10
11
12
13
14
15
16
17
18
VDDVSS
C1
C2Xtal
S1
T1
D
R1
R1
R1
RL
RL
R2
R2
R3
R3
VCC
VCC
VCC
Quando algum dos sensores for ativado haverá o envio de pulso para este
circuito que por sua vez permitirá que o sinal entre com um valor adequado no
microcontrolador. O dimensionamento de R1 e R2 devem ser feitos baseados no
valor do pulso que será enviado pelos sensores (Capuano, 2006). O circuito tem
assim um papel controlar a intensidade de corrente que o microcontrolador irá
receber..
.
Figura 9: Circuito de proteção da entrada do microcontrolador. Quando algum dos
sensores for acionado um pulso será enviado a este circuito que terá a função de
limitar a corrente que entrará no microcontrolador. Os valores de R1 e R2 são
dimensionados a partir do valor da amplitude do pulso.
Os circuitos de saída servirão para acionar a solenóide a as sinalizações.
Assim como as entradas dos microcontroladores só devem receber correntes
relativamente baixas. As saídas enviam pulsos de sinal muito baixo. Esses sinais
normalmente não são suficientes para acionar os componentes de saída. Por isso, o
uso de circuitos eletrônicos de saída se faz necessário. Foram utilizados neste
trabalho dois tipos de circuito de saída. O circuito utilizado no acionamento do
solenóide (figura 10) deve-se ao fato desta ter uma tensão de ativação relativamente
alta (referencia). O mesmo se observou na sinalização, como os componentes
possuem altos valores de tensão de trabalho fez-se necessário o uso do circuito de
controle de potencia (figura 11). Ambos os circuitos de controle foram feitos
utilizando transistores trabalhando como chave (Marques, 2004).
. 16
R2
R3
S1
T1
D
R1
VCC
Figura 10: Circuito de acionamento da válvula solenóide. Quando um pulso é
enviado a saída do microcontrolador a polarização do transistor ocorre causando o
fechamento da bobina do relé e por conseqüência a válvula solenóide é ativada. T1
é o transistor, D é o diodo de proteção, R1 é o resistor de polarização de base e S1
é a bobina da válvula solenóide.
Figura 11: Circuito de acionamento da sinalização. Quando um pulso é enviado a
saída do microcontrolador a polarização do transistor ocorre fazendo com que o
fluxo de corrente acione a sinalização. O resistor R1 é de polarização e o resistor RL
é o limitador de corrente do LED.
O circuito oscilador é utilizado nos microcontroladores para gerar o
sincronismo nos processos internos maiores, detalhes consultar Pereira, 2005. O
modelo básico de um oscilador pode ser visto abaixo (figura 12) ele é composto por
dois capacitores C! e C2 e um cristal oscilador.
. 17
R1
RL
VCC
Figura 12: Circuito básico de oscilação. Este circuito ´utilizado para gerar
sincronismo entre as diversas funções internas do microcontrolador.
Com o circuito eletrônico de controle montado basta que sejam feitas a
interligação com os sensores, atuadores e sinalizadores juntamente com o recipiente
para que o sistema possa ser testado. A figura 13 mostra um diagrama geral de
como será a disposição dos componentes no recipiente. Vemos que todos os
componentes de controle estão ligados no circuito eletrônico.
. 18
C2Xtal
C1
Válvula solenóide: Utilizada para controlar a entrada de liquido
RECIPIENTE
Saída de liquido
Sensor de nível alto: Quando é ativado a válvula solenóide é desativada.
Sensor de nível baixo: Quando é ativado a válvula solenóide é ativada.
Sinalização: Indicam quando o recipiente está em nível normal ou se enchendo.
Circuito eletrônico
Figura 13: Diagrama esquemático da ligação dos componentes no recipiente. Vemos
que os sensores, atuadores e sinalizadores estão interligados no circuito eletrônico
de controle.
CONCLUSÃO
. 19
A automação industrial e residencial vem cada vez mais se tornado
parte do nosso dia-a-dia. A cada instante surgem novos e sofisticados
sistemas de automação que visam facilitar as nossos tarefas tanto no trabalho
como em casa.
O presente trabalho propôs uma solução prática e fácil para a
automação de um sistema de controle de nível, tendo como controlador o
circuito integrado PIC16F628. A escolha deste circuito foi feita devido a ele
possuir grande aceitação na indústria e no comercio.
O sistema consiste de um recipiente que deve ser enchido
automaticamente com um liquido qualquer. Para foram utilizados dois
sensores de nível, sendo um de nível alto e outro de nível baixo, uma válvula
solenóide e um sistema de sinalização.
Quando o sensor de nível baixo for ativado um sinal será enviado para
o microcontrolador, que por sua vez fará com que a válvula atue, liberando a
entrada de liquido no recipiente. Quando o sensor de nível alto for acionado a
válvula será desligada fazendo com que o liquido para de entrar.
Tendo como base as simulações realizadas, temos que o sistema
realizado pode ser usado de forma adequada para realização do controle de
nível de liquido.
REFERÊNCIAS BIBLIORÁFICAS
. 20
Ahmed, A. Eletrônica de Potência, São Paulo: Person Education, 1999.
Bonacorso, N. G. Noll, V. Automação Eletropneumatica, 9 ed. São Paulo: Érica, 2006.
Capuano, G. F. e Idoeta, I. V. Elementos de Eletrônica Digital, 38 ed. São Paulo: Érica, 2006.
Flores, A. Matinez, E. Programación Del PIC 16F876A Con Software LDmicro para elaboración de un PLC. UNEFA- Núcleo Maracay. 2006.
Georgini, M. Automação Aplicada: Descrição e Implementação de Sistemas Seqüenciais com PLC, 8 ed., São Paulo: Érica, 2007.
Gtronica, IC-PROG: Manual de Configuração e Programação, Disponível em: <http://shop.gtronica.com/download/programadores/IC-prog%20conf%20e%20prog.pdf> Acesso em 04 de Dezembro de 2007.
Marques, B. E. A. Cruz, E. C. A. et al, Dispositivos Semicondutores: Diodos e transistores, 9 ed. São Paulo: Érica, 2004.
Natale, F. Automação Industrial, 8 ed. São Paulo: Érica, 2006.
Pereira, F. Microcontroladores PIC: Programação em C, 4 ed. São Paulo: Érica, 2005.
Santos, W. E. e Silveira, P. R. Automação e Controle Discreto, 7 ed. São Paulo: Érica, 2006.
Thomazini, D. e Albuquerque, P. U. B. Sensores Industriais: Fundamentos e Aplicações, 3 ed. São Paulo, Érica, 2007.
. 21