21 Desember 2012

VB6 + Arduino + LED RGB


Setelah sebelumnya tutorial mengenai menghidupkan led dari vb(dsini), skrg kita akan mempelajri tntang komunikasi serial menghidupkan warna led rgb sesuai dengan warna yang dipilih pada vb6. Prinsip kerja dari program ini, jika seseorang memilih suatu warna pada program vb yang telah dibuat maka secara otomatis led rgb pada arduino akan menjadi warna yang dipilih tadi. Untuk lebih jelasnya, langsung saja kita praktekkan. J
Hal pertama yang kita lakukan adalah pemrograman serial pada vb6. Buat 2 buah form seperti gambar dibawah ini :



Double klik form1 dan masukkan kode ini :
Private Sub Form_Load()
With MSComm1
    .Settings = "9600,n,8,1"
    .RThreshold = 1
End With
milih = 0
For te = 0 To 20
Combo1.AddItem te
Next
End Sub
Buat 2 buah fungsi :
Sub kirim(de As Integer)
Dim rr, gg, bb As Integer
rr = (de \ 100)
gg = ((de \ 10) Mod 10)
bb = (de Mod 10)
MSComm1.Output = rr & gg & bb
End Sub
Sub FindRGB(Col As Long)
R = &HFF& And Col
G = (&HFF00& And Col) \ 256
Be = (&HFF0000 And Col) \ 65536
End Sub
Double Klik pada tombol load picture, masukkan kode:
CommonDialog1.Filter = ".JPEG"
CommonDialog1.ShowOpen
Picture2.Cls
Picture1.Picture = LoadPicture(CommonDialog1.FileName)
Picture1.Picture = Picture1.Image
Picture2.PaintPicture Picture1.Picture, 0, 0, Picture2.Width, Picture2.Height, 0, 0, Picture1.Width, Picture1.Height
milih = 1
Double Klik pada tombol Custom color, masukkan kode:
Picture2.Picture = Nothing
Picture2.Cls
CommonDialog1.Flags = cdlCCRGBInit
CommonDialog1.Color = 2521625
CommonDialog1.ShowColor
Picture2.BackColor = CommonDialog1.Color
milih = 2

 Double Klik pada tombol Custom color, masukkan kode:
Form2.Show
milih = 3
Double Klik pada tombol Connect, masukkan kode:
MSComm1.CommPort = Val(Combo1.Text)
MSComm1.PortOpen = True
Timer1.Enabled = True
MSComm1.Output = "r255000000e"
Double Klik pada tombol Timer1, masukkan kode:
If MSComm1.PortOpen = True Then
MSComm1.Output = "r"
kirim (Val(Text1))
kirim (Val(Text2))
kirim (Val(Text3))
MSComm1.Output = "s"
End If

Setelah pemrogrman pada form1 selesai, selanjutnya masuk pada form 2 dan masukkan kode dibawah ini :

Private Sub Command1_Click()
If Asc(Text1) > 0 Or Asc(Text2) > 0 Or Asc(Text3) > 0 Then
Form1.Show
Form1.Picture2.Cls
Form1.Picture2.BackColor = RGB(Val(Text1), Val(Text2), Val(Text3))
Unload Me
Else
MsgBox "Angka Salah !", vbCritical, "Error"
End If
End Sub
Private Sub Text1_Change()
Shape1.BackColor = RGB(Val(Text1), 0, 0)
End Sub

Private Sub Text2_Change()
Shape2.BackColor = RGB(0, Val(Text2), 0)
End Sub

Private Sub Text3_Change()
Shape3.BackColor = RGB(0, 0, Val(Text3))
End Sub

setelah program divb6, selanjutnya yang kita lakukan adalah pemrograman led rgb pada arduino.rangkailah pada arduino seperti gambar dibawah ini :

Masuk pada IDE arduino dan masukkan kode dbawah ini :
#define red   9
#define green 11
#define blue  10
int result,y,data[11],i,betul[11];
int datar,datag,datab;
int flag,cc;
void setup()
{
  serial_initial();      //panggil fungsi serial initial
  pinMode(red,OUTPUT);
  pinMode(green,OUTPUT);
  pinMode(blue,OUTPUT);
  for (int t=0;t<=11;t++)
  {
    data[t]=0;
  }
}
void loop()
{
  delay(50);
  i=0;
  }
Buat tab baru pada arduio dan masukkan kode ini :

#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
void serial_initial()                                //setting serial
{ 
  sbi(UCSR0A, U2X0);
  sbi(UCSR0B, RXCIE0);
  sbi(UCSR0B, RXEN0);
  sbi(UCSR0B, TXEN0);
  UCSR0C = B00000110;
  UBRR0H = B0;
   //UBRR0L = B00010000;  // baudrate 115200
   UBRR0L = B11001111;  //setting baudrate 9600
  // UBRR0L = 0;
}
void uart_send(unsigned char dat) {
  while(! (UCSR0A & ( 1 << UDRE0))  ); 
  UDR0 = dat;                           
}

void cek()
{
  if (result=='r')                                              //cari kode header 'r'
  {flag=1;cc=0;}
  else
  {
    cc++;
    data[cc]=result;                                            //membaca data yang dikirmkan serial
    if (flag==1 && result=='s')                                  //jika ketemu tail maka olah data
  {   
  datar=((data[1]-48)*100)+((data[2]-48)*10)+((data[3]-48)*1);    //ambil data red(3 byte data merah)
  datag=((data[4]-48)*100)+((data[5]-48)*10)+((data[6]-48)*1);    //ambil data green(3 byte data hijau)
  datab=((data[7]-48)*100)+((data[8]-48)*10)+((data[9]-48)*1);    //ambil data biru(3 byte data biru)
  analogWrite(red,datar);                                          //masukkan data pwm merah pada pin red
  analogWrite(green,datag);                                        //masukkan data pwm hijau pada pin green
  analogWrite(blue,datab);                                         //masukkan data pwm biru pada pin blue
    cc=0;flag=0;
  } 
  }
 
}

ISR(USART_RX_vect)                  //interrupt jika ada data masuk
{    
result = UDR0;          //masukkan data pada variable result
 cek();           //loncat ke fungsi cek
}
void kirim(int xxx)              ///kirim 3 byte data
{
  uart_send((xxx/100)+48);        //kirim byte ratusan
  uart_send(((xxx/10)%10)+48);    //kirim byte puluhan
  uart_send((xxx%10)+48);          //kirim byte satuan
}

 sekian tutorial ini, smoga bermanfaat. untuk download program lengkapnya silakan disini.


2 Tanggapan:

  1. kutipan "Buat tab baru pada arduio dan masukkan kode ini : " maksudnya apa ya? apa buat lembar kerja baru, klo buat lembar kerja baru programnya error. mohon penjelasannya.

    BalasHapus
  2. di arduino kan bisa dibuat tab baru mas, klik dibagian kanan arduinonya, terus pilih new tab. masukkan nama sesuai yang agan inginkan, pastekan kodingnya...
    atau klw msih belum bisa, pastekan aja kodingnya satu halaman dengan program utama, sama saja hasilnya...
    slamat berjuang mas....:)

    BalasHapus