quinta-feira, 28 de fevereiro de 2013

CalcNotas - WindowsPhone

Para este post vamos desenvolver uma aplicação, ou como se dizia antigamente um programa, para calcular notas finais de uma disciplina do ensino secundário português.

Como a interface é relativamente grande precisamos de permitir deslocar o conteúdo verticalmente.




Para validar os dados nas textboxes vamos criar uma função que implementa a função isNumeric da versão desktop do Visual Basic.


    Public Function isNumeric(ByVal str As String) As Boolean
        Dim t As Decimal = 0
        Return Decimal.TryParse(str, t)
    End Function

Se a string poder ser convertida num número devolve true se não devolve false.

O primeiro botão serve para calcular a chamada CIF (Classificação Interna Final) que corresponde à média das notas do 10º, do 11º e do 12º ano.

Para isso temos de verificar se cada textbox tem um valor numérico caso contrário não consideramos o seu conteúdo.


    Private Sub Button1_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles Button1.Click
        Dim n10, n11, n12, media, exame, conta As Integer
        Dim notamin As Double

        If isnumeric(Me.tb_nota10.Text) = True Then
            n10 = Me.tb_nota10.Text
            conta = 1
        End If
        If isnumeric(Me.tb_nota11.Text) = True Then
            n11 = Me.tb_nota11.Text
            conta = conta + 1
        End If
        If isnumeric(Me.tb_nota12.Text) = True Then
            n12 = Me.tb_nota12.Text
            conta = conta + 1
        End If
        If conta = 0 Then
            MessageBox.Show("Tem de introduzir pelo menos uma nota!")
            Exit Sub
        End If
        media = (n10 + n11 + n12) / conta
        Me.lb_media.Text = media

        notamin = media * 0.7
        For exame = 1 To 20
            If notamin + exame * 0.3 >= 9.5 Then
                Exit For
            End If
        Next
        Me.tb_exame.Text = exame

    End Sub

O segundo botão calcula a CFD (classificação Final da Disciplina).


    Private Sub Button2_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles Button2.Click
        Dim cif, exame, cfd As Integer

        If isnumeric(lb_media.Text) = False Then
            MessageBox.Show("Calcule primeiro a CIF")
            Exit Sub
        End If
        If isnumeric(tb_nota_exame.Text) = False Then
            MessageBox.Show("Indique a nota do exame!")
            Exit Sub
        End If
        cif = lb_media.Text
        exame = tb_nota_exame.Text
        cfd = cif * 0.7 + exame * 0.3
        Me.tb_cfd.Text = cfd

    End Sub

O terceiro botão guarda a CFD na listbox.


    Private Sub Button3_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles Button3.Click
        If isnumeric(Me.tb_cfd.Text) = False Then
            MessageBox.Show("Calcule primeiro a CFD!")
            Exit Sub
        End If
        Me.ListBox1.Items.Add(Me.tb_cfd.Text)
    End Sub

Por fim temos uma hiperligação que permite abrir uma página da net.


    Private Sub HyperlinkButton1_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles HyperlinkButton1.Click
        Dim pagina As WebBrowserTask = New WebBrowserTask()
        pagina.Uri = New Uri("http://alunosnet.pt.vu", UriKind.Absolute)
        pagina.Show()
    End Sub

Projeto para download




sexta-feira, 8 de fevereiro de 2013

RFID Tags

As etiquetas RFID são, hoje em dia, muito comuns em diversas atividades, desde cartões de identificação a etiquetas para identificar produtos.

RFID significa Radio Frequency Identification (Identificação por rádio frequência).

O principio é simples, existe um leitor e uma etiqueta que comunicam, mas ao contrário dos rádios a etiqueta não tem de ser alimentada (apesar de existirem algumas que são) por baterias, esta é alimentada pelo leitor por um período breve de tempo durante o qual é enviado para o leitor o número de identificação da etiqueta.

Para este pequeno projeto vou utilizar uma placa RFID USB da SparkFun para comunicar com um leitor RFID.





O leitor encaixa na placa que por sua vez liga-se ao computador via USB. Nada mais fácil.




Agora precisamos dos drivers da placa para isso basta seguir este link.

Depois do dispositivo estar instalado temos de saber qual o número da porta que lhe foi atribuído  para isso basta ir ao gestor de dispositivos e procurar na secção portas.



No meu caso é a porta COM31.

Agora vamos até ao Visual Basic fazer um pequeno programa para ler as etiquetas.


No formulário vamos utilizar o componente SerialPort para receber do leitor RFID os dados das etiquetas.


Agora o código.

Primeiro o botão que atualiza a porta de comunicação e abre a porta.



    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click


        If Me.SerialPort1.IsOpen = True Then Me.SerialPort1.Close()

        Try
            Me.SerialPort1.PortName = Me.TextBox1.Text

            If Me.SerialPort1.IsOpen = False Then Me.SerialPort1.Open()
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try


    End Sub


Agora o componente SerialPort, por defeito este já está configurado para um baud rate de 9600 que é a mesma velocidade da placa da SparkFun, como já deve ter percebido esta porta apesar de ser usb utiliza um protocolo de comunicação série tal como o arduino.

Para ler os dados da SerialPort adicionamos um timer que quando detetar dados lê-os e adiciona-os à listbox, o código do timer:


    Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
        Dim letra As Char
        Static texto As String

        If Me.SerialPort1.IsOpen = False Then Exit Sub
        letra = ChrW(Me.SerialPort1.ReadChar())
        If Char.IsLetterOrDigit(letra) Then
            texto = texto & letra
        Else
            If texto = "" Then Exit Sub
            If texto <> "" Then
                Me.ListBox1.Items.Add(texto)
                texto = ""
            End If
        End If

    End Sub

Com este código cada letra da tag é lida individualmente e adicionada à string quando a letra lida não é válida verificamos se terminamos de ler para adicionar à listbox.



O projeto pode ser encontrado aqui.