X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=ROM2%2Fmotors.c;h=e7cb6b50db87f90bf36d531d081b34f9e76e484f;hb=c1fd53d73bce8779c822e3ed74de94f40714f9ca;hp=13316ff610ff04030e7bca3e48f2e3c7cf6f81dd;hpb=c34cbe163ce52f1d8fc553993701054f4942152f;p=uccvend-snackrom.git diff --git a/ROM2/motors.c b/ROM2/motors.c index 13316ff..e7cb6b5 100644 --- a/ROM2/motors.c +++ b/ROM2/motors.c @@ -93,35 +93,37 @@ bool is_motor(u8 slot) { return motor_here(slot); } -bool left_home(u8 slot) { +bool start_motor(u8 slot) { u16 i; u8 r = slot%10; if (r >= 5) r--; r = 1 << (r-1); + motor_on(slot); + delay(100); for (i = 0; i < 1000; i++) { - if ((home_sensors & r) == 0) return 1; + if ((home_sensors & r) != 0) return 1; delay(1); } /* it never left */ + motors_off(); return 0; } -#define is_overcurrent() ((_io_ports[M6811_PORTE] & PORTE_MOTOR_NOT_OVERCURRENT)==0) - bool back_home(u8 slot) { u8 i, r = slot%10; if (r >= 5) r--; r = 1 << (r-1); for (i = 0; i < 5; i++) { - if ((home_sensors & r) != 0) return 1; - if (is_overcurrent()) return MOTOR_CURRENT_FAIL; + if ((home_sensors & r) == 0) return 1; + delay(1); } /* it never arrived */ return 0; } +#define is_overcurrent() ((_io_ports[M6811_PORTE] & PORTE_MOTOR_NOT_OVERCURRENT)==0) bool motor_overcurrent() { u8 good_passes = 0, t; for (t = 0; t < 8; t++) { @@ -136,13 +138,7 @@ bool motor_overcurrent() { u8 dispense_motor(u8 slot) { if (!is_motor(slot)) return MOTOR_NOSLOT; - - motor_on(slot); - - if (!left_home(slot)) { - motors_off(); - return MOTOR_HOME_FAIL; - } + if (!start_motor(slot)) return MOTOR_HOME_FAIL; while (1) { if (motor_overcurrent()) {