Tampilkan postingan dengan label Tutorial C#. Tampilkan semua postingan
Tampilkan postingan dengan label Tutorial C#. Tampilkan semua postingan

Rabu, 12 Desember 2018

PC Serial Arduino dan LM35 Dengan Visual C#

Desember 12, 2018 21
1. Dasar Teori
LM35 merupakan salah satu dari sekian banyak sensor analog untuk mengukur suhu. Perubahan suhu disekitar sensor menyebabkan terjadinya perubahan nilai tahanan pada sensor, sehingga turut menyebabkan perubahan nilai tegangan output dari sensor. Perubahan nilai tegangan inilah yang dimanfaatkan oleh komponen Analog to Digital Converter (ADC) pada mikrokontroler untuk menyediakan data digital berupa data suhu yang kemudian bisa dibaca oleh mikrokontroler.
Data digital yang telah diterima oleh mikrokontroler dalam hal ini masih berupa sampel data (data mentah) sehingga perlu dilakukan kalibrasi. Kalibrasi dilakukan dengan cara memasukan sampel data tersebut ke sebuah fungsi yang didapat dari hasil perhitungan dengan kondisi suhu pada pengukuran sebenarnya (perbandingan antara hasil terukur dan aktual). Setelah data suhu sebenarnya diketahui, data suhu tersebut dikirim ke komputer menggunakan komunikasi serial untuk ditampilkan pada interface.
Aplikasi interface pada komputer selanjutnya membaca port serial (COM) tempat dimana data suhu tersebut akan dikirim oleh mikrokontroler. Data serial yang telah diterima kemudian ditampilkan pada sebuah grafik sehingga bisa terlihat data suhu pada rentang waktunya.

2. Alat Dan Bahan
a. Perangkat Keras
1 Arduino Uno R3 x 1
2 Kabel USB A to B x 1
3 Kabel Jumper x 3
4 Sensor Suhu LM35 x 1
b. Perangkat Lunak
1 Arduino IDE Ver. 1.0.5 >
2 Microsoft Visual Studio Ver. 2008 >
3 ZedGraph class library Ver. 5.1.5 (Lihat tutorial setupnya disini)

3. Ranah Kerja
Proses pengerjaannya akan dibagi menjadi tiga bagian, yaitu :
Perakitan Perangkat Keras
Pemrograman arduino
Pemrograman Interface
3.1 Perakitan Perangkat Keras
Perangkat keras dirakit berdasarkan gambar berikut :



3.2 Kode Progam pada Arduino
Kode Program LM35 Arduino
/** Workshop Dasar Mikrokontroler 2014
RADE - Robotics AnD Embedded Systems STMIK STIKOM Bali
**/
//Pin wiper pada sensor LM32 (terminal tengah) tersambung ke Analog //Pin 3
//Yang disamping tersambung ke 5V dan Ground
int analogPin = 3;
  
//Variabel untuk menyimpan data suhu
float suhu;
  
void setup()
{
  //Setup serial dengan baud 9600
  Serial.begin(9600);
}
  
void loop()
{
  //Baca pin input
  suhu = analogRead(analogPin);
  //Lakukan kalibrasi
  suhu = suhu * 0.48828125;
  //Kirim ke komputer melalui serial
  Serial.println(suhu);
  //Delay sebelum melakukan pembacaan selanjutnya
  delay(50);
}

3.3 Pemrograman Antarmuka
Buka Visual Studio IDE, buat proyek baru dengan tipe Visual C# dan pilih Windows > Windows Forms Application. Ketik nama proyek Monitor Suhu kemudian OK.



Mulai membuat interface dengan mendrag-and-drop masing-masing kontrol ke form. Kemudian untuk kode pada form1 atau form utama gunakan kode berikut :
Kode Program Antarmuka Arduino C#

/** Workshop Dasar Mikrokontroler 2014 RADE - Robotics AnD Embedded Systems STMIK STIKOM Bali
Ditulis Oleh : Aditya Suranata
untuk Public Domain
**/
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
//namespace untuk zedGrpah
using ZedGraph;
//namespace untuk class serial
using System.IO.Ports;
//namespace untuk melihat setting global komputer
using System.Globalization;
  
namespace Monitor_Suhu
{
    public partial class Form_utama : Form
    {
        /**Inisialisaisi arduino
         * Setup port serial dengan nama port COM65,
         * dan baud rate sebesar 9600.
         * Baud rate disini dengan di arduino harus sama
         * **/
        SerialPort arduino = new SerialPort("COM1",9600);       
          
        //waktu mulai dalam milidetik
        double waktuStart = 100;
  
  
        //konstruktor
        public Form_utama()
        {
            InitializeComponent();
        }
  
        //event ketuka tombol start diklik
        private void btn_kontrol_start_Click(object sender, EventArgs e)
        {
            //start detak untuk mulai mengaktifkan grapher
            try
            {
                //matikan tombol start
                btn_kontrol_start.Enabled = false;
                //nyalakan tombol stop
                btn_kontrol_stop.Enabled = true;
                //set batas waktu pembacaan serial sebelum dinyatakan gagal
                arduino.ReadTimeout = 1000;
                //set batas waktu penulisan serial
                arduino.WriteTimeout = 1000;
  
                //nyalakan detak
                Detak.Enabled = true;
                //mulai detak
                Detak.Start(); 
            }
            catch (Exception gagal)
            {
                //Error handling
                //MessageBox.Show(gagal.ToString());
            }
        }
  
          
        //event ketika detak dimulai
        private void Detak_Tick(object sender, EventArgs e)
        {
            try
            {
                //Mulai komunikasi dengan arduino
                arduino.Open();
  
                //get item kurva pertama pada grafik
                LineItem kurvaSuhu = zedGraphSuhu.GraphPane.CurveList[0] as LineItem;
  
                //get PointPairList
                IPointListEdit listSuhu = kurvaSuhu.Points as IPointListEdit;
  
                //waktu yang terlewati
                double waktu = (Environment.TickCount - waktuStart) / 1000.0;
  
                //baca data suhu yang dikirim arduino,
                //konversi data tersebut (string) ke double,
                //dan tambahkan ke listSuhu
                float dataSuhu = float.Parse(arduino.ReadLine(), CultureInfo.InvariantCulture.NumberFormat);
                listSuhu.Add(waktu,Convert.ToDouble(dataSuhu));
  
                //Tutup komunikasi dengan arduino
                arduino.Close();
  
                //Buat scale X tetap rolling dalam interval 30 detik, dengan satu
                //langkah besar antara nilai X maksimal dan akhir dari axis
                Scale xScale = zedGraphSuhu.GraphPane.XAxis.Scale;
                if (waktu > xScale.Max - xScale.MajorStep)
                {
                    xScale.Max = waktu + xScale.MajorStep;
                    xScale.Min = xScale.Max - 30.0;
                }
  
                // Pastikan Y axis di scale ulang untuk mengakomodir data aktual
                zedGraphSuhu.AxisChange();
  
                // Redraw paksa
                zedGraphSuhu.Invalidate();
  
            }
            catch (Exception gagal)
            {
                //error handling
                //tutup komunikasi dengan arduino jika masih terhubung
                if (arduino.IsOpen)
                {
                    arduino.Close();
                }
                //MessageBox.Show(gagal.ToString());
            }
  
        }
  
  
        //event ketika tombol stop diklik
        private void btn_kontrol_stop_Click(object sender, EventArgs e)
        {
            try
            {
                //nyalakan kembali tombol start
                btn_kontrol_start.Enabled = true;
                //matikan tombol stop
                btn_kontrol_stop.Enabled = false;
                //stop detak
                Detak.Stop();
                //matikan detak
                Detak.Enabled = false;
                //jika komunikasi masih terbuka, tutup komunikasi
                if (arduino.IsOpen)
                {
                    arduino.Close();
                }
            }
            catch (Exception gagal)
            {
                //error handling
                //MessageBox.Show(gagal.ToString());
            }
        }
          
        //event ketika form utama dibuka
        private void Form_utama_Load(object sender, EventArgs e)
        {
            try
            {
                //catat waktu pertama sebagai referensi
                waktuStart = Environment.TickCount;
  
                //Inisialisasi ZedGraph
                GraphPane grafikSuhu = zedGraphSuhu.GraphPane;
                grafikSuhu.Title.Text = "Grafik Suhu";
                grafikSuhu.XAxis.Title.Text = "Waktu (Detik)";
                grafikSuhu.YAxis.Title.Text = "Suhu (Celcius)";
  
                //Simpan 120 point. Pada 500 ms sampel rate.
                //RollingPointPairList adalah class penyimpanan yang efisien
                //dengan tetap merolling kumpulan point data tanpa perlu
                //men-shift nilai data apapun
                RollingPointPairList listSuhu = new RollingPointPairList(120);
  
                //Inisialisasi kurva
                LineItem kurvaSuhu = grafikSuhu.AddCurve("Suhu", listSuhu, Color.Red,SymbolType.None);
  
            }
            catch (Exception gagal)
            {
                //error handling
                //MessageBox.Show(gagal.ToString());
            }
        }
  
    }
}

Lakukan pengujian dengan menghubungkan Arduino ke komputer. Periksa nama port COM yang digunakan oleh Arduino dari Device Manager, kemudian pastikan tidak ada program lain yang menggunakan port tersebut termasuk Arduino IDE agar tidak bentrok. Kemudian cocokan nama port serialnya dengan yang tertulis di program. Run program untuk memulai debugging.
Jika terjadi kesalahan atau program tidak bekerja, uncomment syntax MessageBox pada block catch masing-masing kode untuk mentracing kesalahan yang menyebabkan program tidak bekerja.


Selasa, 11 Desember 2018

PC Komunikasi Arduino Untuk Sensor DHT11 Dengan Visual C#

Desember 11, 2018 0
Suhu dan Kelembaban Sensor DHT11 di Arduino dengan C #

1. Pernyataan Masalah
Dalam tutorial ini kita akan belajar bagaimana menggunakan sensor untuk mendapatkan suhu dan kelembaban dari lingkungan menggunakan DHT11 Sensor di Arduino dan memproses informasi dalam C # melalui Port serial. Kami akan menunjukkan suhu dalam Celcius dan Kelembaban.

2. Suhu dan Kelembaban Sensor DHT11
DHT11 adalah sensor suhu dan kelembaban digital dasar, sangat murah. Ini menggunakan sensor kelembaban kapasitif dan termostat untuk mengukur udara sekitarnya, dan memuntahkan sinyal digital pada pin data. Ini cukup mudah digunakan, tetapi membutuhkan waktu yang cermat untuk mengambil data. Satu-satunya kekurangan nyata dari sensor ini adalah Anda hanya bisa mendapatkan data baru dari itu sekali setiap 2 detik. Di pasar Anda akan menemukan banyak model, beberapa di antaranya memiliki 3 atau 4 pin, jadi hati-hati dan baca spesifikasi teknis. Spesifikasi teknis DHT11 adalah:
Daya 3 hingga 5V dan I / O
Penggunaan arus maksimal 2,5mA selama konversi (saat meminta data)
Baik untuk pembacaan kelembaban 20-80% dengan akurasi 5%
Baik untuk pembacaan suhu 0-50 ° C ± 2 ° C akurasi
Tidak lebih dari 1 tingkat sampling Hz (sekali setiap detik)
Ukuran tubuh 15,5 mm x 12 mm x 5,5 mm
3 pin dengan jarak 0,1 "

3. Sketsa untuk proyek ini



Untuk melaksanakan proyek ini kami akan membutuhkan materi-materi berikut:
Suhu dan kelembaban sensor DHT11
Kabel
Arduino UNO R3
Gambar selanjutnya menunjukkan sketsa untuk proyek ini


Pada gambar berikutnya kita dapat melihat pin pertama terhubung ke pin digital 2 di papan arduino, yang tengah ke 5v dan yang terakhir terhubung ke GND.

4. Arduino Source Code untuk mendapatkan Suhu dan Kelembaban dari DHT11
Kode sumber di arduino tidak begitu rumit, seperti yang bisa kita lihat pertama-tama Anda perlu menambahkan pustaka dht11.h untuk mulai menggunakan suhu dan sensor kelembaban DHT11 dan kemudian tentukan pin digital yang akan Anda gunakan untuk membaca informasi dari sensor dan akhirnya membaca informasi dari sensor dht11 (suhu dan kelembaban) dan mencetak di port serial untuk membaca lebih lanjut dari C #.

#include <dht11.h>
//Declare objects
dht11 DHT11;
//Pin Numbers
#define DHT11PIN 2
void setup()
{
  Serial.begin(9600);
}
void loop()
{
  int chk = DHT11.read(DHT11PIN);
  //read temperature in celsius degree and print in the serial port
  Serial.print((float)DHT11.humidity, 2);
  Serial.print(",");
  //read humidity and print in the serial port
  Serial.print((float)DHT11.temperature, 2);
  Serial.println();
  delay(2000);
}

5. Merancang Proyek di C # untuk Menunjukkan Suhu dan Kelembaban



Untuk mengimplementasikan proyek ini menggunakan C # kita perlu menggambar kontrol pengukur dan jarum, dalam kasus saya saya menggambar mereka menggunakan photoshop untuk menampilkan suhu dan menempatkan gambar pengukur dalam kontrol PictureBox dan untuk pergerakan jarum yang akan kita buat secara terprogram. Juga kita membutuhkan beberapa TextBox untuk menunjukkan suhu, kelembaban, dan waktu. Setiap 10 detik kami akan memperbarui suhu dan kelembaban sehingga kami perlu menggunakan kontrol Timer dan akhirnya kami akan membutuhkan kontrol SerialPort untuk membaca informasi dari port serial. Desain antarmuka ditunjukkan pada gambar berikutnya.



C # Source Code
Seperti yang dapat kita lihat ini adalah bagian utama dari kode sumber c # untuk proyek ini, kami membagi informasi yang kami dapatkan dari arduino yang dipisahkan oleh koma menjadi suhu dan kelembapan dan kemudian menggambar suhu itu dalam kontrol pengukur.

private void timer1_Tick(object sender, EventArgs e)
{
    //read temperature and humidity every 10 seconds
    timer1.Interval = 10000;
    //read information from the serial port
    String dataFromArduino = serialPort1.ReadLine().ToString();
    //separete temperature and humidity and save in array
    String[] dataTempHumid = dataFromArduino.Split(',');
    //get temperature and humidity
    int Humidity =
    (int)(Math.Round(Convert.ToDecimal(dataTempHumid[0]),0));
    int Temperature =
    (int)(Math.Round(Convert.ToDecimal(dataTempHumid[1]),0));
    //draw temperature in the graphic
    drawTemperature(Temperature);
    txtHumidity.Text = Humidity.ToString()+" %";
    txtTemperatureCelsius.Text = Temperature.ToString()+" °C";
}
private void timer2_Tick(object sender, EventArgs e)
{
    txtTime.Text = DateTime.Now.ToLongTimeString();
}
private void frmTemperatureHumidity_Load(object sender, EventArgs e)
{
    needle = Image.FromFile("needle2.png");
     serialPort1.Open();
}


6. Menjalankan Proyek
Cukup tekan F5 untuk menjalankan proyek dan Anda akan melihat program mulai membaca dari port serial dan ditampilkan dalam kontrol pengukur, dan setiap 10 detik akan diperbarui dengan informasi baru yang diperoleh dari sensor DHT11.


Senin, 10 Desember 2018

PC Serial Arduino + Sensor LM35 Dengan Visual C#

Desember 10, 2018 7
Sensor Suhu LM35 dalam Arduino dengan C #
Sensor suhu LM35 di Arduino dengan CSharp

1. Pernyataan Masalah
Dalam tutorial ini kita akan belajar bagaimana menggunakan sensor suhu LM35 untuk mendapatkan suhu dari lingkungan di Arduino dan memproses informasi dalam C # melalui Port serial, Juga kita akan menunjukkan suhu dalam derajat Celcius dan Fahrenheit.

2. Sensor Suhu LM35 Presisi Celcius
LM35 adalah sensor suhu sirkuit terpadu, yang tegangan outputnya berbanding lurus dengan suhu Celsius (Celcius). LM35 memiliki kelebihan dibandingkan sensor suhu linier yang dikalibrasi dalam ° Kelvin, karena pengguna tidak perlu mengurangi tegangan konstan yang besar dari outputnya untuk memperoleh skala Centigrade yang nyaman. LM35 tidak memerlukan kalibrasi eksternal atau pemangkasan untuk memberikan akurasi khas ± 1⁄4 ° C pada suhu kamar dan ± 3⁄4 ° C selama rentang temperatur penuh −55 hingga + 150 ° C. Biaya rendah terjamin dengan pemangkasan dan kalibrasi pada tingkat wafer. LM35 dinilai beroperasi pada rentang suhu −55 ° hingga + 150 ° C.
Sebelumnya kita perlu memahami beberapa hal, jadi untuk menghubungkannya dengan Arduino, Anda harus menghubungkan VCC ke Arduino 5V, GND ke Arduino GND, dan pin tengah Anda harus terhubung ke Pin Analog, dalam kasus saya, kita akan menggunakan A0 (Analog pin). Proyek ini tidak memerlukan resistor atau kapasitor antara Arduino dan Sensor, tetapi Anda perlu tahu bahwa Arduino ADC memiliki presisi 10 bit. Ini berarti:
5V / 2 ^ 10 = 5V / 1024,
jadi 0,0049 adalah faktor kami.
Untuk mendapatkan suhu dalam Celsius dari LM35, kami menghitung seperti ini:
Suhu Celcius = (pinA0 * 0,0049) * 100

3. Sketsa untuk proyek ini
Untuk melaksanakan proyek ini kami akan membutuhkan materi-materi berikut:
Sensor suhu LM35
Beberapa kabel
Arduino UNO R3
Gambar selanjutnya menunjukkan sketsa untuk proyek ini


4. Kode sumber untuk Mendapatkan Suhu dari LM35 di Arduino
Pergi ke Arduino teks Area dan ketik kode berikut, pertama kita mendefinisikan Pin analog, sensorValue dan suhu dalam Celcius, kedua kita mulai membuka komunikasi untuk serial, ketiga kita mendapatkan tegangan dari LM35 dan mengkonversi ke derajat celcius dan menulis di serial port dan dapatkan informasinya dari C # dan tunjukkan suhunya. #define sensorPin 0 //A0 Pin
int sensorValue = 0;
float celsius = 0;
void setup() {
  Serial.begin(9600); //start Serial Port
}
void loop() {
  getTemperature();
  //send celsious value to Port and read from C#
  Serial.println(celsius);
  delay(1000);
}
void getTemperature(){
  //get sensorPin voltage
  sensorValue = analogRead(sensorPin);
  //convert voltage to celsius degree
  celsius = (sensorValue * 0.0049) *100;
}
5. Desain Proyek di C # untuk menunjukkan suhu dalam Celcius dan Fahrenheit
Desain antarmuka seperti digambarkan pada gambar berikutnya, untuk desain termometer saya menggunakan GDI Lama +, juga kita akan menambahkan TextBox untuk menunjukkan suhu dari Port serial dan akhirnya satu Tombol untuk menunjukkan suhu dalam thermometer.




Kode berikutnya adalah untuk tombol Tampilkan suhu, pertama kita memverifikasi jika port terbuka dan setelah mendapatkan suhu dari port serial yang dikirim oleh Arduino dan membulatkan nilai ini dan mengirim nilai itu ke fungsi yang bertugas untuk menggambar suhu saat ini di termometer.

private void btnShowTemperature_Click(object sender, EventArgs e)
{
  try
  {
     if (serialPort1.IsOpen)
     {
       //get Temperature from serial port sent by Arduino
       
       int temperature = (int)(Math.Round(Convert.ToDecimal(
                          serialPort1.ReadLine()), 0));
       txtTemperature.Text = temperature.ToString();
       //draw temperature in the thermometer
       DrawTemperatureLevel(temperature);
     }
   }
   catch (Exception ex)
   {
     MessageBox.Show(ex.Message);
   }         
}       

6. Menjalankan proyek
Pertama di arduino UNO R3 tekan tombol Upload dan kemudian pergi ke studio visual dan jalankan proyek, tekan kedua tombol Tampilkan Suhu dan kemudian akan menunjukkan suhu dalam termometer seperti yang ditunjukkan gambar berikutnya.






Visual C# Serial Arduino Untuk Kendali LED ON OFF

Desember 10, 2018 0
Hidupkan dan Matikan LED di Arduino menggunakan Visual Studio C #

Mengaktifkan / Menonaktifkan LED di Arduino Menggunakan Visual Studio

1. Pernyataan Masalah
Dalam tutorial ini kita akan belajar cara MENGAKTIFKAN dan MENONAKTIFKAN LED di arduino, tetapi kali ini menggunakan Visual Studio menggunakan bahasa Port serial dan C #.

2. Apa itu antarmuka serial?
Antarmuka serial digunakan untuk pertukaran informasi antara komputer dan perangkat periferal. Saat menggunakan komunikasi serial, informasi dikirim sedikit demi sedikit (serial) melalui kabel. Antarmuka serial modern adalah Ethernet, Firewire, USB, RS-485, dll. Untuk proyek kami, kami akan menggunakan port USB.
Visual Studio menyediakan kontrol serialPort yang akan kita gunakan untuk proyek ini.

3. Sketsa untuk proyek ini
Kami akan menggunakan sketsa yang digunakan dalam tutorial pertama kami, yang hanya membutuhkan LED, resistor 100ohm dan kabel untuk menghubungkan mereka dengan papan Arduino, gambar berikutnya menunjukkan koneksi.



4. Kode Sumber untuk Arduino
Kode sumber untuk proyek ini mudah dimengerti, tetapi dalam kasus ini kita akan mendapatkan informasi dari port serial yang dikirim oleh program C # dan kemudian kami akan memverifikasi untuk MENGAKTIFKAN (1) atau MENGAKTIFKAN (0), Ketik kode berikut di area teks dari Arduino, kode dijelaskan baris demi baris

#define BaudRate 9600
#define LEDPin    10
char incomingOption;

void setup()
{
  pinMode(LEDPin, OUTPUT);
  // serial communication
  Serial.begin(BaudRate);
}
void loop()
{
     //read from serial port getting information from VS 2013
     incomingOption = Serial.read();
     //verify incomingOption
     switch(incomingOption){
        case '1':
          // Turn ON LED
          digitalWrite(LEDPin, HIGH);
          break;
        case '0':
          // Turn OFF LED
          digitalWrite(LEDPin, LOW);
          break;
     }
}


5. Desain Antarmuka dalam Visual Studio untuk berkomunikasi dengan Arduino
Desain antarmuka dengan 3 tombol, yang pertama akan menyalakan LED, yang kedua akan mematikan LED dan akhirnya tombol ketiga akan menutup port serial.
Anda perlu menyeret dan menjatuhkan kontrol serialPort ke area desain dan mengatur properti BaudRate ke 9600 dan PortName ke COM4 dan itu semua untuk bagian desain.
Selanjutnya kita perlu menulis kode untuk MENGAKTIFKAN dan MENONAKTIFKAN. public partial class frmTurnONTurnOFFLED : Form
{
   public frmTurnONTurnOFFLED()
   {
      InitializeComponent();
   }
   private void btnTurnON_Click(object sender, EventArgs e)
   {
      try
      {
         serialPort1.Write("1"); //send 1 to Arduino
      }
      catch (Exception ex)
      {
         MessageBox.Show(ex.Message);
      }
   }
   private void btnTurnOFF_Click(object sender, EventArgs e)
   {
      try
      {
         serialPort1.Write("0"); //send 0 to Arduino
      }
      catch (Exception ex)
      {
         MessageBox.Show(ex.Message);
      }
   }
   private void frmTurnONTurnOFFLED_Load(object sender, EventArgs e)
   {
      serialPort1.Open(); //open serialPort
   }
   private void btnClosePort_Click(object sender, EventArgs e)
   {
      serialPort1.Close(); //close serialPort
   }       
}



Senin, 03 Desember 2018

Program C# Membaca Sensor Suhu : Menggambar Grafik dan Kotak di C#

Desember 03, 2018 0

Berikut ini  contoh membuat  grafik sederhana dgn menggunakan C# smoga bermanfaat




sistim koordinat  image di c#



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace testgraph
{
public partial class Form1 : Form
{
Random angka_random;
Bitmap surface;
Graphics device;
int y1,y2 = 0;
int x1 = 0;
int x2 = 10;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
pb.BackColor = Color.Blue;
angka_random = new Random();
//create graphics device
surface = new Bitmap(this.Size.Width, this.Size.Height);
pb.Image = surface;
device = Graphics.FromImage(surface);
}
private void BtnGaris_Click(object sender, EventArgs e)
{
//make a new font
Font font = new Font(“Times New Roman”, 26, FontStyle.Regular,
GraphicsUnit.Pixel);
Color color = Color.Azure;
//make pen out of color
int width = angka_random.Next(2, 8);
Pen pen = new Pen(color, width);
device.DrawString(“Grafik Temperatur”, font, Brushes.Green , 10, 10 + 10);
//draw the line
//device.DrawLine(pen, x1, y1, x2, y2);
device.DrawLine(pen, 10, 300, 510, 300);   // sumbu X
device.DrawLine(pen, 10, 10, 10, 300);        // sumbu Y
device.DrawLine(pen, 10, 50, 500, 50);      //
//refresh the drawing surface
pb.Image = surface;
}
private void btnKotak_Click(object sender, EventArgs e)
{
timer1.Enabled = true;
}
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
device.Dispose();
surface.Dispose();
}
private void timer1_Tick(object sender, EventArgs e)
{
gambar_kotak();
}
private void gambar_kotak()
{
//make a random color
if (x1 > 400) x1 = 0;
if (y1 > 200) y1 = 30;
if (x2 > 400) x2 = 0;
if (y2 > 200) y2 = 30;
x1 = x1 + 40;
x2 = x2 + 40;
y1 = angka_random.Next(1, this.Size.Height);
y2 = angka_random.Next(1, this.Size.Height);
if (y1> 280) y1 = 20;
if (y2> 280) y2 = 20;
Color color1 = Color.White;
Color color2 = Color.Yellow ;
//make pen out of color
Pen pen1 = new Pen(color1, 9);
Pen pen2 = new Pen(color2, 9);
txtdata_x.Text = x1.ToString();
txtdata_y.Text = y1.ToString();
//Rectangle(x,y.widht,hight)
Rectangle rect1 = new Rectangle(x1,y1, 5, 280-y1); //(x,y.widht,hight)
Rectangle rect2 = new Rectangle(x2, y2, 5, 280 – y2); //(x,y.widht,hight)
//draw the rectangle
device.DrawRectangle(pen1, rect1);
device.DrawRectangle(pen2, rect2);
//refresh the drawing surface
pb.Image = surface;
}
private void btnstopTimer_Click(object sender, EventArgs e)
{
timer1.Enabled = false;
}
}
}
//============
contoh2
//============



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Collections;
namespace Charts
{
public partial class Form1 : Form
{
int[] data_graph;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
data_graph = new int[] { 1, 2, 3, 5, 2, 10, 4, 11 };
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
DrawLineChart(e, data_graph);
}
private void DrawLineChart(PaintEventArgs e,int[] data_graph)
{
int banyak_data = data_graph.Length;
int panjang_area = 400;
int tinggi_area = 250;
int topX = 20;
int topY = 40;
int nilai_max = cari_nilai_max(data_graph);
int[] height = new int[banyak_data];
int jumlah_tot_data = cari_jumlah_data(data_graph);
SolidBrush brush = new SolidBrush(Color.Aquamarine);
Pen pen = new Pen(Color.Gray);
Rectangle rec = new Rectangle(topX, topY, panjang_area, tinggi_area);
e.Graphics.DrawRectangle(pen, rec);
pen.Color = Color.Red;
int smallX = topX;
// int smallY = 0;
int smallLength = (panjang_area / (data_graph.Length + 1));
int smallHeight = 0;
Point koordinat1 = new Point();
Point koordinat2 = new Point();
for (int i = 0; i < banyak_data; i++)
{
koordinat1 = koordinat2;
koordinat2.X = koordinat2.X + smallLength;
smallHeight = ((data_graph[i] * tinggi_area) / nilai_max);
koordinat2.Y = topY + tinggi_area – smallHeight;
if (koordinat1.X != 0 && koordinat1.Y != 0)
{
e.Graphics.DrawLine(pen, koordinat1, koordinat2);
}
smallX = smallX + smallLength;
}
}
private static int cari_nilai_max(int[] intArray)
{
int maxVal = intArray[0];
for (int i = 0; i < intArray.Length; i++)
{
if (intArray[i] > maxVal)
maxVal = intArray[i];
}
return maxVal;
}
private static int cari_jumlah_data(int[] intArray)
{
int sum = 0;
for (int i = 0; i < intArray.Length; i++)
{
sum += intArray[i];
}
return sum;
}
}
}