Sure, here it is:
#define XDRIVER_STEP_PIN 2
#define XDRIVER_DIR_PIN 3
#define XPOT_PIN A0
#define YDRIVER_STEP_PIN 4
#define YDRIVER_DIR_PIN 5
#define YPOT_PIN A1
#define XDEADZONE 50
#define XMIN_DRIVER_PULSE_PERIOD_US 50 //max speed
#define XMAX_DRIVER_PULSE_PERIOD_US 3000 //min speed
#define YDEADZONE 50
#define YMIN_DRIVER_PULSE_PERIOD_US 50 //max speed
#define YMAX_DRIVER_PULSE_PERIOD_US 3000 //min speed
enum XDriver_pulse_state_enum {XPULSE_IDLE, XPULSE_HIGH, XPULSE_LOW};
enum YDriver_pulse_state_enum {YPULSE_IDLE, YPULSE_HIGH, YPULSE_LOW};
unsigned long Xtime_now = 0;
unsigned long Ytime_now = 0;
uint16_t Xdriver_pulse_hold_time_us = XMIN_DRIVER_PULSE_PERIOD_US/2;
uint8_t Xdriver_pulse_state = XPULSE_IDLE;
int Xnormalized_analog_value = 0;
uint8_t Xidle_flag = 1;
uint16_t Ydriver_pulse_hold_time_us = YMIN_DRIVER_PULSE_PERIOD_US/2;
uint8_t Ydriver_pulse_state = YPULSE_IDLE;
int Ynormalized_analog_value = 0;
uint8_t Yidle_flag = 1;
void setup() {
pinMode(XDRIVER_STEP_PIN, OUTPUT);
pinMode(XDRIVER_DIR_PIN, OUTPUT);
pinMode(YDRIVER_STEP_PIN, OUTPUT);
pinMode(YDRIVER_DIR_PIN, OUTPUT);
}
void loop() {
Xnormalized_analog_value = analogRead(XPOT_PIN) - 512;
if(abs(Xnormalized_analog_value)-XDEADZONE < 0){
Xidle_flag = 1;
}
else{
Xidle_flag = 0;
}
Ynormalized_analog_value = analogRead(YPOT_PIN) - 512;
if(abs(Ynormalized_analog_value)-YDEADZONE < 0){
Yidle_flag = 1;
}
else{
Yidle_flag = 0;
}
Xdriver_pulse_hold_time_us = map(abs(Xnormalized_analog_value), XDEADZONE, 512, XMAX_DRIVER_PULSE_PERIOD_US, XMIN_DRIVER_PULSE_PERIOD_US)/2;
if(!Xidle_flag && Xdriver_pulse_state == XPULSE_IDLE){
write_Xpulse_high();
}
if((micros() - Xtime_now > Xdriver_pulse_hold_time_us) && (Xdriver_pulse_state == XPULSE_LOW)){
write_Xpulse_high();
}
if((micros() - Xtime_now > Xdriver_pulse_hold_time_us) && (Xdriver_pulse_state == XPULSE_HIGH)){
write_Xpulse_low();
}
Ydriver_pulse_hold_time_us = map(abs(Ynormalized_analog_value), YDEADZONE, 512, YMAX_DRIVER_PULSE_PERIOD_US, YMIN_DRIVER_PULSE_PERIOD_US)/2;
if(!Yidle_flag && Ydriver_pulse_state == YPULSE_IDLE){
write_Ypulse_high();
}
if((micros() - Ytime_now > Ydriver_pulse_hold_time_us) && (Ydriver_pulse_state == YPULSE_LOW)){
write_Ypulse_high();
}
if((micros() - Ytime_now > Ydriver_pulse_hold_time_us) && (Ydriver_pulse_state == YPULSE_HIGH)){
write_Ypulse_low();
}
}
void write_Xpulse_high(void){
Xdriver_pulse_state = XPULSE_HIGH;
if(Xnormalized_analog_value > 0){
digitalWrite(XDRIVER_DIR_PIN, HIGH);
}
else if(Xnormalized_analog_value < 0){
digitalWrite(XDRIVER_DIR_PIN, LOW);
}
digitalWrite(XDRIVER_STEP_PIN, HIGH);
Xtime_now = micros();
}
void write_Ypulse_high(void){
Ydriver_pulse_state = YPULSE_HIGH;
if(Ynormalized_analog_value > 0){
digitalWrite(YDRIVER_DIR_PIN, HIGH);
}
else if(Ynormalized_analog_value < 0){
digitalWrite(YDRIVER_DIR_PIN, LOW);
}
digitalWrite(YDRIVER_STEP_PIN, HIGH);
Ytime_now = micros();
}
void write_Xpulse_low(void){
digitalWrite(XDRIVER_STEP_PIN, LOW);
Xtime_now = micros();
if(!Xidle_flag){
Xdriver_pulse_state = XPULSE_LOW;
}
else{
Xdriver_pulse_state = XPULSE_IDLE;
}
}
void write_Ypulse_low(void){
digitalWrite(YDRIVER_STEP_PIN, LOW);
Ytime_now = micros();
if(!Yidle_flag){
Ydriver_pulse_state = YPULSE_LOW;
}
else{
Ydriver_pulse_state = YPULSE_IDLE;
}
}