BASIC4MCU | 질문게시판 | 아두이노 스마트 가습기 만드는중인데 코딩좀 알려주세요,,
페이지 정보
작성자 아두이노안드로이드 작성일2020-06-19 16:25 조회2,678회 댓글0건본문
#include<LiquidCrystal_I2C.h>
#include<Wire.h>
LiquidCrystal_I2C lcd(0x27, 16,2);
#include "DHT.h"
#include <SoftwareSerial.h>
#define DHTPIN A3
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);int atomizationPin = 6;
int RelayPin = 4;
int AutoModeRelayLimit = 50;
int RelayState = 0;SoftwareSerial hc06(2,3);
const int buttonPin1 = 10;
const int buttonPin2 = 11;
const int buttonPin3 = 12;
const int buttonPin4 = 13;int buttonState1 = 0;
int buttonState2 = 0;
int buttonState3 = 0;
int buttonState4 = 0;int intDelay = 400;
int setMode = 0;
int ModeVal1 = 0;
int ModeVal2 = 0;float h;
float t;
float f;
char strH[] ="";
char strT[] ="";
char strHT[] ="";
void setup() {
Serial.begin(9600);
Serial.println("Enter AT commands:");
hc06.begin(9600);
dht.begin();lcd.begin();
lcd.backlight();pinMode(buttonPin1, INPUT_PULLUP);
pinMode(buttonPin2, INPUT_PULLUP);
pinMode(buttonPin3, INPUT_PULLUP);
pinMode(buttonPin4, INPUT_PULLUP);setMode = 0;
pinMode(RelayPin, OUTPUT);
pinMode(atomizationPin, OUTPUT);
}void loop() {
if(hc06.available()){
Serial.write(hc06.read());
}if(Serial.available()){
hc06.write(Serial.read());
}
buttonState1=0;
buttonState2=0;
buttonState3=0;
buttonState4=0;buttonState1 = digitalRead(buttonPin1);
buttonState2 = digitalRead(buttonPin2);
buttonState3 = digitalRead(buttonPin3);
buttonState4 = digitalRead(buttonPin4);FuncButtonClickEvent();
FuncPrintDisplay();
}
void FuncGetDHT(){delay(100);
h = dht.readHumidity();
t = dht.readTemperature();
f = dht.readTemperature(true);if(isnan(h) || isnan(t) || isnan(f)){
Serial.println(F("Failed to read from DHT sensor!"));
h = 0.00;
t = 0.00;
f = 0.00;
return;
}float hif = dht.computeHeatIndex(f, h);
float hic = dht.computeHeatIndex(f, h, false);
}void FuncPrintDisplay(){
FuncGetDHT();
if( setMode == 0){
FuncLCDPrint(0, 0, "Temp, Humid ");
String strVal = "T:" + String(t) + ", H:" + String(h);
FuncLCDPrint(1, 0, strVal);
}else if ( setMode == 1 ){
FuncLCDPrint(0, 0, "Maual Mode");String OnOff = "OFF";
if( RelayState == 1 ) {
OnOff = "ON ";
}String strVal = "Switch : " + OnOff;
FuncLCDPrint(1, 0, strVal);
}else if( setMode == 2){
String strTVal = "AutoModeSet: " + String(AutoModeRelayLimit) + " ";
FuncLCDPrint(0, 0, strTVal);String strVal = "Humidity : " + String(h) + " ";
FuncLCDPrint(1, 0, strVal);
if(AutoModeRelayLimit > h){
digitalWrite(RelayPin,HIGH);
RelayState = 1;
}
else {
digitalWrite(RelayPin,LOW);
RelayState = 0;
}
}
}void FuncLCDPrint(int xLine, int xPoint, String xStr)
{
lcd.setCursor(xPoint, xLine);
lcd.print(xStr);
}void FuncButtonClickEvent() {
if(buttonState1 == HIGH ){
if( setMode == 0 ){
setMode = 1;
} else if ( setMode == 1 ) {
setMode = 2;
} else if ( setMode == 2 ) {
setMode = 0;
} else {
setMode = 0;
}
lcd.clear(); delay(intDelay);
}
else if (buttonState2 == HIGH) {
if ( setMode == 1) {
if( RelayState == 0 ){
digitalWrite(RelayPin,HIGH); RelayState = 1;
} else {
digitalWrite(RelayPin,LOW); RelayState = 0;
}
}
if( setMode == 2 ){
if(AutoModeRelayLimit < 100 ) {
AutoModeRelayLimit = AutoModeRelayLimit + 5;
} else{
AutoModeRelayLimit = 0;
}
}
}
else if (buttonState3 == HIGH) {
if ( setMode == 2 ) {
if(AutoModeRelayLimit > 0 ) {
AutoModeRelayLimit = AutoModeRelayLimit - 5;
} else {
AutoModeRelayLimit = 0;
}
}
}
else if (buttonState4 == HIGH) {
ModeVal1 = 0; ModeVal2 = 0; setMode = 0;
lcd.clear(); delay(intDelay);
}
if(h > AutoModeRelayLimit){
digitalWrite(atomizationPin,LOW);
}
else if(h <= AutoModeRelayLimit){
digitalWrite(atomizationPin,HIGH);
}
}
이게 제가 짠 가습기 인데요
if(buttonState1 == HIGH ){
if( setMode == 0 ){
setMode = 1;
} else if ( setMode == 1 ) {
setMode = 2;
} else if ( setMode == 2 ) {
setMode = 0;
} else {
setMode = 0;
}
lcd.clear(); delay(intDelay);
}이 부분에서 제가 4버튼 써서 1번 버튼 누르면 모드변경 하게 해놨는데 이제 블루투스 연결해서 핸드폰에서 1값을 보내면 모드 변경이 되게랑 온,습도 값을 아두에노에서 받아서 핸드폰에 뜨게 보내주는 방법좀 알려주세요 ㅜㅜ 너무어렵네용..
댓글 0
조회수 2,678등록된 댓글이 없습니다.