BASIC4MCU | 질문게시판 | 답변 : 아두이노 입문자 과제 중인데 막혔습니다 ㅜㅜ
페이지 정보
작성자 master 작성일2022-12-01 07:57 조회621회 댓글3건본문
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
//
#include <DHT.h>
#define DHTPIN 4 // 온습도센서 모듈 핀
#define DHTTYPE DHT11 // 센서타입
DHT dht(DHTPIN,DHTTYPE);
//
#include <Emotion_Farm.h> // 이모티콘
//
#include <IRremote.h>
int RE=13;
IRrecv irrecv(RE);
decode_results results;
//
const int cdsPin=A1; // 조도센서
const int Waterlevel=A0; // 토양수분센서
const int relayPin=3; // 생장 led
const int A=8,MA=7,MB=6;
//
char str_M[10],str_T[10],str_H[10]; // 문자열 변수
bool cds_chk=0,t_chk=0;
bool pump_status=0;
long t,t1=0,t2=0;
//
void setup(){
pinMode(relayPin,OUTPUT); pinMode(A,OUTPUT); pinMode(MA,OUTPUT); pinMode(MB,OUTPUT);
//
lcd.begin(); lcd.clear(); lcd.noBacklight(); delay(500); lcd.backlight(); delay(500); // 인트로
lcd.setCursor(0,0); lcd.print("Capstone design"); delay(2000);
lcd.setCursor(0,1); lcd.print("SMART hydroponics"); delay(2000);
lcd.clear();
// 특수 문자 및 이모티콘
lcd.createChar(0,temp); lcd.createChar(1,C); lcd.createChar(2,humi); lcd.createChar(3,Qmark);
lcd.createChar(4,water); lcd.createChar(5,good); lcd.createChar(6,wind);
//
irrecv.enableIRIn();
Serial.begin(9600);
}
//
void loop(){
t=millis();
//--------------------------------------------
if(irrecv.decode(&results)){
Serial.println(results.value,HEX);
if (results.value==0xFF30CF){ cds_chk=0; digitalWrite(relayPin,1); } // 수동
else if(results.value==0xFF18E7){ cds_chk=0; digitalWrite(relayPin,0); } // 수동
else if(results.value==0xff7A85){ cds_chk=1; } // 조도센서 자동모드
//
else if(results.value==0xFF10EF){ t_chk=0; digitalWrite(A,0); } // 수동
else if(results.value==0xFF38c7){ t_chk=0; digitalWrite(A,1); } // 수동
else if(results.value==0xFF5AA5){ t_chk=1; } // 온도센서 자동모드
irrecv.resume();
}
//--------------------------------------------
if(t-t1>=1000){ t1=t; // 1초 주기로 실행
int cdsValue=analogRead(cdsPin); // 조도센서
//
if(cds_chk){ // 조도센서 자동모드
if(cdsValue<400)digitalWrite(relayPin,0); else digitalWrite(relayPin,1);
}
//--------------------------------------------
unsigned char h_Value=dht.readHumidity();
unsigned char t_Value=dht.readTemperature();
//
if(t_chk){ // 온도센서 자동모드
if(t_Value>=29)digitalWrite(A,0); else digitalWrite(A,1);
}
//--------------------------------------------
sprintf(str_M,"%03d",Waterlevel_per); lcd.setCursor(1,0); lcd.print("Water Lv:"); lcd.print(str_M); lcd.print("% "); // 수위
sprintf(str_T,"%02d",t_Value); lcd.setCursor(1,1); lcd.write(0); lcd.setCursor(3,1); lcd.print(str_T); lcd.write(1); // 온도
sprintf(str_H,"%02d",h_Value); lcd.setCursor(7,1); lcd.write(2); lcd.setCursor(9,1); lcd.print(str_H); lcd.print("% "); // 습도
//--------------------------------------------
if (Waterlevel_per<30){ lcd.setCursor(13,0); lcd.write(3); lcd.setCursor(14,0); lcd.write(4); } //토양습도 이모티콘
else if(Waterlevel_per<70){ lcd.setCursor(13,0); lcd.print(" "); lcd.setCursor(14,0); lcd.write(5); }
else { lcd.setCursor(13,0); lcd.write(3); lcd.setCursor(14,0); lcd.write(6); }
}
//--------------------------------------------
if(t-t2>=3000){ t2=t; // 3초 주기로 실행
int soilmoistureValue=analogRead(Waterlevel); // 수위
int Waterlevel_per=map(soilmoistureValue,170,1023,100,0); // 퍼센트
//
if(Waterlevel_per>50){ pump_status=0; digitalWrite(MA,0); }
else{
pump_status=!pump_status;
if(pump_status)digitalWrite(MA,1); else digitalWrite(MA,0);
}
}
}
댓글 3
조회수 621링여님의 댓글
링여 작성일감사합니다 많은 부분 도움 되었습니다. 마지막으로 한 가지만 여쭤봐도 될까요>??? 모터가 도는 타이밍에는 리모컨이 안 먹다가 모터가 멈춰 있을떄 잘 먹는데 이거는 전압 문제일까요??
master님의 댓글
master
전류부족으로 인한 전압 강하 요인이 있을 수도 있고
노이즈로 인해서 오동작 할 수도 있겠죠
링여님의 댓글
링여
진짜 감사드립니다. 해결 방법이 보이기 시작했습니다