int trigPin = 13; int echoPin = 12; int led1 = 11; int led2 = 10; int led3 = 9; unsigned long Time; //mills를 사용하기 위해 시간변수를 줍니다 int enable = 1; int i = 0; void setup() { Serial.begin(9600); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); //트리거 핀과 에코핀을 각각 발신과 수신으로 설정합니다. pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); pinMode(led3, OUTPUT); //LED 핀들을 전부 출력 핀으로 설정합니다. Time = millis(); } int state = 0; void loop() { long duration, distance; digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); distance = duration / 1600; //초음파 센서로 거리를 재는 코드입니다. distance = duration /1600;에서 굳이 1600이 아니더라도 적당한 거리를 재신 후 나누었을때 결과 값이 가능한 한 1자리수로 나올 수 있도록 설정하여 주세요 if (distance >= 1) { distance = 1; } Serial.println(distance); delay (50); //duration 을 1600으로 나누었으나 0과 1 뿐만이 아닌 그 이상의 값이 나왔을 때를 대비하기 위해 distance가 1 이상이면 distance는 1이 되도록 설정하였습니다. if (!distance) { if (state == 0) { state = 1; } } //만약 distance의 값이 반전되었을때 state의 값이 0이라면 state의 값을 1로 만들어 주는 함수입니다. //눌렀다가 떼면 반응하는 스위치를 만들때 자주 사용합니다. else { if (state == 1) { i += 1; i = (i > 3 ? 0 : i); } state = 0; } Serial.println(i); //또는 만약 state의 값이 1이라면 숫자를 1씩 더해주도록 합니다. 삼항 연산자를 사용하여 i가 3보다 커지면 0이 되도록 하였습니다. if (i == 0) { digitalWrite(led1, LOW); digitalWrite(led2, LOW); digitalWrite(led3, LOW); } //i가 0일때 LED를 전부 끕니다. else if (i == 1) { digitalWrite(led1, HIGH); digitalWrite(led2, LOW); digitalWrite(led3, LOW); } //i가 1일때 LED를 하나 켭니다.
else if (i == 2) { digitalWrite(led1, HIGH); digitalWrite(led2, HIGH); digitalWrite(led3, LOW); //i가 2일때 LED를 둘 켭니다. } else if (i == 3) { digitalWrite(led1, HIGH); digitalWrite(led2, HIGH); digitalWrite(led3, HIGH); //i가 3일때 LED를 셋 켭니다.
} } |
최신댓글