#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int DIR = 12;
const int STEP = 14;
const int DIR1 = 27;
const int STEP1 = 26;
const int steps_per_rev = 400; //merupakan banyaknya step yang dilakukan dalam satu arah putaran
void setup()
{
lcd.init();
lcd.backlight();
lcd.setCursor(2,0);
lcd.print("Alat Pompa");
lcd.setCursor(0,1);
lcd.print("Oksigen");
delay(4000);
lcd.clear();
Serial.begin(115200);
pinMode(STEP, OUTPUT);
pinMode(DIR, OUTPUT);
pinMode(STEP1, OUTPUT);
pinMode(DIR1, OUTPUT);
}
void loop()
{
digitalWrite(DIR, HIGH);
digitalWrite(DIR1, HIGH);// jika DIR bernilai HIGH maka stepper akan berputar searah jarum jam
Serial.println("Spinning Clockwise...");
lcd.clear();
lcd.setCursor(2,0);
lcd.print("memompa udara");
delay(400);
for(int i = 0; i<steps_per_rev; i++)
{
digitalWrite(STEP, HIGH);
digitalWrite(STEP1, HIGH);
delayMicroseconds(10000);
digitalWrite(STEP, LOW);
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(DIR1, LOW);
digitalWrite(DIR, LOW);// jika DIR bernilai LOW maka stepper akan berputar berlawanan jarum jam
Serial.println("Spinning Anti-Clockwise...");
lcd.clear();
lcd.setCursor(0,1);
lcd.print("Release ");
delay(400);
for(int i = 0; i<steps_per_rev; i++)
{
digitalWrite(STEP, HIGH);
digitalWrite(STEP1, HIGH);
delayMicroseconds(3000);
digitalWrite(STEP, LOW);
digitalWrite(STEP1, LOW);
delayMicroseconds(3000);
}
delay(1000);// 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*/