질문게시판 > 답변 : 코드 해석 문의

인기검색어 > 아두이노 센서 ATMEGA128

최신글 질문게시판 동영상강좌 가입하기

▼ BASIC4MCU 후원업체 신제품 정보 ▼

▲ BASIC4MCU 후원업체 신제품 정보 ▲

BASIC4MCU > 질문게시판

답변 : 코드 해석 문의

페이지 정보

작성자 master 작성일18-12-08 23:53 조회5,685회 댓글0건

본문

#define Temp_set A0              // 온도 설정의 위한 아날로그 입력
#define NTC A1                   // 온도 측정의 위한 아날로그 입력
#define Ref_Resistor 10000       // NTC에 연결된 직렬 저항값
#define B_Value 4200             // NTC 10KD-5J의 B값
#define NTC_Nomal_Temp 25        // NTC 10KD-5J의 기준 온도값
#define NTC_Nomal_Resistor 10000 // NTC 10KD-5J의 기준 온도에서의 저항값
#define PWM_out 3                // PWM 출력핀 설정
unsigned char fan=0;
void setup(void) {
  Serial.begin(9600);            // 시리얼포트 설정
  pinMode(PWM_out, OUTPUT);            // 디지털 6번핀을 출력모드로 설정.
}

void loop(void) {
  float Value, Temp; unsigned char PWM_data; unsigned int Temp_set_value;
  Temp_set_value = analogRead(Temp_set);// 온도설정값 A/D변환
  Temp_set_value /= 10;                 // 온도설정값/10로 하여 0~51까지 조정되게 함.
   Value = analogRead(NTC);              // NTC값 A/D변환
  Value = Ref_Resistor / (1023 / Value - 1); // A/D값은 = x*1023/5로 전압값 구함.

  // Stein Hart 방정식에 의한 온도값 산출
  Temp = Value / NTC_Nomal_Resistor;    // (R/Ro)
  Temp = log(Temp);                     // log(R/Ro)
  Temp /= B_Value;                      // 1/B * log(R/Ro)
  Temp += 1.0/(NTC_Nomal_Temp + 273.15); //  {1/B * log(R/Ro)} +(1/To), To = 273.15 + NTC_Nomal_Temp
  Temp = 1.0 / Temp;                    // 역수 취함.
  Temp -= 273.15;                       // 화씨에서 섭씨로 바꿈.

  unsigned char k = Temp;               // float형 Temp값을 char형 k값으로 치환

  if (k <= Temp_set_value){ PWM_data = 0;   fan=0;}  // 온도설정값 이하일 때,  PWM_out = OFF
  else if (k < (Temp_set_value + 25)) { //온도설정값 이상일 때, PWM_out = k*10,
    if(fan==0){
       analogWrite(PWM_out, 200);
       delay(200);
       fan=1;
    }
    k -= Temp_set_value;
    PWM_data = k * 10;
         
  }
  else PWM_data = 255;             // 온도설정값+25℃의 값 이상일 때, PWM_out = 255(최대값)
 analogWrite(PWM_out, PWM_data);   // PWM_out에 PWM_data만큼의 아날로그 신호 출력
 unsigned char Duty_rate = (PWM_data*100)/255;  // Duty rate 계산

 // A/D 변환된 NTC저항값 출력
  Serial.print("NTC Value : "); Serial.print(Value, 3); Serial.print("[Ω]" ); Serial.print("\t");

 // 현재 온도 출력
  Serial.print("Temperature : "); Serial.print(Temp); Serial.print("[℃]"); Serial.print("\t");

 // 온도 설정값 출력
  Serial.print("Temp_Setting_Value : "); Serial.print(Temp_set_value); Serial.print("[℃]");
  Serial.print("\t");

 // PWM의 Duty rate값 출력
  Serial.print("Duty_rate : "); Serial.print(Duty_rate); Serial.println("[%]");

  delay(500);
}

 

--------------------------------------------------------------

빨간 부분이 들어가므로써 하는 미치는 영향을 알고싶어요

부분적으로 해석좀 부탁드립니다. 

 

//

 

 

// MCU BASIC: https://www.basic4mcu.com
// DateTime : 2018-12-08 오후 11:45:53
// by Ok-Hyun Park
//
#define Temp_set           A0    // 온도 설정의 위한 아날로그 입력
#define NTC                A1    // 온도 측정의 위한 아날로그 입력
#define Ref_Resistor       10000 // NTC에 연결된 직렬 저항값
#define B_Value            4200  // NTC 10KD-5J의 B값
#define NTC_Nomal_Temp     25    // NTC 10KD-5J의 기준 온도값
#define NTC_Nomal_Resistor 10000 // NTC 10KD-5J의 기준 온도에서의 저항값
#define PWM_out            3     // PWM 출력핀 설정
unsigned char fan=0;
//
void setup(void){
  Serial.begin(9600); // 시리얼포트 설정
  pinMode(PWM_out,OUTPUT); // 디지털 6번핀을 출력모드로 설정.
}
//
void loop(void){
  float Value,Tempunsigned char PWM_dataunsigned int Temp_set_value;
  Temp_set_value=analogRead(Temp_set); // 온도설정값 A/D변환
  Temp_set_value/=10;                  // 온도설정값/10로 하여 0~51까지 조정되게 함.
  Value=analogRead(NTC);               // NTC값 A/D변환
  Value=Ref_Resistor/(1023/Value-1);   // A/D값은=x*1023/5로 전압값 구함.
                                       // Stein Hart 방정식에 의한 온도값 산출
  Temp=Value/NTC_Nomal_Resistor;       // (R/Ro)
  Temp=log(Temp);                      // log(R/Ro)
  Temp/=B_Value;                       // 1/B*log(R/Ro)
  Temp+=1.0/(NTC_Nomal_Temp+273.15);   // (1/B*log(R/Ro))+(1/To),To=273.15+NTC_Nomal_Temp
  Temp=1.0/Temp;                       // 역수 취함.
  Temp-=273.15;                        // 화씨에서 섭씨로 바꿈.
  unsigned char k=Temp;                // float형 Temp값을 char형 k값으로 치환
  //
  if     (k<=Temp_set_value    ){ PWM_data=0fan=0; } // 온도설정값 이하일 때,PWM_out=OFF
  else if(k<(Temp_set_value+25)){                      // 온도설정값 이상일 때,PWM_out=k*10,
    if(fan==0){ fan=1;
      analogWrite(PWM_out,200); delay(200);
    }
    k-=Temp_set_value;
    PWM_data=k*10;
  }
  else PWM_data=255;                          // 온도설정값+25℃의 값 이상일 때,PWM_out=255(최대값)
  analogWrite(PWM_out,PWM_data);              // PWM_out에 PWM_data만큼의 아날로그 신호 출력
  unsigned char Duty_rate=(PWM_data*100)/255// Duty rate 계산
  // A/D 변환된 NTC저항값 출력
  Serial.print("NTC Value: "); Serial.print(Value,3); Serial.print("[Ω]"); Serial.print("\t");
  // 현재 온도 출력
  Serial.print("Temperature: "); Serial.print(Temp); Serial.print("[℃]"); Serial.print("\t");
  // 온도 설정값 출력
  Serial.print("Temp_Setting_Value: "); Serial.print(Temp_set_value); Serial.print("[℃]");
  Serial.print("\t");
  // PWM의 Duty rate값 출력
  Serial.print("Duty_rate: "); Serial.print(Duty_rate); Serial.println("[%]");
  delay(500);
}
//
--------------------------------------------------------------
빨간 부분이 들어가므로써 하는 미치는 영향을 알고싶어요
부분적으로 해석좀 부탁드립니다.

 

 

unsigned char flag=0;
//
  if(digitalRead(2)==HIGH){ // 스위치를 눌렀다면
    if(flag==0){ flag=1;    // 스위치를 오래 누르고 있어도 1회만 동작시키기 위해서 flag를 사용함
      tone(BUZ,200); delay(200); noTone(BUZ);
    }
  }
  elseflag=0; } // 스위치를 누르지 않았다면 flag 변수 초기화

스위치를 오래 누르고 있어도 1회만 동작시키기 위해서 위와 같은 코드를 흔히 사용합니다. 

 

unsigned char flag=0;
//
  if     (digitalRead(2)==LOW ){ flag=0; } // 스위치를 누르지 않았다면 flag 변수 초기화
  else if(digitalRead(2)==HIGH){           // 스위치를 눌렀다면
    if(flag==0){ flag=1;                   // 스위치를 오래 누르고 있어도 1회만 동작시키기 위해서 flag를 사용함
      tone(BUZ,200); delay(200); noTone(BUZ);
    }
  }

질문 소스는 else와 if 위치가 바뀌어 있어서 이런 형태와 유사합니다.

analogWrite(PWM_out,200); delay(200); 

출력을 최소 200ms 주기 위해서 사용하고 있습니다.

 

fan 변수가 flag 변수와 같은 기능입니다. 

 

  • BASIC4MCU 작성글 SNS에 공유하기
  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기
  • 카카오톡으로 보내기

댓글 : 0

조회수 : 5,685

등록된 댓글이 없습니다.

게시물 검색

BASIC4MCU > 질문게시판 목록

제목 날짜
공지 MCU, AVR, 아두이노 등 전자공학에 관련된 질문은… 스태프  19-01-15
공지 사이트 이용 안내 댓글[25] master  17-10-29
질문 앱인벤터 list index too large 오류 질… 첨부파일PT규 새글 22-07-07
질문 Atmega IO핀 출력 상태 질문이요.. 댓글[3] chelsea 새글 22-07-06
답변 답변 : Atmega IO핀 출력 상태 질문이요.. 댓글[6] master 새글 22-07-06
질문 아두이노 센서 쉴드 v5.0 과 음성인식 모듈(V2)통… 댓글[6] 첨부파일AutoSun  22-07-05
질문 초음파 센서를 사용한 dc모터 제어에 관해 질문 있습니… 첨부파일뉴비에오  22-07-04
답변 답변 : 초음파 센서를 사용한 dc모터 제어에 관해 질… 댓글[2] master  22-07-05
질문 아두이노 Sensor Shield 5.0 시리얼 통신 … 댓글[2] AutoSun  22-07-04
질문 Atmega 코드 좀 봐주세요. 댓글[1] 첨부파일chelsea  22-07-04
질문 아두이노 while문 탈출 질문 yhj2644  22-07-01
답변 답변 : 아두이노 while문 탈출 질문 댓글[8] master  22-07-01
질문 ESP32-C3 리튬폴리머 ADC 전압 체크 관련 문의… 댓글[3] cansad  22-06-30
질문 ESP32-C3 리튬폴리머 ADC 전압 체크 관련 문의 댓글[3] cansad  22-06-30
질문 빵판없이 디스플레이 넣을 수 있을까요? 댓글[2] 첨부파일오소로롯  22-06-29
질문 라즈베리파이4 신형 선택문제 댓글[1] maximum  22-06-26
질문 음전압 ADC 댓글[2] 412904  22-06-26
질문 아두이노 센서값 출력 질문입니다! 댓글[1] 아궁2  22-06-24
질문 ATmega128, ATmega28 RS232통신 첨부파일Moon4201  22-06-24
답변 답변 : ATmega128, ATmega28 RS232… 댓글[1] master  22-06-25
질문 서보모터, 온습도센서 코드 질문 댓글[2] 첨부파일kshdlfaldfh  22-06-22
답변 답변 : 서보모터, 온습도센서 코드 질문 댓글[15] master  22-06-22
질문 steppermulti5 질문 응애  22-06-21
답변 답변 : steppermulti5 질문 댓글[1] master  22-06-22
질문 atmega128 avr usart 질문 snoflak  22-06-21
답변 답변 : atmega128 avr usart 질문 댓글[5] master  22-06-21
질문 사용자 정의 함수 변환 하는 방법 댓글[2] 첨부파일da0800  22-06-21
질문 atmega128 댓글[1] 양의노래  22-06-20
질문 아두이노 동시동작 재질문 댓글[9] 첨부파일죠르디  22-06-20
질문 초음파센서로 dc모터 제어하기 댓글[1] 첨부파일난쟁2  22-06-20
게시물 검색


Privacy Policy
MCU BASIC ⓒ 2017
PC버전