질문게시판 > 아두이노 코드 합치기 문의

TODAY797 TOTAL340,660
사이트 이용안내
Login▼/회원가입
최신글보기 질문게시판 기술자료 동영상강좌

아두이노 센서 ATMEGA128 PWM LED 초음파 AVR 블루투스 LCD UART 모터 적외선


BASIC4MCU | 질문게시판 | 아두이노 코드 합치기 문의

페이지 정보

작성자 월랑 작성일2018-12-06 23:51 조회33회 댓글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이 출력이 되도록  만들고 싶습니다.

코드 합치는 것과 따로 수정해야될것이 있으면 가르쳐 주실수 있으신가요?

 

 

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

댓글 0

조회수 33

등록된 댓글이 없습니다.

질문게시판HOME > 질문게시판 목록

MCU, AVR, 아두이노 등 전자공학에 관련된 질문을 무료회원가입 후 작성해주시면 전문가가 답변해드립니다.
ATMEGA128PWMLED초음파
아두이노AVR블루투스LCD
UART모터적외선ATMEGA
전체 스위치 센서
게시물 검색

Privacy Policy
MCU BASIC ⓒ 2017
모바일버전으로보기