BASIC4MCU | 질문게시판 | 아두이노 코드 합치기 문의
페이지 정보
작성자 월랑 작성일2018-12-06 23:51 조회3,749회 댓글0건본문
#include <LiquidCrystal.h>
#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 출력핀 설정
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
int count=0;void setup(void) {
Serial.begin(9600); // 시리얼포트 설정
pinMode(PWM_out, OUTPUT); // 디지털 6번핀을 출력모드로 설정.
lcd.begin(16, 2);
}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; // 온도설정값 이하일 때, PWM_out = OFF
else 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(최대값)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++;
// 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);
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("%");
}
--------------------------------------------------------------------------------------------
int Buzzer = 13; // 버저 핀을 13번에 연결
int Sensor = 4; // 센서핀은 4번에 연결
int val;
void setup () {
pinMode(Buzzer, OUTPUT); // 버저를 출력으로 설정
pinMode(Sensor, INPUT); // 센서값을 입력으로 설정
}
void loop () {
val = digitalRead(Sensor); // 센서값 읽어옴
if (val == HIGH) // 장애물 감지가 안되면
{
noTone(13); // 버저가 울리지 않는다
delay(100);
}
else // 장애물이 감지되면
{
tone(13,220); // 버저가 울린다
delay(100);
}
}------------------------------------------------------------------------------------------
위 두 코드를 합쳐서 장애물이 감지가 되면 부저가 울리며 듀티비가 0이 출력이 되도록 만들고 싶습니다.
코드 합치는 것과 따로 수정해야될것이 있으면 가르쳐 주실수 있으신가요?
댓글 0
조회수 3,749등록된 댓글이 없습니다.