국내 최초 국가기술자격증 전문 사이트! - 올배움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,213

번호 강좌명 제목
2753 건설재료시험기사(김현우) 기출 2010 1회 8번 (기본적인것들 질문합니다ㅠㅠ) (1)
2752 가스산업기사(최갑규) 12년 4회 7번 (1)
2751 건설재료시험기사(김현우) 콘크리트 슬럼프시험 (1)
2750 건축기사 20년책 636페이지 6장 철골공사 핵심필수문제 3번 질문입니다 (1)
2749 전자산업기사(박성호) 교수님 2과제에 대해 2가지 질문이 있습니다. (1)
2748 전자산업기사(박성호) 유형1번 질문 (1)
2747 건설재료시험기사(김현우) 물결합재비 보정 (1)
2746 콘크리트산업기사(김현우) 시험장관련 (1)
2745 식품기사(박대준) 강의 10강에 나오는 크로마토그래피의 원리와 고정상에 대한 질문입니다. (1)
2744 건설재료시험기사(김현우) 시간-압밀량작도 (1)
   136  137  138  139  140  141  142  143  144  145  146  147  148  149  150