/*
원본 링크 : https://rockjjy.tistory.com/2393
원본 + wokwi : https://wokwi.com/projects/384536791359481857
변경 코드에는 풀업 모드 및 버튼 제어코드가 포함 됩니다.
*/
#include <Servo.h>
Servo myservo;
const int LEFT_BUTTON_PIN = 3;
const int MIDDLE_BUTTON_PIN = 4;
const int RIGHT_BUTTON_PIN = 5;
const int SERVO_MOTOR_PIN = 9;
void setup()
{
Serial.begin(9600);
pinMode(LEFT_BUTTON_PIN, INPUT_PULLUP);
pinMode(MIDDLE_BUTTON_PIN, INPUT_PULLUP);
pinMode(RIGHT_BUTTON_PIN, INPUT_PULLUP);
myservo.attach(SERVO_MOTOR_PIN);
myservo.write(0);
delay(1000);
}
void loop()
{
bool leftButtonPressed = isButtonPressed(LEFT_BUTTON_PIN);
bool middleButtonPressed = isButtonPressed(MIDDLE_BUTTON_PIN);
// bool rightButtonPressed = isButtonPressed(RIGHT_BUTTON_PIN);
Serial.print("left:");
Serial.print(leftButtonPressed);
Serial.print(" | middle: ");
Serial.println(middleButtonPressed);
// if(leftButtonPressed == HIGH)
// {
// myservo.write(90);
// delay(800);
// }
// else {
// myservo.write(20);
// }
if(middleButtonPressed == HIGH)
{
myservo.write(90);
delay(800);
}
else {
myservo.write(20);
}
// if(leftButtonPressed == HIGH)
// {
// myservo.write(90);
// delay(800);
// }
// else {
// myservo.write(20);
// }
// else if ( middleButtonPressed)
// {
// myservo.write(150);
// delay(800);
// }
// else if ( rightButtonPressed)
// {
// myservo.write(30);
// }
//isButtonPressed();
}
int isButtonPressed(int buttonPin)
{
static bool currentButtonState = HIGH;
static bool previousButtonState = HIGH;
static unsigned long previousMillis = 0;
static int count = 0;
const int DEBOUNCE_DELAY = 50; // ms
bool returnButtonState = LOW;
currentButtonState = digitalRead(buttonPin);
if (currentButtonState == LOW && currentButtonState != previousButtonState)
{
previousMillis = millis();
}
if (millis() - previousMillis > DEBOUNCE_DELAY)
{
if (currentButtonState != previousButtonState)
{
previousButtonState = currentButtonState;
if(currentButtonState == HIGH)
{
returnButtonState = HIGH;
}
}
}
previousButtonState = currentButtonState;
return returnButtonState;
// ?Serial.println(returnButtonState);
}