#include <AccelStepper.h>

// Define motor interface type and pins for 28BYJ-48 (ULN2003)
#define MotorInterfaceType 8 // 8 = Half-step mode 4 = full step
#define hMtr1 5 // hour motor
#define hMtr2 18
#define hMtr3 19
#define hMtr4 21

#define mMtr1 33 // minute motor
#define mMtr2 32
#define mMtr3 22
#define mMtr4 23
#define hh 39 // hour hall effect sensor
#define mh 36 // minute hall effect sensor
int mRead, hRead; // hall effect sensor values
AccelStepper hStep(MotorInterfaceType, hMtr1, hMtr3, hMtr2, hMtr4);
AccelStepper mStep(MotorInterfaceType, mMtr1, mMtr3, mMtr2, mMtr4);

char val;
char testing = 'n';// testing case status 'n' = none

void setup() {
  Serial.begin (115200);
  pinMode(mh, INPUT);
  pinMode(hh, INPUT);
  hStep.setMaxSpeed(1000.0);
  hStep.setAcceleration(800.0);
  hStep.setSpeed(600);
  mStep.setMaxSpeed(1000.0);
  mStep.setAcceleration(800.0);
  mStep.setSpeed(600);//
  // start looking for 12:00 position
  Serial.println("Enter 'h' for hour, 'm' for minute, 'x' for none.");
}

void loop() {
  // look for character from keyboard
  if (Serial.available() > 0) {
    val = Serial.read();
    if (val == 'h') {
      testing = 'h';
      Serial.println("Running Hour motor.");
    } else if (val == 'm') {
      testing = 'm';
      Serial.println("Running Hour motor.");
    } else if (val == 'x') {
      testing = 'n';
      Serial.println("Motors OFF.");
    }
  }
  if (testing == 'h') {
    hRead = digitalRead(hh); //sample the hall effect sensor
    Serial.print("   hh: ");
    Serial.println(hRead);
    while (hRead == LOW) {
      Serial.println("    HOUR HAND FOUND");
      delay(50);
      hStep.move(400);
      hStep.run();
      hRead = digitalRead(hh);
      Serial.print("hh: ");
      Serial.println(hRead);
    }
  } else if (testing == 'm') {
    mRead = digitalRead(mh); //sample the hall effect sensor
    while (mRead == LOW) {
      Serial.println("        MINUTE HAND FOUND");
      delay(50);
      mStep.move(400);
      mStep.runSpeed();
      mRead = digitalRead(mh);
      Serial.print("mh: ");
      Serial.println(mRead);
    }
  }
  delay(10);
  if (testing == 'h') hStep.runSpeed();
  if (testing == 'm') mStep.runSpeed();
}
