You are on page 1of 5

#include <Wire.

h>
#include <LiquidCrystal_I2C.h>
#include <rExcel.h>
#include <Servo.h>
#include "DHT.h"

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

Servo myservo; //declaraservo

long idx = 0; // index


int enter = 11;
int rele = 10;
int val; //armazenar valor servo
int outputTiming = 5000; // packet sending timing in ms
important: this dermines the output timing
float ent_analog0; //Chuva
float ent_analog1; //Ldr
float ent_analog2;
//float ent_analog3;
float ent_analog4; //Temp
float ent_analog5; //Humid
float h;
float t;

/*
char worksheet[16]; // worksheet name
char range[16]; // range set
unsigned int row; // row
unsigned int column; // column
*/
char value[16]; // written or read value

rExcel myExcel; // class for Excel data exchanging

#define menu 12
#define enter 11
#define PINODHT 13 //Pino para comunica��o com DHT
#define TIPODHT DHT22 //DHT22(AM2302/ AM2321)

void readButts();
void planilha();
void list_menu();
void menu_select();
void in1();

int line[5] = {0,1,2,3,4},


line_bk[5],
index,
menu_number = 1;

boolean menu_flag = 0,
enter_flag = 0,
sub_menu = 0;

DHT dht(PINODHT, TIPODHT); //Configura��oes do DHT

void setup(){
pinMode(menu, INPUT_PULLUP);
pinMode(enter, INPUT_PULLUP);
Serial.begin(115200);
//delay(1000);

lcd.begin (16,4);
lcd.setBacklight(HIGH);
lcd.setCursor(0,0);
lcd.print(">");

// rx buffer clearing
myExcel.clearInput();

// if analog input pin 5 is unconnected, random analog noise will cause the call
to randomSeed() to generate different seed numbers each time the sketch runs
randomSeed(analogRead(5));

myservo.attach(3); //sinalservo

dht.begin(); //Inicializa o DHT


}

void loop() {

//LCD
if(!sub_menu)
{
lcd.setCursor(1,line[0]);
lcd.print("1) Motor ");
lcd.setCursor(1,line[1]);
lcd.print("2) Light ");
lcd.setCursor(1,line[2]);
lcd.print("3) Valve ");
lcd.setCursor(1,line[3]);
lcd.print("4) Actuator ");
lcd.setCursor(1,line[4]);
lcd.print("5) Help ");
}

readButts();
planilha();

//Ler a temperatura ou humidade leva cerca de 250 milisegundos!


float h = dht.readHumidity();
//L� a temperatura em Celsius (padr�o)
float t = dht.readTemperature();
}//LCD FINAL

void planilha()
{

static unsigned long loopTime = 0;


static unsigned long time1 = 0;
int ret;
loopTime = millis();

// Output Task
// Arduino acts as client making requests to Excel
// instructions performed each outputTiming ms
if ((loopTime - time1) >= outputTiming) {

time1 = loopTime;

// set your custom values


ent_analog0 = (float)analogRead(0) / 1023.0 * 5.0; //sensor chuva 0 a 5, quanto
mais baixo, mais molhado
ent_analog1 = (float)analogRead(1) / 1023.0 * 5.0; //luz
ent_analog2 = (float)analogRead(2) / 1023.0 * 5.0; //solo
//ent_analog3 = (float)analogRead(3) / 1023.0 * 5.0;
ent_analog4 = (float)dht.readTemperature(); //temp
ent_analog5 = (float)dht.readHumidity(); //humid

/*
1� Declara variavel "int" no inicio, int xxxPin = x;
2� No setup declarar saida pinMode(xxxPin,OUTPUT);
3� if(ent_analog0>=4) digitalWrite(ledPin,HIGH);
else digitalWrite(ledPin,LOW);
*/

if(ent_analog1<=2) digitalWrite(rele,LOW);
else digitalWrite(rele,HIGH);

if(ent_analog0<=3) myservo.write(120); //servo


else myservo.write(60);

// look the following examples and modify the code as you need

myExcel.write("Embarcados", "B2", ent_analog0, 2);


myExcel.write("Embarcados", "B3", ent_analog1, 2);
myExcel.write("Embarcados", "B4", ent_analog2, 2);
//myExcel.write("Embarcados", "B5", ent_analog3, 2);
myExcel.write("Embarcados", "B6", ent_analog4, 2);
myExcel.write("Embarcados", "B7", ent_analog5, 2);

//HIST�RICO
myExcel.writeIndexed("Embarcados", idx+52, 4, idx);
myExcel.writeIndexed("Embarcados", idx+52, 5,"%date%");
myExcel.writeIndexed("Embarcados", idx+52, 6,"%time%");
myExcel.writeIndexed("Embarcados", idx+52, 7, ent_analog0, 2);
myExcel.writeIndexed("Embarcados", idx+52, 8, ent_analog1, 2);
myExcel.writeIndexed("Embarcados", idx+52, 9, ent_analog2, 2);
// myExcel.writeIndexed("Embarcados", idx+52, 10, ent_analog3, 2);
myExcel.writeIndexed("Embarcados", idx+52, 11, ent_analog4, 2);
myExcel.writeIndexed("Embarcados", idx+52, 12, ent_analog5, 2);

idx++;

if (idx > 100)


{
myExcel.clear("Embarcados","D52:L152");
idx = 0;
}
}
}

void readButts()
{

if(!digitalRead(menu)) menu_flag = 0x01;


if(!digitalRead(enter)) enter_flag = 0x01;

if(digitalRead(menu) && menu_flag)


{
menu_flag = 0x00;
list_menu();
menu_number+=1;
if(menu_number > 5) menu_number = 1;

} //end if menu

if(digitalRead(enter) && enter_flag)


{
enter_flag = 0x00;
sub_menu = !sub_menu;
menu_select();

} //end if menu

} //end readButts

void list_menu()
{
for(int i=4; i>-1; i--)
{
index = i-1;
line_bk[i] = line[i];

if(index < 0) line[i] = line_bk[i+4];

else line[i] = line[i-1];

} //end list_menu

//O VOID ABAIXO N�O ATUALIZA O VALOR NO LCD, SOMENTE APRESENTA E CONGELA, COMO
CRIAR UM "LOOP DENTRO DO CASE"?.

void menu_select()
{
switch(menu_number)
{

case 1:
lcd.setCursor(1,0);
lcd.print("Motor Control ");
lcd.setCursor(0,1);
lcd.print(ent_analog1);
break;
case 2:
lcd.setCursor(1,0);
lcd.print("Light Control ");
lcd.setCursor(0,1);
lcd.print(" ");
break;
case 3:
lcd.setCursor(1,0);
lcd.print("Valve Control ");
lcd.setCursor(0,1);
lcd.print(" ");
break;
case 4:
lcd.setCursor(1,0);
lcd.print("Actuator Ctrl ");
lcd.setCursor(0,1);
lcd.print(" ");
break;
case 5:
lcd.setCursor(1,0);
lcd.print("Help System ");
lcd.setCursor(0,1);
lcd.print(" ");
break;
} //end switch

}//end menu_select

You might also like