BASIC4MCU | 질문게시판 | 답변 : 아두이노 질문있습니다.
페이지 정보
작성자 master 작성일2022-06-15 14:12 조회697회 댓글1건본문
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
#include <SoftwareSerial.h>
SoftwareSerial BTSerial(2,3);
#include <DHT.h>
#define DHTPIN 7
#define DHTTYPE DHT11
DHT dht(DHTPIN,DHTTYPE);
// 가습기 모듈
int hum_pin=6;
// 온습도,블루투스 오토
int h,t;
int AUTO=1; //초기값 자동모드
// 수위센서 ,led
int sensor=A0;
int red=12,yellow=5,green=4;
//조도센서 + RGB
float RGB[3];
int ldrpin=1,ambientLight;
int redLed=9,greenLed=10,blueLed=11;
//
void setup(){
BTSerial.begin(9600);
Serial.begin(9600);
dht.begin();
lcd.init();
pinMode(hum_pin,OUTPUT);
pinMode(12,OUTPUT); pinMode(5,OUTPUT); pinMode(4,OUTPUT); // 수위센서 LED
pinMode(redLed,OUTPUT); pinMode(greenLed,OUTPUT); pinMode(blueLed,OUTPUT); // RGB
digitalWrite(redLed,0); digitalWrite(greenLed,0); digitalWrite(blueLed,0);
}
//
void loop(){
if(AUTO){
delay(100);
h=dht.readHumidity();
t=dht.readTemperature();
if(h<60){ digitalWrite(hum_pin,1); }
else { digitalWrite(hum_pin,0); }
}
//
if(BTSerial.available()){
char bt=BTSerial.read();
if(bt=='1'){ AUTO=0; digitalWrite(hum_pin,1); } // 수동모드
if(bt=='2'){ AUTO=0; digitalWrite(hum_pin,0); } // 수동모드
if(bt=='3'){ AUTO=1; } // 자동모드
}
lcd.backlight(); lcd.display();
lcd.setCursor(5,0); lcd.print("Temp: "); lcd.print(t); lcd.print(" C");
lcd.setCursor(5,1); lcd.print("Humi: "); lcd.print(h); lcd.print(" %");
Serial.print("습도: "); Serial.print(h);
Serial.print("온도: "); Serial.print(t); Serial.println();
//
int val=analogRead(A0); // 수위센서
Serial.println(val);
//
if (val>=600){ digitalWrite(12,0); digitalWrite(5,0); digitalWrite(4,1); }
else if(val>=450){ digitalWrite(12,0); digitalWrite(5,1); digitalWrite(4,0); }
else { digitalWrite(12,1); digitalWrite(5,0); digitalWrite(4,0); }
//
for(float x=0;x<PI;x=x+0.00001){
RGB[0]=255*abs(sin(x*(180/PI))); RGB[1]=255*abs(sin((x+PI/3)*(180/PI))); RGB[2]=255*abs(sin((x+(2*PI)/3)*(180/PI)));
ambientLight=analogRead(ldrpin);
if(ambientLight>600){ analogWrite(redLed,RGB[0]); analogWrite(greenLed,RGB[1]); analogWrite(blueLed,RGB[2]); }
else { analogWrite(redLed, 0); analogWrite(greenLed, 0); analogWrite(blueLed, 0); }
}
}
일단 딜레이는 제거했습니다.
//
제일 마지막에 보면
for(float x=0;x<PI;x=x+0.00001){
RGB[0]=255*abs(sin(x*(180/PI))); RGB[1]=255*abs(sin((x+PI/3)*(180/PI))); RGB[2]=255*abs(sin((x+(2*PI)/3)*(180/PI)));
ambientLight=analogRead(ldrpin);
if(ambientLight>600){ analogWrite(redLed,RGB[0]); analogWrite(greenLed,RGB[1]); analogWrite(blueLed,RGB[2]); }
else { analogWrite(redLed, 0); analogWrite(greenLed, 0); analogWrite(blueLed, 0); }
}
이 루프문의 실행 속도에 문제가 있습니다.for(float x=0;x<PI;x=x+0.00001){
PI=3.1415926535897932384626433832795x=x+0.00001PI/0.00001=314159루프 횟수가 너무 많습니다.4분=240초루프 시간을 1초로 줄이려면 240으로 나눠주면 됩니다.x=x+0.00240이렇게 변경하면 되는 것이죠for(float x=0;x<PI;x=x+0.0024){
이렇게 수정해서 돌려보세요
댓글 1
조회수 697Alpaka님의 댓글
Alpaka 작성일감사합니다 정상적으로 작동합니다!!!!