#include <LiquidCrystal_I2C.h> //MEMASUKAN LIBRARY
LiquidCrystal_I2C lcd(0x27,16,2);
#define Tegangan_ADC    5000.0 // in millivolt
#define Resolusi 1024.0
#define LM35 A0
int nilai_Adc ;
int mV ;
float suhu_celsius;
float suhu_fahrenheit;

char * LargeText = " RAFIF PUTRA HADITAMA EK2D/16 ";                               
int iLineNumber = 0;
int iCursor = 0;

byte suhu1[] =
{
  B00000,
  B01110,
  B01010,
  B01010,
  B01010,
  B10001,
  B10001,
  B01110
};

byte suhu2[] = {
  B00000,
  B01110,
  B01110,
  B01110,
  B01110,
  B11111,
  B11111,
  B01110
};

void setup() {
  lcd.init(); //MENGAKTIFKAN LCD                    
  lcd.backlight(); //MENGAKTIFKAN BACKLIGHT
  lcd.setCursor(4,0);
  lcd.print("SENSOR &");
  lcd.setCursor(3,1);
  lcd.print("TRANDUSER");
  delay(1500);
  lcd.clear(); 
  lcd.setCursor(2,0);
  lcd.print("SENSOR SUHU");
  lcd.setCursor(4,1);
  lcd.print("LM 35");
  delay(1500);
  lcd.clear(); 
  lcd.createChar(1, suhu1);
  lcd.createChar(2, suhu2);
  pinMode(LM35, INPUT);
}

void loop() {
  nilai_Adc = analogRead(LM35);
  mV = nilai_Adc * (Tegangan_ADC / Resolusi);
  suhu_celsius = mV / 10;
  suhu_fahrenheit = suhu_celsius * 9 / 5 + 32;

  {
  UpdateLCDDisplay();                                                                 
  lcd.setCursor(0,1);
  lcd.write(1);
  lcd.print(" SUHU: ");
  lcd.print(suhu_celsius);
  lcd.print("C ");
  lcd.write(2);
  delay(500);
  }
  {
  UpdateLCDDisplay();                                                                 
  lcd.setCursor(0,1);
  lcd.write(2);
  lcd.print(" SUHU: ");
  lcd.print(suhu_celsius);
  lcd.print("C ");
  lcd.write(1);
  delay(500);
  }
}

void UpdateLCDDisplay(){

  int iLenOfLargeText = strlen(LargeText);                                            // Calculate lenght of string.
  if (iCursor == (iLenOfLargeText - 1) )                                              // Reset variable for rollover effect.
  {
    iCursor = 0;
  }
  //lcd.clear();
  lcd.setCursor(0,iLineNumber);
  
  if(iCursor < iLenOfLargeText - 16)                                                  // This loop exicuted for normal 16 characters.
  {
    for (int iChar = iCursor; iChar < iCursor + 16 ; iChar++)
    {
      lcd.print(LargeText[iChar]);
    }
  }
  else
  {
    for (int iChar = iCursor; iChar < (iLenOfLargeText - 1) ; iChar++)                //  This code takes care of printing charecters of current string.
    {
      lcd.print(LargeText[iChar]);
    }
    for (int iChar = 0; iChar <= 16 - (iLenOfLargeText - iCursor); iChar++)           //  Reamining charecter will be printed by this loop.
    {
      lcd.print(LargeText[iChar]);   
    }
  }
  iCursor++;
}
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
LM35Breakout
lcd1:GND
lcd1:VCC
lcd1:SDA
lcd1:SCL