Category Archives: Dasar

Pengetahuan dasar umum yang membantu memahami PC Control

Pengetahuan Dasar pemrograman Database dengan VB.Net

 [draft]

  • Apa itu ADO.net ?
  • Koneksi Database SQL Server data Provider
  • Koneksi DataBase  dengan OLEDB Data Provide
  • Koneksi database dengan ODBC  data Provider

Mengenal ADO.NET

Pada pemrograman sebelum .NET (VB6), pengembang menggunakan teknologi akses data seperti ODBC, OLE DB, dan ActiveX Objek Data (ADO).  Untuk pemrograman VB.NET, Microsoft membuat teknologi baru menciptakan cara baru untuk bekerja  dengan database, yang disebut ADO.NET.  dan ADO.NET bukan kelanjutan ADO teknologi sebelum NET.

ADO.NET adalah sekumpulan Class  yang menyediakan  layanan akses data untuk programer .NET,  menyediakan seperangkat komponen  untuk membuat aplikasi  data yang didistribusikan.
ADO.NET adalah bagian integral dari .NET Framework yang menyediakan akses ke database .Class ADO.NET  ada di namespace  System.Data.dll

 

Didalam ADO.NET tersedia berrbagai  data provider spt OLEDB, ODBC dan data provider khusus untuk database tertentu spt untuk SQL server  dan oracle. Selain untuk database  juga tersedia data provider untuk XML.

XML digunakan untuk pertukaran data antar  system yg berbeda contoh sebuah system di linux dgn aplikasi  java dan mysql  akan bertukar data dgn system lain yg mengunakan  os windows dgn aplikasi  C# dan MsAccess . Cara mudah pertukaran data antara dua system tsb  adalah data yg dipertukarkan  mempunyai format yang sama yaitu dlm  bentuk XML. Pada artikel ini sy tdk membahas tentang XML.

Arsitektur ADO.NET

Terdapat 2 kelompok  class utama dlm ADO.Net:
Pertama data provider :    digunakan  untuk koneksi ke database .
Kedua adalah data set :  digunankan untuk menyimpan dan mengelola data. Lebih jelasnya bisa dilihat dlm arsitektur ADO.Net berikut ini:

adonet

Conected dan Disconected

ADO.NET  menyediakan mode conected dan disconected dlm mengelola database.  Pada Mode conected  client memodifikasi data dlm keadaan online  sedangkan mode disconected adalah fitur baru ADO.NET  gambaran mekanismenya antara lain  sbb: client membuka  koneksi ke server database kemudian   data disimpan di  buffer(dataset) client  lalu koneksi server diputus setelah  data diolah baru dibuat  lagi koneksi ke server untuk transfer data. model disconected  spt ini  sangat membantu karena bisa mengurangi trafik data dlm jaringan  terutama jika jumlah client sangat banyak

conected_disconected

Melalui gambar  arsitektur diatas saya ingin memperjelas perbedaan cara mengases database dgn conected ( client dan server database tergubung terus selama  manipulasi data) dgn data reader. dan  disconected , pemilihan kedua  cara tsb tergantung  kebutuhan aplikasi yg kita buat. misalnya untuk mengisi datagridview maka kita gunakan data adafter dan data set sedangkan jika kita ingin mengambil satu baris atau beberapa baris data maka kita gunakan data reader.

Connection
Komponen ini digunakan untuk mengatur koneksi dengan sebuah data source..

Command
command adalah pernyataan SQL atau prosedur yang tersimpan digunakan untuk mengambil, insert, delete atau update data dalam  sebuah data source.

DataReader
Datareader digunakan untuk mengambil data dari database dalam mode read-only dan mode forward.

DataSet
DataSet adalah representasi data di memori . dataset terputus dari database, ia menyimpan cached sejumlah record yang diambil dari database. Ketika sambungan dibuat dengan database, data adapter membuat dataset dan menyimpan data di dalamnya. Setelah data diambil dan disimpan dalam dataset, koneksi dengan database ditutup. Hal ini yg disebut  sebagai ‘arsitektur terputus/disconected’. dataset bekerja sebagai database virtual yg berada di memori  yang berisi tabel.

DataAdapter
DataAdapter merupakan bagian integral dari kerja ADO.Net karena data ditransfer ke dan dari database melalui data adafter. Data adafter mengambil data dari database dan menyimpanya ke dalam dataset selain itu data adafter juga mengupdate database.
Ketika perubahan  terjadi di dataset, perubahan juga terjadi di dalam database yg  dilakukan oleh data adapter

Data Provider
Dataprovider digunakan untuk menghubungkan aplikasi dgn database, mengeksekusi perintah dan mengambil data, menyimpannya dalam dataset, membaca data yang diambil dan memperbarui database.

sedangkan yang dimaksud data provider  adalah  bagian yg spt tampak berikut ini:

dataprovider

Tiap  data provider  mempunyai namespace masing2 yg ada di NET Framework antara lain :

– System.Data.SqlClient  :  data provider  untuk  SQL Server
– System.Data.OracleClient :   data provider untuk  Oracle
– System.Data.Odbc   :  data provider untuk  ODBC
-System.Data.OleDb  :  data provider  untuk  OLEDB

1. Data Provider  untuk  database SQL SERVER

Data Profider SQL Server ada di namespace System.Data.SqlClient. Berikut ini  beberapa class class   yg disediakan  dlm namespace tsb :
– SqlConnection: class yg digunakan untuk koneksi  ke database SQL Server
– SqlCommand   : class yg digunakan untuk mengeksekusi SQL query  atau  store procedures
– SqlDataAdapter: class yg menghubungkan  dataset  dan  database SQL Server
– SqlDataReader :  class yg digunakan untuk membaca database secara read only.

2. Data provider untuk  database ORACLE

Data provider  khusus  untuk database Oracle tersedia di namespace System.Data.OracleClient. Berikut ini  beberapa class class   yg disediakan  dlm namespace tsb :
– OracleConnection
– OracleCommand
– OracleDataAdafter
– OracledataReader

3. Data provider  OLEDB  untuk database dg teknoogi yg lama

OLEDB digunakan untuk database lama antara lain : Pradox, Dbase, MsAccess ,Mysql ,DB2 dan  sql server versi lama. selain itu  OLEDB juga digunakan ketika kita menggunakan 2 database yg berbeda   misal kita menggunakan MsAccess dan SQL server dlm satu aplikasi secara simultan.

Data provider OLEDB harus melalui beberapa layer untuk mengakses database. sehingga lebih efisien anda menggunakan data provider yg spesifik untuk tiap database. mial untuk Oracle gunakanlah data provider  yg ada di System.Data.OracleClient  bgitupun untuk SQL Server lebih efisien menggunakan dataprovider yg tersedia di System.Data.SqlClient dari pada anda menggunakan data provider OLEDB (System.Data.OleDb).

Class class yg digunakan oleh data provider OLEDB  (class class tsb ada di  namespace System.Data.OleDb)  antar lain:

–  OleDbConnection,  class untuk mengkoneksi  database
–  OleDbCommand,   class untuk  menjalankan  SQL query
–  OleDbDataAdapter, class untuk menghubungkan  dataset  dg database
–  OleDbDataReader,   membaca hasil output dari database

4. Data provider  ODBC  untuk database dg teknoogi yg lama

ODBC adalah teknologi akses data  “general purpose” asli Microsoft. ODBC masih banyak digunakan untuk sumber data yang tidak memiliki provider OLE DB atau data provider .NET Framework.
provider data ODBC ada di namespace System.Data.Odbc. Arsitektur ODBC pada dasarnya adalah proses tiga-tier. data provider ODBC kurang efisien daripada komunikasi langsung penyedia data database khusus dengan database (sqlClient,mysql,oracle), jadi
untuk kinerja lebih baik untuk menghindari  provider data ODBC.
berikut ini beberapa class class  penting dalam namespace Odbc.

OdbcCommand
OdbcConnection
OdbcDataAdapter
OdbcDataReader
OdbcError
OdbcParameter
OdbcTransaction

classdataprofider

Sekarang waktunya kita akan lihat contoh konkrit  bagaimana aplikasi  VB.Net mengakses database secara “conected” dgn objek DataReader .


Contoh  aplikasi  mengakases database sql server dgn  data provider  SQL Server

Dim conn As New SqlConnection
conn.ConnectionString = “Data Source=.\sqlexpress;”

Dim sql As String = “select * from tblKaryawan”
Dim reader As SqlDataReader = Nothing
conn.Open()
Dim cmd As New SqlCommand(sql, conn)
reader = cmd.ExecuteReader()

While reader.Read()
Console.WriteLine(“{0} | {1}”, _
reader(“FirstName”).ToString(), _
reader(1).ToString().PadLeft(10))
End While

reader.Close()
conn.Close()


Untuk menghubungkan aplikasi  vb.net  dg  database sql server selain dengan data provider  khusu untuk sql server spt diatas ( import System.Data.SqlClient) juga bisa dengan OLEDB ataupun dgn ODBC adapun  dimana letak perbedaan utamanya  bisa dilihat di table berikut ini:

perbedaan1


Contoh Kode Program menggunakan data provider OLEDB

Dim conn As New OleDbConnection
conn.ConnectionString = “Provider=sqloledb;Data Source=.\sqlexpress;”
Dim sql As String = “select * from tblKaryawan”
Dim reader As OleDbDataReader = Nothing
conn.Open()
Dim cmd As New OleDbCommand(sql, conn)
reader = cmd.ExecuteReader()

While reader.Read()
Console.WriteLine(“{0} | {1}”,_

reader(“FirstName”).ToString(), _
reader(1).ToString().PadLeft(10))
End While

reader.Close()
conn.Close()


Contoh Kode Program menggunakan data provider ODBC 

sebelumnya buat dsn ODBC melalui control panel

odbc

Menu Membuat ODBC di control panel

Adapun step step selanjut  adalah sebagai berikut pd gambar dibawah ini:

odbcStep

Dim connString As String = “dsn=namaDsnODBC”

Dim sql As String = “select * from tblKaryawan”
Dim reader As OdbcDataReader = Nothing
Dim conn As New OdbcConnection(connString)
conn.Open()
Dim cmd As New OdbcCommand(sql, conn)
reader = cmd.ExecuteReader()

While reader.Read()
Console.WriteLine(“{0} | {1}”, _
reader(“FirstName”).ToString(), _
reader(1).ToString().PadLeft(10))
End While

reader.Close()


contoh program VB.Net dengan database MYSQL

menggunakan data provider khusus MYSQL /namespace MySql.Data.MySqlClient

https://pccontrol.wordpress.com/2014/12/17/pengetahuan-dasar-koneksi-vb-net-dan-database-mysql/

Advertisements

Pengetahuan Dasar HMI Weintek : Membuat form login User akses

[draft]

Pengetahuan Dasar HMI Weintek : Membuat form login User akses

Berikut tahapan membuat user akses pada HMI Weintek menggunakan EasyBuilderPro

1. klik edit->system parameter setting->klik tab security ->pilih enhanced mode ->isi user pasword -> check list misal class A

2. buat form login berisi  :

  •  2  object input ascii untuk input user , input password  ,
  • 2 object tombol  set word untuk login dan logout
  • 1 object tombol function key untuk  closed.

formUserdPaswordHMI
2.1   set property object input ascii untuk user name :
-klik object ascii untuk input user name yg ada di form
-klik tab general->klik read adress -> centang use define tag dan pilih device type UAC user name


-klik tab data entry -> pilih property keypad : ascii small

2.2  set property object input ascii untuk pasword :
klik object ascii untuk input pasword yg ada di form
-klik tab general->klik read adress -> centang use define tag dan pilih device type UAC password
-klik tab data entry -> pilih property keypad : ascii small

2.3 Membuat tombol login
klik menu object -> button-> set word -> pd tab general
-isi attribut value : 1
-klik setting -> centang user define tag dan pilih device type : UAC command
-klik tab label -> centang use label -> isi content : Login

2.3 Membuat tombol logout
klik menu object -> button-> set word -> pd tab general
-isi attribut value : 3
-klik setting -> centang user define tag dan pilih device type : UAC command
-klik tab label -> centang use label -> isi content : Logout

2.4 membuat tombol closed

-buat object  button ->function key -> pilih closed windows

fuctionkeyclosed

 

3. pada tombol yg akan diproteksi
klik tab security -> pilih class A ( sesuai pilihan pada point no 1 )

Pengetahuan Dasar Grounding Pada Rangkaian Elektronik

[draft]

Pengetahuan Dasar Grounding Pada Rangkaian Elektronik

  • Grounding dalam 1 rangkain PCB
  • Grounding pada chasis
  • Siklus/loop  Grounding
  • Grounding Power supply
  • grounding pada sinyal input
  • grounding pada sinyal output
  • Koneksi ground antar pcb
  • Shielding
  • safety earth

 

 

Menambah Pin Input dan output modul Arduino dgn IC IO expander PCF8574

[Draft]

Menambah Pin Input dan output modul Arduino dgn IC IO expander PCF8574

i2ccircuit

kita akan menyalakan dan mematikan led di modul LCD i2c  yg menggunakan IC PCF8574 .   sckematik modul LCD i2c adalah sbb:

lcdi2ccirkuit

Kita lihat dari gambar diatas led back light LCD dihubungkan ke P3 dari ic PCF8574.

 

Library yang digunakan :  PCF8574.h

Contoh Code   pin P3 PCF8574 sebagai OUTPUT

#include “PCF8574.h”

PCF8574 GPIOtambahan(0x27);   // Set alamat ic PCF8574
void setup(){

Serial.begin(9600);

GPIOtambahan.pinMode(P3, OUTPUT);    // Set pinMode P3 sebagai OUTPUT

GPIOtambahan.begin();

}
void loop()

{

GPIOtambahan.digitalWrite(P3, HIGH);

delay(1000);

GPIOtambahan.digitalWrite(P3, LOW);

delay(1000);

}

 

Contoh Code pin P1   PCF8574  sebagai INPUT

#include “PCF8574.h”

PCF8574   pcf8574(0x27);  // Set i2c address

void setup()

{

Serial.begin(9600);

pcf8574.pinMode(P1, INPUT);
pcf8574.begin();

}
void loop()

{

uint8_t val = pcf8574.digitalRead(P1);

if (val==HIGH) Serial.println(“KEY PRESSED”);

delay(50);

}

Dasar pemrograman I2C pada Arduino

[DRAFT]

Sebelum memprogram I2C pada arduino ada baiknya  Anda mengetahui dasar komunikasi i2c  .Dasar  Cara kerja I2C  bisa dibaca disini

Contoh  device yang sering dikoneksi ke arduino  melalui komunikasi i2c antara lain : io expander  , memory eeprom external , LCD , dsb.

berikut ini contoh koneksi Arduino (sebagai master )  dengan beberapa  device slave berikut ini : ic RTC ds1307,  ic EEPROM At24C32(ada di modul RTC)  dan ic io expander PCF8574  (yg dipakai di LCD matrix.) .adapun koneksinya adalah sbb:

RTC_LCD_I2C

..

i2ccircuit2

 

library  utama yg digunakan untuk  komunikasi i2c adalah wire.h  yang anda bisa dicek  di library manager . ( jika hanya cek library  apakah sdh terinstal atau blm  internet anda tdk perlu  online. Untuk intsall library baru melalui library manager internet harus online)

menulibrarymanager
setelah muncul menu library manager  , ketik wire pada kolom pencarian.

wirelib.jpg

pada gambar diatas terlihat bahwa library wire telah terinstall (INSTALLED

selain itu dibutuhkan juga library khusus device slave yg kita gunakan antara lain

  1. untuk RTC DS1307 :  DS1307RTC.h
  2. untuk AT24C32       :  At24CXX.h
  3. untuk LCD i2c         : LiquidCrystal_I2C.H

(anda bisa menggunakan library selain yg diatas, banyak pilihan ada di menu library manager  ).  saat menginstall library melalui library manager pastikan internet anda aktif.

Langkah langkah memprogram device I2C

  1. cek alamat device   dengan sketch scan device yg terkoneksi ke arduino
  2. instal library device tsb
  3. buat sketch untuk read/write device i2c
  4. upload sketch ke arduino

Berikut ini contoh sketch untuk scan alamat device slave  i2c yang terkoneksi dengan master i2c (arduino).

#include <Wire.h>
void setup()
{
Wire.begin();
Serial.begin(9600);
while (!Serial);
Serial.println(“\nI2C Scanner”);
}

 

void loop()
{
byte kode_eror, alamat;
int nDevices;
Serial.println(“Scanning…cari chip i2c pd alamat 1 – 127”);
nDevices = 0;
for(alamat = 1; alamat < 127; alamat++ )
{
Wire.beginTransmission(alamat);
kode_eror = Wire.endTransmission();
if (kode_eror == 0)
{
Serial.print(“I2C device alamat: 0x”);
Serial.println(alamat,HEX);
nDevices++;
}
else if (kode_eror==4)
{
Serial.print(“ada device eror”);
}
}
if (nDevices == 0)
Serial.println(“tak terdeteksi device i2c \n”);
else
Serial.println(“selesai\n”);
delay(5000);
}

upload sketch diatas  dan buka menu monitor serial  contoh hasil scan :

scanSlavei2c

alamat 0x27  adalah alamat  IO expander  pcf8574 yg digunakan pada modul i2c  untuk LCD matrix

alamat 0x50 adalah alamat  EEProm At24C32

alamat 0x68 adalah alamat RTC DS1307

contoh Kode sketch untuk  LCD i2c dan DS2307 bisa dilihat di artikel sebelumnya .


Berikut ini contoh kode sketch  menulis dan membaca memori i2c 24X32 yang ada di modul RTC.

#include <Wire.h>

void write(unsigned int address, byte data);
byte _pageSize=32;
byte _id=0x50; // id /alamat  chip 24C32
byte _b[8];

 

void setup()
{
// put your setup code here, to run once:
Serial.begin(9600);
Wire.begin();
}

unsigned int alamatMemori=0;
void loop() {
// put your main code here, to run repeatedly:
writeInt(8,999);
delay(1000);
Serial.print(“alamat=”);
Serial.println(alamatMemori);
Serial.print(“data=”);
Serial.println(readInt(alamatMemori++));
delay(2000);
if(alamatMemori==32)alamatMemori=0; //reset alamat counter
}

/**
* Write byte
*/
void write(unsigned int address, byte data)
{
Wire.beginTransmission(_id);
if(Wire.endTransmission()==0) {
Wire.beginTransmission(_id);
Wire.write(address >> 8);
Wire.write(address & 0xFF);
Wire.write(data);
Wire.endTransmission();
delay(20);
}
}

//=======================

/**
* Write sequence of n bytes
*/
void write(unsigned int address, byte *data, int n)
{
// status quo
int c = n; // bytes left to write
int offD = 0; // current offset in data pointer
int offP; // current offset in page
int nc = 0; // next n bytes to write

// write alle bytes in multiple steps
while (c > 0) {
// calc offset in page
offP = address % _pageSize;
// maximal 30 bytes to write
nc = min(min(c, 30), _pageSize – offP);
write(address, data, offD, nc);
c-=nc;
offD+=nc;
address+=nc;
}
}

/**
* Write sequence of n bytes from offset
*/
void write(unsigned int address, byte *data, int offset, int n)
{
Wire.beginTransmission(_id);
if (Wire.endTransmission()==0) {
Wire.beginTransmission(_id);
Wire.write(address >> 8);
Wire.write(address & 0xFF);
byte *adr = data+offset;
Wire.write(adr, n);
Wire.endTransmission();
delay(20);
}
}
/**
* Read byte
*/
byte read(unsigned int address) {
byte b = 0;
int r = 0;
Wire.beginTransmission(_id);
if (Wire.endTransmission()==0) {
Wire.beginTransmission(_id);
Wire.write(address >> 8);
Wire.write(address & 0xFF);
if (Wire.endTransmission()==0) {
Wire.requestFrom(_id, 1);
while (Wire.available() > 0 && r<1) {
b = (byte)Wire.read();
r++;
}
}
}
return b;
}

 

void writeInt(unsigned int address, unsigned int data)
{
write(address, (byte*)&data, 2);
}

 

/**
* Read integer
*/
unsigned readInt(unsigned int address) {
read(address, _b, 2);
return *(unsigned int*)&_b[0];
}

 

/**
* Read sequence of n bytes
*/
void read(unsigned int address, byte *data, int n) {
int c = n;
int offD = 0;
// read until are n bytes read
while (c > 0) {
// read maximal 32 bytes
int nc = c;
if (nc > 32)
nc = 32;
read(address, data, offD, nc);
address+=nc;
offD+=nc;
c-=nc;
}
}

 

/**
* Read sequence of n bytes to offset
*/
void read(unsigned int address, byte *data, int offset, int n) {
Wire.beginTransmission(_id);
if (Wire.endTransmission()==0) {
Wire.beginTransmission(_id);
Wire.write(address >> 8);
Wire.write(address & 0xFF);
if (Wire.endTransmission()==0) {
int r = 0;
Wire.requestFrom(_id, n);
while (Wire.available() > 0 && r<n) {
data[offset+r] = (byte)Wire.read();
r++;
}
}
}
}


Membaca Tulis memory EEPROM AT24Cxx  Menggunakan library AT24CX.h

#include <Wire.h>
#include <AT24CX.h>
//EEPROM object
AT24CX mem;
//setup
void setup()
{
Serial.begin(9600);
delay(1000);
}

// main loop
void loop()
{
// read and write integer
Serial.println(“Write 65000 to address 15”);
mem.writeInt(15, 65000);
Serial.println(“Read integer from address 15 …”);
unsigned int i = mem.readInt(0);
Serial.print(“… read: “);
Serial.println(i, DEC);
Serial.println();

}

 

 

 

Contoh Code Parsing Data string Serial Arduino

 

String readString; //main captured String

String data1; //data String
String data2;
String data3;
String data4;
String data5;

//format data diterima   dari pc atau arduino lainya : 123a123b123c123d123*

void setup()
{
Serial1.begin(9600);

}

void loop()
{
TerimaData();
}//loop

void TerimaData(void)
{

if( Serial1.available())
{

//=================
char c = Serial1.read();           //gets one byte from serial buffer
if (c == ‘*’)
{
ind1 = readString.indexOf(‘a’); //finds location of first ,
data1 = readString.substring(0, ind1); //captures first data String

ind2 = readString.indexOf(‘b’, ind1+1 ); //finds location of second ,
data2 = readString.substring(ind1+1, ind2+1); //captures second data String

ind3 = readString.indexOf(‘c’, ind2+1 );
data3 = readString.substring(ind2+1, ind3+1);

ind4 = readString.indexOf(‘d’, ind3+1 );
baris4 = readString.substring(ind3+1); //captures remain part of data after last ,

ind5 = readString.indexOf(‘*’, ind4+1 );
data5 = readString.substring(ind4+1); //captures remain part of data after last ,

readString=””; //clears variable for new input

data1=””;
data2=””;
data3=””;
data4=””;
data5=””;
}
else
{
readString += c;     //  data serial yg dibaca gabungkan
}

}

Pengetahuan Dasar Arduino: Dasar RTC DS1307 Menampilkan Jam dan Tanggal pada LCD

#include <TimeLib.h>
#include <Wire.h>
#include <DS1307RTC.h> // library ini berisi class  RTCDS1307
#include <LiquidCrystal.h>
LiquidCrystal lcd( 5,6,7,8,9,10);//(rs, en,d0, d1, d2, d3)    pin rw di hubungkan dg GND
tmElements_t  waktu;     //membuat objeck dari class  DS1307RTC

void setup() {
lcd.begin(20, 4);
lcd.setCursor(0, 0); // Set LCD cursor position (column, row)
lcd.print(“TEST RTC DS1307”);
lcd.setCursor(0, 1); // Set LCD cursor position (column, row)
lcd.print(“JAM:”);
//lcd.setCursor(0, 2); // Set LCD cursor position (column, row)
//lcd.print(“TGL:”);
//lcd.setCursor(0, 3); // Set LCD cursor position (column, row)
//lcd.print(“Day:”);

}

void loop()
{
digitalClockDisplay();
delay(1000);
}

void digitalClockDisplay()
{

if (RTC.read(waktu))
{
lcd.setCursor(4, 1); // Set LCD cursor position (column, row)
print2digits(waktu.Hour);
lcd.print(“:”);
print2digits(waktu.Minute);
lcd.print(“:”);
print2digits(waktu.Second);

//lcd.setCursor(4, 2);
//print2digits(waktu.Day);
//lcd.print(“/”);
//print2digits(waktu.Month);
//lcd.print(“/”);
// lcd.print(tmYearToCalendar(waktu.Year));  //atau lcd.print(waktu.year+1970);
//lcd.setCursor(4, 3);
//lcd.print(waktu.Wday);
}

}
//=================
void print2digits(int number)
{
if (number >= 0 && number < 10) {
lcd.print(‘0’);
}
lcd.print(number);
}

 

Video Tutorial Dasar Arduino Bag-4: Built in Function

Video Tutorial Dasar Arduino Bag-4: built in function

Video Tutorial Dasar Arduino Bag-3: Sofware Arduino

Video Tutorial Dasar Arduino Bag-3: Sofware Arduino

Video Tutorial Dasar Arduino Bag-2: hardware Arduino

Video Tutorial Dasar Arduino Bag-2: hardware Arduino