Senin, 23 Maret 2015

0

belajar serial dengan menggunakan arduino dan LED

Semua board Arduino memiliki sedikitnya satu buah kontroller komunikasi serial. Beberapa board malah memiliki lebih dari satu, seperti Mega dan Due. Hal ini menyebabkan komunikasi serial dengan board Arduino mudah untuk dilakukan. Akibatnya, menghubungkan Arduino dengan sistem "pintar" lain dapat dilakukan dengan sangat mudah dan akurat, karena komunikasi serial adalah salah satu protokol komunikasi yang paling banyak diadopsi dan juga terdokumentasi dengan baik.


Tetapi ada harga yang harus dibayar. Setiap port komunikasi serial akan menggunakan sepasang pin digital. Satu pin untu menerima, dan satu lagi untuk mengirim. Sebagai contoh, di Arduino UNO yang memiliki satu port komunikasi serial, pin #0 akan digunakan untuk menerima (RX), dan pin #1 untuk mengirim (TX). Karena itu, dalam proyek-proyek di mana anda akan menggunakan komunikasi serial, anda terpaksa harus menghindari penggunaan pin-pin ini untuk keperluan lain. Atau paling tidak anda terpaksa menambah rangkaian untuk membagi penggunaan pin-pin ini antara keperluan komunikasi serial dan keperluan lain. Suatu tugas yang tidak mudah, walaupun juga tidak teramat sulit.


Bagi penulis sendiri, kegunaan paling penting dari fitur komunikasi serial Arduino ini adalah dalam proses debugging. Terkecuali pada sketch-sketch yang teramat sederhana, penulis selalu menggunakan komunikasi serial untuk membantu proses debugging. Biasanya untuk mencatat keadaan atau besaran dari dari sketch yang sedang berjalan. Proses pencarian sumber masalah akan jadi jauh lebih mudah bila dilengkapi dengan informasi yang diberikan oleh log.

Untuk menulis ke port serial, kita dapat menggunakan salah satu dari metode berikut ini. Catatan: semuanya ada di object Serial yang bersangkutan.

print()
println()
write()
Gunakan print() untuk mengirim teks ke penerima. Sebagai contoh, perintah print(100); akan mengirim teks "100" (tentu tanpa tanda kutip) - bukannya nilai integer/biner 100.

Metode println() berperilaku mirip dengan print(), dengan perbedaan penambahan karakter carriage return dan baris baru (new line atau line feed) pada akhir pengiriman.

Metode write() adalah yang paling "primitif", karena metode ini menulis data biner ke port serial. Meode ini akan menuliskan 1 byte nilai biner atau sekelompok byte nilai biner. Berbeda dari print() atau println(), kode write(100) akan mengirim nilai integer/biner 100 ke serial port, bukan teks "100".


di tutorial ini kita akan belajar tentang serial dengan menggunakan LEd pada pin 13

pertama kita harus membuat program pada arduino kita


ini adalah script saya

const int ledPin = 13;
int bataskonter = 0;
String datamasukan;
String datamasukan1;
int batasdelay = 0;
int noinput = 0;
void setup(){
  Serial.begin(9600);
  
  pinMode(ledPin, OUTPUT);
  Serial.println("masukan jumlah konter = ");
}

void loop(){
  if (Serial.available()>0){
    if (noinput == 0){
    datamasukan = Serial.readStringUntil('\n');
    bataskonter = hexToDec(datamasukan);
    Serial.print("kedip;");
    Serial.print(bataskonter);
    Serial.println("kali");
    Serial.println("masukan delay = ");
    noinput =1; }
    else{
    datamasukan1 = Serial.readStringUntil('\n');
    batasdelay = datamasukan1.toInt();
    Serial.print("delay = ");
    Serial.print(batasdelay);
    Serial.println(" m second");
    Serial.print("Processing");
    }
    for (int konter = 0; konter < bataskonter ; konter++)
    {
      digitalWrite(ledPin, HIGH);
      delay(batasdelay);
      digitalWrite(ledPin, LOW);
      delay(batasdelay);
      Serial.print(".");
    }
    Serial.println("done!!");
  }
}

unsigned int hexToDec(String hexString){
   unsigned int decValue = 0;
   int nextInt;
   for (int i = 0; i < hexString.length(); i++){
     nextInt = int(hexString.charAt(i));
     if (nextInt >= 48 && nextInt <=57) nextInt = map(nextInt, 48, 57, 0, 9);
     if (nextInt >= 65 && nextInt <=70) nextInt = map(nextInt, 65, 70, 10, 15);
     if (nextInt >= 97 && nextInt <=102) nextInt = map(nextInt, 97, 102, 10, 15);     
      nextInt = constrain(nextInt, 0, 15);
     decValue = (decValue * 16) + nextInt;
   }
   return decValue;
}

di script ini pertama kita disuruh untuk memasukan jumlah konter yang kita ingginkan untuk di eksekusi

setelah itu kita di harus memasukan delay yang kita inginkan di serial monitor pada software arduino

pada script akhir ditambahkan untuk menkonversi hex ke desimal sehingga arduino bisa meneksekusi LED dengan jumlah yang kita ingginkan dan tuliskan dengan bilangan hexa 




0 komentar: