const int DIR1 = 14;
const int STEP1 = 12;
const int DIR2 = 26;
const int STEP2 = 27;
const int steps_per_rev = 200;
volatile int stepper1count = 0;
volatile int stepper2count = 0;
float stepsneeded1 = 0;
float stepsneeded2 = 0;
hw_timer_t *timer1 = NULL;
hw_timer_t *timer2 = NULL;
portMUX_TYPE timerMux = portMUX_INITIALIZER_UNLOCKED;
void IRAM_ATTR Timer_1() {
portENTER_CRITICAL_ISR(&timerMux);
if (stepper1count < 2 * stepsneeded1) {
if (stepper1count % 2 == 0) {
digitalWrite(STEP1, HIGH);
} else {
digitalWrite(STEP1, LOW);
}
stepper1count++;
}
portEXIT_CRITICAL_ISR(&timerMux);
}
void IRAM_ATTR Timer_2() {
portENTER_CRITICAL_ISR(&timerMux);
if (stepper2count < 2 * stepsneeded2) {
if (stepper2count % 2 == 0) {
digitalWrite(STEP2, HIGH);
} else {
digitalWrite(STEP2, LOW);
}
stepper2count++;
}
portEXIT_CRITICAL_ISR(&timerMux);
}
void setup() {
Serial.begin(115200);
pinMode(STEP1, OUTPUT);
pinMode(DIR1, OUTPUT);
pinMode(STEP2, OUTPUT);
pinMode(DIR2, OUTPUT);
float timemove = 5000;
float degreesend1 = 300;
float degreesend2 = 150;
stepsneeded1 = (300.0 / 360.0) * 200.0;
float stepperstate = 0.0;
float speedstepper1 = 1 / ((stepsneeded1 / timemove));
stepsneeded2 = (150 / 360.0) * 200.0;
stepperstate = 0.0;
float speedstepper2 = 1 / ((stepsneeded2 / timemove));
digitalWrite(DIR1, HIGH);
digitalWrite(DIR2, LOW);
timer1 = timerBegin(0, 80, true);
timerAttachInterrupt(timer1, &Timer_1, true);
timerAlarmWrite(timer1, (speedstepper1 / 2.0) * 1000, true);
timerAlarmEnable(timer1);
timer2 = timerBegin(1, 80, true);
timerAttachInterrupt(timer2, &Timer_2, true);
timerAlarmWrite(timer2, (speedstepper2 / 2.0) * 1000, true);
timerAlarmEnable(timer2);
}
void loop() {
}