국내 최초 국가기술자격증 전문 사이트! - 올배움kisa


저작권지킴이

저작권지킴이 캠페인안내

고객센터

고객센터

메뉴 바로가기

쇼셜 바로가기

  • 유튜브-국가기술자격증TV
  • 올배움kisa 페이스북
  • 올배움kisa 인스타그램
  • kisa 블로그
  • 올배움kisa - 카카오톡 채널
  • 인터넷 원서접수 - 큐넷
  • 네이버카페-자격증 닷컴
  1. >
  2. 커뮤니티
  3. >
  4. 베스트 질문 답변

베스트 질문 답변

 
작성일 : 21-10-25 21:33
 
[전자산업기사(박성호)] 교수님 2과제에 대해 2가지 질문이 있습니다.
   온도.mp4 (1.3M) [3]
   뒤로가기.mp4 (3.0M) [1]

1. 첫번째 영상을 보시면 교수님처럼 온도센서가 고정된 값이 아니라 이리저리 값이 바뀌는데 왜그런건가요?? VCC,GND,아날로그핀은 이상없이 연결하였습니다.

2. 두번째는 sw1버튼을 뒤로가기로 활용할 때 어쩔땐 한번만 눌러도 뒤로가지는 반면 어쩔 때에는 여러번 눌러야 뒤로가지는 현상이 나는데 이점 또한 궁금합니다! 

TEMP 부분과 SW부분 코드 같이 첨부하겠습니다.

 

TEMP-----------------------------------------------------------------------------------------------------

  temp_value = analogRead(temp_pin) ;

  temp = 0.488155 * (temp_value - 20) ;

  delay(500) ;

  lcd.setCursor(0,0) ;

  lcd.print("T:") ;

  lcd.print(temp,2) ;

  lcd.print("C") ;

 

SWICH-----------------------------------------------------------------------------------------------------

 

void sw_mode_setup()

{

  pinMode(sw1, INPUT) ;

  pinMode(sw2, INPUT) ;

  pinMode(sw3, INPUT) ;

}


void sw_reset()      // SW1 3초간 누를경우 초기화 구문

{                    // SW1을 누를경우 LOW값과 1ms마다 증가하는 reset_timer 변수 값이 3000이하까지 반복

  while(!s_state1 && reset_timer++ <= 3000)

  {

    s_state1 = digitalRead(sw1); //SW1번 현재상태 감지

    delayMicroseconds(1000) ; //1ms 딜레이

    if(reset_timer == 3000)   // 총 3초간 SW1을 눌렀을 경우

    {

      start_flag = 1;  //MAIN 탭 LOOP구문에서 초기화 및 초기동작 실행

    }

  }

  reset_timer = 0 ; // WHILE 문에서 빠져나올 경우 reset_timer 변수 초기화

}


void sw_mode_1()

{

  s_state1 = digitalRead(sw1) ; // 현재상태감지

  if(old_state1 != s_state1) // 클럭감지, 기존값이 현재 값과 다를 경우 만족

  {

    old_state1 = s_state1 ; // 현재값이 기존값이 되었으므로

    if(s_state1 == HIGH)    // 상승엣지 스위치를 눌렀다 뗄 경우

    {

      // SW2가 눌리지 않은 상태에서의 SW1동작, 시계모드와 센서모드 선택 가능

      if(sw2_pulse_flag == 0 && sw2_sensor_flag == 0)

      {

        sw_flag_1++ ; // 스위치를 뗄떼마다 값을 1씩 증가

        if(sw_flag_1 > 1) // 2가지경우, 0과 1만 사용

        {

          sw_flag_1 = 0 ;   // 2가되면 0으로 초기화, 오버플로우 방지

        }

        if(sw_flag_1 % 2 == 1) // 0과 1의 값을 나눈 변수를 2로 나눈 나머지 값을 이용

        {                    // 처음 SW1을 누르면 SW_flag 값은 1

          sw1_pulse_flag = 1;  // 모드선택화면, B_ACT 탭에서 시계모드 LCD 동작

          sw1_sensor_flag = 0; // 센서모드 LCD 미동작

        }

         

        else   //SW_FALG 값이 0일 경우 동작

        {

          sw1_sensor_flag = 1; // 모드선택화면, B_ACT 탭에서 센서모드 LCD 동작

          sw1_pulse_flag = 0; // 시계모드 LCD 미동작

        }

      }

         //SW 2번을 눌러 시계모드 동작 중일 경우 뒤로 가기 기능

      if(sw2_pulse_flag == 1)

      {

        sw1_pulse_flag = 1 ; // 모드 선택화면 B_ACT 탭에서 시계모드 LCD 동작

        sw2_pulse_flag = 0 ; // 시계모드 C_Clock 동작 멈춤

      }

      

       //SW 2번을 눌러 센서모드 동작 중일 경우 뒤로 가기 기능

      if(sw2_sensor_flag == 1)

      {

        sw1_sensor_flag = 1 ; // 모드 선택홤면 B_ACT 탭에서 센서모드 LCD 동작

        sw2_sensor_flag = 0 ; // 센서모드 D_sensor 동작 멈춤 

        sw3_select_flag = 0 ; // 센서모드 내에서 모드 변경 값 초기화 

      }

    }

  }


  sw_reset() ; //SW1번 리셋동작함수실행

}

void sw_mode_2()

{

  s_state2 = digitalRead(sw2) ; // 현재 상태감지 

  if(old_state2 != s_state2)    // 클럭감지 기존 값이 현재 값과 다를 경우 만족

  {

    old_state2 = s_state2;      // 현재 값이 기존 값이 되었으므로

    if(s_state2 == HIGH)        // 상승엣지, 스위치를 눌렀다 뗄 경우

    {

      if(sw1_pulse_flag == 1)  // SW1번으로 B_act 탭에서 시계모드 LCD 동작 중일 경우

      {

        sw2_pulse_flag = 1;    // 시계모드 동작

        timer_flag = 1;        // 처음 시계모드 동작시 초기동작 활성화

      }


      if(sw1_sensor_flag == 1) // SW1번으로 B_act 탭에서 센서모드 LCD 동작 중일 경우

      {

        sw2_sensor_flag = 1;   // 센서모드 동작

      }

    }

  }

}


void sw_mode_3()

{

  s_state3 = digitalRead(sw3) ; // 현재 상태 감지

  if(old_state3 != s_state3)    // 클럭감지, 기존 값과 현재 값이 다를 경우 만족

  {

    old_state3 = s_state3;      // 현재 값이 기존 값이 되었으므로

    if(s_state3 == HIGH)        // 상승엣지, 스위치를 눌렀다 뗄 경우

    {

      s_state1 = 0;

      s_state2 = 0;

      s_state3 = 0;

      sw_flag_1 = 1;

      sw_flag_2 = 0;

      sw_flag_3 = 0;

      old_state1 = 1;          // 풀업 회로이므로 SW를 누르면 LOW 값을 입력 받기에

      old_state2 = 1;          // 기존 값을 HIGH로 세팅

      old_state3 = 1;


      sw1_pulse_flag = 1;

      sw1_sensor_flag = 0;

      sw2_pulse_flag = 0;

      sw2_sensor_flag = 0;

    }

  }

}


올배움 21-10-26 09:15
 
안녕하세요.

1. 온도센서의 경우에는 핀연결을 temp, cds 를 서로 반대로 연결을 하셨거나
아니면 온도센서의 고장으로 보입니다. 온도센서는 소모품이라서 그런 경우가 간혹가다 있습니다.

2. 스위치를 가끔 여러번 눌러야 화면이 바뀐다고 하셨는데 q-net에서 공지한 스위치 같은 경우에는 저가형 스위치라서 가끔 신호가 잘 안갈때가 있습니다. 스위치를 천천히 눌러도 되니까 꾹 눌렀다가 떼어 보시면 정상작동 할 것으로 보입니다.

회원님께서 올려주신 코드로 테스트를 해봤지만 이상 없이 동작되는 것을 확인했습니다.
 

Total 4,084

번호 강좌명 제목
2764 측량및지형공간정보기사 664쪽 2번 문제 문의드립니다. (1)
2763 식품산업기사(박대준) 오늘 시험봤는데 구두문제 답 알려주세욤 (1)
2762 건축기사 20년책 761페이지 문제 10번 질문 입니다. 4강 철근콘크리트 구조-1 (1)
2761 화약취급기능사(이정훈) dbt 문제풀이 2012년 4회차 1번 문항과 3번 문항 풀이과정좀 부탁드립니다. (1)
2760 건축설비산업기사(김성태) 등각투상도
2759 건축설비산업기사(김성태)    등각투상도
2758 수질관리기술사(조용덕) 수질관리기술사 제6장 도수 및 송수/기타 기술사 필기관련 질문드립니다 (1)
2757 가스산업기사(최갑규) 자분탐상시험 단점에 대해 알려주세요 (1)
2756 조경기능사(임권희) 실기 도면 질문
2755 조경기능사(임권희)    실기 도면 질문
   121  122  123  124  125  126  127  128  129  130  131  132  133  134  135