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
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
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
}
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.
BalasHapusdi arduino kan bisa dibuat tab baru mas, klik dibagian kanan arduinonya, terus pilih new tab. masukkan nama sesuai yang agan inginkan, pastekan kodingnya...
BalasHapusatau klw msih belum bisa, pastekan aja kodingnya satu halaman dengan program utama, sama saja hasilnya...
slamat berjuang mas....:)