5. 모터 전진, 후진, 스톱 (엔드스탑)




class Button {
  int pinNum;
  int prevState;
public:
  Button(int pin) {
    pinNum = pin;
    prevState = LOW;
  }

  boolean isPressed() {
    int currState = digitalRead(pinNum);
    if(prevState == LOW && currState == HIGH) return true;
    return false;
  }

  void loop() {
    prevState = digitalRead(pinNum);
  }
};

int PIN_BUTTON_LEFT = 8;
int PIN_BUTTON_RIGHT = 9;
int PIN_BUTTON_STOP = 10;
int PIN_MOTOR_L = 12;
int PIN_MOTOR_R = 13;

void setup() {
  pinMode(PIN_BUTTON_LEFT, INPUT);
  pinMode(PIN_BUTTON_RIGHT, INPUT);
  pinMode(PIN_BUTTON_STOP, INPUT);
  pinMode(PIN_MOTOR_L, OUTPUT);
  pinMode(PIN_MOTOR_R, OUTPUT);
}

Button left(PIN_BUTTON_LEFT);
Button right(PIN_BUTTON_RIGHT);
Button stop(PIN_BUTTON_STOP);
int motorL = LOW, motorR = LOW;

void loop() {
  if(left.isPressed()) {
    motorL = LOW;
    motorR = HIGH;
  }

  if(right.isPressed()) {
    motorL = HIGH;
    motorR = LOW;
  }

  if(stop.isPressed()) {
    motorL = LOW;
    motorR = LOW;
  }

  digitalWrite(PIN_MOTOR_L, motorL);
  digitalWrite(PIN_MOTOR_R, motorR);

  left.loop();
  right.loop();
  stop.loop();

  delay(100);
}