#include <AccelStepper.h>
#include <SevSeg.h>
AccelStepper stepper(1, 8, 9); // Objek AccelStepper, Pin 8 untuk STEP, Pin 9 untuk DIR
SevSeg sevseg; // Objek SevSeg
const int buttonPinPlus = 2; // Pin untuk push button penambahan
const int buttonPinMinus = 3; // Pin untuk push button pengurangan
int counter = 0; // Variabel untuk menghitung
void setup() {
stepper.setMaxSpeed(1000); // Atur kecepatan maksimum motor stepper
stepper.setAcceleration(500); // Atur percepatan motor stepper
// Inisialisasi pin sebagai INPUT_PULLUP
pinMode(buttonPinPlus, INPUT_PULLUP);
pinMode(buttonPinMinus, INPUT_PULLUP);
// Inisialisasi objek SevSeg
byte numDigits = 4; // Jumlah digit pada 7-segment display
byte digitPins[] = {4, 5, 6, 7}; // Pin-piin digit display
byte segmentPins[] = {10, 11, 12, 13, A0, A1, A2, A3}; // Pin-piin segment display
sevseg.begin(COMMON_CATHODE, numDigits, digitPins, segmentPins);
sevseg.setBrightness(100); // Atur kecerahan display (0-100%)
// Tampilkan posisi awal pada 7-segment display
sevseg.setNumber(counter);
sevseg.refreshDisplay();
}
void loop() {
// Baca status push button penambahan
if (digitalRead(buttonPinPlus) == LOW) {
counter++;
delay(250); // Debouncing
}
// Baca status push button pengurangan
if (digitalRead(buttonPinMinus) == LOW) {
counter--;
delay(250); // Debouncing
}
// Batasi rentang nilai counter antara -999 hingga 999 (sesuaikan dengan kebutuhan)
counter = constrain(counter, -999, 999);
// Tampilkan nilai counter pada 7-segment display
sevseg.setNumber(counter);
sevseg.refreshDisplay();
// Kendalikan pergerakan motor stepper
if (counter > 0) {
stepper.setSpeed(100); // Kecepatan motor ke arah searah jarum jam
} else if (counter < 0) {
stepper.setSpeed(-100); // Kecepatan motor berlawanan arah jarum jam
} else {
stepper.setSpeed(0); // Motor berhenti
}
stepper.runSpeed();
}