형님들 진지하게 도움을 주세여 ㅠㅠ 앱 인벤터로 만든 앱으로 아두이노 우노로 값을 보내도 값을 못받아내요 ㅠㅠ 코딩 문제가 있는건지 수정해야 할 부분이 있는지 알려주세요 ㅠㅠ
/* 스마트 화분 관리기 */
/* 4~5시간? */
/* 들어가는 센서 종류 : 온습도 센서, 조도 센서, 토양 수분 센서, 릴레이 모듈, LCD 모듈, 생장 LED */
/* 필요한 기능
* 1. 조도 센서를 이용해서 자연광을 측정하고, 자연광의 강도가 낮아지면 생장 LED를 켜서 화분의 식물을 관리한다.
* 2. 온습도 센서를 이용해서 화분 주변 환경의 온습도를 측정한다.
* 3. 토양 수분 센서를 이용해 토양의 수분을 측정한다.
* 4. 릴레이 모듈을 생장 LED와 연결하여 조도 센서값에 따라 생장 LED가 켜질 수 있도록 한다.
* 5. LCD 모듈을 통해서 온습도 센서와 토양 수분 센서 측정 값을 출력한다.
*/
#include <SoftwareSerial.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h> // LCD 모듈 라이브러리
#include <DHT.h> // 온습도 센서 모듈 라이브러리
#include <Emotion_Farm.h> // 특수 문자 및 이모티콘 라이브러리
#include <Adafruit_NeoPixel.h>
Adafruit_NeoPixel RGB_LED = Adafruit_NeoPixel(25, 2, NEO_GRB); // 픽셀수 : 25, 핀번호 : 13으로
SoftwareSerial Bluetooth(0,1);
#define cdsPin A1 // 센서 핀 설정
#define DHTPIN 4 // 온습도센서 모듈 핀
#define DHTTYPE DHT11 // 온습도 센서타입 설정
#define soilmoisturePin A0 // 토양수분센서 핀
// 객체 생성
LiquidCrystal_I2C lcd(0x27, 16, 2); //LCD 초기화 (LCD 주소값, x축, y축)
DHT dht(DHTPIN, DHTTYPE); //온습도 센서 모듈
int sec = 0;
int min = 0;
int hour =0;
int counter =0;
int SetWaterPump = 0;
char SetWaterPumpCycle;
int SetSoilHumidity;
int SetCycle = 0;
int NeoPixel = 0;
int AA = 5;
int AB = 6;
// 문자열을 출력하기 위한 변수
char str_M+;
char str_T+;
char str_H+;
void setup() {
Serial.begin(9600);
Bluetooth.begin(9600);
RGB_LED.begin(); // RGB_LED 불러옵니다.
RGB_LED.setBrightness(5); // RGB_LED 밝기조절
RGB_LED.clear(); // RGB_LED 초기화합니다.
pinMode(AA, OUTPUT); //5,6번핀, 워터펌프
pinMode(AB, OUTPUT);
pinMode(cdsPin, INPUT);
pinMode(soilmoisturePin, INPUT);
//LCD에 인트로 출력
lcd.begin();
lcd.clear();
lcd.noBacklight();
delay(500);
lcd.backlight();
delay(500);
lcd.setCursor(2,0);
lcd.print("AUTO");
delay(1000);
lcd.setCursor(8,0);
lcd.print("GARDEN");
delay(1000);
lcd.setCursor(0,1);
lcd.print("INJE UNIVERSITY");
delay(1000);
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() {
Serial.flush();
if(Bluetooth.available()>0)
{
SetWaterPump = Bluetooth.read();
Serial.println(SetWaterPump);
}
if (Bluetooth.available() > 0) {
// 버퍼에 데이터가 있는 경우
// 데이터를 읽고 처리하는 코드를 작성하세요
int data = Bluetooth.read();
// 읽은 데이터에 대한 추가적인 처리를 수행하세요
Serial.println(data);
}
//센서값 측정
int cdsValue = analogRead(cdsPin);
int soilmoistureValue = analogRead(soilmoisturePin); // 토양수분 값 측정: 0(습함) ~ 1023(건조)
int soilmoisture_per = map(soilmoistureValue, 170, 1023, 100, 0); // 센서 값을 퍼센트로 변경
unsigned char h_Value = dht.readHumidity(); // 공기 중 습도 값 측정
unsigned char t_Value = dht.readTemperature(); // 공기 중 온도 값 측정
for(NeoPixel = 0 ;NeoPixel<=24; NeoPixel = NeoPixel+1)
{
RGB_LED.setPixelColor(NeoPixel, 100, 100, 100); // 1번 네오픽셀에 색상을 출력
RGB_LED.show();
}
//LCD에 토양 습도값 출력
lcd.setCursor(1,0);
lcd.print("MOIST:");
sprintf(str_M, "%03d", soilmoisture_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("%");
//led 부분
//토양습도 값에 따른 LCD에 이모티콘 띄우기
if(soilmoisture_per >= 0 && soilmoisture_per < 30){
lcd.setCursor(13,0);
lcd.write(3);
lcd.setCursor(14,0);
lcd.write(4);
}
else if(soilmoisture_per >= 30 && soilmoisture_per < 70){
lcd.setCursor(13,0);
lcd.print(" ");
lcd.setCursor(14,0);
lcd.write(5);
}
else if(soilmoisture_per >= 70){
lcd.setCursor(13,0);
lcd.write(3);
lcd.setCursor(14,0);
lcd.write(6);
}
Serial.print(cdsValue);
Serial.println(soilmoisture_per);
delay(500);
if (SetWaterPump > 24 && soilmoisture_per <= SetWaterPump)
{ //워터펌프 동작 토양습도 값이 설정 습도보다 작을경우
digitalWrite(AA, HIGH);
digitalWrite(AB, LOW);
delay(2000);
digitalWrite(AA, LOW);
digitalWrite(AB, LOW);
delay(2000);
}
if(SetWaterPumpCycle <= 24)
{ // 세팅 사이클이 24보다 작을 경우 ? * Need Fix _ pump && pump Cycle 나눌것?
sec = millis()/1000-60*counter;
if(sec ==60){counter++; min++;}
if(min ==60){min = 0; hour++;}
if(hour < SetWaterPumpCycle){
digitalWrite(AA, HIGH);
digitalWrite(AB, LOW);
delay(2000);
digitalWrite(AA, LOW);
digitalWrite(AB, LOW);
delay(2000);
}
}
else {
digitalWrite(AA, LOW);
digitalWrite(AB, LOW);
}
}
안녕, 앱 인벤터, 아두이노 우노 코딩을 도와줄게! 우선 코드에서 문제가 있는 부분이나 수정할 부분이 있는지 알려줘. 너가 만든 앱으로 아두이노 우노로 값을 보내지만 값을 받지 못하는 거 맞지? 그리고 필요한 센서는 온습도 센서, 조도 센서, 토양 수분 센서, 릴레이 모듈, LCD 모듈, 그리고 생장 LED지? 기능도 1. 조도 센서와 생장 LED로 화분의 식물을 관리하고 2. 온습도 센서로 주변 환경을 측정하며 3. 토양 수분 센서로 토양의 수분을 측정하고 4. 릴레이 모듈로 조도 센서 값에 따라 생장 LED가 켜지도록 하는 거고 5. LCD 모듈로 온습도와 토양 수분 측정 값을 출력하는 거 맞지? 코드에서는 라이브러리를 추가해 사용하고 있고, 블루투스를 이용해서 워터펌프를 작동시켜 토양 습도를 관리하고