Sie sind auf Seite 1von 5

/* Beritech greenhouse monitoring and control system using bluetooth

https://lrn2make.com/
BobVolts Electronics */

sbit TX_pin at RC6_bit;


sbit RX_pin at RC7_bit;
sbit motor at RD0_bit;
sbit lamp at RD1_bit;
sbit blow at RD2_bit;
sbit S_LOW at RD3_bit;
sbit S_HIGH at RD4_bit;
sbit blow_onn at RD5_bit;
sbit blow_off at RD6_bit;
sbit l_on at RD7_bit;
sbit l_off at RB6_bit;

// These constants, define values needed for the LDR readings and ADC
//

float volt,volt_1,lux,value, value_1;


unsigned char lux_c, soil,Temp_c,temp_u, lux_c_1;
char soil_1[4];
char lights[4];
char Temp_1[4];
char Temp_2[4];
char RH_1[4];
int check_1;
int test,test1,test2,test3;
//float volt,lux,value;
unsigned char Check, T_byte1, T_byte2,
RH_byte1, RH_byte2, Ch ;
float RH_y, Temp_y;
unsigned Temp, RH,RH_c, Sum ;

//////////////////////////////

int voltage, current, power;


char Temp0, Temp1;
int ldrRawData;
float resistorVoltage, ldrVoltage;
float ldrResistance;
float ldrLux;
//
// LCD module connections
sbit LCD_RS at RB0_bit;
sbit LCD_EN at RB1_bit;
sbit LCD_D4 at RB2_bit;
sbit LCD_D5 at RB3_bit;
sbit LCD_D6 at RB4_bit;
sbit LCD_D7 at RB5_bit;
sbit LCD_RS_Direction at TRISB0_bit;
sbit LCD_EN_Direction at TRISB1_bit;
sbit LCD_D4_Direction at TRISB2_bit;
sbit LCD_D5_Direction at TRISB3_bit;
sbit LCD_D6_Direction at TRISB4_bit;
sbit LCD_D7_Direction at TRISB5_bit;
// End LCD module connections
//////////////////////////////
void StartSignal(){
TRISC.F0 = 0; //Configure RD0 as output
PORTC.F0 = 0; //RD0 sends 0 to the sensor
delay_ms(18);
PORTC.F0 = 1; //RD0 sends 1 to the sensor
delay_us(30);
TRISC.F0 = 1; //Configure RD0 as input
}
//////////////////////////////
void CheckResponse(){
Check = 0;
delay_us(40);
if (PORTC.F0 == 0){
delay_us(80);
if (PORTC.F0 == 1) Check = 1; delay_us(40);}
}
//////////////////////////////
char ReadData(){
char i, j;
for(j = 0; j < 8; j++){
while(!PORTC.F0); //Wait until PORTD.F0 goes HIGH
delay_us(30);
if(PORTC.F0 == 0)
i&= ~(1<<(7 - j)); //Clear bit (7-b)
else {i|= (1 << (7 - j)); //Set bit (7-b)
while(PORTC.F0);} //Wait until PORTD.F0 goes LOW
}
return i;
}
void soil_Val(){
value_1 = ADC_Read(1);
volt_1=((value_1/1023.0)*5) * 20;
}
char uart_rd;
int q=0;
void main() {
int sensorValue=0;
//OSCCON = 0X70; // Set internal oscillator at 8MHz
ADCON1 = 0X00;
TRISA = 0XFF;
trisb = 0x00;
PORTB. B0 = 0;
TRISD = 0X00;
PORTD = 0X00;
Lcd_Init();
Lcd_Cmd(_LCD_CURSOR_OFF); // cursor off
Lcd_Cmd(_LCD_CLEAR); // clear LCD
UART1_Init(9600); // Initialize UART module at 9600 bps
Delay_ms(1000); // Wait for UART module to stabilize
lcd_out(1,1,"Init");
for(q=0; q<8; q++){
lcd_out(2,q+1,".");
delay_ms(100);
}
Lcd_Cmd(_LCD_CLEAR); // clear LCD
while(1){
soil_Val();
//show_lux();
/*-----Light Intensity------*/
value=ADC_Read(0);
volt=(value/1023.0)*5;
lux=((2500/volt)-500)/3.3;
delay_ms(10);
/*-----soil moisture------*/
//sensorValue = ADC_Read(1);
soil = volt_1;
//soil_1 = soil;
delay_ms(1); // delay in between reads for stability
StartSignal();
CheckResponse();
if(Check == 1){
RH_byte1 = ReadData();
RH_byte2 = ReadData();
T_byte1 = ReadData();
T_byte2 = ReadData();
Sum = ReadData();
if(Sum == ((RH_byte1+RH_byte2+T_byte1+T_byte2) & 0XFF)){
Temp_c = T_byte1;
Temp = T_byte1;
Temp = ((Temp << 8) | T_byte2);
Temp_y = ((Temp_c << 8) | T_byte2)/10;
RH_c = RH_byte1;
RH_y = ((RH_c << 8) | RH_byte2)/10;
RH = (RH_c << 8) | RH_byte2;
soil_Val();
lux_c = lux;
soil = volt_1;
Lcd_Out(1, 1, "L: lux");
Lcd_Out(2, 1, "S: % ");
Lcd_Out(1, 10, "T: . C");
Lcd_Out(2, 10, "H: . %");
if (Temp > 0X8000)
{
Lcd_Out(1, 11, "-");
Temp = Temp & 0X7FFF;
}
LCD_Chr(1, 12, 48 + ((Temp / 100) % 10));
LCD_Chr(1, 13, 48 + ((Temp / 10) % 10));
LCD_Chr(1, 15, 48 + (Temp % 10));
LCD_Chr(2, 12, 48 + ((RH / 100) % 10));
LCD_Chr(2, 13, 48 + ((RH / 10) % 10));
LCD_Chr(2, 15, 48 + (RH % 10));
LCD_Chr(1, 3, 48 + ((lux_c / 100) % 10));
LCD_Chr(1, 4, 48 + ((lux_c / 10) % 10));
LCD_Chr(1, 5, 48 + (lux_c % 10));
LCD_Chr(2, 3, 48 + ((soil / 100) % 10));
LCD_Chr(2, 4, 48 + ((soil / 10) % 10));
LCD_Chr(2, 5, 48 + (soil % 10));
bytetostr((unsigned short)volt_1, soil_1);
bytetostr((unsigned short)lux, lights);
bytetostr((unsigned short)Temp_y, Temp_2);
bytetostr((unsigned short)RH_y, RH_1);
//temp_u = Temp_1;
UART1_Write_text("temp = \n");
UART1_Write_text(Temp_2);
UART1_Write_text(" degrees c");
UART1_Write_text("\r");
UART1_Write_text("hum = \n" );
UART1_Write_text(RH_1);
UART1_Write_text(" %RH");
UART1_Write_text("\r");
UART1_Write_text("lights = \n\n");
UART1_Write_text(lights);
UART1_Write_text(" lux");
UART1_Write_text("\r");
UART1_Write_text("moisture = \n" );
UART1_Write_text(soil_1);
UART1_Write_text(" %moist");
UART1_Write_text("\r");
UART1_Write_text("\r");
UART1_Write_text("\r");
//
if(lux<100){
lamp = 1;
L_ON = 1;
L_OFF = 0;
check=1;
test=1;
//delay_ms(500);
}
else
{
if(check==1)
{
// put smth
}
lamp = 0;
L_ON = 0;
L_OFF = 1;
test=0;
//delay_ms(500);
}
//
if(Temp_Y < 20)
{
blow = 1;
//lamp = 1;
check=2;
test2=1;
//delay_ms(500);
}
if(Temp_Y > 26)
{
blow_onn = 0;
blow_off = 1;
blow = 0;
//check=2;
//test2=1;
//delay_ms(500);
}
else
{
//lamp = 1;
if(check==2)
{
//put smth
check=0;
test1=0;
}
blow_onn = 1;
blow_off = 0;
blow = 1;
//delay_ms(500);
}
if(soil<50)
{
S_LOW = 1;
S_HIGH = 0;
motor = 1;
//put smth
check=4;
test3=1;
delay_ms(500);
}
else
{
if(check==4)
{
check=0;
}
S_HIGH = 1;
S_LOW = 0;
motor = 0;
test3=0;
}
}
delay_ms(500);
}
else {
Lcd_Out(1, 1, "DHT22");
Lcd_Out(2, 1, "Removed");
}
portD.f1 = 1;
}
}

Das könnte Ihnen auch gefallen