Skematik NEO STARDUINO

July 16, 2014 2 comments

neo_starduino

NEO STARDUINO adalah board mikrokontroler berbasis ATmega8 atau ATmega8A. Selain itu, board ini juga bisa digunakan untuk mikrokontroler tipe ATmega168 dan ATmega328.

NEO STARDUINO masih mempertahankan penggunaan port serial DB9 MALE dengan konverter Serial-to-TTL MAX232. Mengapa? Karena board ini banyak digunakan untuk aplikasi antarmuka mikro dengan modem serial. Dengan port serial DB9 MALE, maka kabel data modem serial dapat langsung ditancapkan dan komunikasi antara modem dan board NEO STARDUINO pun dapat dilakukan tanpa masalah. Jika Anda membutuhkan board untuk aplikasi kontrol berbasis SMS atau sistem alarm berbasis SMS, maka NEO STARDUINO sangat layak untuk dipertimbangkan.

Untuk memenuhi kebutuhan pemula yang ingin belajar mikrokontrler berbasis AVR, khususnya AVR ATmega8, maka board ini sangat memadai untuk dijadikan pilihan. Akan tetapi tak hanya pemula yang telah menggunakan board NEO STARDUINO, profesional pun telah menggunakannya untuk membangun sistem kontrol yang ekonomis. Salah satu industri yang telah menggunakan board ini adalah PT Perfetti Van Melle – pabrik permen Mentos, Alpenliebe dan lain-lain.

Pada kesempatan yang baik ini (bulan Ramadhan), kami berkenan membagikan gambar skematik board NEO STARDUINO dalam bentuk file PDF dan file skematik ExpressSCH.

skematik neo starduino

Nah, bagi Anda yang berminat silakan langsung mengunduh file-file tersebut menggunakan link berikut ini.

Skematik NEO STARDUINO.RAR
( ~55KB )

Semoga bermanfaat!

:D

Album Foto Facebook Teknik Elektro Links

April 24, 2014 Leave a comment

fbphotos

Album foto facebook Teknik Elektro Links yang berisi foto kegiatan, foto produk dan screenshots mungkin menarik untuk Anda telusuri, silakan kunjungi facebook kami atau menjadi teman facebook kami di: https://www.facebook.com/telinks/photos_all.

Selamat belajar dan selamat berkarya!

:D

SER-2REL – Modul Relay Serial RS232 Dengan Segudang Contoh Program Meliputi VB.NET, Python, ThinBASIC dan JustBASIC

March 3, 2014 2 comments

telinks_ser_2rel_640

Jika Anda ingin mengendalikan 2 buah relay dari komputer atau laptop, maka modul SER-2REL sangat cocok untuk Anda karena modul ini memiliki 2 buah relay yang dapat dikontrol melalui komputer atau laptop menggunakan komunikasi data serial. Dibandingkan dengan USB-2REL, modul ini lebih mudah pemrogramannya.

“Tapi laptop saya tidak punya port serial, yang ada cuma port USB saja Pak……”

Tenang. Dengan menggunakan kabel konverter USB-to-Serial, maka modul SER-2REL dapat dikontrol melalui port USB – tanpa mengubah program sedikitpun! Jadi apapun komputer Anda, apapun laptop Anda, modul SER-2REL dapat Anda gunakan untuk berbagai keperluan seperti mengontrol beban bertegangan AC 220V maupun beban bertegangan DC.

Modul SER-2RE dirancang sedemikian rupa agar dapat digunakan untuk berbagai aplikasi driving sederhana seperti eksperimen antarmuka komputer, mengontrol peralatan listrik (AC/DC), mengontrol sirine/alarm atau fan. Namun demikian, modul ini juga mampu digunakan untuk menggerakkan power driver motor AC induksi 3-fasa berukuran besar.

Modul SER-2REL disertai CD yang berisi program aplikasi pengendali relay lengkap dengan kode programnya sehingga Anda bisa mempelajari dan memodifikasi program sesuai dengan kebutuhan aplikasi Anda.

Adapun spesifikasi modul SER-2REL adalah sebagai berikut:

  • Power Supply: DC 5V
  • Dual-type DC Input: Socket & Screw
  • Konektor serial DB9 Male
  • LED Indicator Status: menyatakan modul aktif (berkedip-kedip)
  • LED Indicator untuk masing-masing relay
  • 2-buah relay dengan kualitas yang baik
  • Dilengkapi dengan CD contoh program lengkap dengan kode program VB.NET, Python, ThinBASIC dan Just BASIC

Program Kontrol Versi VB.NET

Berikut adalah tampilan program kontrol SER-2REL versi VB.NET Express Edition 2005:

ser2rel_vbnet

Ketika button ON diklik, maka program akan mengirimkan perintah kepada modul untuk mengaktifkan relay. Sebaliknya, jika button OFF ditekan, maka program akan mengirimkan perintah kepada modul untuk mematikan relay. Untuk mengaktifkan Relay1, program komputer harus mengirimkan data karakter ‘A’ ke mikrokontroler SER-2REL, dan untuk mematikan Relay1, program komputer harus mengirimkan data karakter ‘X’ ke mikrokontroler SER-2REL. Sedangkan untuk Relay2, data karakter ON adalah ‘B’ dan data karakter OFF adalah ‘Y’.

Untuk mengaktifkan kedua relay secara bersamaan, program komputer harus mengirimkan data karakter ‘C’ dan untuk mematikan kedua relay secara bersamaan, data karakter yang harus dikirim adalah ‘Z’.

Berikut adalah kode program VB.NET untuk program kontrol modul SER-2REL.

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        For i As Integer = 0 To _
           My.Computer.Ports.SerialPortNames.Count - 1
            ComboBox1.Items.Add( _
               My.Computer.Ports.SerialPortNames(i))
        Next
        btnDisconnect.Enabled = False
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim i As Integer

        For i = 1 To 50
            SerialPort1.Write("A")
            Application.DoEvents()
        Next
    End Sub

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

        For i = 1 To 50
            SerialPort1.Write("X")
            Application.DoEvents()
        Next
    End Sub

    Private Sub btnConnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConnect.Click
        If SerialPort1.IsOpen Then
            SerialPort1.Close()
        End If

        Try
            With SerialPort1
                .PortName = ComboBox1.Text
                .BaudRate = 2400
                .Parity = IO.Ports.Parity.None
                .DataBits = 8
                .StopBits = IO.Ports.StopBits.One
            End With
            SerialPort1.Open()

            TextBox1.Text = ComboBox1.Text & " connected."
            btnConnect.Enabled = False
            btnDisconnect.Enabled = True
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
    End Sub

    Private Sub btnDisconnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDisconnect.Click
        Try
            SerialPort1.Close()
            TextBox1.Text = SerialPort1.PortName & " disconnected."
            btnConnect.Enabled = True
            btnDisconnect.Enabled = False
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        Dim i As Integer

        For i = 1 To 50
            SerialPort1.Write("B")
            Application.DoEvents()
        Next
    End Sub

    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        Dim i As Integer

        For i = 1 To 50
            SerialPort1.Write("Y")
            Application.DoEvents()
        Next
    End Sub

    Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
        Dim i As Integer

        For i = 1 To 50
            SerialPort1.Write("C")
            Application.DoEvents()
        Next
    End Sub

    Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
        Dim i As Integer

        For i = 1 To 50
            SerialPort1.Write("Z")
            Application.DoEvents()
        Next
    End Sub
End Class

Program Kontrol Versi Python

Program kontrol versi Python menggunakan modul PySerial untuk antarmuka komunikasi serial. Contoh program kontrol modul SER-2REL versi Python ini masih mode console, belum GUI. Berikut adalah tampilan program hasil pengujian.

ser2rel_python_600

ser2rel_python

Kode program versi Python tentunya dapat Anda miliki jika membeli modul SER-2REL karena akan ada pada CD bawaan modul SER-2REL.

Program Kontrol Versi ThinBASIC

Program kontrol selanjutnya adalah versi ThinBASIC. Interpreter freeware yang semakin populer ini sangat cocok bagi penggemar BASIC yang cenderung bersifat gamblang, detil dan rapih. Berikut adalah kode program dan tampilan program versi ThinBASIC.

' TB_SER2REL_GUI
' Chandra MDE - http://teknikelektrolinks.com
 
Uses "UI"
Uses "COMM", "Console"

Begin ControlID              
  %btnRelay1On, %btnRelay2On, %btnAllRelayOn
   
  %btnRelay1Off, %btnRelay2Off, %btnAllRelayOff
  
  %label1, %label2, %label3, %label4
End ControlID    

Begin Const
  %MAIN_WIDTH   = 505
  %MAIN_HEIGHT  = 240
  %BAUDRATE     = 2400
End Const

Dim COMMPort As String = "COM1"
Dim hcomm As Long
Dim RelayOn(3) As String  = "AAA", "BBB", "CCC"
Dim RelayOff(3) As String = "XXX", "YYY", "ZZZ"
                          
Function TBMain()
  Local hDlg As DWord
                                                           
  Dialog Font "Tahoma", 9
  Dialog New Pixels, 0, "SER-2REL Controller Using COMM Module (COM1 @2400baudrate)",-1,-1, %MAIN_WIDTH, %MAIN_HEIGHT,_
    %WS_POPUP Or %WS_VISIBLE Or %WS_CAPTION Or %WS_SYSMENU Or %WS_MINIMIZEBOX To hDlg
  
  Control Add Button, hDlg, %btnRelay1On, "RELAY-1 ON" , 15, 20, 225, 30, Call DoRelay()
  Control Add Button, hDlg, %btnRelay1Off, "RELAY-1 OFF", 15, 55, 225, 30, Call DoRelay()
  
  Control Add Button, hDlg, %btnRelay2On, "RELAY-2 ON" , 265, 20, 225, 30, Call DoRelay()
  Control Add Button, hDlg, %btnRelay2Off, "RELAY-2 OFF", 265, 55, 225, 30, Call DoRelay()
  
  Control Add Button, hDlg, %btnAllRelayOn, "ALL RELAY ON" , 15, 105, 225, 60, Call DoRelay()
  Control Add Button, hDlg, %btnAllRelayOff, "ALL RELAY OFF", 265, 105, 225, 60, Call DoRelay()
  
  Control Add Label, hDlg, %label1, "SER-2REL Controller by Chandra MDE", 20, 190, 300, 15
  Control Add Label, hDlg, %label2, "Teknik Elektro Links - http://teknikelektrolinks.com", 20, 206, 300, 15
  Control Add Label, hDlg, %label3, "[ Created using ThinBASIC ]", 330, 190, 300, 15                          
  Control Add Label, hDlg, %label4, "1.9.11.0 and 1.8.9.0", 350, 206, 300, 15
 
  Dialog Show Modal hDlg, Call cbDialog
End Function

CallBack Function cbDialog()
  Select Case CBMSG
    Case %WM_INITDIALOG     
      hcomm = COMM_FreeFile
      COMM_Open("COM1", hComm)
      COMM_Set(hcomm, %COMM_BAUD, %BAUDRATE)
      If Err<>0 Then
        MsgBox 0, "Error opening COM1"
        End
      End If
    Case %WM_COMMAND

    Case %WM_CLOSE

  End Select
End Function                                          

CallBack Sub DoRelay() 
  Local ID As DWord           
  
  If Callback_Message=%WM_COMMAND And Callback_Control_Message = %BN_CLICKED Then
  	ID = Callback_Control - %btnRelay1On + 1
  	If Inside(ID, 1, 3) Then
  	  COMM_Send(hcomm, RelayOn(ID))
  	Else
  		COMM_Send(hcomm, RelayOff(ID-3))
  	End If
  End If
End Sub

thinbasic_ser2rel

Program Kontrol Versi Just BASIC 1.01

Untuk semakin memperkaya CD bawaan SER-2REL, kami juga memberikan contoh program kontrol yang dibuat menggunakan Just BASIC 1.01. Just BASIC adalah interpreter bahasa BASIC (freeware) untuk platform Windows yang sangat mudah dipelajari dan digunakan. Berikut adalah tampilan program kontrol modul SER-2REL yang dibuat dengan Just BASIC 1.01:

jb_ser2rel_1 jb_ser2rel_3

jb_ser2rel_usbtors232_800

Berikut adalah kode program kontrol SER-2REL versi JustBASIC 1.01:

'-- jb_ser2rel.bas
'-- Kontrol 2 Buah Relay Serial (SER-2REL)
'-- Chandra MDE - http://teknikelektrolinks.com

    nomainwin

    WindowWidth = 400
    WindowHeight = 280

    UpperLeftX = int((DisplayWidth- WindowWidth)/2)
    UpperLeftY = int((DisplayHeight- WindowHeight)/2)

    dim portlist$(50)
    for i=1 to 50
        portlist$(i) = "COM"+str$(i)
    next

    portserial$ = portlist$(1)

    Relay1$ = "\RELAY-1 OFF"
    Relay2$ = "\RELAY-2 OFF"

    RelayOnColor$ = "backcolor 255 0 0"
    RelayOffColor$ = "backcolor 100 0 0"

    Relay1BackColor$ = RelayOffColor$
    Relay2BackColor$ = RelayOffColor$

    groupbox    #dlg.group1, "Port Serial:", 20, 15, 195, 58
    statictext  #dlg.label1, "Nomor Port:", 35, 40, 85, 20
    ComboBox    #dlg.cbPortSerial, portlist$(), [cbPortSerialChanged], 120, 36, 70, 25

    groupbox    #dlg.group2, "Kontrol:", 20, 85, 195, 100
    button      #dlg.Relay1On, "RL1 ON", [Relay1On], UL, 35, 105, 80, 28
    button      #dlg.Relay1Off, "RL1 OFF", [Relay1Off], UL, 120, 105, 80, 28
    button      #dlg.Relay2On, "RL2 ON", [Relay2On], UL, 35, 145, 80, 28
    button      #dlg.Relay2Off, "RL2 OFF", [Relay2Off], UL, 120, 145, 80, 28

    graphicbox  #dlg.gbox, 230, 20, 145, 165

    statictext  #dlg.about1, "By Chandra MDE - Teknik Elektro Links", 20, 210, 220, 15
    statictext  #dlg.about2, "http://teknikelektrolinks.com", 20, 225, 200, 20
    statictext  #dlg.about3, "[JustBASIC 1.01]", 248, 220, 150, 20

    open "TELINKS - Demo Kontrol Modul SER-2REL" for dialog as #dlg
    print #dlg, "font Tahoma 9 bold"
    print #dlg.about1, "!font Tahoma 8 bold"
    print #dlg.about2, "!font Tahoma 8 bold"
    print #dlg.about3, "!font Tahoma 11 bold"
    print #dlg.gbox, "font Arial 10 bold"
    print #dlg.cbPortSerial, "selectindex 1"

    gosub [DrawRelay]

[mainLoop]
    wait

[DrawRelay]
    print #dlg.gbox, "home"
    print #dlg.gbox, "down"
    print #dlg.gbox, "fill black"
    print #dlg.gbox, "size 3"
    print #dlg.gbox, "color 255 255 255"
    print #dlg.gbox, Relay1BackColor$
    print #dlg.gbox, "place 15 15"
    print #dlg.gbox, "boxfilled 125 70"
    print #dlg.gbox, "place 30 46"
    print #dlg.gbox, "color 255 255 100"
    print #dlg.gbox, Relay1$
    print #dlg.gbox, "color 255 255 255"
    print #dlg.gbox, Relay2BackColor$
    print #dlg.gbox, "place 15 145"
    print #dlg.gbox, "boxfilled 125 90"
    print #dlg.gbox, "place 30 122"
    print #dlg.gbox, "color 255 255 100"
    print #dlg.gbox, Relay2$
    print #dlg.gbox, "flush"
    return

[Relay1On]
    Com = 16384
    oncomerror [PortSerialError]
    open portserial$ + ":2400,n,8,1,ds0,cs0,rs" for random as #hCom
    print #hCom, "AAA"
    close #hCom
    Relay1$ = "\RELAY-1 ON"
    Relay1BackColor$ = RelayOnColor$
    Gosub [DrawRelay]
    wait

[Relay1Off]
    Com = 16384
    oncomerror [PortSerialError]
    open portserial$ + ":2400,n,8,1,ds0,cs0,rs" for random as #hCom
    print #hCom, "XXX"
    close #hCom
    Relay1$ = "\RELAY-1 OFF"
    Relay1BackColor$ = RelayOffColor$
    Gosub [DrawRelay]
    wait

[Relay2On]
    Com = 16384
    oncomerror [PortSerialError]
    open portserial$ + ":2400,n,8,1,ds0,cs0,rs" for random as #hCom
    print #hCom, "BBB"
    close #hCom
    Relay2$ = "\RELAY-2 ON"
    Relay2BackColor$ = RelayOnColor$
    Gosub [DrawRelay]
    wait

[Relay2Off]
    Com = 16384
    oncomerror [PortSerialError]
    open portserial$ + ":2400,n,8,1,ds0,cs0,rs" for random as #hCom
    print #hCom, "YYY"
    close #hCom
    Relay2$ = "\RELAY-2 OFF"
    Relay2BackColor$ = RelayOffColor$
    Gosub [DrawRelay]
    wait

[cbPortSerialChanged]
    #dlg.cbPortSerial "selection? portserial$"
    wait

[PortSerialError]
    notice "Error at opening port "; portserial$
    wait

Sangat menarik, bukan? :D

Foto Pengujian

Setiap produk kami uji untuk memastikan bahwa produk yang kami kirim telah berfungsi dengan baik. Berikut adalah foto hasil pengujian modul SER-2REL.

telinks_uji_ser_2rel

Pemesanan

Jika Anda berminat dengan modul ini, Anda dapat memesannya melalui situs kami di: http://teknikelektrolinks.com.

Selamat belajar dan selamat berkarya!

Smile

7SEGCALC.EXE – Program Bantu Untuk Perancangan Seven-Segment

February 27, 2014 8 comments

sevensegment Ketika kita menggunakan Seven-Segment Display pada aplikasi mikrokontroler, kita harus menghitung nilai-nilai konstanta yang nantinya harus kita tuliskan pada port keluaran yang kita gunakan sebagai port data display agar display menampilkan suatu angka atau huruf atau simbol tertentu.

Untuk mudahnya, biasanya urutan pin pada port data mikro disesuaikan dengan urutan pin pada seven-segment. Semisal kita menggunakan PORTB sebagai port data, maka urutan koneksinya adalah: PB0 – a, PB1 – b, PB2 – c, PB3 – d, PB-4 – e, PB5 – f, PB6 – g dan PB7 – h (dot). Dari urutan tersebut bisa dihitung berapa nilai konstanta yang harus dikirim ke port data untuk menghasilkan tampilan angka atau huruf atau simbol pada seven-segment. Dan selama kita menggunakan desain yang sama, maka kita tidak perlu mengganti data untuk tampilan seven segment.

Dengan urutan koneksi seperti itu, maka untuk menghasilkan tampilan angka 7 mikro harus mengeset PORTB dengan data 0b00000111 jika seven-segment yang digunakan adalah tipe Common-Cathode dan data 0b11111000 jika seven-segment yang digunakan adalah tipe Common-Anode.

Namun pada prakteknya, kita bebas menentukan koneksi antara pin mikro dengan pin seven-segment. Dan terkadang kita "terpaksa" menggunakan pin I/O dari beberapa port yang tidak berurutan demi kemudahan layout PCB yang akan kita buat. Dengan perubahan urutan koneksi antara pin mikro dan pin seven-segment maka kombinasi bit pun akan berbeda sehingga diperlukan konstanta nilai yang berbeda pula.

Nah, sambil berlatih pemrograman, saya membuat program bantu yang dapat memudahkan proses tersebut sehingga kita tidak perlu repot-repot menghitung konstanta nilai tampilan seven-segment. Program saya buat menggunakan Lazarus dan FreePascal.

Dengan program ini, kita tidak perlu lagi menghitung untuk mendapatkan nilai konstanta untuk tampilan tertentu. Program berlaku untuk seven-segment tipe Common-Cathode maupun tipe Common-Anode. Dan tidak hanya itu, kita juga bebas menentukan urutan koneksi (pin assignment) sesuai dengan rangkaian yang kita buat. Oleh karenanya program ini dapat mengakomodasi segala konfigurasi rangkaian seven-segment.

Berikut adalah tampilan program untuk tampilan angka 7 dengan pin assignment sebagai berikut:

  • Pin-0 = LED a
  • Pin-1 = LED b
  • Pin-2 = LED c
  • Pin-3 = LED d
  • Pin-4 = LED e
  • Pin-5 = LED f
  • Pin-6 = LED g
  • Pin-7 = LED h (dot)

telinks_7segcalc_1

Angka 7 Common-Cathode

telinks_7segcalc_2

Angka 7 Common-Anode


Pengoperasian Program

LED a – LED h akan berganti status dari off ke on atau sebaliknya jika diklik menggunakan mouse. Warna putih menyatakan LED=off, dan warna merah menyatakan LED=on.

Untuk menyesuaikan pin assignment, klik label LED pada Group Pin-7 – Pin-0. Ketika Anda mengganti salah satu pin assignment, maka secara otomatis, program akan mencari adanya assignment yang sama, dan secara otomatis pula akan menukarkannya sehingga tidak ada pin assignment yang sama untuk masing-masing LED. Hal ini untuk mencegah terjadinya kesalahan assignment, sehingga dapat dijamin nilai bytecode yang dihasilkan senantiasa benar.

Untuk mengganti tipe Seven-Segment, Anda dapat meng-klik pilihan Common-Cathode atau Common-Anode. Ketika terjadi perubahan tipe seven-segment, maka nilai bytecode juga akan berubah.

Berikut adalah tampilan program untuk tampilan angka 3 dengan urutan koneksi pin yang berbeda.

telinks_7segcalc_3

telinks_7segcalc_4

Nah, cukup menarik bukan? :D

Program ini masih dapat dikembangkan dengan menambahkan fasilitas untuk menghasilkan (generate) kode program untuk konstanta nilai tampilan 0-9 dan A-F dalam bahasa C yang valid untuk kompiler C mikrokontroler AVR maupun MCS-51. Mudah-mudah bisa terlaksana. :)

Download Link

Anda dapat memiliki dan menggunakan program bantu ini secara gratis. Silakan download program 7SEGCALC.EXE ini dan silakan dievaluasi. Saran dan masukan dari Anda tentunya sangat saya harapkan untuk pengembangan program ini.

7segcalc.rar

( ~587 KB )

Versi Linux

Program bantu ini juga tersedia untuk platform linux. Berikut adalah tampilan program versi linux yang running pada Debian GNU Linux 7 (Wheezy).

telinks_7segcalc_debian

Dan berikut ini adalah tampilan program yang running pada Ubuntu Linux.

telinks_7segcalc_ubuntu

Program versi linux dapat Anda download melalui link berikut ini:

7segcalc.tar.gz

( ~1.87 MB )

Source Code

Program ini saya buat menggunakan Lazarus 1.0 dengan FPC 2.6.0. Anda bisa mendapatkan source code program ini dengan cara menyalurkan donasi. Jika Anda berminat silakan menghubungi saya melalui email ke info@teknikelektrolinks.com.

Selamat belajar dan selamat berkarya!

:D

Tutorial Pemrograman C/C++: Sejuta Cara Membuat Program Tampilan Diamond / Berlian Dari Deret Bilangan Ganjil

February 18, 2014 Leave a comment

diamond

“Say it with diamond.”

Berlian beneran pastinya mahal, sebagai programmer C/C++ pemula, kita bisa membuat sendiri program yang bisa menampilkan bentuk diamond atau berlian seperti gambar di samping. Jadi, kalau rekan atau sahabat Anda sedang belajar pemrograman C/C++ atau sedang terbebani tugas pemrograman semacam ini, Anda bisa memberinya diamond (baca: tulisan) ini. :D

Pada tulisan ini kita akan membuat beberapa program untuk menghasilkan tampilan berlian dengan teknik yang berbeda-beda. Untuk masing-masing program akan dilengkapi dengan sedikit penjelasan dengan harapan agar dapat menjadi bahan belajar yang bermanfaat.

Nah, kita mulai dengan program yang pertama. Program pertama ini menggunakan bahasa C dengan perulangan for sebagai senjata utamanya. Berikut ini adalah kode programnya.

Program Pertama (Bahasa C)

#include <stdio.h>

int main()
{
	int i, n, x, odd[50];
	const char spasi = 177;
	const char diamond = '*';

	printf("Masukkan nilai n = ");
	scanf("%d", &n);
	
	for (i=1; i<=n; i++) odd[i-1] = 2*i-1;
	
	for (i=0; i<n; i++)
	{
		for (x=0; x<n-i; x++)	printf("%c", spasi);
		for (x=0; x<odd[i]; x++) printf("%c", diamond);
		for (x=0; x<n-i; x++)	printf("%c", spasi);
		printf("\n");
	}
	
	for (i=n-2; i>=0; i--)
	{
		for (x=0; x<n-i; x++) printf("%c", spasi);
		for (x=0; x<odd[i]; x++) printf("%c", diamond);
		for (x=0; x<n-i; x++) printf("%c", spasi);
		printf("\n");
	}

	return 0;
}

Penjelasan

Variabel i, n dan x adalah variabel-variabel yang digunakan untuk indeks perulangan for. Sedangkan variabel array odd[50] digunakan untuk menyimpan nilai deret bilangan ganjil.

Perulangan for (i=1; i<=n; i++) odd[i-1] = 2*i-1; akan menghasilkan deret bilangan ganjil sebanyak n dan disimpan pada variabel array odd[]. Perhatikan bahwa jumlah karakter bintang yang dicetak membentuk diamond adalah nilai deret bilangan ganjil. Untuk nilai n=11, maka komposisi variabel array odd[] adalah sebagai berikut:

Index 0 1 2 3 4 5 6 7 8 9 10 11 49
odd 1 3 5 7 9 11 13 15 17 19 21 0 0 0

Setelah deret bilangan ganjil selesai dihitung, selanjutnya menampilkan bentuk diamond dengan background seperti screenshot di atas.

for (i=0; i<n; i++)
{
	for (x=0; x<n-i; x++)	printf("%c", spasi);
	for (x=0; x<odd[i]; x++) printf("%c", diamond);
	for (x=0; x<n-i; x++)	printf("%c", spasi);
	printf("\n");
}

Perulangan i di atas memiliki 3 tugas yakni:

1. for (x=0; x<n-i; x++)    printf("%c", spasi);
Menampilkan karakter spasi yang dalam hal ini diwakili oleh karakter dengan kode ASCII 177 untuk menghasilkan efek background di sebelah kiri diamond.
2. for (x=0; x<odd[i]; x++) printf("%c", diamond);
Menampilkan karakter asterisk yang akan membentuk diamond deret bilangan ganjil.
3. for (x=0; x<n-i; x++)    printf("%c", spasi);
Menampilkan karakter spasi yang dalam hal ini diwakili oleh karakter dengan kode ASCII 177 untuk menghasilkan efek background di sebelah kanan diamond.

Karena jumlah karakter yang ditampilkan pada tiap barisnya berbeda, maka perulangan x Perulangan ini akan membentuk segitiga atau separo diamond seperti ditunjukkan oleh screenshot berikut ini.

image

Perulangan berikutnya berfungsi untuk menampilkan segitiga atau separo diamond bagian bawah.

for (i=n-2; i>=0; i--)
{
	for (x=0; x<n-i; x++) printf("%c", spasi);
	for (x=0; x<odd[i]; x++) printf("%c", diamond);
	for (x=0; x<n-i; x++) printf("%c", spasi);
	printf("\n");
}

Perulangan i yang kedua ini diawali dengan nilai (n-2) hingga 0 yakni mewakili indeks dari bilangan ganjil terbesar kedua hingga bilangan ganjil pertama atau terkecil.

Sama seperti halnya perulangan i yang pertama, perulangan i yang kedua ini memiliki 3 fungsi yakni:

1. for (x=0; x<n-i; x++) printf("%c", spasi);
Menampilkan karakter spasi yang dalam hal ini diwakili oleh karakter dengan kode ASCII 177 untuk menghasilkan efek background di sebelah kiri diamond.
2. for (x=0; x<odd[i]; x++) printf("%c", diamond);
Menampilkan karakter asterisk yang akan membentuk diamond deret bilangan ganjil.
3. for (x=0; x<n-i; x++) printf("%c", spasi);
Menampilkan karakter spasi yang dalam hal ini diwakili oleh karakter dengan kode ASCII 177 untuk menghasilkan efek background di sebelah kanan diamond.

Perulangan i kedua akan membentuk segitiga bawah atau separo diamond bagian bawah seperti ditunjukkan oleh screenshot berikut ini.

image

Jika kedua perulangan digabungkan maka akan menghasilkan tampilan diamond sepenuhnya seperti screenshot berikut ini.

image

Program Kedua (C++)

Nah, sebagai perbandingan kita akan membuat program dengan hasil tampilan yang sama dengan bahasa C++. Mari kita simak kode program C++ berikut ini.

#include <iostream>
#include <iomanip>

using namespace std;

int main()
{
	int i, n, odd[50];
	const char spasi = 177;
	const char diamond = '*';

	cout << "C++ - Masukkan nilai n = ";
	cin >> n;
	
	for (i=1; i<=n; i++) odd[i-1] = 2*i-1;
	
	for (i=0; i<n; i++)
	{
		cout << setfill(spasi) << setw(n-i) << "";
		cout << setfill(diamond) << setw(odd[i]) << "";
		cout << setfill(spasi) << setw(n-i) << "";
		cout << endl;
	}
	for (i=n-2; i>=0; i--)
	{
		cout << setfill(spasi) << setw(n-i) << "";
		cout << setfill(diamond) << setw(odd[i]) << "";
		cout << setfill(spasi) << setw(n-i) << "";
		cout << endl;
	}
	
	return 0;
}

Pada dasarnya kode program ini sama dengan kode program bahasa C sebelumnya. Namun demikian, program C++ tidak menggunakan perulangan untuk mencetak karakter per karakter. C++ memiliki fasilitas untuk mengatur (memanipulasi) output yang berupa fungsi-fungsi yang terdapat dalam header iomanip.

Dengan kombinasi setfill(karakter) dan setw(jumlah), maka kita dapat mencetak karakter tertentu (setfill) sebanyak yang kita inginkan (setw). Berikut adalah tampilan yang dihasilkan oleh kode program C++ di atas.

image

Wow, lumayan bukan? Silakan Anda mencoba masing-masing kode program dan semoga bermanfaat. :D

Program Ketiga (Bahasa C/C++)

Program ketiga atau yang terakhir akan kita buat dengan teknik yang berbeda dari kedua program sebelumnya dan kita akan menggunakan fungsi-fungsi khas bahasa C dan C++. Mari kita simak kode program ketiga berikut ini.

#include <iostream>
#include <stdlib.h>
#include <string.h>

using namespace std;

int main()
{
	int i, n, odd[50];
	char *s[50];
	const char spasi = 177;
	const char diamond = '*';

	cout << "C/C++ - Masukkan nilai n = ";
	cin >> n;
	
	for (i=1; i<=n; i++) odd[i-1] = 2*i-1;
	
	for (i=0; i<n; i++)
	{
		s[i] = new char[odd[n-1]+3];
		memset(s[i], spasi, odd[n-1]+2);
		memset(s[i]+odd[n-1]+3, '\0', 1);
		memset(s[i]+n-i, diamond, odd[i]);

		s[2*n-i-2] = new char[odd[n-1]+3];
		memset(s[2*n-i-2], spasi, odd[n-1]+2);
		memset(s[2*n-i-2]+odd[n-1]+3, '\0', 1);
		memset(s[2*n-i-2]+n-i, diamond, odd[i]);	
	}
	
	for (i=0; i<2*n-1; i++)
	{
		cout << s[i] << endl ;
		delete s[i];
	}
	return 0;
}

Jika program pertama dan kedua menggunakan perulangan x dan setfill()-setw() untuk mencetak karakter-karakter untuk membentuk diamond, maka program ketiga ini mencetak diamond di memori (buffer) sebelum ditampilkan di layar (console).

Untuk sekedar variasi agar program terkesan menggunakan fungsi khas bahasa C dan C++, maka fungsi calloc() yang khas bahasa C diganti dengan new (C++) dan oleh karenanya fungsi free() diganti dengan delete. Dan tentunya fungsi printf() kita ganti dengan cout.

Nah, berikut adalah hasil tampilan dari program ketiga.

image

Penjelasan

Untuk penjelasan program ketiga ini silakan Anda membaca tulisan berikut ini:

segitiga

Link ke tulisan yang dimaksud:

http://telinks.wordpress.com/2014/02/02/tutorial-program-cc-visualisasi-segitiga-deret-bilangan-ganjil/

Btw, mohon maaf jika judul tulisan di atas terkesan berlebihan karena ternyata tulisan ini hanya menampilkan 3 program diamond dan bukannya sejuta. Bombastisme memang cenderung efektif, tapi tetep gak enak juga terasa di hati ini. Jadi hati-hati dan gunakanlah dengan bijaksana. :D

Nah, semoga bermanfaat. Selamat belajar dan selamat berkarya!

:D

Follow

Get every new post delivered to your Inbox.

Join 162 other followers