Programming VB.NET : QR Code Generator menggunakan VB.NET

1. Download file MessagingToolkit.QRCode.dll di https://osdn.net/projects/sfnet_qrreader/downloads/MessagingToolkit.QRCode.dll/
2. Buat project baru berisi :
    a. textbox
    b. picturebox
    c. button
    d. safefiledialog
3. Tambahkan MessagingToolkit.QRCode.dll ke Reference
4. Copy-Paste code dibawah ini

Public Class Form1
    Dim QR_Code As New MessagingToolkit.QRCode.Codec.QRCodeEncoder
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    End Sub

    Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
        Try
            PictureBox1.Image = QR_Code.Encode(TextBox1.Text)
        Catch ex As Exception

        End Try
    End Sub

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

    Private Sub SaveFileDialog1_FileOk(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles SaveFileDialog1.FileOk
        Try
            Dim img As New Bitmap(PictureBox1.Image)
            img.Save(SaveFileDialog1.FileName, Imaging.ImageFormat.Jpeg)
        Catch ex As Exception

        End Try
    End Sub
End Class

Selesai

Programming VB.NET : Mengenai Serial Port VS USB Port, dan Send/Receive di Serial Port.

Pada dasarnya pengiriman/penerimaan data melalui serial port sudah tidak populer lagi dalam penerapan sehari-hari, karena pada umumnya sudah digantikan dengan USB Port.
Namun dalam beberapa hal masih muncul permasalahan tersebut karena terkait dengan peralatan tertentu yang masih menggunakan Serial Port. Agar tidak menjadi rancu, sebenarnya USB Port adalah pengembangan dari Serial Port, hanya saja pola pengiriman datanya yang pada Serial port terdiri dari 9 kaki (pin) dirubah menjadi 4 kaki (pin) pada USB Port. Secara teknis, perubahan dari 9 pin menjadi 4 pin dimungkinkan karena pada setiap peralatan berbasis USB Port akan mempunyai 1 unit IC konversi dari 9 pin ke 4 pin.
Artinya tidak menjadi kendala kalau di komputer kita hanya ada USB Port, tinggal pasang saja USB to Serial Converter, setelah itu proses kirim/terima data bisa menggunakan Mode Serial Port. Dalam kaitan dengan Programming, kita bisa saja memanfaatkan mode Serial Port karena Serial Port dan USB Port sangat kompatibel. Saya sudah coba beberapa merk Converter di beberapa OS (Win XP s/d WIn 10, 32 bit dan 64 bit). Berikut ini saya sampaikan contoh code yang berkaitan dengan Pengiriman dan Penerimaan data mengunakan Serial Port.
Imports System
Imports System.IO
Imports System.Threading
Public Class Form1
Dim COMPorts As Array
Dim RcvMessage As String
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
COMPorts = IO.Ports.SerialPort.GetPortNames()
For i = 0 To UBound(COMPorts)
ComboBox1.Items.Add(COMPorts(i))
Next
ComboBox1.Text = ComboBox1.Items.Item(0)
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If Button1.Text = “Open” Then
Button1.Text = “Close”
ComboBox1.Enabled = False
SerialPort1.PortName = ComboBox1.Text
SerialPort1.BaudRate = 19200
SerialPort1.Parity = Ports.Parity.None
SerialPort1.DataBits = 8
SerialPort1.StopBits = 1
SerialPort1.Handshake = Ports.Handshake.None
Try
SerialPort1.Open()
Catch ex As UnauthorizedAccessException
MessageBox.Show(ex.Message & vbCrLf & ” It might be used by another device”)
Button1.Text = “Open”
ComboBox1.Enabled = True
Timer1.Stop()
End Try
If SerialPort1.IsOpen() Then
Timer1.Interval = 200
Timer1.Start()
RichTextBox1.Text = ComboBox1.Text & ” Ready” & vbCrLf
End If
Else
SerialPort1.Close()
Timer1.Stop()
Button1.Text = “Open”
ComboBox1.Enabled = True
End If
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
If SerialPort1.IsOpen() Then
SerialPort1.WriteLine(ComboBox1.Text & “> ” & TextBox1.Text)
End If
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
RcvMessage = SerialPort1.ReadExisting()
Dim prv_message As String = TextBox1.Text
If Not (RcvMessage = “”) Then
RichTextBox1.Text = RcvMessage & RichTextBox1.Text
End If
End Sub
End Class

Programming VB.NET : menampilkan Versi OS

Ada 2 cara untuk mengetahui OS version dalam aplikasi VB :

1. menggunakan My.Computer.Info.OSVersion
 LblOS.Text = My.Computer.Info.OSVersion
2. menggunakan IntPtr.Size

Sub Get_OSVer()
Try
'
'Basically if the Integer Pointer size is 4 then its 32 Bit and 8 is 64 Bit
If IntPtr.Size > 4 Then
OS_type = 64
Else OS_type = 32
End If

Catch exc As Exception
MessageBox.Show(exc.Message, " We have a IntPtr problem...", MessageBoxButtons.OK)
Return
End Try
End Sub
setelah mencoba 2 cara di atas, yang paling valid adalah cara kedua. kalau cara pertama masih “terjebak” dalam desain OS “maksa” 64bit.
No automatic alt text available.

Programming VB.NET : melihat Dynamic IP Address dan merekam dalam log

BERAPA IP ADDRESS NYA ? Biasanya proses ini dibutuhkan saat ingin me-“remote admin” atau menggunakan resource yang ada di PC atau Device yang terhubung dengan Dynamic IP Address. Karena koneksi internet “rumahan” atau “modal modem” hanya mendapat Dynamic IP Address, maka perlu dicari cara menemukan IP Address secara otomatis. Ada beberapa situs yang memberikan fasilitas untuk mendapatkan informasi Dynamic IP Address kita, contohnya SPEEDTEST.NET

Tapi untuk mendapatkan IP Address tersebut menggunakan aplikasi VB.NET dan menggunakannya sebagai sarana logging, kita dapat memanfaatkan web server kita sebagai alat bantu, yaitu dengan membuat script dalam PHP seperti di bawah ini : Untuk lebih jelasnya silahkkan download di link ini Bila butuh jawaban segera, bisa kirim email ke purwoko.edi*gmail.com, ganti * dengan @

Programming VB.NET : Mendapatkan Serial Number, Volume dan Size pada Hard Disk/Flash Disk/CD ROM/DVD ROM

Untuk mengetahui Serial Number, Volume dan Size pada Hard Disk/Flash Disk/CD ROM/DVD ROM menggunakan VB.NET caranya sbb :

Imports System.Reflection
Imports System.IO

Public Class Form1
Private Declare Function GetVolumeInformation Lib "kernel32" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Integer, ByRef lpVolumeSerialNumber As Integer, ByRef lpMaximumComponentLength As Integer, ByRef lpFileSystemFlags As Integer, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Integer) As Integer
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Timer1.Start()
End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
LstDrive.Items.Clear()
LstVolLabel.Items.Clear()
LstSize.Items.Clear()
LstDriveType.Items.Clear()
LstPartitionType.Items.Clear()
LstVolumeID.Items.Clear()

Dim allDrives() As IO.DriveInfo = IO.DriveInfo.GetDrives()

Dim drive As IO.DriveInfo
LblDriveNumber.Text = allDrives.Count & " Drive(s) detected"
For Each drive In allDrives

LstDrive.Items.Add(drive.RootDirectory) '.ToString()

Try
LstVolLabel.Items.Add(drive.VolumeLabel) '.ToString()
LstSize.Items.Add(Format(drive.AvailableFreeSpace / (1024 * 1024), "###,##0 GB") _
& " of " & Format(drive.TotalSize / (1024 * 1024), "###,##0 GB") _
& " (" & Format(drive.AvailableFreeSpace / drive.TotalSize, "###,##0% used)"))

If drive.DriveType = IO.DriveType.Removable Then
LstDriveType.Items.Add("USB")
ElseIf drive.DriveType = IO.DriveType.Network Then
LstDriveType.Items.Add("Network")
ElseIf drive.DriveType = IO.DriveType.Fixed Then
LstDriveType.Items.Add("HD")
ElseIf drive.DriveType = IO.DriveType.CDRom Then
LstDriveType.Items.Add("CD-ROM")
ElseIf drive.DriveType = IO.DriveType.Unknown Then
LstDriveType.Items.Add("???")
End If
LstPartitionType.Items.Add(drive.DriveFormat)
check_ID(drive.RootDirectory)

Catch ex As Exception
LstVolLabel.Items.Add("")
LstSize.Items.Add("")
LstDriveType.Items.Add("")
LstPartitionType.Items.Add("")
LstVolumeID.Items.Add("")
End Try

Next

End Sub
Private Sub check_ID(ByVal cur_drive)

Dim root As String
Dim volume_name As String
Dim serial_number As Integer
Dim max_component_length As Integer
Dim file_system_flags As Integer
Dim file_system_name As String
Dim pos As Integer
Dim Vol_ID As String
root = cur_drive.ToString
'ListBox6.Items.Add(root)
volume_name = Space(1024)
file_system_name = Space(1024)

If GetVolumeInformation(root, volume_name, Len(volume_name), serial_number, max_component_length, file_system_flags, file_system_name, Len(file_system_name)) = 0 Then
MessageBox.Show("Tidak ada drive atau formatnya salah ( harus pakai tanda : )", "Error Getting Information", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
Exit Sub
End If

pos = volume_name.IndexOf(Chr(0))
volume_name = volume_name.Substring(0, pos)
Vol_ID = Hex(serial_number.ToString)
Vol_ID = Microsoft.VisualBasic.Left(Vol_ID, 4) & "-" & Microsoft.VisualBasic.Right(Vol_ID, 4)
LstVolumeID.Items.Add(Vol_ID)

pos = file_system_name.IndexOf(Chr(0))
file_system_name = file_system_name.Substring(0, pos)
End Sub
End Class
 

Selamat mencoba 🙂

programming PC port : difference between serial and parallel port

When I want to use ports in PC for controlling devices and reading sensor’s status, there are so many options.
As a new programmer, I choose standard and old type ports like serial and parallel port.

OK, lets see the difference of those ports in programming using Visual Basic.

SERIAL PORT

Visual Basic can directly read and write Serial Port, we can write the code easily without any additional library.

Here are the VB 2008 codes for serial port:

  • SerialPort1.CDHolding
  • SerialPort1.DsrHolding
  • SerialPort1.RtsEnable

the status True if there is positive current signal get into these pins
the status False if there is negative or zero current  signal get into these pins

  • SerialPort1.DtrEnable
  • SerialPort1.CtsHolding

if enabled, the pins status  is set to True and it will have +5Volts to +15Volts current
if disabled, the pins status is set to False and it will have  -5Volts to -15Volts current 

For example :
connect the Pin 1 (CD) to Pin 4 (DTR)
write the code to Enable DTR

      SerialPort1.DtrEnable=TRUE
      SerialPort1.CDHolding = True
write the code to Disable DTR
      SerialPort1.DtrEnable=FALSE
      SerialPort1.CDHolding = False

PARALLEL PORT


The Parallel Port is divided into 3 groups of pins; Data Port, Status Port, and Control Port.

DATA PORT
How to set the bit value 0 or 1 to Data Ports ?

To send various value to Data Ports, use this method:
bit0 x 2^0 = value for D0
bit1 x 2^1 = value for D1
bit2 x 2^2 = value for D2
bit3 x 2^3 = value for D3
bit4 x 2^4 = value for D4
bit5 x 2^5 = value for D5
bit6 x 2^6 = value for D6
bit7 x 2^7 = value for D7

For example :
to set enable Data Ports 2,4, and 5, we have to calculate as follows :
Port 2 = D1
Port 4 = D3
Port 5 = D4

nilai = ( 0 x 2^0 ) + ( 1 x 2^1 ) + ( 0 x 2^2 ) + ( 1 x 2^3 ) + ( 1 x 2^4 ) + ( 0 x 2^5 ) + ( 0 x 2^6 ) + ( 0 x 2^7 )

The value of nilai is = 0 + 2 + 0 + 8 + 16 + 0 + 0 + 0 = 26

STATUS PORT and CONTROL PORT
To read the Status Port, we have to know that the Status and Control Ports value is not logical, but numbers, and the numbers vary depends on variations of active ports.
After doing some experiment, i have the numbers for Status Port as follows :
Note : $ sign is separator between numbers

  • S6 = “$63$191$31$47$55$159$175$183$15$23$39$143$151$167$7$135$”
  • S7 = “$191$255$223$239$247$159$175$183$207$215$231$143$151$167$199$135$”
  • S5 = “$31$223$95$79$87$159$15$23$207$215$71$143$151$7$199$135$”
  • S4 = “$47$239$79$111$103$175$15$39$207$231$71$143$167$7$199$135$”
  • S3 = “$55$247$87$103$119$183$23$39$215$231$71$151$167$7$199$135$”
and for Control Ports as follows:
  • C0 = “$205$207$201$203$”
  • C1 = “$206$207$202$203$”
  • C2 = “$200$201$202$203$”
The values only valid for on board LPT ports, not for additional port, like PCI to LPT port.
PCI to LPT ports only have Data Ports and Status Ports, I don’t know why.
Here is the Status value for not onboard LPT port :
  • S6 = “$56$184$24$40$48$152$168$176$8$16$32$136$144$160$0$128$”
  • S7 = “$184$248$216$232$240$152$168$176$200$208$224$136$144$160$192$128$”
  • S5 = “$24$216$88$72$80$152$08$16$200$208$64$136$144$7$192$128$”
  • S4 = “$40$232$72$104$096$168$08$32$200$224$64$136$160$0$192$128$”
  • S3 = “$48$240$80$096$112$176$16$32$208$224$64$144$160$0$192$128$”

(I will attach the sample sooner)

mengendalikan perangkat elektronik menggunakan Serial Port

Setelah belajar menggunakan Serial Port sebagai alat pendeteksi status peralatan, saya mencoba untuk mengendalikan peralatan elektronik melalui Serial Port.

Konsepnya adalah memberikan signal pada Pin 1,6, atau 8 pada  Serial Port dengan mengaktifkan Pin 4 atau 7.  Dengan adanya signal (tegangan) yang dialirkan dari Pin 4 atau 7 maka tegangan tersebut dapat mengaktifkan suatu komponen elektronik yang bersifat sebagai relay yang akan mengaktifkan perangkat elektronik lainnya, misalnya Optocoupler.

Bila Optocoupler mendapat tegangan dari Serial Port, maka Pin 4 dan 5 pada Optocoupler dapat digunakan sebagai penyalur tegangan ke peralatan elektronik lainnya.




mendeteksi status peralatan dengan memanfaatkan Serial Port di PC

Setelah mencoba mempelajari karakter Serial Port pada PC, saya coba memanfaatkan Serial Port sebagai sarana membaca status peralatan sensor, misalnya : switch yang menandakan pintu terbuka/tertutup, ada yang melewati sensor Infra Red, dll.

Dalam fungsinya, selain sebagai sarana komunikasi data antara 2 komputer, Serial Port mempunyai 5 Pin yang sifatnya terbagi 2, yaitu : menjadi pengirim signal, dan penerima signal.



2 Pin yang bertugas sebagai pengirim signal (sebenarnya berupa nilai Voltage tertentu) adalah Pin 4 dan 7, sedangkan 3 Pin yang bertugas sebagai penerima signal adalah Pin 1, 6, dan 8.

2 Pin Serial Port ( 4 dan 7) yang diaktifkan (dari aplikasi komputer) bertugas sebagai sumber arus disambungkan ke Pin Common pada Switch, sensor, dll. sedangkan 3 Pin Serial Port (1, 6, dan 8) lainnya bisa dihubungkan ke Pin NC dan NO pada Switch/Sensor.

Dengan kondisi tersebut maka status Switch atau Sensor dapat dideteksi dari Serial Port PC.

Pembacaan status Serial Port dapat menggunakan program Visual Basic, atau program lainnya.


Sumber Arus – Pin 7 (RTS)
Mengaktifkan sumber arus     : SerialPort1.RtsEnable = True
Mematikan sumber arus         : SerialPort1.RtsEnable = False

Sumber Arus – Pin 4 (DTR)
Mengaktifkan sumber arus      : SerialPort1.DtrEnable = True
Mematikan sumber arus         : SerialPort1.DtrEnable = False

Status Detect  menggunakan Pin 1 (CD)
Perangkat terdeteksi               : SerialPort1.CDHolding = True
Perangkat tidak terdeteksi      : SerialPort1.CDHolding = False

Status Detect  menggunakan  Pin 6 (DSR)
Perangkat terdeteksi               : SerialPort1.DsrHolding = True
Perangkat tidak terdeteksi       : SerialPort1.DsrHolding = False

Status Detect  menggunakan Pin 8 (CTS)
Perangkat terdeteksi               : SerialPort1.CtsHolding = True
Perangkat tidak terdeteksi       :  SerialPort1.CtsHolding = False