void handle_interrupts(int timer) { if(motor1_step_counter > 0) { // if(motor1_step_timer == motor1_pulse_delay) { if(motor1_step_timer < motor1_pulse_delay + timer_freq_us && motor1_step_timer >= motor1_pulse_delay) { // motor1_step_timer ~ motor1_pulse_delay с учетом погрешности таймера timer_freq_us => // импульс1 - готовим шаг digitalWrite(motor1_pin_pulse, HIGH); // } else if(motor1_step_timer == 0) { } else if(motor1_step_timer < timer_freq_us) { // motor1_step_timer ~ 0 с учетом погрешности таймера (timer_freq_us) => // импульс2 (спустя motor1_pulse_delay микросекунд после импульса1) - завершаем шаг digitalWrite(motor1_pin_pulse, LOW); // переустановим таймер motor1_step_timer = motor1_step_delay + motor1_pulse_delay * 2 + timer_freq_us; // посчитаем шаг motor1_step_counter--; } motor1_step_timer -= timer_freq_us; } else { // все шаги сделали, цикл завершился, остановим таймер. stopTimerISR(TIMER3); cycle_running = false; } }
void handle_interrupts(int timer) { if(motor1_step_counter > 0) { motor1_step_timer -= timer_freq_us; if(motor1_step_timer < motor1_pulse_delay + timer_freq_us && motor1_step_timer >= motor1_pulse_delay) { // motor1_step_timer ~ motor1_pulse_delay с учетом погрешности таймера timer_freq_us => // импульс1 - готовим шаг digitalWrite(motor1_pin_pulse, HIGH); } else if(motor1_step_timer < timer_freq_us) { // motor1_step_timer ~ 0 с учетом погрешности таймера (timer_freq_us) => // импульс2 (спустя motor1_pulse_delay микросекунд после импульса1) - завершаем шаг digitalWrite(motor1_pin_pulse, LOW); // переустановим таймер motor1_step_timer = motor1_pulse_delay * 2 + motor1_step_delay; // посчитаем шаг motor1_step_counter--; } } if(motor2_step_counter > 0) { motor2_step_timer -= timer_freq_us; if(motor2_step_timer < motor2_pulse_delay + timer_freq_us && motor2_step_timer >= motor1_pulse_delay) { // motor2_step_timer ~ motor2_pulse_delay с учетом погрешности таймера timer_freq_us => // импульс1 - готовим шаг digitalWrite(motor2_pin_pulse, HIGH); } else if(motor2_step_timer < timer_freq_us) { // motor1_step_timer ~ 0 с учетом погрешности таймера (timer_freq_us) => // импульс2 (спустя motor1_pulse_delay микросекунд после импульса1) - завершаем шаг digitalWrite(motor2_pin_pulse, LOW); // посчитаем шаг motor2_step_counter--; // сделали последний шаг if(motor1_step_counter == 0) { Serial.print("Finished motor1:"); Serial.println(millis(), DEC); } // переустановим таймер motor2_step_timer = motor2_pulse_delay * 2 + motor2_step_delay; } } if(motor1_step_counter == 0 && motor2_step_counter == 0) { // оба мотора сделали все шаги, цикл завершился, остановим таймер. stopTimerISR(TIMER3); cycle_running = false; // выключить моторы digitalWrite(motor1_pin_en, HIGH); digitalWrite(motor2_pin_en, HIGH); } }
void stop_cycle() { stopTimerISR(TIMER3); cycle_state=false; }