0% found this document useful (0 votes)
213 views

Bantam Earth Paludarium Code

This document contains Arduino code for a paludarium (vivarium with both land and water areas). It defines libraries, pins, variables, and functions for controlling LEDs, relays, sensors, and a display. The code initializes components, reads sensor data, controls lighting effects, and provides a menu interface on the LCD display.

Uploaded by

Bantam Earth
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as RTF, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
213 views

Bantam Earth Paludarium Code

This document contains Arduino code for a paludarium (vivarium with both land and water areas). It defines libraries, pins, variables, and functions for controlling LEDs, relays, sensors, and a display. The code initializes components, reads sensor data, controls lighting effects, and provides a menu interface on the LCD display.

Uploaded by

Bantam Earth
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as RTF, PDF, TXT or read online on Scribd
You are on page 1/ 75

//*****************************************************************************

***********************************************//

// BANTAM.EARTH //

// Paludarium Arduino Code //

// https://bantam.earth/ //

//*****************************************************************************
***********************************************//

//---------------------------------------------------

// 1. Libreries

//---------------------------------------------------

#include "Arduino.h"

#include <DFRobotDFPlayerMini.h>

#include <Wire.h>

#include <dht.h>

#include <math.h>

#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

//----------------------------------------------------

// 2. Pins

//----------------------------------------------------

dht DHT;

DFRobotDFPlayerMini myDFPlayer;

#define xPin A1

#define yPin A2

#define kPin 12
#define DHT11_PIN 11 //assign DHT11 to pin

#define StormLED 10

#define StarsLED 9

#define Fish1LED 8

#define Fish2LED 7

#define SkyL1LED 6

#define SkyL2LED 5

#define SkyL3LED 3

#define SkyL4LED 2

#define RelayPin1 52

#define RelayPin2 50

#define RelayPin3 48

#define RelayPin4 46

#define RelayPin5 44

#define RelayPin6 42

#define RelayPin7 40

#define RelayPin8 38

//----------------------------------------------------

// 3. Variables & commands

//----------------------------------------------------

int buusyPin = 23;// buusyPin = 23; // sound player busy

int bsy = 0;

int sensorPin = A3; // Audio level samples

int sensorValue = 0;
boolean isPlaying = false;

//Bluetooth

byte dataFromBT;

byte State;

int FanState = 0;

int FogState = 0;

int RainState = 0;

int SunState = 0;

int BaskState = 0;

int SkyState = 0;

//String string;

//char command;

//int RESET = 7;

//Read LED values

int StormLEDPos = 0;

int StarsLEDPos = 0;

int FishLED1Pos = 0;

int FishLED2Pos = 0;

int SkyL1LEDPos = 0;

int SkyL2LEDPos = 0;

int SkyL3LEDPos = 0;

int SkyL4LEDPos = 0;

//Store LED values

int StormLEDSet = 0;

int StarsLEDSet = 0;
int FishLED1Set = 0;

int FishLED2Set = 0;

int SkyL1LEDSet = 0;

int SkyL2LEDSet = 0;

int SkyL3LEDSet = 0;

int SkyL4LEDSet = 0;

//Storm Values

unsigned long previousCloudMillis = 0;

unsigned long CloudInterval = 2000; //Desired wait time

unsigned long CloudreadTime = 0;

int CloudBrightness = 0;

int StormSpeed = 1;

int CloudBrightnessMax = 35;

int CloudBrightnessMin = 10;

//Variables for auto scroll

unsigned long previousMillis = 0;

unsigned long interval = 10000; //Desired wait time 10 seconds

unsigned long readTime;

//Assign thermistor to pin

int ThermistorPin = 0;

int Vo;

float R1 = 10000;

float logR2, R2, WaterTemp, AirTemp;

float c1 = 1.009249522e-03, c2 = 2.378405444e-04, c3 = 2.019202697e-07;

int tCount1;
bool refresh;//lcd clear On/Of

//ReadJoystick

int joyRead;

int joyPos;

int lastJoyPos;

int joyButtonPushed;

long lastDebounceTime = 0;

long debounceDelay = 70; //user define

int pushedTime = 0;

//Counters to change positions of pages and sub-menus

int pages=7 ; //number of pages

int page_counter=1 ; //To move between pages

int subpage_counter=0; //To move submenu 1 RGB

int subpage2_counter=0; //To move submenu 2 Led

//-------Dead Pins-----//

int up = 4; //Up/Yes button

int sel = 4; //Select button

int down = 4; //Down/No button

//---------Storage states of buttons for debounce function-----//

boolean current_sel = LOW;

boolean last_sel = LOW;

//--------Relay states-----------//

boolean relay1_state = HIGH;

boolean relay2_state = HIGH;

boolean relay3_state = HIGH;


boolean relay4_state = HIGH;

boolean relay5_state = HIGH;

boolean relay6_state = HIGH;

boolean relay7_state = HIGH;

boolean relay8_state = HIGH;

//Custom return char

byte back[8] = {

0b00100,

0b01000,

0b11111,

0b01001,

0b00101,

0b00001,

0b00001,

0b11111

};

//Custom arrow char

byte arrow[8] = {

0b01000,

0b00100,

0b00010,

0b11111,

0b00010,

0b00100,

0b01000,
0b00000

};

//=============================================================================
==============================================

// SETUP

//=============================================================================
==============================================

void setup() {

//----------------------------------------------------

// S1. Pins

//----------------------------------------------------

pinMode(buusyPin, INPUT);

//assign LED pins as output signal

pinMode(StormLED,OUTPUT);

pinMode(StarsLED,OUTPUT);

pinMode(Fish1LED,OUTPUT);

pinMode(Fish2LED,OUTPUT);

pinMode(SkyL1LED,OUTPUT);

pinMode(SkyL2LED,OUTPUT);

pinMode(SkyL3LED,OUTPUT);

pinMode(SkyL4LED,OUTPUT);

//assign Joystick pins as output signal

pinMode(xPin, INPUT);

pinMode(yPin, INPUT);

pinMode(kPin, INPUT_PULLUP);

//assign Relay pins as outgoing signal


pinMode(RelayPin1, OUTPUT);

pinMode(RelayPin2, OUTPUT);

pinMode(RelayPin3, OUTPUT);

pinMode(RelayPin4, OUTPUT);

pinMode(RelayPin5, OUTPUT);

pinMode(RelayPin6, OUTPUT);

pinMode(RelayPin7, OUTPUT);

pinMode(RelayPin8, OUTPUT);

//----------------------------------------------------

// S2. Objects

//----------------------------------------------------

resetallrelays();

//start intro message

//start serial for debug

Serial2.begin(9600);

Serial1.begin(9600);

Serial.begin(9600); // connect to the serial port

//Serial.println();

//Serial.println(F("DFRobot DFPlayer Mini Demo"));

// Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)"));

if (!myDFPlayer.begin(Serial2)) { //Use softwareSerial to communicate with mp3.

//Serial.println(F("Unable to begin:"));

//Serial.println(F("1.Please recheck the connection!"));


// Serial.println(F("2.Please insert the SD card!"));

else{

//Serial.println(F("DFPlayer Mini online."));

myDFPlayer.setTimeOut(500); //Set serial communictaion time out 500ms

//myDFPlayer.reset();

myDFPlayer.volume (20); // must remove mp3_reset(); to get this to work

myDFPlayer.volumeUp(); //Volume Up

myDFPlayer.volumeDown(); //Volume Down

myDFPlayer.play(4);

lcd.begin(20,4);

lcd.createChar(1, back);

lcd.createChar(2, arrow);

lcd.backlight(); // finish with backlight on

lcd.setCursor(4,1);

lcd.print("Bantam.Earth");

lcd.setCursor(8,3);

lcd.print("v1.10");

delay(3000);

lcd.clear();

readTime = 0;

myDFPlayer.play(1);
}

//=============================================================================
==============================================

// LOOP

//=============================================================================
==============================================

void loop() {

if (myDFPlayer.available()) {

printDetail(myDFPlayer.readType(), myDFPlayer.read()); //Print the detail message from


DFPlayer to handle diferent errors and states.

if(millis() > readTime+1500){

updatestatistics();

readJoystick();

navigationFunctioner();

myMenu();

relayStates();

bluetooth();

if(subpage2_counter < 5){

clearSkyMode();

//if (isPlaying == true) {

// myDFPlayer.stop();

// isPlaying = false;

// }println

}
else{

cloudySkyMode();

if(page_counter !=1){

autoGoBackToHomePage();

//=============================================================================
==============================================

// CHECK SYSTEM STATS

//=============================================================================
==============================================

void updatestatistics(){

readTime = millis();

//read air temperature & humidity

int chk = DHT.read11(DHT11_PIN);

AirTemp = DHT.temperature;

AirTemp *= 1.8;

AirTemp += 30;

//read water temperature

Vo = analogRead(ThermistorPin);

R2 = R1 * (1023.0 / (float)Vo - 1.0);

logR2 = log(R2);

WaterTemp = (1.0 / (c1 + c2*logR2 + c3*logR2*logR2*logR2));


WaterTemp = WaterTemp - 273.15;

WaterTemp = (WaterTemp * 9.0)/ 5.0 + 32.0;

byte Air = AirTemp;

byte Humidity = DHT.humidity;

byte Water = WaterTemp;

Serial1.print("Stats:");

Serial1.print((int)Air);

//Serial1.print(" F");

Serial1.print("|");

Serial1.print((int)Humidity);

//Serial1.print(" %");

Serial1.print("|");

Serial1.print((int)Water);

//Serial1.print(" F");

Serial1.print("|");

if(subpage2_counter == 0){

Serial1.print("Sky Disabled");

else if(subpage2_counter == 1){

Serial1.print("Morning");

else if(subpage2_counter == 2){

Serial1.print("Noon");

}
else if(subpage2_counter == 3){

Serial1.print("Evening");

else if(subpage2_counter == 4){

Serial1.print("Night");

else if(subpage2_counter == 5){

Serial1.print("Storm");

Serial1.print("StatsEnd");

byte FanMode = FanState;

byte FogMode = FogState;

byte RainMode = RainState;

byte SunMode = SunState;

byte BaskMode = BaskState;

byte SkyMode = SkyState;

Serial1.print("Setts:");

Serial1.print((int)FanMode);

Serial1.print("|");

Serial1.print((int)FogMode);

Serial1.print("|");

Serial1.print((int)RainMode);

Serial1.print("|");

Serial1.print((int)SunMode);
Serial1.print("|");

Serial1.print((int)BaskMode);

Serial1.print("|");

Serial1.print((int)SkyMode);

Serial1.print("SettsEnd");

//=============================================================================
==============================================

// WRITE SYSTEM STATS

//=============================================================================
==============================================

void writestatistics(){

//write a pleasant message

//write air temperature to LCD

lcd.setCursor(1,1);

lcd.print("Temp: A:");

lcd.print(AirTemp, 0);

lcd.print((char)223);

lcd.print(" W:");

// write water temperature to LCD

lcd.print(WaterTemp, 0);

lcd.print((char)223);

//lcd.print("F");

// write humidity to LCD


lcd.setCursor(4,2);

lcd.print("Humidity ");

lcd.print(DHT.humidity, 0);

lcd.print("%");

//=============================================================================
==============================================

// MENUS

//=============================================================================
==============================================

//----------------------------------------------------------------------------------------------------------------------

// MAIN MENU(PageCounter1)

//----------------------------------------------------------------------------------------------------------------------

void myMenu(){

switch (page_counter) {

case 1:{

homeScreen();

break;

case 2: {

fanControl();

break;

case 3: {
fogControl();

break;

case 4: {

rainControl();

break;

case 5: {

sunControl();

break;

case 6: {

BaskingControl();

break;

case 7: {

skyControl();

break;

//----------------------------------------------------------------------------------------------------------------------

// SUB MENU(PageCounter2)

//----------------------------------------------------------------------------------------------------------------------

void SkyMenu(){
switch (subpage2_counter) {

case 1:{

morning();

break;

case 2: {

noon();

break;

case 3: {

evening();

break;

case 4: {

night();

break;

case 5: {

storm();

break;

case 0: {

TurnOfSky();

}
break;

//----------------------------------------------------------------------------------------------------------------------

// SUB MENU SETTINGS

//----------------------------------------------------------------------------------------------------------------------

void morning(){

lcd.setCursor(5,2);

lcd.print(" Morning");

StormLEDSet = 0;

StarsLEDSet = 0;

FishLED1Set = 15;

FishLED2Set = 0;

SkyL1LEDSet = 65;

SkyL2LEDSet = 65;

SkyL3LEDSet = 65;

SkyL4LEDSet = 65;

void noon(){

lcd.setCursor(5,2);

lcd.print(" Noon ");

StormLEDSet = 0;

StarsLEDSet = 0;

FishLED1Set = 65;

FishLED2Set = 0;
SkyL1LEDSet = 200;

SkyL2LEDSet = 200;

SkyL3LEDSet = 200;

SkyL4LEDSet = 200;

void evening(){

lcd.setCursor(5,2);

lcd.print(" Evening");

StormLEDSet = 0;

StarsLEDSet = 0;

FishLED1Set = 25;

FishLED2Set = 1;

SkyL1LEDSet = 25;

SkyL2LEDSet = 25;

SkyL3LEDSet = 25;

SkyL4LEDSet = 25;

void night(){

lcd.setCursor(5,2);

lcd.print(" Night ");

StormLEDSet = 2;

StarsLEDSet = 1;

FishLED1Set = 0;

FishLED2Set = 5;

SkyL1LEDSet = 0;
SkyL2LEDSet = 0;

SkyL3LEDSet = 0;

SkyL4LEDSet = 0;

void storm(){

lcd.setCursor(5,2);

lcd.print(" Storm ");

StormLEDSet = 0;

StarsLEDSet = 0;

FishLED1Set = 5;

FishLED2Set = 5;

SkyL1LEDSet = 255;

SkyL2LEDSet = 255;

SkyL3LEDSet = 255;

SkyL4LEDSet = 255;

void TurnOfSky(){

lcd.setCursor(5,2);

lcd.print(" ");

StormLEDSet = 0;

StarsLEDSet = 0;

FishLED1Set = 0;

SkyL1LEDSet = 0;

SkyL2LEDSet = 0;

SkyL3LEDSet = 0;
SkyL4LEDSet = 0;

//----------------------------------------------------------------------------------------------------------------------

// HOME

//----------------------------------------------------------------------------------------------------------------------

void homeScreen(){

if (refresh){lcd.clear();refresh=0;}

writestatistics();

//----------------------------------------------------------------------------------------------------------------------

// MENU OPTION ONE

//----------------------------------------------------------------------------------------------------------------------

void fanControl(){

//Static objects

lcd.setCursor(4,0);

lcd.print("Fan Control:");

//----------------------------------------

// page controls

//----------------------------------------

last_sel=current_sel; //Save last state of select button

if (last_sel== LOW && joyButtonPushed==1 || last_sel== LOW && joyButtonPushed==2){


//Up or Down

if(subpage_counter <2){ // subpage counter never higher than 2(total of items)

subpage_counter ++; //subcounter to move beetwen submenu

lcd.setCursor(15,3);
lcd.write(byte(1)); //Return custom char

else{ //If subpage higher than 2 (total of items) return to first item

subpage_counter=1;

lcd.setCursor(15,3);

lcd.write(byte(1)); //Return custom char

joyButtonPushed = 0; pushedTime = 0; myDFPlayer.play(3);

// Sub menu counter control

if (last_sel== LOW && joyButtonPushed==5){ //select button pressed

if(subpage_counter <2){ // subpage counter never higher than 4 (total of items)

subpage_counter ++; //subcounter to move between submenu

lcd.setCursor(15,3);

lcd.write(byte(1)); //Return custom char

else if(subpage_counter ==2){ //If subpage higher than 2 (total of items)


return to first item

subpage_counter=0;

lcd.setCursor(14,3);

lcd.print(" ");

lcd.setCursor(15,3);

lcd.print(" ");

joyButtonPushed = 0; pushedTime = 0; myDFPlayer.play(7);

}
last_sel=current_sel; //Save last state of select button

//----------------------------------------

// item control 1

//----------------------------------------

//First item control(subpage_counter =1) Fan Power

if(subpage_counter==1){

lcd.setCursor(14,3);

lcd.print(" "); //Delete last arrow position

lcd.setCursor(7,1);

lcd.write(byte(2));

if (last_sel== LOW && joyButtonPushed==3){ //Right, Fan on

relay8_state=LOW;

joyButtonPushed = 0; pushedTime = 0; myDFPlayer.play(6);

last_sel=current_sel;

if(last_sel== LOW && joyButtonPushed==4){//Left, Fan of

relay8_state=HIGH;

joyButtonPushed = 0; pushedTime = 0; myDFPlayer.play(6);

last_sel=current_sel;

if(relay8_state==HIGH){
lcd.setCursor(8,1);

lcd.print("OFF");

if(FanState !=0){

FanState = 0;

else if(relay8_state==LOW){

lcd.setCursor(8,1);

lcd.print("ON ");

if(FanState !=1){

FanState = 1;

//----------------------------------------

// BACK controls

//----------------------------------------

//Second item control (subpage_counter=2) back

if(subpage_counter==2){

lcd.setCursor(7,1);

lcd.print(" "); //Delete last arrow position

lcd.setCursor(14,3); //Place the arrow

lcd.write(byte(2));

//----------------------------------------------------------------------------------------------------------------------
// MENU OPTION TWO

//----------------------------------------------------------------------------------------------------------------------

void fogControl(){

//Static objects

lcd.setCursor(4,0);

lcd.print("Fog Control:");

//----------------------------------------

// page controls

//----------------------------------------

last_sel=current_sel; //Save last state of select button

if (last_sel== LOW && joyButtonPushed==1 || last_sel== LOW && joyButtonPushed==2){


//Up or Down

if(subpage_counter <2){ // subpage counter never higher than 2(total of items)

subpage_counter ++; //subcounter to move beetwen submenu

lcd.setCursor(15,3);

lcd.write(byte(1)); //Return custom char

else{ //If subpage higher than 2 (total of items) return to first item

subpage_counter=1;

lcd.setCursor(15,3);

lcd.write(byte(1)); //Return custom char

joyButtonPushed = 0; pushedTime = 0; myDFPlayer.play(3);

// Sub menu counter control


if (last_sel== LOW && joyButtonPushed==5){ //select button pressed

if(subpage_counter <2){ // subpage counter never higher than 4 (total of items)

subpage_counter ++; //subcounter to move between submenu

lcd.setCursor(15,3);

lcd.write(byte(1)); //Return custom char

else if(subpage_counter ==2){ //If subpage higher than 2 (total of items)


return to first item

subpage_counter=0;

lcd.setCursor(14,3);

lcd.print(" ");

lcd.setCursor(15,3);

lcd.print(" ");

joyButtonPushed = 0; pushedTime = 0; myDFPlayer.play(7);

last_sel=current_sel; //Save last state of select button

//----------------------------------------

// item control 1

//----------------------------------------

//First item control(subpage_counter =1) Fog Power

if(subpage_counter==1){

lcd.setCursor(14,3);

lcd.print(" "); //Delete last arrow position

lcd.setCursor(7,1);
lcd.write(byte(2));

if (last_sel== LOW && joyButtonPushed==3){ //Right, Fog on

relay2_state=LOW;

joyButtonPushed = 0; pushedTime = 0; myDFPlayer.play(6);

last_sel=current_sel;

if(last_sel== LOW && joyButtonPushed==4){//Left, Fog of

relay2_state=HIGH;

joyButtonPushed = 0; pushedTime = 0; myDFPlayer.play(6);

last_sel=current_sel;

if(relay2_state==HIGH){

lcd.setCursor(8,1);

lcd.print("OFF");

if(FogState !=0){

FogState = 0;

else if(relay2_state==LOW){

lcd.setCursor(8,1);

lcd.print("ON ");

if(FogState !=1){
FogState = 1;

//----------------------------------------

// BACK controls

//----------------------------------------

//Second item control (subpage_counter=2) back

if(subpage_counter==2){

lcd.setCursor(7,1);

lcd.print(" "); //Delete last arrow position

lcd.setCursor(14,3); //Place the arrow

lcd.write(byte(2));

//----------------------------------------------------------------------------------------------------------------------

// MENU OPTION THREE

//----------------------------------------------------------------------------------------------------------------------

void rainControl(){

//Static objects

lcd.setCursor(4,0);

lcd.print("Rain Control:");

//----------------------------------------

// page controls

//----------------------------------------

last_sel=current_sel; //Save last state of select button


if (last_sel== LOW && joyButtonPushed==1 || last_sel== LOW && joyButtonPushed==2){
//Up or Down

if(subpage_counter <2){ // subpage counter never higher than 2(total of items)

subpage_counter ++; //subcounter to move beetwen submenu

lcd.setCursor(15,3);

lcd.write(byte(1)); //Return custom char

else{ //If subpage higher than 2 (total of items) return to first item

subpage_counter=1;

lcd.setCursor(15,3);

lcd.write(byte(1)); //Return custom char

joyButtonPushed = 0; pushedTime = 0; myDFPlayer.play(3);

// Sub menu counter control

if (last_sel== LOW && joyButtonPushed==5){ //select button pressed

if(subpage_counter <2){ // subpage counter never higher than 4 (total of items)

subpage_counter ++; //subcounter to move between submenu

lcd.setCursor(15,3);

lcd.write(byte(1)); //Return custom char

else if(subpage_counter ==2){ //If subpage higher than 2 (total of items)


return to first item

subpage_counter=0;

lcd.setCursor(14,3);
lcd.print(" ");

lcd.setCursor(15,3);

lcd.print(" ");

joyButtonPushed = 0; pushedTime = 0; myDFPlayer.play(7);

last_sel=current_sel; //Save last state of select button

//----------------------------------------

// item control 1

//----------------------------------------

//First item control(subpage_counter =1) Fog Power

if(subpage_counter==1){

lcd.setCursor(14,3);

lcd.print(" "); //Delete last arrow position

lcd.setCursor(7,1);

lcd.write(byte(2));

if (last_sel== LOW && joyButtonPushed==3){ //Right, Rain on

relay3_state=LOW;

joyButtonPushed = 0; pushedTime = 0; myDFPlayer.play(6);

last_sel=current_sel;

if(last_sel== LOW && joyButtonPushed==4){//Left, Rain of

relay3_state=HIGH;
joyButtonPushed = 0; pushedTime = 0; myDFPlayer.play(6);

last_sel=current_sel;

if(relay3_state==HIGH){

lcd.setCursor(8,1);

lcd.print("OFF");

if(RainState !=0){

RainState = 0;

else if(relay3_state==LOW){

lcd.setCursor(8,1);

lcd.print("ON ");

if(RainState !=1){

RainState = 1;

//----------------------------------------

// BACK controls

//----------------------------------------

//Second item control (subpage_counter=2) back

if(subpage_counter==2){

lcd.setCursor(7,1);
lcd.print(" "); //Delete last arrow position

lcd.setCursor(14,3); //Place the arrow

lcd.write(byte(2));

//----------------------------------------------------------------------------------------------------------------------

// MENU OPTION FOUR

//----------------------------------------------------------------------------------------------------------------------

void sunControl(){

//Static objects

lcd.setCursor(4,0);

lcd.print("Sun Control:");

//----------------------------------------

// page controls

//----------------------------------------

last_sel=current_sel; //Save last state of select button

if (last_sel== LOW && joyButtonPushed==1 || last_sel== LOW && joyButtonPushed==2){


//Up or Down

if(subpage_counter <2){ // subpage counter never higher than 2(total of items)

subpage_counter ++; //subcounter to move beetwen submenu

lcd.setCursor(15,3);

lcd.write(byte(1)); //Return custom char

else{ //If subpage higher than 2 (total of items) return to first item

subpage_counter=1;
lcd.setCursor(15,3);

lcd.write(byte(1)); //Return custom char

joyButtonPushed = 0; pushedTime = 0; myDFPlayer.play(3);

// Sub menu counter control

if (last_sel== LOW && joyButtonPushed==5){ //select button pressed

if(subpage_counter <2){ // subpage counter never higher than 4 (total of items)

subpage_counter ++; //subcounter to move between submenu

lcd.setCursor(15,3);

lcd.write(byte(1)); //Return custom char

else if(subpage_counter ==2){ //If subpage higher than 2 (total of items)


return to first item

subpage_counter=0;

lcd.setCursor(14,3);

lcd.print(" ");

lcd.setCursor(15,3);

lcd.print(" ");

joyButtonPushed = 0; pushedTime = 0; myDFPlayer.play(7);

last_sel=current_sel; //Save last state of select button

//----------------------------------------

// item control 1

//----------------------------------------
//First item control(subpage_counter =1) Sun Power

if(subpage_counter==1){

lcd.setCursor(14,3);

lcd.print(" "); //Delete last arrow position

lcd.setCursor(7,1);

lcd.write(byte(2));

if (last_sel== LOW && joyButtonPushed==3){ //Right, Sun on

relay4_state=LOW;

joyButtonPushed = 0; pushedTime = 0; myDFPlayer.play(6);

last_sel=current_sel;

if(last_sel== LOW && joyButtonPushed==4){//Left, Sun of

relay4_state=HIGH;

joyButtonPushed = 0; pushedTime = 0; myDFPlayer.play(6);

last_sel=current_sel;

if(relay4_state==HIGH){

lcd.setCursor(8,1);

lcd.print("OFF");

if(SunState !=0){

SunState = 0;
}

else if(relay4_state==LOW){

lcd.setCursor(8,1);

lcd.print("ON ");

if(SunState !=1){

SunState = 1;

//----------------------------------------

// BACK controls

//----------------------------------------

//Second item control (subpage_counter=2) back

if(subpage_counter==2){

lcd.setCursor(7,1);

lcd.print(" "); //Delete last arrow position

lcd.setCursor(14,3); //Place the arrow

lcd.write(byte(2));

//----------------------------------------------------------------------------------------------------------------------

// MENU OPTION FIVE

//----------------------------------------------------------------------------------------------------------------------

void BaskingControl(){

//Static objects
lcd.setCursor(4,0);

lcd.print("Bask Control:");

//----------------------------------------

// page controls

//----------------------------------------

last_sel=current_sel; //Save last state of select button

if (last_sel== LOW && joyButtonPushed==1 || last_sel== LOW && joyButtonPushed==2){


//Up or Down

if(subpage_counter <2){ // subpage counter never higher than 2(total of items)

subpage_counter ++; //subcounter to move beetwen submenu

lcd.setCursor(15,3);

lcd.write(byte(1)); //Return custom char

else{ //If subpage higher than 2 (total of items) return to first item

subpage_counter=1;

lcd.setCursor(15,3);

lcd.write(byte(1)); //Return custom char

joyButtonPushed = 0; pushedTime = 0; myDFPlayer.play(3);

// Sub menu counter control

if (last_sel== LOW && joyButtonPushed==5){ //select button pressed

if(subpage_counter <2){ // subpage counter never higher than 4 (total of items)

subpage_counter ++; //subcounter to move between submenu

lcd.setCursor(15,3);
lcd.write(byte(1)); //Return custom char

else if(subpage_counter ==2){ //If subpage higher than 2 (total of items)


return to first item

subpage_counter=0;

lcd.setCursor(14,3);

lcd.print(" ");

lcd.setCursor(15,3);

lcd.print(" ");

joyButtonPushed = 0; pushedTime = 0; myDFPlayer.play(7);

last_sel=current_sel; //Save last state of select button

//----------------------------------------

// item control 1

//----------------------------------------

//First item control(subpage_counter =1) Basking Power

if(subpage_counter==1){

lcd.setCursor(14,3);

lcd.print(" "); //Delete last arrow position

lcd.setCursor(7,1);

lcd.write(byte(2));

if (last_sel== LOW && joyButtonPushed==3){ //Right, Basking on

relay5_state=LOW;
joyButtonPushed = 0; pushedTime = 0; myDFPlayer.play(6);

last_sel=current_sel;

if(last_sel== LOW && joyButtonPushed==4){//Left, Basking of

relay5_state=HIGH;

joyButtonPushed = 0; pushedTime = 0; myDFPlayer.play(6);

last_sel=current_sel;

if(relay5_state==HIGH){

lcd.setCursor(8,1);

lcd.print("OFF");

if(BaskState !=0){

BaskState = 0;

else if(relay5_state==LOW){

lcd.setCursor(8,1);

lcd.print("ON ");

if(BaskState !=1){

BaskState = 1;

//----------------------------------------
// BACK controls

//----------------------------------------

//Second item control (subpage_counter=2) back

if(subpage_counter==2){

lcd.setCursor(7,1);

lcd.print(" "); //Delete last arrow position

lcd.setCursor(14,3); //Place the arrow

lcd.write(byte(2));

//----------------------------------------------------------------------------------------------------------------------

// MENU OPTION SIX

//----------------------------------------------------------------------------------------------------------------------

void skyControl(){

//Static objects

lcd.setCursor(4,0);

lcd.print("Sky Control:");

//----------------------------------------

// page controls

//----------------------------------------

last_sel=current_sel; //Save last state of select button

if (last_sel== LOW && joyButtonPushed==2){ //Down

if(subpage_counter ==1 && relay6_state==HIGH || subpage_counter ==2 &&


relay6_state==LOW){ // subpage counter never higher than 2(total of items)
subpage_counter=3; //subcounter to move beetwen submenu

lcd.setCursor(15,3);

lcd.write(byte(1)); //Return custom char

else if(subpage_counter ==1 && relay6_state==LOW){ // subpage counter never


higher than 2(total of items)

subpage_counter =2; //subcounter to move beetwen submenu

lcd.setCursor(15,3);

lcd.write(byte(1)); //Return custom char

else{ //If subpage higher than 2 (total of items) return to first item

subpage_counter=1;

lcd.setCursor(15,3);

lcd.write(byte(1)); //Return custom char

joyButtonPushed = 0; pushedTime = 0; myDFPlayer.play(3);

else if (last_sel== LOW && joyButtonPushed==1){ //Up

if(subpage_counter ==1 && relay6_state==HIGH || subpage_counter ==1 &&


relay6_state==LOW){ // subpage counter never higher than 2(total of items)

subpage_counter=3; //subcounter to move beetwen submenu

lcd.setCursor(15,3);

lcd.write(byte(1)); //Return custom char

else if(subpage_counter ==2){ //If subpage higher than 2 (total of items)


return to first item
subpage_counter=1;

lcd.setCursor(15,3);

lcd.write(byte(1)); //Return custom char

else if(subpage_counter ==3 && relay6_state==LOW){ // subpage counter never


higher than 2(total of items)

subpage_counter =2; //subcounter to move beetwen submenu

lcd.setCursor(15,3);

lcd.write(byte(1)); //Return custom char

else if(subpage_counter ==3 && relay6_state==HIGH){ // subpage counter never


higher than 2(total of items)

subpage_counter =1; //subcounter to move beetwen submenu

lcd.setCursor(15,3);

lcd.write(byte(1)); //Return custom char

joyButtonPushed = 0; pushedTime = 0; myDFPlayer.play(3);

// Sub menu counter control

last_sel=current_sel; //Save last state of select button

if (last_sel== LOW && joyButtonPushed==5){ //select button pressed

if(subpage_counter ==0){ // subpage counter never higher than 4 (total of items)

subpage_counter =1; //subcounter to move between submenu

lcd.setCursor(15,3);

lcd.write(byte(1)); //Return custom char


}

else if(subpage_counter ==1 && relay6_state==HIGH || subpage_counter ==2){ //


subpage counter never higher than 4 (total of items)

subpage_counter =3; //subcounter to move between submenu

lcd.setCursor(15,3);

lcd.write(byte(1)); //Return custom char

else if(subpage_counter ==1 && relay6_state==LOW){ // subpage counter never


higher than 4 (total of items)

subpage_counter =2; //subcounter to move between submenu

lcd.setCursor(15,3);

lcd.write(byte(1)); //Return custom char

else if(subpage_counter ==3){ //If subpage higher than 2 (total of items)


return to first item

subpage_counter=0;

lcd.setCursor(14,3);

lcd.print(" ");

lcd.setCursor(15,3);

lcd.print(" ");

joyButtonPushed = 0; pushedTime = 0; myDFPlayer.play(7);

//----------------------------------------

// item control 1

//----------------------------------------
//First item control(subpage_counter =1) Sky Power

if(subpage_counter==1){

lcd.setCursor(14,3);

lcd.print(" "); //Delete last arrow position

lcd.setCursor(4,2);

lcd.print(" ");

lcd.setCursor(7,1);

lcd.write(byte(2));

if (last_sel== LOW && joyButtonPushed==3){ //Right, Sky on

relay6_state=LOW;

subpage2_counter =1;

joyButtonPushed = 0; pushedTime = 0; myDFPlayer.play(6);

last_sel=current_sel;

if(last_sel== LOW && joyButtonPushed==4){//Left, Sky of

relay6_state=HIGH;

subpage2_counter =0;

joyButtonPushed = 0; pushedTime = 0; myDFPlayer.play(6);

last_sel=current_sel;

if(relay6_state==HIGH){

lcd.setCursor(8,1);
lcd.print("OFF");

SkyMenu();

else if(relay6_state==LOW){

lcd.setCursor(8,1);

lcd.print("ON ");

SkyMenu();

//----------------------------------------

// item control 2

//----------------------------------------

//Second item control(subpage_counter =2) Sky Setting

if(subpage_counter==2 && relay6_state==LOW){

lcd.setCursor(7,1);

lcd.print(" "); //Delete last arrow position

lcd.setCursor(14,3);

lcd.print(" "); //Delete last arrow position

lcd.setCursor(4,2);

lcd.write(byte(2));

if (last_sel== LOW && joyButtonPushed==3){ //Right, Sky on

if(subpage2_counter <5){

subpage2_counter ++;
}

else if(subpage2_counter ==5){

subpage2_counter =1;

joyButtonPushed = 0; pushedTime = 0; myDFPlayer.play(6);

last_sel=current_sel;

if(last_sel== LOW && joyButtonPushed==4){//Left, Sky of

if(subpage2_counter >1){

subpage2_counter --;

else if(subpage2_counter ==1){

subpage2_counter =5;

joyButtonPushed = 0; pushedTime = 0; myDFPlayer.play(6);

last_sel=current_sel;

//----------------------------------------

// BACK controls

//----------------------------------------

//Second item control (subpage_counter=2) back

if(subpage_counter==3){
lcd.setCursor(7,1);

lcd.print(" "); //Delete last arrow position

lcd.setCursor(4,2);

lcd.print(" ");

lcd.setCursor(14,3); //Place the arrow

lcd.write(byte(2));

//=============================================================================
==============================================

// NIGHT/DAY FUNCTIONALITY

//=============================================================================
==============================================

void clearSkyMode(){

//--------------------------------

// SOUND

//--------------------------------

//Sky Of

if(digitalRead(buusyPin) !=1 && subpage2_counter ==0 && subpage_counter ==0){

if(SkyState !=0){

SkyState = 0;

//Morning

//Serial.println(digitalRead(buusyPin));
if(digitalRead(buusyPin) !=0 && subpage2_counter ==1 && subpage_counter ==0){

if(SkyState !=1){

SkyState = 1;

myDFPlayer.volume (15);

myDFPlayer.play(10);

buusyPin ==0;

//Noon

// Serial.println(digitalRead(buusyPin));

if(digitalRead(buusyPin) !=0 && subpage2_counter ==2 && subpage_counter ==0){

if(SkyState !=2){

SkyState = 2;

myDFPlayer.volume (15);

myDFPlayer.play(11);

buusyPin ==0;

//Evening

//Serial.println(digitalRead(buusyPin));

if(digitalRead(buusyPin) !=0 && subpage2_counter ==3 && subpage_counter ==0){

if(SkyState !=3){

SkyState = 3;

myDFPlayer.volume (17);
myDFPlayer.play(12);

buusyPin ==0;

//Night

// Serial.println(digitalRead(buusyPin));

if(digitalRead(buusyPin) !=0 && subpage2_counter ==4 && subpage_counter ==0){

if(SkyState !=4){

SkyState = 4;

myDFPlayer.volume (18);

myDFPlayer.play(13);

buusyPin ==0;

//--------------------------------

// LIGHTS

//--------------------------------

if(StormLEDPos != StormLEDSet){

if(StormLEDPos < StormLEDSet){

StormLEDPos++;

analogWrite(StormLED,StormLEDPos);

else if(StormLEDPos > StormLEDSet){

StormLEDPos--;

analogWrite(StormLED,StormLEDPos);

}
}

if(StarsLEDPos != StarsLEDSet){

if(StarsLEDPos < StarsLEDSet){

StarsLEDPos++;

analogWrite(StarsLED,StarsLEDPos);

else if(StarsLEDPos > StarsLEDSet){

StarsLEDPos--;

analogWrite(StarsLED,StarsLEDPos);

if(FishLED1Pos != FishLED1Set){

if(FishLED1Pos < FishLED1Set){

FishLED1Pos++;

analogWrite(Fish1LED,FishLED1Pos);

else if(FishLED1Pos > FishLED1Set){

FishLED1Pos--;

analogWrite(Fish1LED,FishLED1Pos);

if(FishLED2Pos != FishLED2Set){

if(FishLED2Pos < FishLED2Set){

FishLED2Pos++;

analogWrite(Fish2LED,FishLED2Pos);
}

else if(FishLED2Pos > FishLED2Set){

FishLED2Pos--;

analogWrite(Fish2LED,FishLED2Pos);

if(SkyL1LEDPos != SkyL1LEDSet){

if(SkyL1LEDPos < SkyL1LEDSet){

SkyL1LEDPos++;

analogWrite(SkyL1LED,SkyL1LEDPos);

else if(SkyL1LEDPos > SkyL1LEDSet){

SkyL1LEDPos--;

analogWrite(SkyL1LED,SkyL1LEDPos);

if(SkyL2LEDPos != SkyL2LEDSet){

if(SkyL2LEDPos < SkyL2LEDSet){

SkyL2LEDPos++;

analogWrite(SkyL2LED,SkyL2LEDPos);

else if(SkyL2LEDPos > SkyL2LEDSet){

SkyL2LEDPos--;

analogWrite(SkyL2LED,SkyL2LEDPos);

}
}

if(SkyL3LEDPos != SkyL3LEDSet){

if(SkyL3LEDPos < SkyL3LEDSet){

SkyL3LEDPos++;

analogWrite(SkyL3LED,SkyL3LEDPos);

else if(SkyL3LEDPos > SkyL3LEDSet){

SkyL3LEDPos--;

analogWrite(SkyL3LED,SkyL3LEDPos);

if(SkyL4LEDPos != SkyL4LEDSet){

if(SkyL4LEDPos < SkyL4LEDSet){

SkyL4LEDPos++;

analogWrite(SkyL4LED,SkyL4LEDPos);

else if(SkyL4LEDPos > SkyL4LEDSet){

SkyL4LEDPos--;

analogWrite(SkyL4LED,SkyL4LEDPos);

//----------------------------------------------------------------------------------------------------------------------

// CLOUDS/LIGHTNING FUNCTIONALITY

//----------------------------------------------------------------------------------------------------------------------
void cloudySkyMode(){

if(SkyState !=5){

SkyState = 5;

if(StarsLEDPos != StarsLEDSet){

if(StarsLEDPos < StarsLEDSet){

StarsLEDPos++;

analogWrite(StarsLED,StarsLEDPos);

else if(StarsLEDPos > StarsLEDSet){

StarsLEDPos--;

analogWrite(StarsLED,StarsLEDPos);

if(FishLED1Pos != FishLED1Set){

if(FishLED1Pos < FishLED1Set){

FishLED1Pos++;

analogWrite(Fish1LED,FishLED1Pos);

else if(FishLED1Pos > FishLED1Set){

FishLED1Pos--;

analogWrite(Fish1LED,FishLED1Pos);

if(FishLED2Pos != FishLED2Set){
if(FishLED2Pos < FishLED2Set){

FishLED2Pos++;

analogWrite(Fish2LED,FishLED2Pos);

else if(FishLED2Pos > FishLED2Set){

FishLED2Pos--;

analogWrite(Fish2LED,FishLED2Pos);

//--------------------------------

// LIGHTNING

//--------------------------------

if(StormLEDPos != StormLEDSet){

if(StormLEDPos < StormLEDSet){

StormLEDPos++;

analogWrite(StormLED,StormLEDPos);

else if(StormLEDPos > StormLEDSet){

StormLEDPos--;

analogWrite(StormLED,StormLEDPos);

//--------------------------------

// CLOUDS

//--------------------------------
unsigned long currentCloudMillis = millis(); //call current millis

if (currentCloudMillis - previousCloudMillis > CloudInterval) { //If interval is reached :

previousCloudMillis = currentCloudMillis; //replace previous millis by current millis


as new start point

CloudreadTime++; //do something

Serial.println(CloudreadTime);

if(SkyL1LEDPos == CloudBrightness && CloudreadTime == 1){

if(CloudBrightness >= CloudBrightnessMax){

CloudBrightness = CloudBrightnessMin;

else if(CloudBrightness <= CloudBrightnessMin){

CloudBrightness = CloudBrightnessMax;

CloudreadTime = 0;

//----------Cloud 1------------

else if (SkyL1LEDPos != CloudBrightness){

if(SkyL1LEDPos < CloudBrightness){

SkyL1LEDPos += StormSpeed;

analogWrite(SkyL1LED,SkyL1LEDPos);

CloudBrightness = CloudBrightnessMax;

}
else if(SkyL1LEDPos > CloudBrightness){

SkyL1LEDPos -= StormSpeed;

analogWrite(SkyL1LED,SkyL1LEDPos);

CloudBrightness = CloudBrightnessMin;

//----------Cloud 2------------

if (SkyL2LEDPos != CloudBrightness){

if(SkyL2LEDPos < CloudBrightness){

SkyL2LEDPos += StormSpeed +1;

analogWrite(SkyL2LED,SkyL2LEDPos);

else if(SkyL2LEDPos > CloudBrightness){

SkyL2LEDPos -= StormSpeed +1;

analogWrite(SkyL2LED,SkyL2LEDPos);

//----------Cloud 3------------

if (SkyL3LEDPos != CloudBrightness){

if(SkyL3LEDPos < CloudBrightness){

SkyL3LEDPos += StormSpeed +2;

analogWrite(SkyL3LED,SkyL3LEDPos);

else if(SkyL3LEDPos > CloudBrightness){

SkyL3LEDPos -= StormSpeed+2;
analogWrite(SkyL3LED,SkyL3LEDPos);

//----------Cloud 4------------

if (SkyL4LEDPos != CloudBrightness){

if(SkyL4LEDPos < CloudBrightness){

SkyL4LEDPos += StormSpeed +1;

analogWrite(SkyL4LED,SkyL4LEDPos);

else if(SkyL4LEDPos > CloudBrightness){

SkyL4LEDPos -= StormSpeed +1;

analogWrite(SkyL4LED,SkyL4LEDPos);

//--------------------------------

// SOUND

//--------------------------------

//Serial.println(digitalRead(buusyPin));

if(digitalRead(buusyPin) !=0 && subpage_counter ==0){

myDFPlayer.volume (25);

myDFPlayer.play(14);

//isPlaying = true;

//Serial.println(digitalRead(buusyPin));

//while (bsy == 0); // zero when sound active


}

sensorValue = analogRead(sensorPin);

//Serial.println(sensorValue);

//Serial.println(" ");

if (sensorValue >= 650) {

StormLEDPos=255;

analogWrite(StormLED,StormLEDPos);

if (sensorValue <= 550) {

StormLEDPos=0;

analogWrite(StormLED,StormLEDPos);

bsy = digitalRead(buusyPin);

//=============================================================================
==============================================

// AUTO GO BACK TO HOMEPAGE

//=============================================================================
==============================================

void autoGoBackToHomePage(){

unsigned long currentMillis = millis(); //call current millis

if (currentMillis - previousMillis > interval) { //If interval is reached :

lcd.clear();

previousMillis = currentMillis; //replace previous millis by current millis as new start


point

subpage_counter=0;
page_counter=1; //Go back to home page

joyButtonPushed = 0; pushedTime = 0;

if (joyRead != 0){ // Reset millis counter If any button is pressed

previousMillis = currentMillis;

//=============================================================================
==============================================

// NAVIGATION FUNCTIONALITY

//=============================================================================
==============================================

void navigationFunctioner(){

//----Page counter function to move pages----//

if(subpage_counter==0){ // right/left buttons enabled if subcounters are 0,Disabled if


1,2..etc to work on submenus

//Page Right

if (last_sel== LOW && joyButtonPushed==3){ //Right button pressed

lcd.clear(); //Clear lcd if page is changed to print new one

if(page_counter <pages){ //Page counter never higher than 3(total of pages)

page_counter= page_counter +1; //Page up

else{
page_counter= 2; //If higher than 3 (last page) stay on page 3(change to 1 if you
want to rotate)

current_sel = HIGH;

joyButtonPushed = 0; pushedTime = 0; myDFPlayer.play(5);

last_sel = current_sel; //Save up button last state

//Page Left

if (last_sel== LOW && joyButtonPushed==4){//Left button pressed

lcd.clear(); //Clear lcd if page is changed to print new one

if(page_counter >2){ //Page counter never lower than 1 (total of pages)

page_counter= page_counter -1; //Page down

else{

page_counter= pages; //If lower than 1(first page) stay on page 1(change to 3 if
you want to rotate)

current_sel = HIGH;

joyButtonPushed = 0; pushedTime = 0; myDFPlayer.play(5);

}
last_sel = current_sel; //Save down button last state

//Show sub counters status,delete or comment if not needed

if(page_counter !=1){

lcd.setCursor(0,0);

lcd.print(page_counter-1);

lcd.setCursor(1,0);

lcd.print(".");

if(page_counter >9){

lcd.setCursor(0,0);

lcd.print(page_counter-1);

lcd.setCursor(2,0);

lcd.print(".");

//=============================================================================
==============================================

// BUTTON DEBOUNCER

//=============================================================================
==============================================

boolean debounce(boolean last, int pin){

boolean current = digitalRead(pin);


if (last != current){

delay(5);

current = digitalRead(pin);

return current;

//=============================================================================
==============================================

// JOYSTICK CONTROLLER

//=============================================================================
==============================================

int readJoystick(){

int x = analogRead(xPin);

int y = analogRead(yPin);

int k = digitalRead(kPin);

if(x>600){joyRead=1; //x+

}else if(x<100){joyRead=2; //x-

}else if(y>600){joyRead=3; //y+

}else if(y<100){joyRead=4; //y-

}else if(!k){joyRead=5;

}else{joyRead=0;}

if (joyRead != lastJoyPos){lastDebounceTime = millis();}

if(((millis() - lastDebounceTime) > debounceDelay)&&(joyRead!=joyPos)){


joyPos=joyRead;

if (joyPos != lastJoyPos && pushedTime > 3){

joyButtonPushed =joyPos;

if (joyRead != 0){

pushedTime++;

if (pushedTime >= 50){

pushedTime = 0;

lastJoyPos=joyRead;

current_sel = debounce(last_sel, sel); //Debounce for Select button

//=============================================================================
==============================================

// RELAY STATES

//=============================================================================
==============================================

void relayStates(){

//------------Change Relay states---------//


if(relay1_state==HIGH && RelayPin1 != HIGH){

digitalWrite(RelayPin1,HIGH);

if(relay1_state==LOW && RelayPin1 != LOW){

digitalWrite(RelayPin1,LOW);

if(relay2_state==HIGH && RelayPin2 != HIGH){

digitalWrite(RelayPin2,HIGH);

if(relay2_state==LOW && RelayPin2 != LOW){

digitalWrite(RelayPin2,LOW);

if(relay3_state==HIGH && RelayPin3 != HIGH){

digitalWrite(RelayPin3,HIGH);

if(relay3_state==LOW && RelayPin3 != LOW){

digitalWrite(RelayPin3,LOW);

if(relay4_state==HIGH && RelayPin4 != HIGH){

digitalWrite(RelayPin4,HIGH);

if(relay4_state==LOW && RelayPin4 != LOW){

digitalWrite(RelayPin4,LOW);

if(relay5_state==HIGH && RelayPin5 != HIGH){


digitalWrite(RelayPin5,HIGH);

if(relay5_state==LOW && RelayPin5 != LOW){

digitalWrite(RelayPin5,LOW);

if(relay6_state==HIGH && RelayPin6 != HIGH){

digitalWrite(RelayPin6,HIGH);

if(relay6_state==LOW && RelayPin6 != LOW){

digitalWrite(RelayPin6,LOW);

if(relay7_state==HIGH && RelayPin7 != HIGH){

digitalWrite(RelayPin7,HIGH);

if(relay7_state==LOW && RelayPin7 != LOW){

digitalWrite(RelayPin7,LOW);

if(relay8_state==HIGH && RelayPin8 != HIGH){

digitalWrite(RelayPin8,HIGH);

if(relay8_state==LOW && RelayPin8 != LOW){

digitalWrite(RelayPin8,LOW);

//----------------------------------------------------------------------------------------------------------------------
// turn of all relays

//----------------------------------------------------------------------------------------------------------------------

void resetallrelays(){

digitalWrite(RelayPin1, HIGH);

digitalWrite(RelayPin2, HIGH);

digitalWrite(RelayPin3, HIGH);

digitalWrite(RelayPin4, HIGH);

digitalWrite(RelayPin5, HIGH);

digitalWrite(RelayPin6, HIGH);

digitalWrite(RelayPin7, HIGH);

digitalWrite(RelayPin8, HIGH);

//=============================================================================
==============================================

// BLUETOOTH

//=============================================================================
==============================================

void bluetooth(){

if(Serial1.available() > 0){ // Checks whether data is comming from the serial port

Serial.println("you have a connection");

dataFromBT = Serial1.read(); // Reads the data from the serial port

State = dataFromBT;

// Print on the Monitor latest command recieved


}

// Set relay states from bluetooth buttons

if (State == '1') {

// Turn of FAN

page_counter=2;

relay8_state=HIGH;

if(FanState !=0){

FanState = 0;

page_counter=1;

State = 0;

} else if ( State == '2') {

// Turn on FAN

page_counter=2;

relay8_state=LOW;

if(FanState !=1){

FanState = 1;

page_counter=1;

State = 0;

if (State == '3') {

// Turn of Fog

page_counter=3;
relay2_state=HIGH;

if(FogState !=0){

FogState = 0;

page_counter=1;

State = 0;

} else if ( State == '4') {

// Turn on Fog

page_counter=3;

relay2_state=LOW;

if(FogState !=1){

FogState = 1;

page_counter=1;

State = 0;

if (State == '5') {

// Turn of RAIN

page_counter=4;

relay3_state=HIGH;

if(RainState !=0){

RainState = 0;

page_counter=1;
State = 0;

} else if ( State == '6') {

// Turn on RAIN

page_counter=4;

relay3_state=LOW;

if(RainState !=1){

RainState = 1;

page_counter=1;

State = 0;

if (State == '7') {

// Turn of SUN

page_counter=5;

relay4_state=HIGH;

if(SunState !=0){

SunState = 0;

page_counter=1;

State = 0;

} else if ( State == '8') {

// Turn on SUN

page_counter=5;

relay4_state=LOW;
if(SunState !=1){

SunState = 1;

page_counter=1;

State = 0;

if (State == '9') {

// Turn of BASK

page_counter=6;

relay5_state=HIGH;

if(BaskState !=0){

BaskState = 0;

page_counter=1;

State = 0;

} else if ( State == 'a') {

// Turn on BASK

page_counter=6;

relay5_state=LOW;

if(BaskState !=1){

BaskState = 1;

page_counter=1;

State = 0;
}

if (State == 'o') {

// Turn of SKY

myDFPlayer.stop();

page_counter=7;

relay6_state=HIGH;

subpage2_counter =0;

subpage_counter =0;

SkyMenu();

lcd.clear();

page_counter=1;

State = 0;

clearSkyMode();

} else if ( State == 'm') {

// Turn SKY to MORNING

myDFPlayer.stop();

page_counter=7;

relay6_state=LOW;

subpage2_counter =1;

subpage_counter =0;

SkyMenu();

lcd.clear();

page_counter=1;

State = 0;

clearSkyMode();
}else if ( State == 'd') {

// Turn SKY to NOON

myDFPlayer.stop();

page_counter=7;

relay6_state=LOW;

subpage2_counter =2;

subpage_counter =0;

SkyMenu();

lcd.clear();

page_counter=1;

State = 0;

clearSkyMode();

}else if ( State == 'e') {

// Turn SKY to EVENING

myDFPlayer.stop();

page_counter=7;

relay6_state=LOW;

subpage2_counter =3;

subpage_counter =0;

SkyMenu();

lcd.clear();

page_counter=1;

State = 0;

clearSkyMode();

}else if ( State == 'n') {


// Turn SKY to NIGHT

myDFPlayer.stop();

page_counter=7;

relay6_state=LOW;

subpage2_counter =4;

subpage_counter =0;

SkyMenu();

lcd.clear();

page_counter=1;

State = 0;

clearSkyMode();

}else if ( State == 's') {

// Turn SKY to STORM

myDFPlayer.stop();

page_counter=7;

relay6_state=LOW;

subpage2_counter =5;

subpage_counter =0;

SkyMenu();

lcd.clear();

page_counter=1;

State = 0;

cloudySkyMode();

}
}

//=============================================================================
==============================================

// DEBUG DFPLAYER

//=============================================================================
==============================================

void printDetail(uint8_t type, int value){

switch (type) {

case TimeOut:

// Serial.println(F("Time Out!"));

break;

case WrongStack:

// Serial.println(F("Stack Wrong!"));

break;

case DFPlayerCardInserted:

// Serial.println(F("Card Inserted!"));

break;

case DFPlayerCardRemoved:

// Serial.println(F("Card Removed!"));

break;

case DFPlayerCardOnline:

// Serial.println(F("Card Online!"));

break;

case DFPlayerPlayFinished:

// Serial.print(F("Number:"));
// Serial.print(value);

// Serial.println(F(" Play Finished!"));

break;

case DFPlayerError:

// Serial.print(F("DFPlayerError:"));

switch (value) {

case Busy:

// Serial.println(F("Card not found"));

break;

case Sleeping:

// Serial.println(F("Sleeping"));

break;

case SerialWrongStack:

// Serial.println(F("Get Wrong Stack"));

break;

case CheckSumNotMatch:

// Serial.println(F("Check Sum Not Match"));

break;

case FileIndexOut:

// Serial.println(F("File Index Out of Bound"));

break;

case FileMismatch:

// Serial.println(F("Cannot Find File"));

break;

case Advertise:
// Serial.println(F("In Advertise"));

break;

default:

break;

break;

default:

break;

You might also like