#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Atur alamat LCD ke 0x27 untuk tampilan 16 karakter dan 2 baris
//LCD settings
const uint8_t I2C_ADDRESS =0x3f;//gunakan I2C Scanenr untuk mendapatkan alamatnya
const uint8_t LCD_CHAR= 16;
const uint8_t LCD_LINE = 2;
char *TITLE_ANGLE1 ="Angle: ";
LiquidCrystal_I2C lcd(I2C_ADDRESS, LCD_CHAR, LCD_LINE);
unsigned int LCD_VCC=13;//5V pin untuk LCD
#include <Servo.h>
// start of servo1 settings
Servo myservo1; // buat objek servo 1 untuk mengontrol servo
int pot1pin = A0; //pin analog yang digunakan untuk menghubungkan potensiometer
int pot1VccPin = 12;//pin 12 digunakan sebagai 5V untuk potensiometer
unsigned int servo1Pin=3;//pin apa pun dengan ~ yang berarti pin tersebut mengaktifkan PWM
unsigned int servo1AngleMin=0;//servo1 minimum angle
unsigned int servo1AngleMax=180;//servo1 maximum angle
unsigned int servo1Val=0;// variabel untuk membaca nilai dari pin analog
unsigned int angle1=0;
// END of servo1 settings
void setup()
{
Serial.begin(9600);
Serial.println("Servo potensiometer dan lcd");
Serial.println("Kelompok 2");
myservo1.attach(servo1Pin); // menempelkan servo 1 ke objek servo
pinMode(pot1VccPin, OUTPUT);
digitalWrite(pot1VccPin,HIGH);//5V untuk Potensiometer (resistor variabel)
// inisialisasi LCD
pinMode(LCD_VCC, OUTPUT);
digitalWrite(LCD_VCC,HIGH);//5V untuk LCD
lcd.begin(16, 2);
lcd.backlight();
lcd.print("Kelompok 2");
lcd.setCursor(0,1);
lcd.print("Angle: ");
delay(2000);
}
void loop()
{
servo1Val = analogRead(pot1pin);// membaca nilai potensiometer (nilai antara 0 dan 1023)
sendServo(servo1Val);//kirim servo nol (sendServo)
delay(20);
}// loop end
void sendServo(int value)
{
unsigned int newAngle1;
newAngle1 = map(value, 0, 1023, servo1AngleMin, servo1AngleMax);// skalakan untuk menggunakannya dengan servo (nilai antara servoAngleMin dan servoAngleMax)
if(angle1 !=newAngle1)
{
myservo1.write(newAngle1);
lcdDisplay(newAngle1);
angle1 =newAngle1;
delay(100);
}
}//sendServo()
void lcdDisplay(int angle)
{
clearCharacters();
Serial.print("angle");
Serial.println(angle);
lcd.setCursor((unsigned)strlen(TITLE_ANGLE1), 1);
lcd.print(angle);//print value of angle
lcd.print((char)223);
}
void clearCharacters()
{
for (int i=(unsigned)strlen(TITLE_ANGLE1)-1; i<=LCD_CHAR-1; i++)
{
lcd.setCursor (i,1); //
lcd.write(254);
}
}//clearCharacters