BASIC4MCU | 질문게시판 | 답변 : 아두이노 코드 합치기 문의
페이지 정보
작성자 master 작성일2018-12-07 00:29 조회4,584회 댓글1건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=6477
본문
// MCU BASIC: https://www.basic4mcu.com// DateTime : 2018-12-07 오전 12:35:09// by Ok-Hyun Park//#include <LiquidCrystal.h>const int rs=12,en=11,d4=5,d5=4,d6=3,d7=2;LiquidCrystal lcd(7,8,9,10,11,12);//#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 출력핀 설정//int Buzzer=13;int Sensor=4;//int val;int count=0;//void setup(void){pinMode(Buzzer,OUTPUT);pinMode(Sensor,INPUT);pinMode(PWM_out,OUTPUT);lcd.begin(16,2);Serial.begin(9600);}//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_TempTemp=1.0/Temp; // 역수 취함.Temp-=273.15; // 화씨에서 섭씨로 바꿈.unsigned char k=Temp; // float형 Temp값을 char형 k값으로 치환if(k<=Temp_set_value)PWM_data=0; // 온도설정값 이하일 때,PWM_out=OFFelse if(k<(Temp_set_value+25)){ // 온도설정값 이상일 때,PWM_out=k*10,k-=Temp_set_value;PWM_data=k*10;}else PWM_data=255; // 온도설정값+25℃의 값 이상일 때,PWM_out=255(최대값)//val=digitalRead(Sensor); // 센서값 읽어옴if(val){ // 장애물 감지가 안되면noTone(13); // 버저가 울리지 않는다}else{ // 장애물이 감지되면tone(13,220); // 버저가 울린다PWM_data=25; // 255의 10%는 25}analogWrite(PWM_out,PWM_data); // PWM_out에 PWM_data만큼의 아날로그 신호 출력//unsigned char Duty_rate=(PWM_data*100)/255; // Duty rate 계산if((count<2)&&(Duty_rate>0)&&(Duty_rate<10))Duty_rate==10; // 1~10 사이면 10으로if(count<4)count++;//Serial.print("NTC Value: "); Serial.print(Value,3); Serial.print("[Ω]\t");Serial.print("Temperature: "); Serial.print(Temp); Serial.print("[℃]\t");Serial.print("Temp_Setting_Value: "); Serial.print(Temp_set_value); Serial.print("[℃]\t");Serial.print("Duty_rate: "); Serial.print(Duty_rate); Serial.println("[%]");delay(500);lcd.setCursor(0,0); lcd.print("Temp: "); lcd.setCursor( 5,0); lcd.print(Temp);lcd.setCursor(0,1); lcd.print("Duty_rate: "); lcd.setCursor(10,1); lcd.print(Duty_rate); lcd.print("%");}
댓글 1
조회수 4,584월랑님의 댓글
월랑 작성일
else{ // 장애물이 감지되면
tone(13,220); // 버저가 울린다
PWM_data=25; // 255의 10%는 25
1. 이 부분으로 장애물이 감지되었을 경우 Duty_rate 가 10%로 나오는것으로 생각되는데 맞는것입니까?
2. 또한 장애물이 감지되었을 경우 Duty_rate가 0으로 출력되는것을 원한다면 PWM_data=25; 부분의 25를 0으로 바꾸면 되는것인가요 ?
3. 또한 Duty_rate의 결과값이 lcd부분에 소수점자리까지 계산되어 나오도록 하는경우도 부탁드려도될까요 ?