안녕하세요 ...
아두이노 작업중인데 ... 몇날몇일을 밤새고 머리 쥐어싸매도 답이 안나와서 도움요청드립니다 ㅠㅠㅠㅠ
원래 RFID까지 적용 예정이였는데 ... RFID 불량품이 와버려서 삭제할 예정입니당..
아두이노로 EM락 2개를 제어해야함.
- 스위치 5개 조합으로 1번 EM락, 2번 EM락 제어를 해야함
- 스위치 조합 : 흰색 + (조합) + 흰색 / 흰색이 시작과 끝을 의미함
문제 사항
- 현재 테스트로 [ W R Y G B W ] 1번 EM락 해제, [ W B G Y R W ] 2번 EM락 해제로 설정해둔 상태
- 1번 EM락 해제까지는 정상 작동 함. 이후 W (4개 스위치 아무거나) W 눌러도 1번 EM락만 해제가 됨.
- 2번 EM락 해제가 안 됨
조건
1. 정답일 경우 파란색 경광등 5초간 회전
2. 오답일 경우 빨강색 경광등 5초간 회전
3. 경광등이 작동중일 경우 스위치를 작동 불가.
4. 경광등 작동 종료된 후 스위치 재입력 가능상태
4. W 스위치는 시작과 끝을 의미함.
5. W 스위치를 누르지 않고 조합을 누를경우 무효.
```cpp
int s1 = 2; //스위치 1 흰색
int s2 = 3; //스위치 2 빨강
int s3 = 4; //스위치 3 노랑
int s4 = 5; //스위치 4 초록
int s5 = 6; //스위치 5 파랑
int em1lock = 7;
int emlock;
int s1c = 0; //스위치1 누른횟수
int s2c = 0; //스위치2 누른횟수
int s3c = 0; //스위치3 누른횟수
int s4c = 0; //스위치4 누른횟수
int s5c = 0; //스위치5 누른횟수
int s1s; //스위치 1 동작정의
int s2s; //스위치 2 동작정의
int s3s; //스위치 3 동작정의
int s4s; //스위치 4 동작정의
int s5s; //스위치 5 동작정의
int timeron = 0; //타이머 on
int start1 = 0; //1번방 동작 시작
int start2 = 0; //2번방 동작 시작
int room1clear = 0; //첫번째방 성공
int room2clear = 0; //두번째방 성공
int act1 = 0; //룸1 첫번째 동작 성공
int act2 = 0; //룸1 두번째 동작 성공
int act3 = 0; //룸1 세번째 동작 성공
int act4 = 0; //룸1 네번째 동작 성공
int act5 = 0; //룸2 첫번째 동작 성공
int act6 = 0; //룸2 두번째 동작 성공
int act7 = 0; //룸2 세번째 동작 성공
int act8 = 0; //룸2 네번째 동작 성공
int sus = 0; //성공
int fail = 0; //실패
int rfidsus = 0;
int rfidfail = 0;
int red = A0; //경광등 빨강
int blue = A1; //경광등 파랑
int em1 = A2; //EmLock 1
int em2 = A3; //EmLock 2
//***************************************************************************************************************************************************************************************************************************
void setup() {
//스위치 1~5 입력모드
pinMode(s1, INPUT);
pinMode(s2, INPUT);
pinMode(s3, INPUT);
pinMode(s4, INPUT);
pinMode(s5, INPUT);
pinMode(em1lock, INPUT);
//A0 빨강 경광등 출력
pinMode(red, OUTPUT);
digitalWrite(red, HIGH);
//A1 파랑 경광등 출력
pinMode(blue, OUTPUT);
digitalWrite(blue, HIGH);
//A2 EmLock1 출력
pinMode(em1, OUTPUT);
digitalWrite(em1, HIGH);
//A3 EmLock2 출력
pinMode(em2, OUTPUT);
digitalWrite(em2, HIGH);
}
//***************************************************************************************************************************************************************************************************************************
void loop()
{
Serial.println("s2c");
Serial.println(s2c);
Serial.println("s3c");
Serial.println(s3c);
Serial.println("s4c");
Serial.println(s4c);
Serial.println("s5c");
Serial.println(s5c);
Serial.println("act5");
Serial.println(act5);
Serial.println("act6");
Serial.println(act6);
Serial.println("act7");
Serial.println(act7);
Serial.println("act8");
Serial.println(act8);
Serial.println("emlock");
Serial.println(emlock);
if (digitalRead(em1lock) == HIGH) {
emlock = 1;
}
else {
emlock = 0 ;
}
//스위치1*******************************************************************************************************************************************************************************************************************
if (digitalRead(s1) == LOW) {
if (s1s == 0) {
delay(50);
s1s = 1;
}
}
if (digitalRead(s1) == HIGH) {
if (s1s == 1) {
start1 += 1;
s2c = 0; //s2c 초기화
s3c = 0; //s3c 초기화
s4c = 0; //s4c 초기화
s5c = 0; //s5c 초기화
act1 = 0; //룸1 첫번째 성공 초기화
act2 = 0; //룸1 두번째 성공 초기화
act3 = 0; //룸1 세번째 성공 초기화
act4 = 0; //룸1 네번째 성공 초기화
act5 = 0; //룸2 첫번째 성공 초기화
act6 = 0; //룸2 두번째 성공 초기화
act7 = 0; //룸2 세번째 성공 초기화
act8 = 0; //룸2 네번째 성공 초기화
delay(100);
s1s = 0;
}
}
//스위치2*******************************************************************************************************************************************************************************************************************
if (digitalRead(s2) == LOW) {
if (s2s == 0) {
delay(50);
s2s = 1;
}
}
if (digitalRead(s2) == HIGH) {
if (s2s == 1) {
s2c += 1;
delay(100);
s2s = 0;
}
}
//스위치3*******************************************************************************************************************************************************************************************************************
if (digitalRead(s3) == LOW) {
if (s3s == 0) {
delay(50);
s3s = 1;
}
}
if (digitalRead(s3) == HIGH) {
if (s3s == 1) {
s3c += 1;
delay(100);
s3s = 0;
}
}
//스위치4*******************************************************************************************************************************************************************************************************************
if (digitalRead(s4) == LOW) {
if (s4s == 0) {
delay(50);
s4s = 1;
}
}
if (digitalRead(s4) == HIGH) {
if (s4s == 1) {
s4c += 1;
delay(100);
s4s = 0;
}
}
//스위치5*******************************************************************************************************************************************************************************************************************
if (digitalRead(s5) == LOW) {
delay(50);
s5s = 1;
}
if (digitalRead(s5) == HIGH) {
if (s5s == 1)
{
s5c += 1;
delay(100);
s5s = 0;
}
}
//1번룸*******************************************************************************************************************************************************************************************************************
if (room1clear == 0 || emlock == 1) {
//흰색 누른 후 빨간색 스위치 1번 눌렀을때
if (start1 == 1 && s2c == 1) {
act1 = 1;
}
//흰색 누른 후 노란색 스위치 1번 눌렀을때
if (act1 == 1 && s3c == 1) {
act2 = 1;
}
//흰색 누른 후 초록색 스위치 1번 눌렀을때
if (act2 == 1 && s4c == 1) {
act3 = 1;
}
//흰색 누른 후 파란색 스위치 1번 눌렀을때
if (act3 == 1 && s5c == 1) {
act4 = 1;
}
//모두 완료 후 하얀색 버튼 눌렀을때
if (act4 == 1 && digitalRead(s1) == HIGH) {
sus = 1;
delay(200);
}
//클리어시
if (sus == 1) {
digitalWrite(em1, LOW);
digitalWrite(blue, LOW);
room1clear = 1;
start1 = 0;
s2c = 0; //s2c 초기화
s3c = 0; //s3c 초기화
s4c = 0; //s4c 초기화
s5c = 0; //s5c 초기화
act1 = 0; //첫번째 성공 초기화
act2 = 0; //두번째 성공 초기화
act3 = 0; //세번째 성공 초기화
act4 = 0; //네번째 성공 초기화
delay(5000);
digitalWrite(em1, HIGH);
digitalWrite(blue, HIGH);
sus = 0;
}
//실패시 하얀색 버튼 눌렀을때
if (act4 == 0 && start1 == 2 && sus == 0) {
s1c = 0; //s1c 초기화
s2c = 0; //s2c 초기화
s3c = 0; //s3c 초기화
s4c = 0; //s4c 초기화
s5c = 0; //s5c 초기화
act1 = 0; //첫번째 성공 초기화
act2 = 0; //두번째 성공 초기화
act3 = 0; //세번째 성공 초기화
act4 = 0; //네번째 성공 초기화
delay(100);
fail = 1;
}
//실패시
if (fail == 1 || timeron == 1) {
digitalWrite(red, LOW);
timeron = 0;
fail = 0;
delay(5000);
digitalWrite(red, HIGH);
start1 = 0; //스타트 초기화
}
}
//2번룸*******************************************************************************************************************************************************************************************************************
if (room1clear == 1 && emlock == 0) {
//흰색 누른 후 파란색 스위치 1번 눌렀을때
if (start1 == 1 && s5c == 1) {
act5 = 1;
}
//흰색 누른 후 초록색 스위치 1번 눌렀을때
if (act5 == 1 && s4c == 1) {
act6 = 1;
} else {
s4c = 0;
}
//흰색 누른 후 노란색 스위치 1번 눌렀을때
if (act6 == 1 && s3c == 1) {
act7 = 1;
}
//흰색 누른 후 빨간색 스위치 1번 눌렀을때
if (act7 == 1 && s2c == 1) {
act8 = 1;
}
//모두 완료 후 하얀색 버튼 눌렀을때
if (act8 == 1 && digitalRead(s1) == HIGH) {
sus = 2;
delay(200);
}
//클리어시
if (sus == 2) {
digitalWrite(blue, LOW);
room2clear = 1;
start1 = 0;
s2c = 0; //s2c 초기화
s3c = 0; //s3c 초기화
s4c = 0; //s4c 초기화
s5c = 0; //s5c 초기화
act5 = 0; //첫번째 성공 초기화
act6 = 0; //두번째 성공 초기화
act7 = 0; //세번째 성공 초기화
act8 = 0; //네번째 성공 초기화
delay(10000);
digitalWrite(blue, HIGH);
sus = 0;
}
//rfid까지 성공
if (sus == 2 && rfidsus == 1) {
digitalWrite(em2, LOW);
digitalWrite(blue, LOW);
room2clear = 1;
start1 = 0;
delay(10000);
digitalWrite(em2, HIGH);
digitalWrite(blue, HIGH);
sus = 0;
}
//실패시 하얀색 버튼 눌렀을때
if (act8 == 0 && start1 == 2 && sus == 0) {
s1c = 0; //s1c 초기화
s2c = 0; //s2c 초기화
s3c = 0; //s3c 초기화
s4c = 0; //s4c 초기화
s5c = 0; //s5c 초기화
act5 = 0; //첫번째 성공 초기화
act6 = 0; //두번째 성공 초기화
act7 = 0; //세번째 성공 초기화
act8 = 0; //네번째 성공 초기화
delay(100);
fail = 1;
}
//실패시
if (fail == 1 || timeron == 1) {
digitalWrite(red, LOW);
timeron = 0;
fail = 0;
delay(5000);
digitalWrite(red, HIGH);
start1 = 0; //스타트 초기화
}
}
//RFID*******************************************************************************************************************************************************************************************************************
} //loop문
```