BASIC4MCU | 질문게시판 | 답변 : 시리얼 모니터 문의
페이지 정보
작성자 master 작성일2018-12-07 13:45 조회6,387회 댓글0건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=6507
본문
// MCU BASIC: https://www.basic4mcu.com// DateTime : 2018-12-07 오후 1:47:21// 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.print(" ");lcd.setCursor(0,1); lcd.print("Duty_rate: "); lcd.setCursor(10,1); lcd.print(Duty_rate); lcd.print("% ");}
LCD 뒤에 %% 두개는
3.22% 이렇게 출력되다가
3.1% 이렇게 출력되면
먼저 출력했던 %가 남아서 보이는겁니다.
lcd.print(Duty_rate,1);
이렇게 고쳐서 돌려보세요.(실수형을 소숫점 이하 1자리 출력)//
[??]는 특수문자를 출력하지 못하나봅니다.
Serial.print(" Ω \t"); Serial.print(" 옴 \t");
Serial.print(" ℃ \t"); Serial.print(" 도 \t");
한글도 출력하지 못하는지 체크해보세요
댓글 0
조회수 6,387등록된 댓글이 없습니다.