게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
아두이노 코딩좀 도와주세요..
게시물ID : programmer_23386짧은주소 복사하기
작성자 : 박용
추천 : 0
조회수 : 2029회
댓글수 : 3개
등록시간 : 2023/01/26 13:30:55

안녕하세요 ...

아두이노 작업중인데 ... 몇날몇일을 밤새고 머리 쥐어싸매도 답이 안나와서 도움요청드립니다 ㅠㅠㅠㅠ

 

원래 RFID까지 적용 예정이였는데 ... RFID 불량품이 와버려서 삭제할 예정입니당..

 

 


 

KakaoTalk_20230126_132038686.png

 

아두이노로 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문


```

꼬릿말 보기
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호