Anda di halaman 1dari 11

DIY-P6-C7

SCROLLING TEXT

NAMA NIM

1. ALI ASSEGAF 1315030094


2. JEREMIA GANDA 1315030053
3. SAPTA AJI ZACHRON I 1315030077

PIC : WENI DITA PRANESWARI 1315030018

Kelas : TT- 4C

Jurusan Teknik Elektro


Program studi Teknik Telekomunikasi
Politeknik Negeri Jakarta
2017
A. JUDUL : SCROLLING TEXT

B. CARA KERJA :
Dalam projek DIY ini saya sebagai PIC akan menggunakan Arduino UNO untuk menggeser
teks ke kanan dan ke kiri yang dikontrol menggunakan dua buah input push button dan
outputnya LED dan LCD Character16x2 . Sebuah LED digunakan sebagai pertanda, apabila
teks digeser hingga mencapai akhir atau awal teks sehingga tidak dapat bergeser lagi maka
akan ditandai dengan LED akan menyala. Lalu, untuk kecerahan layar LCD akan diatur pada
sketch nya, sedangkan kecerahan teks akan diatur menggunakan potensiometer 10K.
Selanjutnya, berikut adalah penjelasan sketch yang dibuat agar projek ini dapat bekerja.
1. Sketch untuk mendeklarasikan atau menginisialisasikan pin yang digunakan
dan kondisi awal nya sebagai berikut :
#include <LiquidCrystal.h>
const int PIN_LCD_LED = 6; // analog
const int PIN_ERR_LED = 7; // digital
const int PIN_BUTTON1 = 8; // digital
const int PIN_BUTTON2 = 9; // digital
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const int LCD_COLS = 16;
const int LCD_BRIGHTNESS = 128;
int state_lcd = LOW;
int lcd_start = 0;
int state_led = LOW;
unsigned long t0_led;
const int LED_TIMEOUT = 500;
const char TEXT[] = "s c r o l l i n g t e x t ";
const char TEXT2[] = "k e l o m p o k 7 tt4c pnj";
const int TEXT_LEN = (sizeof(TEXT) / sizeof(char));
const int LCD_LIMIT = TEXT_LEN - LCD_COLS;
2. Sketch untuk mendeklarasikan atau menginisialisasikan pin input dan output yang
digunakan sebagai berikut :
pinMode(PIN_BUTTON1, INPUT);
pinMode(PIN_BUTTON2, INPUT);
pinMode(PIN_ERR_LED, OUTPUT);

3. Sketch untuk menginisialisasi kondisi awal LCD sebagai berikut :


lcd.begin(16,2);
lcd.noDisplay();
digitalWrite(PIN_LCD_LED, state_lcd);

4. Sketch untuk menginisialisasi kondisi awal LED agar off (mati) sebagai berikut :
digitalWrite(PIN_ERR_LED, state_led);

5. Sketch untuk menginisialisasikan apabila LCD yang masih mati (off), sehingga untuk
membuat LCD on (nyala) kedua push button harus ditekan secara bersamaan sebagai
berikut :
if(LOW == state_lcd)
{
if(HIGH == state_button1 && HIGH == state_button2)
{
analogWrite(PIN_LCD_LED, LCD_BRIGHTNESS);
lcd.display();
state_lcd = HIGH;
delay(50);
}
}
6. Sketch untuk menginisialisasikan apabila LCD on (nyala), maka teks dapat digeser ke kiri
dengan menekan push button yang pertama, sedangkan untuk dapat menggeser teks ke
kanan dengan menekan push button kedua dan LED akan menyala jika sudah mencapai
akhir atau awal teks sebagai berikut :
if(HIGH == state_button1)
{
if(lcd_start > 0)
{
lcd_start--;
state_led = LOW;
digitalWrite(PIN_ERR_LED, state_led);
delay(50);
}
else
{
state_led = HIGH;
digitalWrite(PIN_ERR_LED, state_led);
t0_led = millis();
}
}
// Tekan tombol 2 -> teks geser ke kanan
if(HIGH == state_button2)
{
if(lcd_start < LCD_LIMIT)
{
lcd_start++;
state_led = LOW;
digitalWrite(PIN_ERR_LED, state_led);
delay(50);
}
else
{
state_led = HIGH;
digitalWrite(PIN_ERR_LED, state_led);
t0_led = millis();
}
}

7. Sketch untuk mengatur posisi teks yang akan ditampilkan pada LCD sebagai berikut :
for(int i = 0; i < LCD_COLS; i++)
{
lcd.setCursor(i, 0);
lcd.print(TEXT[lcd_start + i]);
lcd.setCursor(i,1 );
lcd.print(TEXT2[lcd_start + i]);
}

8. Sketch untuk menginisialisasi LED akan menyala, dan membuat LED akan mati kembali
sebagai berikut :
if(HIGH == state_led)
{
unsigned long td = millis() - t0_led;
if(td > LED_TIMEOUT)
{
state_led = LOW;
digitalWrite(PIN_ERR_LED, state_led);
}
}
C. SKEMATIK :

GND
5V
D. ALGORITMA (FLOWCHART) :

MULAI

INISIALISASI
PIN 6, PIN 7 SEBAGAI INPUT
PIN 8, PIN 9 SEBAGAI OUTPUT

KONDISI LCD SALAH PUSH SALAH TEKS


BUTTON PERTAMA
MATI BERGESER
DITEKAN
KE KANAN

BENAR
BENAR
TEKAN KEDUA TEKS
PUSH BUTTON BERGESER KE KIRI

DELAY 50 ms

LCD
LED
MENYALA
MENYALA

500 ms

LED
MATI

UNO SALAH
OFFLINE

BENAR
SELESAI
E. SKETCH :
#include <LiquidCrystal.h>

const int PIN_LCD_LED = 6; // analog


const int PIN_ERR_LED = 7; // digital
const int PIN_BUTTON1 = 8; // digital
const int PIN_BUTTON2 = 9; // digital

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

const int LCD_COLS = 16;


const int LCD_BRIGHTNESS = 128;
int state_lcd = LOW;
int lcd_start = 0;
int state_led = LOW;
unsigned long t0_led;
const int LED_TIMEOUT = 500;

const char TEXT[] = "s c r o l l i n g t e x t ";


const char TEXT2[] = "k e l o m p o k 7 tt4c pnj";
const int TEXT_LEN = (sizeof(TEXT) / sizeof(char));
const int LCD_LIMIT = TEXT_LEN - LCD_COLS;

void setup()
{
pinMode(PIN_BUTTON1, INPUT);
pinMode(PIN_BUTTON2, INPUT);
pinMode(PIN_ERR_LED, OUTPUT);

lcd.begin(16,2);
lcd.noDisplay();
digitalWrite(PIN_LCD_LED, state_lcd);

digitalWrite(PIN_ERR_LED, state_led);
}

void loop()
{
int state_button1 = digitalRead(PIN_BUTTON1);
int state_button2 = digitalRead(PIN_BUTTON2);
if(LOW == state_lcd)
{
// Tekan kedua tombol-> LCD on
if(HIGH == state_button1 && HIGH == state_button2)
{
analogWrite(PIN_LCD_LED, LCD_BRIGHTNESS);
lcd.display();
state_lcd = HIGH;
delay(50);
}
}
else
{
// Tekan tombol 1 -> teks geser ke kiri
if(HIGH == state_button1)
{
if(lcd_start > 0)
{
lcd_start--;
state_led = LOW;
digitalWrite(PIN_ERR_LED, state_led);
delay(50);
}
else
{
state_led = HIGH;
digitalWrite(PIN_ERR_LED, state_led);
t0_led = millis();
}
}
if(HIGH == state_button2)
{
if(lcd_start < LCD_LIMIT)
{
lcd_start++;
state_led = LOW;
digitalWrite(PIN_ERR_LED, state_led);
delay(50);
}
else
{
state_led = HIGH;
digitalWrite(PIN_ERR_LED, state_led);
t0_led = millis();
}
}
for(int i = 0; i < LCD_COLS; i++)
{
lcd.setCursor(i, 0);
lcd.print(TEXT[lcd_start + i]);
lcd.setCursor(i,1 );
lcd.print(TEXT2[lcd_start + i]);
}

if(HIGH == state_led)
{
unsigned long td = millis() - t0_led;
if(td > LED_TIMEOUT)
{
state_led = LOW;
digitalWrite(PIN_ERR_LED, state_led);
}
}
}
delay(50);
}
F. KESIMPULAN :

1. LCD karakter 2x16 memiliki 2 baris dengan 16 karakter per barisnya


2. Aplikasi LCD karakter berbasis Arduino ini menggunakan library
khusus <LiquidCrystal.h>
3. Rangkaian antarmuka dengan Arduino pada projek ini hanya
menggunakan mode data 4 bit karena untuk menghemat kebutuhan
pin
4. LCD karakter 2x16 berbasis Arduino sangat efektif digunakan karena
dapat menampilkan karakter tulisan, angka, dan symbol dengan baik
hanya dengan cara membuat sketch nya pada aplikasi Arduino.

Anda mungkin juga menyukai