#define PIN_DIR 2 #define PIN_STEP 3 #define PIN_ENABLE 4 #define PIN_ENDSTOP 5 char rcv; char cmd; char s_enable = true; char s_endstop = false; void setup() { pinMode(PIN_ENABLE, OUTPUT); digitalWrite(PIN_ENABLE, LOW); pinMode(PIN_DIR, OUTPUT); pinMode(PIN_STEP, OUTPUT); delay(500); Serial.begin(250000); // initial flush while (Serial.available()) { Serial.read(); } } void loop() { char cmd; char snd; if (Serial.available()) { rcv = Serial.read(); cmd = rcv & 0b11; if (cmd != 0b00) { if (cmd == 0b11) { s_enable = !s_enable; digitalWrite(PIN_ENABLE, s_enable ? LOW : HIGH); } else { digitalWrite(PIN_DIR, cmd & 0b01 ? LOW : HIGH); digitalWrite(PIN_STEP, HIGH); delayMicroseconds(50); digitalWrite(PIN_STEP, LOW); } } snd = ((rcv >> 2) & 0b00111111) | (s_endstop << 6) | (s_enable << 7); Serial.write(snd); } int val = analogRead(PIN_ENDSTOP); s_endstop = val < 850; }