Thursday, April 30, 2015

Scrolling LCD 16x2 First Row Only

 It's tricky but not impossible

 All I have to do is update the cursor position of second row so it seems still. :)





#include <SoftwareSerial.h>
#include <LiquidCrystal.h>

SoftwareSerial mySerial(8, 9); // RX, TX
int t=1;
int i=1;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);//rs e d4 d5 d6 d7
String tulisan = "Tadaa..., heheh...., hihihi :)";
String info =":)";
void setup() {
  pinMode(7,INPUT);
  pinMode(6,OUTPUT);
  pinMode(10,OUTPUT);
  pinMode(13,OUTPUT);
  lcd.begin(16, 2);
  lcd.print(tulisan);
  mySerial.begin(9600);
  delay(1000);
}


void loop() {
  //lcd.clear();
  if (digitalRead(7)==1){
    digitalWrite(10,HIGH);
  }else{
    digitalWrite(10,LOW);
  }
  if (mySerial.available()){
    digitalWrite(13,HIGH);
    while(mySerial.available()>0){
      tulisan=mySerial.readString();
      mySerial.println(tulisan);
    }
  }
  lcd.setCursor(1,0);
  lcd.print(tulisan);
  //scroll first row if text length's beyond 16
  int l= tulisan.length()-12;
  info ="P7=";
  info+=digitalRead(7);
  info+=",l=";
  info+=tulisan.length();
  lcd.setCursor(t,1);
  lcd.print(info);
  digitalWrite(13,LOW);
  lcd.scrollDisplayLeft();
  t++;
  if (t>=l){
    t=1;  
    lcd.clear();
  }
  delay(1000);
}
//PWM: 3, 5, 6, 9, 10, and 11

.

Agar output LCD hanya bagian atas saja yang scroll sedangkan yang baris kedua tetap diam.

Triknya adalah memberi LCD perintah scroll seperti biasa di arduino namun kita mengupdate posisi kursor di baris kedua agar tulisan selalu nampak di layar (dalam hal ini adalah string bernama 'info')