Showing posts sorted by relevance for query arduino-0-1-pin. Sort by date Show all posts
Showing posts sorted by relevance for query arduino-0-1-pin. Sort by date Show all posts

Thursday 16 April 2015

ARDUINO DAN VB.NET :: Komunikasi Arduino dengan VB.NET (serial port)

 

Pemrograman serial port pada Arduino
Hubungkan Arduino ke PC Anda menggunakan kabel USB, lalu buka software Arduino. Program ini untuk memastikan bahwa koneksi antara Arduino dan PC tidak ada kendala.   Ketik program seperti di bawah ini lalu upload ke Arduino.
int inByte=0; // variable to receive data from serial port
void setup()
{
Serial.begin(9600);
}

void loop()
{
if (Serial.available() > 0)
{
inByte=Serial.read();
Serial.write(inByte);
}
}
Setelah itu buka Tools > Serial Monitor pada aplikasi Arduino, untuk melihat interaksi antara PC dan mikrokontroler.  Jika kita mengirim sembarang data, maka Arduino akan membalas data yang sama.  Jangan lupa periksa kecepatan komunikasi, keduanya harus sama.  Dalam hal ini 9600 bit per detik.
Pada bagian setup, kita mengaktifkan fungsi serial port pada Arduino (yang terkoneksi langsung dengan port USB) dengan perintah:
Serial.begin(9600);
Perintah ini hanya dilakukan sekali saja, pada saat Arduino diaktifkan atau di-reset.  Jika kita ingin kecepatan lebih tinggi, ganti dengan 115000.  Jika kita ingin menggunakan serial port yang lain, gunakan Serial1, Serial2 atau Serial3. (berlaku untuk mikro yang serial portnya lebih dari satu, contohnya Arduino Mega, terletak pada pin 14 sampai 19).  Jika Anda menggunakan Uno, maka tidak ada pilihan lain.
Fungsi Serial.available() memberikan nilai BENAR jika ada data yang masuk.  Sedangkan fungsi  Serial.read() untuk membaca data yang masuk sebesar 1 byte.  Perintah untuk mengirim data dari mikro ke luar adalahSerial.write(data_yg_ditulis);
Dengan melihat program di atas, maka mikrokontroler hanya akan mengirim ke luar jika ada masukan data serial, dan pengirimannya akan diulang terus sebanyak berapa byte data yang masuk.
Mengendalikan LED lewat serial port
Sekarang kita akan coba menyalakan atau mematikan LED (pin 13), melalui serial port.  Kita buat ketentuan yang sederhana sebagai berikut:  jika menerima karakter ‘A’ maka lampu akan menyala, jika menerima karakter ‘B’ maka lampu akan mati.
// variable to receive data from serial port
int inByte=0;
// Pin 13 has an LED connected on most Arduino boards.
int led = 13;
void setup()
(
// initialize UART at 9600bps
Serial.begin(9600);
// initialize the digital pin as an output.
pinMode(led, OUTPUT);
}

void loop()
{
if (Serial.available() > 0) {
inByte=Serial.read();
Serial.write(inByte);

if (inByte==65)
{
digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
}
if (inByte==66)
{
digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
}

}
}
Ketik program di atas, upload dan jalankan Serial Monitor.  Kirim karakter ‘A’ atau ‘B’ untuk menyalakan dan mematikan LED yang ada di papan Arduino.  Catatan: tentu saja Anda bisa mengganti karakter tersebut dengan yang lain, sesuai keinginan.  (‘A’ = ASCII nomor 65 dan ‘B’ = ASCII nomor 66).

Membaca status input melalui serial port
Tahap berikutnya adalah pembacaan status input pada Arduino melalui serial port. Ketentuan yang kita buat adalah jika salah satu pin digital pada Arduino bernilai 0/low maka Arduino akan mengirim karakter ‘L’ dan jika bernilai 1/high maka akan mengirim karakter ‘H’.  Untuk memudahkan pengamatan, masing-masing karakter diikuti oleh karakter ‘CR’ atau ‘\n’.
Di contoh ini, kita gunakan pin nomor 24 yang dihubungkan ke sebuah tombol.  Kaki satu lagi dihubungkan ke ground.
// variable to receive data from serial port
int inByte=0;

// Pin 13 has an LED connected on most Arduino boards.
int led = 13;

// Push button is connected to pin 24
int buttonPin = 24;
int buttonState=0;

void setup()
{
// initialize UART at 9600bps
Serial.begin(9600);
// initialize the digital pin as an output.
pinMode(led, OUTPUT);
pinMode(buttonPin, INPUT);
}
void loop()
{
if (Serial.available() > 0) {
inByte=Serial.read();
Serial.write(inByte);

if (inByte==65)
{
digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
}
if (inByte==66)
{
digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
}
}
buttonState=digitalRead(buttonPin);
if (buttonState==LOW)
{
Serial.write("L\n");  // send ‘L’ + CR
}
if (buttonState==HIGH)
{
Serial.write("H\n"); // send ‘H’ + CR
}
}
Ketik program di atas, lalu upload.  Buka Serial Monitor, lalu amati data yang diterima. Cobalah juga menekan/melepas tombol sambil mengamati perubahan yang terjadi antara ‘L’ dan ‘H’.  Di percobaan ini kita bisa amati, bahwa Arduino mengirimkan data secara terus menerus baik L ataupun H, meskipun tombol ditekan atau dilepas lama. Ingat bahwa hal ini karena instruksi ini terletak di dalam program utama/main loop.
Sekarang kita akan coba modifikasi program, sehingga yang terkirim hanya satu kali saja saat terjadi perubahan dari L ke H atau H ke L.  Untuk itu, kita harus membandingkan kondisi nilai tombol saat ini dengan kondisi pada loop sebelumnya. Variabel yang digunakan lastButtonState.  Jika tidak sama dengan buttonState, maka baru kita proses apa yang kita inginkan yaitu mengirimkan data.
// variable to receive data from serial port
int inByte=0;

// Pin 13 has an LED connected on most Arduino boards.
int led = 13;

// Push button is connected to pin 24
int buttonPin = 24;
int buttonState=0;
int lastButtonState=0;

void setup()
{
// initialize UART at 9600bps
Serial.begin(9600);
// initialize the digital pin as an output.
pinMode(led, OUTPUT);
pinMode(buttonPin, INPUT);
}

void loop()
{
if (Serial.available() > 0)
{
inByte=Serial.read();
Serial.write(inByte);

if (inByte==65)
{
digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
}
if (inByte==66)
{
digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
}
}

buttonState=digitalRead(buttonPin);
if (buttonState != lastButtonState)
{
if (buttonState==LOW)
{
Serial.write("L\n");
}
else
{
Serial.write("H\n");
}
}
lastButtonState=buttonState;
}

Ketik program di atas, lalu upload, kemudian amati di Serial Monitor. Tekan tombol yang agak lama sambil amati karakter yang terkirim.  Arduino hanya akan mengirimkan satu kali saja saat ada perubahan L → H atau H → L.
Sampai di sini program di sisi Arduino sudah selesai, berikutnya kita masuk ke pemrograman serial port menggunakan Visual Studio .NET dalam hal ini kita coba memakai Visual Basic versi 2012.


Friday 13 May 2016

BAHASA PEMROGRAMAN ARDUINO

A.Struktur
Dalam penulisan Program/ Sketch Menggunakan Arduino, ada dua fungsi yang harus ada hal ini dikarenakan arduino memiliki struktur dasar/ standart penulisan yaitu void setup, dan void loop, namun Arduino juga memiliki beberapa fungsi tambahan seperti komentar satu bari ( // ), Blok komentar (/*…*/), kurung kurawal ( { } ), Titik Koma ( ; ).

1.void setup( ) {   }
Semua kode didalam kurung kurawal akan dijalankan hanya satu kali ketika program Arduino dijalankan untuk pertama kalinya/ di-Reset

Contoh ;
int LED = 3;
void setup(){
Serial.begin(9600);
pinMode(LED, OUTPUT);
}
void loop(){
}

2.void loop( ) {   }
Fungsi ini akan dijalankan setelah void setup  selesai. Setelah dijalankan satu kali fungsi ini akan dijalankan lagi, dan lagi secara terus menerus sampai catu daya (power) dilepaskan dengan kata lain program yang ada di dalam kurung kurawal void loop akan mengunlang secara terus menerus.

3.Fungsi()
Digunakan untuk membuat sekumpulan program dengan memberikan label/ nama tertentu yang dapat dipanggil sewaktu- waktu dan fungsi ini biasanya digunakan untuk sekumpulan program yang akan sering dipanggil / dijalankan, sehingga program akan jauh lebih sederhana.

4.//(komentar satu baris)
Kadang diperlukan untuk memberi catatan pada diri sendiri apa arti dari kode-kode yang dituliskan. Cukup menuliskan dua buah garis miring dan apapun yang kita ketikkan dibelakangnya akan diabaikan oleh program.

5./*  */(Blok Komentar)
Jika anda punya banyak catatan, maka hal itu dapat dituliskanpada beberapa baris sebagai komentar. Semua hal yang terletak di antara dua simbol tersebut akan diabaikan oleh program.

6.{   }(kurung kurawal)
Digunakan untuk mendefinisikan kapan blok program mulai dan berakhir (digunakan juga pada fungsi dan pengulangan).

7.;(titk koma)
Hamper baris kode pada Arduino harus diakhiri dengan tanda titik koma (jika ada titik koma yang hilang maka program tidak akan bisa dijalankan/ eror.

B.Struktur Pengaturan

Program sangat tergantung pada pengaturan apa yang akan dijalankan berikutnya, berikut ini adalah elemen dasar pengaturan Arduino.

1.If dan Else
Berfungi untuk melakukan pengetesan atau pengujian kondisi sehingga apabila sebuah kondisi telah terpenuhi maka program/ sketch akan menjalankan Pernyataan yang berada di dalam kurung kurawal, namun jika tidak maka program akan melewati pernyataan tersebut, if sendiri memiliki beberapa bentuk dalam penulisannya 
-Bentuk pertama;
ini adalah bentuk if tunggal yang digunakan hanya untuk 1 kondisi, sehingga bila sudah tercapai kondisi tersebut jalankan pernyataan jika tidak lewati pernyataan.

Format penulisan :
If(kodisi){
pernyataan}

Contoh :
If (SensorPin > 100){
digitalWrite(13, HIGH);}

Program diatas menyatakan jika nilai Sensor Pin besar dari 100 maka nyalakan LED pada pin 13.

-Bentuk kedua;
Ini adalah bentuk kedua yang digunakan untuk kondisi if dengan satu pengecualian, jadi apabila if dalam kondisi tersebut program akan menjalankan  pernyataan1 jika tidak program akan menjalankan pernyataan2.

Format Penulisan :
if (kodisi){
Peryataan1}
else{
peryataan2}

Contoh :
If (SensorPin > 100){
digitalWrite (13, HIGH);}
else{
digitalWrite (13,LOW);}

-Bentuk Ketiga;
Pada bentuk ketiga ini if memiliki beberapa pengecualian, sehingga apabila dalam kondisi1 program akan menjalankan pernyataa1, jika tidak cek kondisi2 jika dalam kondisi2 jalankan pernyataan2 jika tidak cek kondisi 3 jika dalam kondisi 3 maka jalankan pernyataan3, jika tidak ada sama dengan kondisi1, kondisi2, kondisi3 maka jalankan pernyataan4.

Format Penulisan:
If(kondisi1){
Pernyataan1}
else if(kondisi2){
Pernyataan2}
else if(kondisi3){
Pernyataan3}
else {Pernyataan4}

Contoh :
If (SensorPin > 20){
digitalWrite (13, HIGH);}
else if(SensorPin > 40){
digitalWrite (12, HIGH);}
else if(SensorPin > 60){
digitalWrite (11 HIGH);}
else{ digitalWrite (11 HIGH);}

2.For
Digunakan bila anda ingin melakukan pengulangan kode didalam kurung kurawal beberapa kali, namun untuk melakukanya dibutuhkan sebuah counter, baik itu counter up ( i++ ), ataupun counter down ( i-- ), sebagai mana yang telah dilihat pada format penulisan i=0 menyatakan posisi awal,sedangkan# untuk jumlah pengulangan dan i++ adalah counter.

Format Penulisan :
for (int i = 0; i < #pengulangan; i++) {
pernyataan}
Contoh
for (int i =0; i <9; i++){    
pinMode(ledPins[i],OUTPUT);
}

3.Switch 
Digunakan untuk menguji suatu nilai pada variable dengan konstanta- konstanta tertentu, konstanta tersebut diawali dengan case dan diakhiri dengan break, jika variable sama dengan konstanta 1 maka jalankan pernyataan 1, jika variable sama dengan konstanta 2 maka jalankan pernyataan 2 dan begitu seterusnya  namun jika variable tidak sama dengan konstanta manapun maka jalankan default.

Format Penulisan :
switch (var) {
case 1:
//pernyataan 1
break;
case 2:
//pernyataan 2
break;
default: 
}

4.while 
Akan menjalankan intruksi yang ada di dalam kurung ()secara terus menerus dan tak terhingga, sampai ekspresi dalam kurung() menjadi salah(false) oleh sebab itu harus ada yang mengubah variable agar dapat keluar dari intruksi ini. 

Format Penulisan:
While(kondisi)
{peryataan(s)
}

5.Do-While
Bekerja dengan cara yang sama seperti while, dengan pengecualian bahwa kondisi ini di uji pada akhir program, sehingga program akan berjalan setidaknya sekali.

Format Penulisan:
do
{pernyataan
}
While(kondisi);


6.Break
Digunakan untuk  keluar dari do while dan while, untuk melewati kondisi normal. Hal ini juga digunakan untuk keluar dari pernyataan switch.

Contoh; 
for(x =0; x <255; x ++){
analogWrite(PWMpin, x);
sens =analogRead(sensor);  
if(sens > threshold){ 
x =0;
break;
}  delay(50);
}

7.Continue
Pernyataan melompati sisa literasi saat (do, for, atau if). Ini akan terus  memeriksa ekspresi kondisional dari loop, dan melanjutkan dengan literasi berikutnya.

Contoh;
for(x =0; x <255; x ++){
 if(x >40&& x <120){      // create jump in values
 continue; }
    analogWrite(PWMpin, x);
    delay(50);
}

8.Return
Return berguna untuk mengembalikan nilai dari fungsi ke  fungsi panggilan, jika diinginkan.
contoh:
int checkSensor(){       
if (analogRead(0) > 400) {
return 1;
else{return 0;}
}

9.go to
adalah intruksi lompat tak bersyarat, instruksi ini mengakibatkan eksekusi dilanjutkan ke alamat yang dituju oleh label .
Contoh;
for(byte r = 0; r < 255; r++){
for(byte g = 255; g > -1; g--){
for(byte b = 0; b < 255; b++){
if (analogRead(0) > 250){ goto Label1;}
Label2}}
}
Label1:

C. Arithmetic
1.Aritmatika 
     Arduino IDE selain mendukung untuk  kompailer juga mendukung operator Aritmatika seperti yang ada dibawah ini.

-Sama dengan ( = )
Membuat sesuatu menjadi sama dengan nilai yang lain (misalnya: x = 10 * 2, x sekarang sama dengan 20).

-Penjumlahan( + )
 Penjumlahan
-Pengurangan( - )
 Pengurangan
-Perkalian( * )
 Perkalian
-pembagian( /)
 Pembagian
-Sisa pembagian ( % )
Menghasilkan sisa dari hasil pembagian suatu angka dengan angka yang lain (misalnya: 12 % 10, ini akan menghasilkan angka 2).

2.Operasor Bitwisee
Operasi bitwise banyak digunakan dalam aplikasi mikrokontroler, misalnya untuk menguji kondisi bit pada Port 1 atau pergeseran bit dll. Ada enam buah operator bitwise diantaranya;

-Operator Geser kiri ( << )
Operator geser kiri akan mengeser ke kiri perbit sehingga bit 0 akan menggeser ke bit 1 dan bit 2 akan menggeser ke bit 3 dan seterunya, Untuk melakukan operasi bitwise geser kiri dibutuhkan dua buah operan, disebelah kiri tanda ( <<) adalah nilai geser dan disebelah kanan adalah jumlah bit yang akan digeser ke kiri.

-Operator Geser kanan ( >> )
Operator geser kanan akan mengeser ke kanan perbit” misalnya bit 8 akan menggeser ke bit7 dan bit 7 akan menggeser ke bit 6 dan seterunya, Untuk melakukan operasi bitwise geser kanan dibutuhkan dua buah operan, disebelah kiri tanda ( <<) adalah nilai geser dan disebelah kanan adalah jumlah bit yang akan digeser ke kiri.

-Operasi Bitwise AND (&)
Operator bitwise and (&) berfungsi untuk melakukan operasi logika AND bit/ bit misalnya  bit 0 akan diproyeksikan dengan bit 0 dan bit 1 diproyeksikan dengan 1 dan seterusnya.

Contoh:
int a = 10 ; // Dalam biner : 1010
int b = 12 ; // Dalam biner : 1100
int c = a & b; // Hasil dalam biner : 1000

-Operasi Bitwise OR(|)
Operator bitwise OR (|) berfungsi untuk melakukan operasi logika OR bit/ bit misalnya  bit 0 akan diproyeksikan dengan bit 0 dan bit 1 diproyeksikan dengan 1 dan seterusnya.

Contoh :
int a = 10 ; // Dalam biner : 1010
int b = 12 ; // Dalam biner : 1100
int c = a | b;   // Hasil dalam biner : 1110

-Operasi Bitwise XOR (^)
Operator bitwise XOR (^) berfungsi untuk melakukan operasi logika XOR bit/ bit misalnya  bit 0 akan diproyeksikan dengan bit 0 dan bit 1 diproyeksikan dengan 1 dan seterusnya.
Contoh :
int a = 12; // Dalam Biner : 1100
int b = 10;   // Dalam Biner : 1010
int c = a ^ b; //HarsilDalam Biner : 0110 

- Operasi Bitwise NOT (~)
Operatr bitwise NOT (~) berfungsi untuk melakukan operasi logika NOT pada bit, misalnya bit yang berlogika 0 berubah menjadi 1 dan logika 1 berubah menjadi0.

Contoh :
int a = 12; // Dalam Biner : 1100
int c = ~a //Hasil Dalam Biner : 0011

3.Operator Relasi/ Pembanding
Operator Relasi digunakan untuk membandingkan dua buah nilai atau kondisi. Operator relasi.

-Sama dengan ( == )
Sama dengan (misalnya: 14 == 10 adalah FALSE (salah) atau 10 == 10 adalah TRUE (benar))

-Tidak sama dengan ( != )
Tidak sama dengan (misalnya: 14 != 10 adalah TRUE (benar) atau 10 != 10 adalah FALSE (salah))

-Kecil dari ( < )
Lebih kecil dari (misalnya: 14< 10 adalah FALSE (salah) atau 14 < 14 adalah FALSE (salah) atau 10< 14 adalah TRUE (benar))

-Besar dari ( > )
Lebih besar dari (misalnya: 14> 10 adalah TRUE (benar) atau 14 > 14 adalah FALSE (salah) atau 12 > 14 adalah FALSE (salah))

-Kecil/ sama dengan ( <= )
Kecil/ sama dengan (misalnya: 14 <= 10 adalah FALSE (salah) atau 14 <= 14 adalah TRUE (benar) atau 10 <= 14 adalah TRUE (benar))

-Besar / sama dengan ( >= )
Lebih besar dari (misalnya: 14 >= 10 adalah TRUE (benar) atau 14 >= 14 adalah TRUE (benar)) atau 12 >= 14 adalah FALSE (salah))

PERHATIAN
dalam penulisan operator relasi tanda tidak boleh salah hal ini dikarenakan kesalahan sedikit dalam penulisan tanda dapat menyebankan program/ sketch tidak berkerja sesuai dengan yang diharapkan misalnya : kita ingin membandingkan sebuah Variable dengan operasi relasi sama dengan (==)  tanda yang harus dituliskan adalah == jika kita hanya menuliskan = sekali saja maka instruksi yang dijalankan bukanya membandingkan malah memberi nilai pada Variable, selain dari itu jika kita ingin menusilkan operasi relasi besar sama dengan ( >= ) kita tidak boleh menulikanya terbalik ( => ), meskipun maknanya sama namun Arduino IDE tidak mengenal hal itu sehingga mengakibatkan eror pada saat Verify ( Kompailer ).

Thursday 12 May 2016

MENGATASI MASALAH ARDUINO IDE stk500_getsync(): not in sync: resp=0x00

[1] Driver USB to UART Tidak Terpasang
    Permasalahan diatas merupakan salah satu kasus yang paling sering terjadi, terutama sekali pagi pengguna yang masih pemula ,Hal ini disebabkan karena jenis koneksi yang digunakan untuk berkomunikasi antara komputer dengan mikrokontroler ternyata berbeda-beda, hal ini pun terjadi pada papan Arduino yang menggunkan Chip FTDI atau USB to UART/ Serial.

    lain halnya Jika anda memiliki papan Arduino R3 yang menggunakan konverter USB to Serial berupa chip Atmega16U2 maka biasanya tidak terjadi masalah komunikasi diatas. Hal ini karena firmware Atmega16U2 yang digunakan sebagai media komunikasi (USB Serial Converter) akan mampu menciptakan Virtual COM Port dengan driver standar USB COM sehingga tidak membutuhkan driver eksternal, 
Gambar 1. Arduino Uno dengan Chip Atmega16U2

    Bagi anda pengguna Windows 8, ternyata driver Arduino (Arduino IDE Versi 1.0.5) belum tersertifikasi sehingga pada beberapa jenis papan Arduino masih saja mengalami kegagalan Upload. Untuk menyelesaikan masalah tersebut silahkan Unduh Arduino IDE 1.0.6 yang sudah diperbaiki Signatur Driver-nya 
Arduino Chip FTDI FT232

   Pada beberapa jenis papan Arduino masih ada yang menggunakan komunikasi USB to UART menggunakan chip FTDI atau FT232. Misal Arduino Nano, atau Arduino Pro Micro yang membutuhkan tambahan perangkat USB to UART yang biasanya direkomendasikan menggunakan FTDI Friend. Jenis komunikasi serial USB to UART yang menggunakan chip FTDI (biasanya FT232) memerlukan driver eksternal yang harus dipasang pada sistem operasi kita secara manual. Kita harus mengunduh driver-nya sendiri dan kemudian memasangnya pada komputer kita. Unduh driver FTDI FT232 disini.

     Komunikasi serial selain menggunakan FT232 ternyata baru-baru ini beredar papan Arduino murah dengan komunikasi serial menggunakan chip CH340. Chip jenis ini juga sama memerlukan driver eksternal untuk menciptakan Virtual COM Port yang berfungsi sebagai jalur komunkasi serial. Unduh driver CH340 dari situs resminya disini atau disini bagi pengguna Linux dan Mac.

Gambar 3. Arduino Uno dengan Chip CH340

    Chip CH340 adalah jenis USB to UART yang belum lama digunakan. Chip CH340 lebih murah dari pada FT232 sehingga papan Arduino yang menggunakan chip China ini harganya lebih murah. Papan Arduino yang menggunakan Chip CH340 terkenal dengan nama produk DCcduino.

    Jika kita berhasil memasang driver USB to UART pada komputer tapi ternyata masih muncul masalah avrdude: stk500_getsync(): not in sync: resp=0x00 maka kesalahan mungkin ada pada penjelasan berikutnya.

[2] Kesalahan Board dan Serial Port
     Permasalahan ini adalah hal biasa, baik bagi pemula atau pun yang sudah profesional. Bagi pemula biasanya terjadi karena masih bingung dalam mengenali Arduino, tapi bagi profesional biasanya karena terlupa atau kurang teliti. Memiliki beberapa tipe papan Arduino kadang membuat proses pemindahan tipe papan Arduino menjadi terlupakan dan munculah kegagalan komunikasi. Solusinya mudah saja, setelah selesai menulis kode Arduino dan sebelum melakukan compile serta upload kode pastikan bahwa pemilihan papan Arduino pada perangkat lunak sudah sesuai dengan tipe papan Arduino yang akan menjadi target. Jika anda menggunakan Arduino Uno sebagai target, pastikan bahwa Arduino IDE juga di set pada Arduino Uno. Untuk menyesuaikan papan Arduino dengan Arduino IDE maka klik menu Tools > Board > Pilih sesuai dengan tipe Papan Arduino yang anda miliki.

setelah itu pastikan tipe papan Arduino antara perangkat lunak dengan perangkat keras sudah sesuai, maka selanjutnya memastikan jalur komunikasi serial yang digunakan antara komputer (Arduino IDE) dengan papan Arduino. Periksalah USB Serial Port (COM) yang digunakan oleh papan Arduino pada Device Manager di komputer anda.

Setelah yakin tipe dan jalur komunikasi sudah benar, maka selanjutnya pastikanlah Serial Port antara Device Manager dengan Arduino IDE sudah sesuai. Jika jalur komunikasi yang digunakan pada Device Manager adalah COM3 maka pastikan Arduino IDE juga menggunakan COM3. Klik menu Tools > Serial Port > Pilih COM yang digunakan sesuai dengan yang ada pada Device Manager.

Jika sinkronisasi antara komputer dengan papan Arduino sudah benar tapi ternyata masih muncul masalah avrdude: stk500_getsync(): not in sync: resp=0x00 maka kesalahan mungkin ada pada penjelasan berikutnya.

[3] Penggunaan Pin 0 (RX)
  Permasalahan ini memang jarang terjadi. Hal ini karena pin 0 (RX) yang tersedia pada Arduino jarang sekali digunakan. jadi ada baiknya anda jangan menghubungkan rangkaian ataupun module tambahan pada saat hendak mengUpload program.

[4] Arduino IDE Korup
Permasalahan ini jarang sekali terjadi namun untuk mengetahui program Arduino korup atau tidaknya anda bisa mengeceknya dengan menggunakan board Arduino lainya.

atau anda juga bisa mengecek papan Arduino anda dengan PC lainya jika di dapati Papan Arduino anda bekerja dengan baik ada kemungkinan softwere Arduino IDE anda korup atau komputer tidak dalam keadaan baik.

Jika setelah papan Arduino dicoba pada komputer lain tapi ternyata masih muncul masalah avrdude: stk500_getsync(): not in sync: resp=0x00 maka kita akan masuk ke tahap selanjutnya yakni pengecekan boardloader

[5] Bootloader Rusak atau Hilang
   Akhirnya sampai juga pada tahap ini. Permasalahan pada bootloader merupakan permasalahan yang tidak terlalu rumit terkecuali bagi para pemula. untuk mengetahui boadloader dalam keadaan baik atau rusak anda cukup melihat led pada pin 13 jika pertama kali dinyalakan LED akan berkedip sekali secara cepat, jika tidak berkedip ada kemungkinan boodloader hilang atau IC dalam keadaan rusak, cara mengetahuinya hubungkan USBasp pada pin ISP IC ATMega16au lalu gunakanlah softwere AVR Dudes untuk mendetect jika terbaca maka ic dalam keadaan baik jika tidak itu berarti ic dalam keadaan rusak, jika IC dalam keadaan baik maka tanamkanlah kembali boodloader pada IC tersebut.

jika yang satu  ini jugak tidak bisa maka ceklah boodloader pada IC targetnya, atau mikro utamanya, cara pengecekanya sama dengan cara pengecekan boodloader pada IC USB To UART yakni dengan menghubungkan USBasp ke ISP targetnya lalu klik tombol detect pada AVR Dudes jika sudah terdetect maka IC dalam keadaan baik dan burn boodloader IC targetnya.

Sunday 1 December 2013

MENERIMA DATA DARI UART DENGAN SISTEM INTERUPSI

SEMANGAT PAGI sobat Blogger, pada kesempatan ini saya akan berbagi lagi nih, cara MENERIMA DATA DARI UART DENGAN SISTEM INTERUPSI. Cara kerja nya sama seperti SISTEM POOLING yaitu menerima data yang di berikan Arduino IDE kepada LCD penerima, TETAPI pada percobaan ini kita akan menggunakan SISTEM INTERUPSI bukan POOLING. Penerima data akan menggunakan BAUDRATE 9600. AYO SIMAK langkah-langkah di bawah ini :
  1. Seperti biasa, sebelum melakukan percobaannya kita harus membuat rangkaiannya. Rangkaian yang harus di buat seperti di bawah ini.
  2. Mari lakukan coding program dengan menggunakan sintaks program di bawah ini.


  3. Setelah selesai, Ayo buka Serial Monitor pada IDE dengan cara Ctrl + M. Pastikan konfigurasi Serial Monitornya Seperti tampilan di bawah ini.
  4. Contoh data yang dikirim IDE dan yang di terima di LCD penerima
  • Teks Yang DikirimkanArduino
    Teks Yang Di TerimaLCD
    Halo
    Halo
    SayaMakanNasi
    SayaMakanNasi
    Hasmar
    Hasmar

    Husein
    Husein
    Harahap
    Harahap
Adapun penjelasan sintaks pemograman di atas adalah sebagai berikut :
  • #include <LiquidCrystal.h>    //memanggil library untuklcd
    #define FOSC 16000000         //menetapkannilai FOSC bernilai 16000000
    LiquidCrystallcd(2, 3, 4, 5, 6, 7); // inisialisasi pin lcd
    String dataSerial;                    //mendekelarasikandataSerialsebagai string
    voidinitSerial(intbaudrate)
    {
    intubrr = FOSC/16/baudrate-1;
    // Mengisi register UBRR0H dan UBRR0L untukmenentukanbaudrate
    UBRR0H |= ubrr>>8;
    UBRR0L |= ubrr;
    // Mengaktifkansaluran transmitter dan receiver
    UCSR0B |= (1<<RXEN0)|(1<<TXEN0);
    // Menggunakan format data 8 bit
    UCSR0C |= (0<<UCSZ02)|(1<<UCSZ01)|(1<<UCSZ00);
    // Menggunakan 1 stop bit
    UCSR0C |= (0<<USBS0);
    // No Parity
    UCSR0C |= (0<<UPM01)|(0<<UPM00);
    // Mengaktifkan RX interrupt
    UCSR0B |= (1<<RXCIE0);
    }
    // Rutin yang akandijalankanjikaterjadiinterupsi
    ISR(USART_RX_vect){
    char data = UDR0;
    if(data=='\n')
    {
    lcd.clear();                   // tampilanlcd di hapus
    lcd.setCursor(0,0);      //Menampilkan text padabarispertama LCD
    lcd.print("Incoming Data"); //Menampilkan text “Incoming Data” padabarispertama di LCD
    lcd.setCursor(0,1);      //Menampilkan text padabariskedua LCD
    lcd.print(dataSerial);   //Menampilkan data ygdikirimmelalui serial
    dataSerial = "";
    }
    Else
    {         
    if(data!='\r')                 //jika data tidakada
    {
    dataSerial += data;      //Jikatidakada data makatampilkan text “data”
    }
    }
    }
    void setup()                 //settinganawal program
    {
    initSerial(9600);
    lcd.begin(16,2);           // tampilanlcd (kolom , baris)
    lcd.clear();                   // tampilanlcd di hapus
    sei();
    }
    void loop()                  //program looping
    {
    }

    • Perbedaan antara INTERUPSI dengan POOLING adalah Suatu kondisi yang memicu atau memaksa sitem mikrokontroler untuk menghentikan program utama dan memaksa menjalankan interupsi, SEDANGKAN sitem POOLING adalah kondisi arduino menunggu pengiriman data dari komunikasi serial.