형님들 진지하게 도움을 주세여 ㅠㅠ 앱 인벤터로 만든 앱으로 아두이노 우노로 값을 보내도 값을 못받아내요 ㅠㅠ 코딩 문제가 있는건지 수정해야 할 부분이 있는지 알려주세요 ㅠㅠ


/* 스마트 화분 관리기 */

/* 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);

}