SCROLLING TEXT
NAMA NIM
Kelas : TT- 4C
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);
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
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>
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 :