Universitas Gadjah Mada Menara Ilmu Mikrokontroller
Universitas Gadjah Mada
  • Home
  • Kabar Terkini
  • Artikel
    • Teknologi Mikrokontroler
    • Sensor
    • Pemrograman
    • Penelitian
  • Profil
  • Forum
  • Beranda
  • Pemrograman
  • page. 3
Arsip:

Pemrograman

Program LCD i2c

Pemrograman Tuesday, 2 October 2018

LCD adalah media tampilan yang paling mudah untuk diamati karena menghasilkan tampilan karakter yang baik dan cukup banyak. Pada LCD 16×2 dapat ditampilkan 32 karakter, 16 karakter pada baris atas dan 16 karakter pada baris bawah. LCD 16×2 pada umumnya menggunakan 16 pin sebagai kontrolnya, tentunya akan sangat boros apabila menggunakan 16 pin tersebut. Karena itu, digunakan driver khusus sehingga LCD dapat dikontrol dengan jalur I2C. melalui I2C maka LCD dapat dikontrol dengan menggunakan 2 pin saja yaitu SDA dan SCL.

1. Kebutuhan

  • Arduino Board
  • LCD 16×2 I2C
  • Kabel
  • Library lcd i2c

2. Skematik

Gambar 1. pemasangan LCD pada Arduino dengan interface I2C

3. Program

  #include <Wire.h> //library I2C

  #include <LiquidCrystal_I2C.h>    //library LCD

  LiquidCrystal_I2C lcd(0x27,16,2); // set address I2C dan besar karakter untuk lcd 16×2

  void setup()

  {

    lcd.init(); // inisiasi LCD

  }

  void loop()

  {

    lcd.backlight();//menyalakan backlight

    lcd.print(“Hello, world!”);//menulis kata

    delay(2000);//menunggu 2000 milidetik

    lcd.clear();//menghapus tampilan LCD

    lcd.noBacklight();//mematikan backlight

    lcd.print(“Lampu Mati”);//menulis kata

    delay(2000);//menunggu 2000 milidetik

    lcd.clear();//menghapus tampilan LCD

    lcd.backlight();//menyalakan backlight

    lcd.print(“Lampu Hidup”);//menulis kata

    delay(2000);//menunggu 2000 milidetik

    lcd.clear();//menghapus tampilan LCD

    lcd.setCursor(0,0);//mengatur posisi kursor pada baris 1 posisi 0

    lcd.print(“Baris satu”);//menulis kata

    lcd.setCursor(3,1);//mengatur posisi kursor pada baris 2 posisi 3

    lcd.print(“Geser Baris 2”);//menulis kata

    delay(3000);//menunggu 3000 milidetik

    lcd.clear();//menghapus tampilan LCD

  }

4. Video

5. Library

Program Dot Matrix

Pemrograman Tuesday, 2 October 2018

Dot matrix adalah kumpulan LED yang tersusun secara baris matrix sehingga memiliki posisi x dan y. dengan adanya posisi fix ini maka LED dapat dikontrol nyalanya dengan melakukan pengontrolan posisi pin x dan y. dot matrix dapat menampilkan tampilan dengan variasi lebih banyak tergantung dari jumlah LED pada dot matrix tersebut. Dot matrix terdapat pada integrated output dan dapat digunakan dengan menghubungkan pin ke Arduino.

1. Kebutuhan

  • Arduino Board
  • Dot Matrix 8×8
  • Kabel

2. Skematik

Gambar 1. skematik isi dari dot matrix,

nomor kolom dan baris serta nomor pin yang terletak pada angka yang di dalam, misal ingin menyalakan kolom 1 dan baris 1 maka berikan tegangan HIGH pada pin 13 dan berikan tegangan LOW pada pin 9 dot matrix.

Gambar 2. hubungan dot marix dengan pin Arduino,

perlu diperhatikan urutan pin dot matrix dengan urutan pin Arduino karena akan sangat menentukan posisi LED saat program dijalankan

3. Program

// deklarasi array posisi pin dot matrix disesuaikan dengan pin Arduino (nilai -1 adalah dummy agar array dimulai dari angka 1)

int pins[17]= {–1, A5, A4, A3, A2, 10, 11, 12, 13, 9, 8, 7, 6, 5, 4, 3, 2};

// deklarasi array kolom disesuaikan dengan posisi pin dot matrix

int cols[8] = {pins[13], pins[3], pins[4], pins[10], pins[6], pins[11], pins[15], pins[16]};

// deklarasi array baris disesuaikan dengan posisi pin dot matrix

int rows[8] = {pins[9], pins[14], pins[8], pins[12], pins[1], pins[7], pins[2], pins[5]};

void setup()
{

  // set pin sebagai output 

  for(int i = 1; i <= 16; i++)
  {

   pinMode(pins[i], OUTPUT);

  }

  // set kolom menghasilkan output LOW

  for(int i = 1; i <= 8; i++)
  {

   digitalWrite(cols[i – 1], LOW);

  }

  // set baris menghasilkan output LOW

  for (int i = 1; i <= 8; i++)
  {

   digitalWrite(rows[i – 1], LOW);

  }

}

void loop()
{

  //perulangan untuk menyalakan kolom berurutan dari 1-8

  for(int i = 1; i <= 8; i++)
  {

   digitalWrite(cols[i – 1], HIGH);

   delay(100);

  }

  //perulangan untuk mematikan baris berurutan dari 1-8

  for(int i = 1; i <= 8; i++)
  {

   digitalWrite(rows[i – 1], HIGH);

   delay(100);

  }

  clear();    //set kolom dan baris menjadi LOW

  //set baris menjadi HIGH agar semua lampu mati

  for(int i = 1; i <= 8; i++)
  {

   digitalWrite(rows[i – 1], HIGH);

  }

  //perulangan untuk membuat animasi corner kolom dan baris menyala bersama

  for(int i = 1; i <= 8; i++)
  {

   digitalWrite(cols[i – 1], HIGH);

   digitalWrite(rows[i – 1], LOW);

   delay(100);

  }

  clear();//set kolom dan baris menjadi LOW

  //set baris menjadi HIGH agar semua lampu mati

  for(int i = 1; i <= 8; i++)
  {

   digitalWrite(rows[i – 1], HIGH);

  }

  //perulangan untuk animasi titik LED yang berjalan dari pojok ke pojok

  for(int i = 1; i <= 8; i++)
  {

   digitalWrite(cols[i – 1], HIGH);

   digitalWrite(rows[i – 1], LOW);

   delay(100);

   digitalWrite(rows[i – 1], HIGH);

   digitalWrite(cols[i – 1], LOW);

  }

  clear();

}

// rutin yang dijalankan saat dipanggil

void clear()
{

  for(int i = 1; i <= 8; i++)
  {

   digitalWrite(cols[i – 1], LOW);

  }

  for(int i = 1; i <= 8; i++)
  {

   digitalWrite(rows[i – 1], LOW);

  }


}

4. Video

Program Buzzer

Pemrograman Tuesday, 2 October 2018

Buzzer adalah media untuk output suara, buzzer dapat mengeluarkan suara bergantung dari tegangan yang diterima. Apabila diberikan tegangan penuh 5V maka buzzer akan bersuara kencang, dan bila buzzer diberikan tegangan berfrekuensi/osilasi maka suara yang keluar berupa nada.

1. Kebutuhan

  • Arduino UNO
  • (1)Buzzer
  • kabel
  • Breadboard

2. Skematik

Gambar 1. pemasangan buzzer pada Arduino,

kaki GND buzzer dihubungkan langsung ke pin 12 Arduino

3. Program

int speakerPin = 12;    //deklarasi variabel pin

int numTones = 10;        //deklarasi variabel jumlah nada

//deklarasi variabel array berisi nilai nada

int tones[] = {261, 277, 294, 311, 330, 349, 370, 392, 415, 440};

// nadanya : C C# D D# E F F# G G# A

void setup()

{

  //perulangan nada dari 1 sampai 10

  for(int i = 0; i < numTones; i++)

  {

   tone(speakerPin, tones[i]);    //instruksi untuk mengeluarkan nada pada pin

   delay(500);// menunggu 500 milidetik, nada akan tetap berbunyi

  }

  noTone(speakerPin);    //instruksi untuk menghentikan suara

}

void loop()

{

}

4. Video

Program 7segment 4×1

Pemrograman Tuesday, 2 October 2018

7segment 4×1 prinsipnya sama dengan 7 segment 1×1 hanya saja terdapat 4 digit 7segment yang dapat diatur tampilannya. Antara digit 1 sampai digit 4 saling terhubung, apabila diberikan input misalnya angka 1 maka keempat 7segment akan menampilkan angka 1. Nah, agar tampilan masing-masing digit berbeda maka diperlukan teknik switching pada power masing-masing digit 7 segment. Bila ingin menampilkan angka 1234 maka langkahnya, tulis angka 1 lalu nyalakan digit 1, tulis angka 2 lalu nyalakan digit 2, tulis angka 3 lalu nyalakan digit 3, dan tulis angka 4 lalu nyalakan digit 4. Jika cara tersebut dilakukan dengan kecepatan tinggi maka hasilnya terlihat angka 1234 karena mata manusia tidak dapat menangkap perpindahan angka tersebut. 7seg 4×1 tersedia pada integrated output, dan dapat digunakan dengan menyambungkan pin-pin yang ada ke Arduino.

1. Kebutuhan

  • Arduino UNO
  • 7segment 4×1 common anoda
  • kabel
  • Breadboard

2. Skematik

Gambar 1. pin pada 7segment 4×1 common anoda

Gambar 2. Skematik isi LED dan konfigurasi pin pada 7 segment 4x1common anoda

Gambar 4. pemasangan 7segment 4×1 pada Arduino

3. Program

  // rubah nilai 0 menjadi 1 untuk 7segment common katoda

  #define commonCathode 1

  // deklarasi posisi pin digital Arduino untuk setiap segmen

  int segmentA = 2;

  int segmentB = 3; 

  int segmentC = 4; 

  int segmentD = 5; 

  int segmentE = 6;

  int segmentF = 7;

  int segmentG = 8; 

  int segmentDP = 9;

  int digit1 = A0; 

  int digit2 = A1;

  int digit3 = A2; 

  int digit4 = A3;

  int num; 

  int cetak =0;

  int cobo;

  String inputString = “0000”;
  // nilai awal string

  boolean  stringComplete = false;

  //deklarasi variabel array yang berisi angka untuk 7segmen

  byte numbers[10] = { 

  B11000000, // 0

  B11111001, // 1

  B10100100, // 2

  B10110000, // 3

  B10011001, // 4

  B10010010, // 5

  B10000010, // 6

  B11111000, // 7

  B10000000, // 8

  B10010000 // 9

  };

  void setup()
  {

   num = 1234;

   //deklarasi pin segmen sebagai output

   pinMode(segmentA, OUTPUT);

   pinMode(segmentB, OUTPUT);

   pinMode(segmentC, OUTPUT); 

   pinMode(segmentD, OUTPUT);

   pinMode(segmentE, OUTPUT);

   pinMode(segmentF, OUTPUT);

   pinMode(segmentG, OUTPUT);

   pinMode(digit1, OUTPUT);

   pinMode(digit2, OUTPUT);

   pinMode(digit3, OUTPUT);

   pinMode(digit4, OUTPUT);

   writeDot(0);
   // memanggil rutin untuk mematikan titik(dot)

   Serial.begin(9600);

  }

  //rutin yang dijalankan saat dipanggil

  void writeDot(byte dot)
  {

   digitalWrite(segmentDP, dot); //menulis sinyal digital ke segmen dot

  }

  //rutin yang dijalankan saat dipanggil

  void sevenSegWrite(byte digit)
  {

   byte pin = 2;    //deklarasi pin

   int number = numbers[digit];    //deklarasi nilai number sebagai nilai variabel array

   //perulangan dari 0 sampai 6(membaca biner untuk nyala 7segmen)

   for(int bitIndex = 0; bitIndex < 7; bitIndex++){

   //dijalankan saat setingan sebagai common katoda

   if(commonCathode)

   { 

    digitalWrite(pin, 1–bitRead(number, bitIndex)); //menulis sinyal digital sesuai biner

   }

   //dijalankan saat setingan sebagai common anoda

   else
   {

    digitalWrite(pin, bitRead(number, bitIndex));    //menulis sinyal digital sesuai biner

   }

   ++pin;//menambah nilai pin

   }

  }

  //rutin tampilan 7segment dijalankan saat dipanggil

  void dispNumber(int toDisplay)

  {

   #define DIGIT_ON LOW    //set nyala digit saat mendapat sinyal low

   #define DIGIT_OFF HIGH    //set digit mati saat mendapat sinyal high

   //perulangan dari 4 ke 1

   for(int digit = 4; digit > 0; digit–)
   {

   //switching nyala digit

   switch(digit)
   {

    case 1: //jika 1

          digitalWrite(digit1, DIGIT_ON);//digit 1 nyala

          cetak = toDisplay %10;

          sevenSegWrite(cetak);//memanggil rutin untuk menyalakan segment yang tepat sehingga membentuk angka
          toDisplay = toDisplay /10;

          digitalWrite(digit2, DIGIT_OFF);//digit 1 nyala

          digitalWrite(digit3, DIGIT_OFF);//digit 1 nyala

          digitalWrite(digit4, DIGIT_OFF);//digit 1 nyala

          break; //keluar perulangan


    case 2:    //jika 2

          digitalWrite(digit2, DIGIT_ON);//digit 2 nyala

          cetak = toDisplay % 10;

          sevenSegWrite(cetak);//memanggil rutin untuk menyalakan segment yang tepat sehingga membentuk angka

          toDisplay = toDisplay/10;

          digitalWrite(digit1, DIGIT_OFF);//digit 1 nyala

          digitalWrite(digit3, DIGIT_OFF);//digit 1 nyala

          digitalWrite(digit4, DIGIT_OFF);//digit 1 nyala

          break;    //keluar perulangan

    case 3:    //jika 3

          digitalWrite(digit3, DIGIT_ON);//digit 3 nyala

          cetak = toDisplay %10;

          sevenSegWrite(cetak);//memanggil rutin untuk menyalakan segment yang tepat sehingga membentuk angka

          toDisplay = toDisplay/10;

          digitalWrite(digit1, DIGIT_OFF);//digit 1 nyala

          digitalWrite(digit2, DIGIT_OFF);//digit 1 nyala

          digitalWrite(digit4, DIGIT_OFF);//digit 1 nyala

          break;    //keluar perulangan

    case 4:    //jika 4

          digitalWrite(digit4, DIGIT_ON);//digit 4 nyala

          cetak = toDisplay%10;

          sevenSegWrite(cetak);//memanggil rutin untuk menyalakan segment yang tepat sehingga membentuk angka

          toDisplay = toDisplay/10;

          digitalWrite(digit1, DIGIT_OFF);//digit 1 nyala

          digitalWrite(digit2, DIGIT_OFF);//digit 1 nyala

          digitalWrite(digit3, DIGIT_OFF);//digit 1 nyala

          break;    //keluar perulangan

   }

   delay(2);

   }

  }

  void loop(){

  if (stringComplete) 
  {

   cobo = inputString.toInt();

   inputString = “”;

   stringComplete = false;

  }

   dispNumber(cobo);//tampilkan nilai ke 7segment

  }

  void serialEvent()
  {

   while (Serial.available())

   {

    // membaca inputan serial

    char inChar = (char)Serial.read();

    // menambahkan ke input string

    inputString += inChar;

    // jika terdapat carriage return atau newline maka penambahan string selesai

    if(inChar == ‘\n’)
    {

     stringComplete = true;

    }

   }

  }

4. video

Program 7segment 1×1

Pemrograman Tuesday, 2 October 2018

7segment adalah tampilan yang biasanya berupa susunan segmen yang dapat menyala membentuk bentuk angka atau huruf. Terdapat 7 segmen utama yang berisi LED sehingga setiap segmen dapat menyala secara individual. 7 segmen ada dua macam yaitu common katoda dan common anoda. Yang berbeda arah LEDnya. Common katoda terhubung ke gnd untuk dapat menyalakan LEDnya, sedangkan common anoda terhubung ke vcc untuk dapat menyalakan LEDnya. 7seg 1×1 tersedia pada integrated output dan dapat digunakan dengan menghubungkan pin segment dan pin commonnya.

1. Kebutuhan

  • Arduino UNO
  • (2) 220-ohm resistor
  • 7segment 1×1 common anoda
  • kabel
  • Breadboard

2. Skematik

Gambar 12.1. segmen pada 7segment common anoda, beserta urutan pinnya.

Gambar 12.2. pemasangan 7segment pada pin Arduino, disertai beberapa resistor agar LED tidak kelebihan tegangan.

3. Program

// rubah nilai 0 menjadi 1 untuk 7segment common katoda

#define commonCathode 1

// deklarasi posisi pin digital Arduino untuk setiap segmen

int segmentA = 2;

int segmentB = 3;

int segmentC = 4;

int segmentD = 5;

int segmentE = 6;

int segmentF = 7;

int segmentG = 8;

int segmentDP = 9;

//deklarasi variabel array yang berisi angka untuk 7segmen

byte numbers[10] =

{

  B11000000, // 0

  B11111001, // 1

  B10100100, // 2

  B10110000, // 3

  B10011001, // 4

  B10010010, // 5

  B10000010, // 6

  B11111000, // 7

  B10000000, // 8

  B10010000  // 9

};

void setup()
{

  //deklarasi pin segmen sebagai output

  pinMode(segmentA, OUTPUT);

  pinMode(segmentB, OUTPUT);

  pinMode(segmentC, OUTPUT);

  pinMode(segmentD, OUTPUT);

  pinMode(segmentE, OUTPUT);

  pinMode(segmentF, OUTPUT);

  pinMode(segmentG, OUTPUT); 

  writeDot(0);
  // memanggil rutin untuk mematikan titik(dot)

  //rutin yang dijalankan saat dipanggil

void writeDot(byte dot)
{

  digitalWrite(segmentDP, dot);

  //menulis sinyal digital ke segmen dot

}

//rutin yang dijalankan saat dipanggil

void sevenSegWrite(byte digit)
{

  byte pin = 2;    //deklarasi pin

  int number = numbers[digit];    //deklarasi nilai number sebagai nilai variabel array

  //perulangan dari 0 sampai 6(membaca biner untuk nyala 7segmen)

  for(int bitIndex = 0; bitIndex < 7; bitIndex++){

  //dijalankan saat setingan sebagai common katoda

  if(commonCathode)

  {

   digitalWrite(pin, 1–bitRead(number, bitIndex));
   //menulis sinyal digital sesuai biner

  }

   //dijalankan saat setingan sebagai common anoda

  else

  {

   digitalWrite(pin, bitRead(number, bitIndex));    //menulis sinyal digital sesuai biner

  }

++pin;//menambah nilai pin


 }

}

void loop()

{

 //perulangan dari 10 ke 1

 for(byte count = 10; count > 0; —count)
 {

  delay(1000);

  //menunggu 1000 milidetik

  sevenSegWrite(count – 1);
  //memanggil rutin untuk menampilkan angka

 }


 delay(4000);    //menunggu 4000 milidetik

}

4. Video

12345
Universitas Gadjah Mada

Menara Ilmu Mikrokontroler FMIPA
Universitas Gadjah Mada
Kontak :
roghib.muh@ugm.ac.id
+62 856-4781-7270

© Universitas Gadjah Mada

KEBIJAKAN PRIVASI/PRIVACY POLICY