BASIC4MCU | 질문게시판 | 아두이노 입문자 과제 중인데 막혔습니다 ㅜㅜ
페이지 정보
작성자 링여 작성일2022-11-30 21:49 조회881회 댓글0건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=21926
본문
요약 : 물 펌프 모터가 돌기 시작하면 적외선 리모컨이 먹통이 됩니다.
if(irrecv.decode(&results))
{Serial.println(results.value, HEX);
irrecv.resume();}
if(results.value == 0xFF30CF) {
digitalWrite(relayPin,HIGH);
}
else if(results.value == 0xFF18E7){
digitalWrite(relayPin,LOW);
}
else if(results.value == 0xff7A85){
if(cdsValue < 400){
digitalWrite(relayPin, LOW);
}
else if(cdsValue >= 400){
digitalWrite(relayPin, HIGH);
}
}
여기까지가 리모컨을 이용해서
조도센서가 있는 led를 컨트롤 하는 부분이고요
if(results.value == 0xFF10EF){
digitalWrite(A,LOW);
}
else if(results.value == 0xFF38c7){
digitalWrite(A,HIGH);
}
else if(results.value == 0xFF5AA5){
if(t_Value >= 29){
digitalWrite(A,LOW);
}
else if(t_Value < 29){
digitalWrite(A,HIGH);
}
}
여기까지가 온도 센서와 연동된 선풍기를 리모컨으로 제어하는 부분입니다.if(Waterlevel_per < 50){digitalWrite(MA ,HIGH);digitalWrite(MB ,LOW);delay(3000);digitalWrite(MA,LOW);digitalWrite(MB,LOW);delay(3000);}else{digitalWrite(MA,LOW);digitalWrite(MB,LOW);}그 다음에 마지막으로 넣은물 공급 모터 인데물 공급 모터가 돌아가면 리모컨이 먹통이 됩니다 ;;그러다가 모터가 잠시 멈추거나조건을 만족 시켜서 모터가 안 돌고 있을때는반응이 매우 느려진 상태로 리모컨이 작동하고요.무엇보다 자동화 기능들도 모터가 돌기 시작하면 전부 안 먹네요.리모컨 추가 하기 전에는 따로 전부 잘 작동하던게리모컨 추가하니까 이렇게 됐습니다..;코드에서 꼬인걸까요??아니면 전류 문제일까요...아래부터는 코드 전부입니다#include <Wire.h>#include <LiquidCrystal_I2C.h> // LCD 라이브러리#include <DHT.h> // 온습도 센서 라이브러리#include <Emotion_Farm.h> // 특수 문자 및 이모티콘 라이브러리#include <IRremote.h>// 센서 핀 설정#define relayPin 3 // 생장 led 릴레이 모듈 핀#define cdsPin A1 // 조도센서 모듈 핀#define DHTPIN 4 // 온습도센서 모듈 핀#define DHTTYPE DHT11 // 온습도 센서타입 설정#define Waterlevel A0 // 토양수분센서 핀// 객체 생성LiquidCrystal_I2C lcd(0x27, 16, 2); //LCD 초기화 (LCD 주소값, x축, y축)DHT dht(DHTPIN, DHTTYPE); //온습도 센서 모듈// 문자열을 출력하기 위한 변수char str_M[10];char str_T[10];char str_H[10];int A=8;int MA = 7;int MB = 6;int RE = 13;IRrecv irrecv(RE);decode_results results;void setup() {Serial.begin(9600);irrecv.enableIRIn();pinMode(relayPin, OUTPUT);pinMode(cdsPin, INPUT);pinMode(Waterlevel, INPUT);pinMode(A,OUTPUT);pinMode(MA,OUTPUT);pinMode(MB,OUTPUT);//LCD에 인트로 출력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);}void loop() {//센서값 측정int cdsValue = analogRead(cdsPin); // 조도센서 값 측정: 0 ~ 1023int soilmoistureValue = analogRead(Waterlevel); // 수위 측정: 0 ~ 1023int Waterlevel_per = map(soilmoistureValue, 170, 1023, 100, 0); // 센서 값을 퍼센트로 변경unsigned char h_Value = dht.readHumidity(); // 습도 값 측정unsigned char t_Value = dht.readTemperature(); // 온도 값 측정if(irrecv.decode(&results)){Serial.println(results.value, HEX);irrecv.resume();}if(results.value == 0xFF30CF) {digitalWrite(relayPin,HIGH);}else if(results.value == 0xFF18E7){digitalWrite(relayPin,LOW);}else if(results.value == 0xff7A85){if(cdsValue < 400){digitalWrite(relayPin, LOW);}else if(cdsValue >= 400){digitalWrite(relayPin, HIGH);}}if(results.value == 0xFF10EF){digitalWrite(A,LOW);}else if(results.value == 0xFF38c7){digitalWrite(A,HIGH);}else if(results.value == 0xFF5AA5){if(t_Value >= 29){digitalWrite(A,LOW);}else if(t_Value < 29){digitalWrite(A,HIGH);}}if(Waterlevel_per < 50){digitalWrite(MA ,HIGH);digitalWrite(MB ,LOW);delay(3000);digitalWrite(MA,LOW);digitalWrite(MB,LOW);delay(3000);}else{digitalWrite(MA,LOW);digitalWrite(MB,LOW);}//LCD에 수위 값 출력lcd.setCursor(1,0);lcd.print("Water Lv:");sprintf(str_M, "%03d", Waterlevel_per);lcd.print(str_M);lcd.setCursor(10,0);lcd.print("%");//LCD에 온도값 출력lcd.setCursor(1,1);lcd.write(0);sprintf(str_T, "%02d", t_Value);lcd.setCursor(3,1);lcd.print(str_T);lcd.write(1);//LCD에 습도값 출력lcd.setCursor(7,1);lcd.write(2);sprintf(str_H, "%02d", h_Value);lcd.setCursor(9,1);lcd.print(str_H);lcd.print("%");//토양습도 값에 따른 LCD에 이모티콘 띄우기if(Waterlevel_per >= 0 && Waterlevel_per < 30){lcd.setCursor(13,0);lcd.write(3);lcd.setCursor(14,0);lcd.write(4);}else if(Waterlevel_per >= 30 && Waterlevel_per < 70){lcd.setCursor(13,0);lcd.print(" ");lcd.setCursor(14,0);lcd.write(5);}else if(Waterlevel_per >= 70){lcd.setCursor(13,0);lcd.write(3);lcd.setCursor(14,0);lcd.write(6);}delay(500);}
댓글 0
조회수 881등록된 댓글이 없습니다.