const int DIR = 2;
const int STEP = 4;
const int DIR1 = 5;
const int STEP1 = 19;
const int steps_per_rev = 100; //merupakan banyaknya step yang dilakukan dalam satu arah putaran
const int steps_per_rev1 = 100;
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup()
{
Serial.begin(115200);
pinMode(STEP, OUTPUT);
pinMode(DIR, OUTPUT);
pinMode(STEP1, OUTPUT);
pinMode(DIR1, OUTPUT);
lcd.init();
lcd.backlight();
//Setup Awal Ketika Running
lcd.setCursor(2,0);
lcd.print("Tes");
lcd.setCursor(0,1);
lcd.print("12345");
delay(4000);
lcd.clear();
}
void loop()
{
digitalWrite(DIR, HIGH);// jika DIR bernilai HIGH maka stepper akan berputar searah jarum jam
Serial.println("putar kanan...");
lcd.clear();
lcd.setCursor(2,0);
lcd.print("Putar Kanan");
for(int i = 0; i<steps_per_rev; i++)
{
digitalWrite(STEP, HIGH);
delayMicroseconds(10000);
digitalWrite(STEP, LOW);
delayMicroseconds(10000);
}
/*pada baris 16-22 merupakan program untuk menghasilkan sinyal pulse pada output STEP
semakin singkat delay yang diberikan maka semakin cepat juga putaran motor, program ini
akan terus diulang hingga nilai i melebihi dari nilai (steps_per_rev), jika niali i
kurang dari nilai (steps_per_rev) maka i + 1 (i++) dan program ini akan diulang kembali
hingga persyaratan tidak terpenuhi, ini juga berlaku pada baris 34-40*/
delay(100);// waktu jeda motor berhenti
digitalWrite(DIR1, HIGH);// jika DIR bernilai HIGH maka stepper akan berputar searah jarum jam
Serial.println("mkanan putar kanan...");
lcd.clear();
lcd.setCursor(2,0);
lcd.print("Putar Kiri");
for(int i = 0; i<steps_per_rev1; i++)
{
digitalWrite(STEP1, HIGH);
delayMicroseconds(10000);
digitalWrite(STEP1, LOW);
delayMicroseconds(10000);
}
/*pada baris 16-22 merupakan program untuk menghasilkan sinyal pulse pada output STEP
semakin singkat delay yang diberikan maka semakin cepat juga putaran motor, program ini
akan terus diulang hingga nilai i melebihi dari nilai (steps_per_rev), jika niali i
kurang dari nilai (steps_per_rev) maka i + 1 (i++) dan program ini akan diulang kembali
hingga persyaratan tidak terpenuhi, ini juga berlaku pada baris 34-40*/
delay(1000);// waktu jeda motor berhenti
digitalWrite(DIR, LOW);// jika DIR bernilai LOW maka stepper akan berputar berlawanan jarum jam
Serial.println("putar kiri...");
for(int i = 0; i<steps_per_rev; i++)
{
digitalWrite(STEP, HIGH);
delayMicroseconds(3000);
digitalWrite(STEP, LOW);
delayMicroseconds(3000);
}
delay(100);// waktu jeda motor berhenti
digitalWrite(DIR1, LOW);// jika DIR bernilai LOW maka stepper akan berputar berlawanan jarum jam
Serial.println("mka putar kiri...");
for(int i = 0; i<steps_per_rev1; i++)
{
digitalWrite(STEP1, HIGH);
delayMicroseconds(3000);
digitalWrite(STEP1, LOW);
delayMicroseconds(3000);
}
delay(100);// waktu jeda motor berhenti
}
/*catatan:
- Agar driver A4988 dapat bekerja maka perlu dihubungkan pin RESET dengan pin SLEEP
- jumlah step motor stepper dari 0 drajat hingga 360 derajat adalah 200 step
- jika nilai i pada putaran searah jarum jam berbeda dengan nilai i pada putaran
berlawanan jarum jam maka posisi putaran stepper tidak akan kembali ke posisi awal*/