Sunday, 22 March 2015

Belajar Arduino Part 3 : Bermain LED yang berada di Arduino UNO (Serial Inside)

Assalamualaikum Wr. Wb,
kembali lagi dengan kami, disini kami akan membahas bagaimana bermain menghidupkan/mematika LED yang ada di ARDUINO UNO. kami akan memberi tutor mulai dari menyalakan LED mematikannya menggunakan mode high/low pin led dan dengan cara serial.

Siapkan Arduino UNO kalian masing - masing, dan buka software ARDUINO IDE.
disini lah letak LED yang berada di Arduino UNO

sumber : http://www.wired.com/
program untuk mengaktifkan LED sudah ada bawaan dari ARDUINO, coba buka file>example>basic>blink listing program adalah berikut:

/*
  Blink
  Turns on an LED on for one second, then off for one second, repeatedly.

  This example code is in the public domain.
 */

// Pin 13 has an LED connected on most Arduino boards.
// give it a name:
int led = 13;

// the setup routine runs once when you press reset:
void setup() {                
  // initialize the digital pin as an output.
  pinMode(led, OUTPUT);     
}

// the loop routine runs over and over again forever:
void loop() {
  digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);               // wait for a second
  digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);               // wait for a second
}

lah sekarang kita akan memodifikasi program tersebut dan menjalankannya dengan perintah serial, kan diprogram atas cuman mati/nyala led yang tak hingga, nah kita sekarang akan mengatur berapa jumlah led yang akan berkedip. dan ini listing program yang telah saya buat.

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 data konter = ");
}

void loop(){
  if (Serial.available()>0){
    if (noinput == 0){
    datamasukan = Serial.readStringUntil('\n');
    bataskonter = hexToDec(datamasukan);
    Serial.print("Led Berkedip;");
    Serial.print(bataskonter);
    Serial.println("times");
    Serial.println("masukan data delay = ");
    noinput =1; }
    else{
    datamasukan1 = Serial.readStringUntil('\n');
    batasdelay = datamasukan1.toInt();
    Serial.print("delay = ");
    Serial.print(batasdelay);
    Serial.println(" ms");
    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;
}

oke sekarang saya jelaskan yang baru ya dari tutorial sebelumnya, 
"const int" itu adalah fungsi untuk menentukan port led dimanakah yang akan digunakan.
"int" adalah type data integer range data adalah 0 - 69xxx sedangkan "string" adalah type data yang dapat disisipkan karakter, type data sering digunakan untuk kirim dan menerima serial.
"serial begin" fungsi ini untuk mengatur baudrate yang akan digunakan, apakah itu baudrate? baudrate ada kecepatan transfer data dari hardware satu ke hardware lainnya.
"serial.println" digunakan untuk menampilkan text di hardware penerima dengan "enter" jika tidak "ln" maka karakter yang ditampilkan tidak akan di"enter"
"serial.availabel" disini sering digunakan untuk program if/then yang berfungsi jika ada data masuk dihardware penerima makan akan mekesekusi sesuai kondisi yang diinginkan.
"Serial.readStringUntil" ini digunakan untuk membaca serial sampai kondisi yang diinginkan.
lah untuk sub program "hexToDec" saya dapat info dari forum sebelah sumber. mengapa saya menconvert data string ke decimal, karena saya ngirimnya pake string :p lah ini alasan kenapa serial mengirim berupa string, karena mengurangi keerroran pada pengiriman dan penerjemahan.

oke sekarang saya aka mengasih listing program yang akan mengatur berapa jumlah kedipan led dan waktu yang akan di tempuh untuk melakukan blink led.

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 data konter = ");
}

void loop(){
  if (Serial.available()>0){
    //if (noinput == 0){
    datamasukan = Serial.readStringUntil('\n');
    String data1 = datamasukan.substring(0,2);
    String data2 = datamasukan.substring(3,6);
    //bataskonter = datamasukan.toInt();
    bataskonter = hexToDec(data1);
    batasdelay = hexToDec(data2);
    Serial.print("Led Berkedip = ");
    Serial.print(bataskonter);
    Serial.println(" times");
    //Serial.println("masukan data delay = ");
    //noinput =1; }
    //else{
    //datamasukan1 = Serial.readStringUntil('\n');
    //batasdelay = datamasukan1.toInt();
    Serial.print("delay = ");
    Serial.print(batasdelay);
    Serial.println(" ms");
    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;
}

Terimakasih telah membaca
Wassalammualaikum Wr. Wb.

2 comments:

  1. const int ledPin = 13; // the number of the LED pin
    int bataskonter = 0;
    int waktutunggu = 0;
    int noinput = 0;
    String datamasukan;

    void setup() {
    Serial.begin(9600); // opens serial port, sets data rate to 9600 bps
    pinMode(ledPin, OUTPUT);
    Serial.println("Masukkan data: ");

    }

    void loop() {
    if (Serial.available() > 0) {

    datamasukan = Serial.readStringUntil('\n');

    String data1 = datamasukan.substring(0, 2);
    String data2 = datamasukan.substring(2, 6);

    bataskonter = hexToDec(data1);
    waktutunggu = hexToDec(data2);

    Serial.print("Led blingking: ");
    Serial.print(bataskonter);
    Serial.println("times ");
    Serial.print("Delay: ");
    Serial.print(waktutunggu);
    Serial.println("msecond ");

    Serial.print("processing");

    for (int konter = 0; konter < bataskonter; konter++)
    {
    digitalWrite(ledPin, HIGH);
    delay(waktutunggu);
    digitalWrite(ledPin, LOW);
    delay(waktutunggu);
    Serial.print(" . ");
    }
    Serial.println("done!!! ");
    Serial.println("");
    noinput = 0;
    Serial.println("Masukkan data: ");

    }
    }

    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;
    }

    ReplyDelete