// Koding Baru sampai sini
const int pul = 3; // pin untuk mengontrol gerakan stepper
const int dir = 2; // pin untuk mengatur arah gerakan stepper
const int limitBack = 13; // pin untuk membaca input limit switch
const int pbH = 11;
const int pbB = 12;
int loopState = 0; //untuk menghitung jumlah looping
// Deklarasi variabel boolean
bool stepperOnBack = false; //Status Motor Pusher
bool stepperDirBack = false; //Status Direction Motor Pusher
bool stepperOnForward = false; //Status Motor Pusher
bool stepperDirForward = false; //Status Direction Motor Pusher
void setup() {
pinMode(pbH, INPUT_PULLUP);
pinMode(pbB, INPUT_PULLUP);
pinMode(pul, OUTPUT);
pinMode(dir, OUTPUT);
pinMode(limitBack, INPUT_PULLUP);
}
void loop() {
if (loopState == 0) {
int pbHState = digitalRead(pbH);
//Jika tombol mundur ditekan 1 kali & stepper off
if (pbHState == LOW && !stepperOnBack) {
stepperDirBack = true; //Stepper searah jarum jam
stepperOnBack = true; // Ubah stepperOnBack false -> true
}
int limitBackState = digitalRead(limitBack);
// Jika limit mundur ditekan 1 kali & stepper on
if (limitBackState == LOW && stepperOnBack) {
stepperDirBack = false; //Stepper berlawanan jarum jam
stepperOnBack = false; //Ubah stepperOnBack true -> false
loopState = 1;
}
// Jika stepper ON atau OFF
if (stepperOnBack) {
digitalWrite(dir, stepperDirBack);
// digitalWrite(ena, HIGH);
for (int i = 0; i < 1; i++) {
digitalWrite(pul, HIGH);
delayMicroseconds(600);
digitalWrite(pul, LOW);
delayMicroseconds(600);
}
}
else {
// digitalWrite(ena, LOW);
}
}
if (loopState == 1) {
int pbHState = digitalRead(pbH);
//Jika tombol mundur ditekan 1 kali & stepper off
if (pbHState == LOW && !stepperOnForward) {
stepperDirForward = false; //Stepper searah jarum jam
stepperOnForward = true; // Ubah stepperOnForward false -> true
}
int pbBState = digitalRead(pbB);
// Jika limit mundur ditekan 1 kali & stepper on
if (pbBState == LOW && stepperOnForward) {
stepperDirForward = true; //Stepper berlawanan jarum jam
stepperOnForward = false; //Ubah stepperOnForward true -> false
// loopState = 1;
}
// Fungsi StepperOn ini harus ada pada setiap program yang menggunakannya
// Jika stepper ON atau OFF
if (stepperOnForward) {
digitalWrite(dir, stepperDirForward);
// digitalWrite(ena, HIGH);
for (int i = 0; i < 400; i++) {
digitalWrite(pul, HIGH);
delayMicroseconds(600);
digitalWrite(pul, LOW);
delayMicroseconds(600);
}
}
else {
// digitalWrite(ena, LOW);
}
}
}
// Program maju perlahan untuk pusher hood machine
/*
if (loopState == 1) {
int pbHState = digitalRead(pbH);
//Jika tombol mundur ditekan 1 kali & stepper off
if (pbHState == LOW && !stepperOnForward) {
stepperDirForward = false; //Stepper searah jarum jam
stepperOnForward = true; // Ubah stepperOnForward false -> true
}
int pbBState = digitalRead(pbB);
// Jika limit mundur ditekan 1 kali & stepper on
if (pbBState == LOW && stepperOnForward) {
stepperDirForward = true; //Stepper berlawanan jarum jam
stepperOnForward = false; //Ubah stepperOnForward true -> false
// loopState = 1;
}
// Jika stepper ON atau OFF
if (stepperOnForward) {
digitalWrite(dir, stepperDirForward);
// digitalWrite(ena, HIGH);
for (int i = 0; i < 400; i++) {
digitalWrite(pul, HIGH);
delayMicroseconds(600);
digitalWrite(pul, LOW);
delayMicroseconds(600);
}
}
else {
// digitalWrite(ena, LOW);
}
}
*/
/*
void loop() {
while(digitalRead(limitBack) == HIGH) { // selama limit switch tidak tertekan
digitalWrite(dir, HIGH); // atur arah gerakan stepper
for (int i = 0; i < 1; i++) { // gerakan stepper 200 langkah
digitalWrite(pul, HIGH);
delayMicroseconds(600);
digitalWrite(pul, LOW);
delayMicroseconds(600);
}
}
// limit switch tertekan, hentikan gerakan stepper
digitalWrite(pul, LOW);
digitalWrite(dir, LOW);
}
*/