Project Autus - Automated Plant Chamber

Dependencies:   TextLCD mbed

Fork of keypad_test by Plamen Totev

Autus

This is the codebase accompanying the project Autus.

Autus is an automated growth chamber for plants.

Features

Control Humidity inside chamber wrt to external humidity. Control Temperature inside chamber. ( Peltier Heaters/Coolers ) Water and shower plants. Control soil humidity. Monitor water tanks level (Load Cell) /media/uploads/umairaftab/frdm_-_new_page1.png

Code Base Features

Fixed timing and CRC for DHT-11 Sensor. Fixed OneWire bug for ds18b20

Cyclic Executive Scheduler with Priority. Async IPC framework for PC App over bluetooth

Fake RTC systick, I was having some trouble with the on board rtc.

/media/uploads/umairaftab/download.png

Committer:
umairaftab
Date:
Mon Apr 14 07:05:30 2014 +0000
Revision:
51:8bbe178047a9
Parent:
50:7e3e6e3ed8ef
Child:
52:8f863cb2cbae
Peltier Temp Sensor Test 10.8

Who changed what in which revision?

UserRevisionLine numberNew contents of line
umairaftab 8:2d462919519e 1
umairaftab 8:2d462919519e 2 //QUICK REFS:
umairaftab 8:2d462919519e 3 // TICKER is using timer 1 for buzzer.
umairaftab 8:2d462919519e 4
umairaftab 1:9ef26efedcea 5 #include "mbed.h"
umairaftab 3:087ce66714c0 6
umairaftab 1:9ef26efedcea 7 #include "keypad.h"
umairaftab 1:9ef26efedcea 8 #include "buzz.h"
umairaftab 7:1d691f81d455 9
umairaftab 7:1d691f81d455 10 #include "pindefs.h" //led pin definitions
umairaftab 3:087ce66714c0 11 #include "led_lights.h"
umairaftab 7:1d691f81d455 12
umairaftab 3:087ce66714c0 13 #include "peltier.h"
umairaftab 7:1d691f81d455 14 #include "peltier_pindefs.h"
umairaftab 7:1d691f81d455 15
umairaftab 7:1d691f81d455 16 #include "pumps.h"
umairaftab 7:1d691f81d455 17 #include "pumps_pindefs.h"
umairaftab 7:1d691f81d455 18
umairaftab 7:1d691f81d455 19 #include "airhumidity.h"
umairaftab 7:1d691f81d455 20 #include "soilmoisture.h"
umairaftab 7:1d691f81d455 21 #include "soilmoisture_pindefs.h"
umairaftab 8:2d462919519e 22
umairaftab 7:1d691f81d455 23 #include "ui.h"
umairaftab 7:1d691f81d455 24 #include "ui_pindefs.h"
umairaftab 7:1d691f81d455 25 #include "TextLCD.h"
umairaftab 7:1d691f81d455 26
umairaftab 8:2d462919519e 27 #include "rtcimp.h"
umairaftab 8:2d462919519e 28
umairaftab 14:72176f1e4907 29 #include "weight.h"
umairaftab 14:72176f1e4907 30 #include "weight_pindefs.h"
umairaftab 14:72176f1e4907 31
umairaftab 36:ce0ca02a8253 32 #include "cycleair.h"
umairaftab 36:ce0ca02a8253 33 #include "cycleair_pindef.h"
umairaftab 36:ce0ca02a8253 34
umairaftab 42:41f6c241a987 35 #include "DS18B20.h"
umairaftab 42:41f6c241a987 36 #include "OneWireDefs.h"
umairaftab 42:41f6c241a987 37
umairaftab 12:b3137bb72ef7 38 #include <string>
umairaftab 12:b3137bb72ef7 39 using namespace std;
umairaftab 12:b3137bb72ef7 40
umairaftab 8:2d462919519e 41 //SERIAL
umairaftab 36:ce0ca02a8253 42 Serial bluetooth_dev(PTA2, PTA1); // tx, rx
umairaftab 8:2d462919519e 43 Serial printer(PTC4,PTC3); // tx, rx
umairaftab 8:2d462919519e 44 //TICKERS
umairaftab 1:9ef26efedcea 45 Ticker timer1ms;
umairaftab 8:2d462919519e 46 Ticker clock_mine;
umairaftab 11:f9ffd5ab7e94 47 Timer lcd_timeout;
umairaftab 8:2d462919519e 48 //FLAGS
umairaftab 8:2d462919519e 49 bool startup_flag=true;
umairaftab 9:43c339533f7f 50 bool watered_plant1 = false;
umairaftab 9:43c339533f7f 51 int watered_plant1_time = 0;
umairaftab 9:43c339533f7f 52 bool watered_plant2 = false;
umairaftab 9:43c339533f7f 53 int watered_plant2_time = 0;
umairaftab 8:2d462919519e 54
umairaftab 8:2d462919519e 55 //SETPOINTS
umairaftab 8:2d462919519e 56 float setpoint_air_humidity = 30.00 ;
umairaftab 8:2d462919519e 57 float setpoint_soil_humid1 = 0.3 ;
umairaftab 8:2d462919519e 58 float setpoint_soil_humid2 = 0.3 ;
umairaftab 8:2d462919519e 59
umairaftab 12:b3137bb72ef7 60 float setpoint_MAX_air_temp = 45;
umairaftab 12:b3137bb72ef7 61
umairaftab 11:f9ffd5ab7e94 62 int setpoint_red_lights;
umairaftab 11:f9ffd5ab7e94 63 int setpoint_blue_lights;
umairaftab 11:f9ffd5ab7e94 64 int setpoint_green_lights;
umairaftab 12:b3137bb72ef7 65
umairaftab 8:2d462919519e 66 //WINDOWING
umairaftab 9:43c339533f7f 67 float window_f = 5 ;
umairaftab 8:2d462919519e 68 int window_i =2 ;
umairaftab 8:2d462919519e 69
umairaftab 8:2d462919519e 70 //GLOBAL VARS
umairaftab 8:2d462919519e 71 float current_water_level = 0;
umairaftab 12:b3137bb72ef7 72 bool lcd_timeout_flag=false;
umairaftab 38:9f4107db1bff 73
umairaftab 37:892872c3fa96 74 int led_set_time=0;
umairaftab 37:892872c3fa96 75 int led_off_time=0;
umairaftab 37:892872c3fa96 76 bool lights_startup_flag=true;
umairaftab 38:9f4107db1bff 77
umairaftab 37:892872c3fa96 78 int sensor_function_call_time=0;
umairaftab 38:9f4107db1bff 79
umairaftab 38:9f4107db1bff 80 int pelt_call_time=0;
umairaftab 38:9f4107db1bff 81
umairaftab 38:9f4107db1bff 82 float desire_temp=40;
umairaftab 50:7e3e6e3ed8ef 83 float desire_temp_air=30;
umairaftab 38:9f4107db1bff 84 bool pelt_keypad_enable=false;
umairaftab 38:9f4107db1bff 85 bool pelt_first_time = true;
umairaftab 38:9f4107db1bff 86 bool pelt_overheat = false;
umairaftab 8:2d462919519e 87 //SAFETY LIMITS
umairaftab 38:9f4107db1bff 88 const float max_peltier_temp = 50 ; //CELCIUS
umairaftab 12:b3137bb72ef7 89 const int MAX_WATERING_TIME_GAP = 20; //Number of Hours
umairaftab 12:b3137bb72ef7 90 const int CYCLE_AIR_TIME = 2; //Wait between on and off seconds
umairaftab 12:b3137bb72ef7 91 const int LCD_TIMEOUT_VALUE = 30; //Number of seconds
umairaftab 36:ce0ca02a8253 92 const char status = 'F'; //For bluetooth Serial
umairaftab 38:9f4107db1bff 93 const int led_lights_timeout=5; // Timeout afterwhich to turn off/on lights hours
umairaftab 37:892872c3fa96 94 const int sensor_function_call_timeout=3; //Timeout for sensorcall and function
umairaftab 38:9f4107db1bff 95 const int pelt_call_timeout=30;
umairaftab 36:ce0ca02a8253 96
umairaftab 36:ce0ca02a8253 97 //*************************FUNCTION CALLBACK FOR SERIAL INTTERUPTS********************************
umairaftab 36:ce0ca02a8253 98 void callback_bluetooth() {
umairaftab 36:ce0ca02a8253 99 // Note: you need to actually read from the serial to clear the RX interrupt
umairaftab 36:ce0ca02a8253 100 if(bluetooth_dev.getc()=='S'){
umairaftab 36:ce0ca02a8253 101
umairaftab 36:ce0ca02a8253 102 printf("Info %c %4.2f %4.2f %4.2f %4.2f %4.2f %4.2f %4.2f %4.2f \n\r", status,outside_temp,inside_temp,inside_humidity,outside_humidity,inside_dewpoint,outside_dewpoint,soil1_humid,soil2_humid) ;
umairaftab 36:ce0ca02a8253 103
umairaftab 36:ce0ca02a8253 104 //myled = !myled;
umairaftab 36:ce0ca02a8253 105 }
umairaftab 36:ce0ca02a8253 106 //printf("%c\n\r", device.getc());
umairaftab 36:ce0ca02a8253 107
umairaftab 36:ce0ca02a8253 108 }
umairaftab 12:b3137bb72ef7 109
umairaftab 12:b3137bb72ef7 110
umairaftab 8:2d462919519e 111 //**************************FUNCTION TO READ SENSORS **********************************************
umairaftab 8:2d462919519e 112 void read_sensors(){
umairaftab 8:2d462919519e 113
umairaftab 8:2d462919519e 114 //Read values for AIR
umairaftab 8:2d462919519e 115
umairaftab 8:2d462919519e 116 //OUTSIDE
umairaftab 8:2d462919519e 117 outside_humidity = get_air_humid_outside();
umairaftab 8:2d462919519e 118 outside_temp = get_air_temp_outside(temp_unit);
umairaftab 8:2d462919519e 119 outside_dewpoint = get_air_dewpoint_outside();
umairaftab 8:2d462919519e 120
umairaftab 8:2d462919519e 121 //INSIDE
umairaftab 8:2d462919519e 122 inside_humidity = get_air_humid_inside();
umairaftab 8:2d462919519e 123 inside_temp = get_air_temp_inside(temp_unit);
umairaftab 8:2d462919519e 124 inside_dewpoint = get_air_dewpoint_inside();
umairaftab 8:2d462919519e 125
umairaftab 8:2d462919519e 126 //Read value for soil
umairaftab 8:2d462919519e 127 read_soil_humidity();
umairaftab 8:2d462919519e 128 calc_soil_humid_values(); //values in soil1_humid and soil2_humid perecentages
umairaftab 11:f9ffd5ab7e94 129 soil1_humidity = soil1_humid ;
umairaftab 11:f9ffd5ab7e94 130 soil2_humidity = soil2_humid ;
umairaftab 14:72176f1e4907 131 //printf("%4.2f \n\r",soil1_humidity);
umairaftab 14:72176f1e4907 132 //READ LOAD SENSOR
umairaftab 14:72176f1e4907 133 read_weight();
umairaftab 14:72176f1e4907 134 calc_weight();
umairaftab 14:72176f1e4907 135 weight_sensor = weight1;
umairaftab 8:2d462919519e 136 }
umairaftab 8:2d462919519e 137
umairaftab 8:2d462919519e 138 //****************************Functions that perform tasks**************************************
umairaftab 37:892872c3fa96 139 //CYCLE AIR
umairaftab 37:892872c3fa96 140 void cycleair(){
umairaftab 37:892872c3fa96 141
umairaftab 37:892872c3fa96 142 //Turn on fan
umairaftab 37:892872c3fa96 143 cycle_air_on();
umairaftab 37:892872c3fa96 144 wait(CYCLE_AIR_TIME);
umairaftab 37:892872c3fa96 145 //turn of fan
umairaftab 37:892872c3fa96 146 cycle_air_off();
umairaftab 37:892872c3fa96 147
umairaftab 37:892872c3fa96 148 }
umairaftab 9:43c339533f7f 149 //Water Plants
umairaftab 8:2d462919519e 150 void waterplants(){
umairaftab 8:2d462919519e 151
umairaftab 8:2d462919519e 152
umairaftab 9:43c339533f7f 153 if(startup_flag == true){
umairaftab 14:72176f1e4907 154 //call for pump function
umairaftab 14:72176f1e4907 155
umairaftab 9:43c339533f7f 156 watered_plant1 = true;
umairaftab 9:43c339533f7f 157 watered_plant1_time = hour ;
umairaftab 9:43c339533f7f 158 watered_plant2 = true;
umairaftab 9:43c339533f7f 159 watered_plant2_time = hour ;
umairaftab 14:72176f1e4907 160 pumps(true,true,true,false);
umairaftab 14:72176f1e4907 161 wait(5.0);
umairaftab 14:72176f1e4907 162 pumps(false,false,false,false);
umairaftab 9:43c339533f7f 163 }
umairaftab 9:43c339533f7f 164 else{
umairaftab 9:43c339533f7f 165
umairaftab 10:1a0fe96381b0 166 if( (soil1_humid < setpoint_soil_humid1) || (watered_plant1 == false) ){
umairaftab 9:43c339533f7f 167 //enable pump1
umairaftab 9:43c339533f7f 168 watered_plant1 = true;
umairaftab 9:43c339533f7f 169 watered_plant1_time = hour ;
umairaftab 14:72176f1e4907 170 pumps(true,true,true,false);
umairaftab 14:72176f1e4907 171 wait(5.0);
umairaftab 14:72176f1e4907 172 pumps(false,false,false,false);
umairaftab 9:43c339533f7f 173 }
umairaftab 10:1a0fe96381b0 174 if( (soil2_humid < setpoint_soil_humid2) || (watered_plant2 == false) ){
umairaftab 9:43c339533f7f 175 //enable pump2
umairaftab 9:43c339533f7f 176 watered_plant2 = true;
umairaftab 9:43c339533f7f 177 watered_plant2_time = hour ;
umairaftab 14:72176f1e4907 178 pumps(true,true,true,false);
umairaftab 14:72176f1e4907 179 wait(5.0);
umairaftab 14:72176f1e4907 180 pumps(false,false,false,false);
umairaftab 9:43c339533f7f 181 }
umairaftab 9:43c339533f7f 182 }
umairaftab 10:1a0fe96381b0 183 //Make sure it is watered at least every x hours in case soil humid doesnt work
umairaftab 9:43c339533f7f 184 if (watered_plant1 == true){
umairaftab 9:43c339533f7f 185 if(abs(hour-watered_plant1_time)>MAX_WATERING_TIME_GAP){
umairaftab 9:43c339533f7f 186 watered_plant1 = false;
umairaftab 37:892872c3fa96 187 cycleair();
umairaftab 9:43c339533f7f 188 }
umairaftab 9:43c339533f7f 189 }
umairaftab 9:43c339533f7f 190 if (watered_plant2 == true){
umairaftab 9:43c339533f7f 191 if(abs(hour-watered_plant2_time)>MAX_WATERING_TIME_GAP){
umairaftab 9:43c339533f7f 192 watered_plant2 = false;
umairaftab 37:892872c3fa96 193 cycleair();
umairaftab 9:43c339533f7f 194 }
umairaftab 9:43c339533f7f 195 }
umairaftab 9:43c339533f7f 196
umairaftab 9:43c339533f7f 197 }
umairaftab 9:43c339533f7f 198
umairaftab 9:43c339533f7f 199 // Air Humidity Level
umairaftab 9:43c339533f7f 200 void airhumidity(){
umairaftab 9:43c339533f7f 201
umairaftab 11:f9ffd5ab7e94 202 if( !( (setpoint_air_humidity+window_f > inside_humidity) && (setpoint_air_humidity-window_f < inside_humidity) ) ){
umairaftab 9:43c339533f7f 203
umairaftab 9:43c339533f7f 204 //Turn on Air humidity fan
umairaftab 14:72176f1e4907 205 pumps(false,false,false,true);
umairaftab 9:43c339533f7f 206 wait(5);
umairaftab 9:43c339533f7f 207 //Turn off Air humisity fan
umairaftab 14:72176f1e4907 208 pumps(false,false,false,false);
umairaftab 9:43c339533f7f 209 }
umairaftab 9:43c339533f7f 210 }
umairaftab 9:43c339533f7f 211
umairaftab 37:892872c3fa96 212
umairaftab 14:72176f1e4907 213 //**********************************LCD TIMEOUT FUNCTION*********************************
umairaftab 12:b3137bb72ef7 214 void lcd_timeout_check(){
umairaftab 12:b3137bb72ef7 215
umairaftab 12:b3137bb72ef7 216 if(lcd_timeout.read()>LCD_TIMEOUT_VALUE){
umairaftab 12:b3137bb72ef7 217 lcd_timeout_flag = true;
umairaftab 12:b3137bb72ef7 218 }
umairaftab 12:b3137bb72ef7 219
umairaftab 12:b3137bb72ef7 220 }
umairaftab 26:2f59456a7bad 221 void settings_submenu(int counter_menu){
umairaftab 26:2f59456a7bad 222
umairaftab 26:2f59456a7bad 223 char key_value2;
umairaftab 26:2f59456a7bad 224 bool break_flag = false;
umairaftab 26:2f59456a7bad 225 switch(counter_menu){
umairaftab 26:2f59456a7bad 226 case 0:
umairaftab 26:2f59456a7bad 227 lcd.cls();
umairaftab 26:2f59456a7bad 228 lcd.locate(0,0);
umairaftab 26:2f59456a7bad 229 lcd.printf("Not Authorised");
umairaftab 26:2f59456a7bad 230 wait(5);
umairaftab 26:2f59456a7bad 231 break;
umairaftab 26:2f59456a7bad 232 case 1:
umairaftab 26:2f59456a7bad 233 break_flag = false;
umairaftab 26:2f59456a7bad 234 lcd.cls();
umairaftab 26:2f59456a7bad 235 lcd.locate(0,0);
umairaftab 26:2f59456a7bad 236 lcd.printf("Cur Air Humidity Lvl");
umairaftab 26:2f59456a7bad 237 //lcd.locate(0,1);
umairaftab 26:2f59456a7bad 238 //lcd.printf("%3.1f",setpoint_air_humidity);
umairaftab 26:2f59456a7bad 239 while(!break_flag){
umairaftab 26:2f59456a7bad 240 lcd.locate(0,1);
umairaftab 26:2f59456a7bad 241 lcd.printf("%3.1f",setpoint_air_humidity);
umairaftab 26:2f59456a7bad 242 key_value2 = Keypad();
umairaftab 26:2f59456a7bad 243 wait(0.2);
umairaftab 36:ce0ca02a8253 244 if(key_value2 == 74){setpoint_air_humidity++;}
umairaftab 36:ce0ca02a8253 245 else if(key_value2 == 71){setpoint_air_humidity--;}
umairaftab 26:2f59456a7bad 246 else if(key_value2 == 75){break_flag=true;} //enter
umairaftab 26:2f59456a7bad 247 if (setpoint_air_humidity <0 || setpoint_air_humidity >99) {setpoint_air_humidity=30.00;}
umairaftab 26:2f59456a7bad 248 }
umairaftab 26:2f59456a7bad 249
umairaftab 26:2f59456a7bad 250 lcd.cls();
umairaftab 26:2f59456a7bad 251 lcd.locate(0,0);
umairaftab 26:2f59456a7bad 252 lcd.printf("NEW Air Humid Setpoint");
umairaftab 26:2f59456a7bad 253 lcd.locate(0,1);
umairaftab 26:2f59456a7bad 254 lcd.printf("%3.1f",setpoint_air_humidity);
umairaftab 26:2f59456a7bad 255 wait(5);
umairaftab 26:2f59456a7bad 256
umairaftab 26:2f59456a7bad 257 break;
umairaftab 26:2f59456a7bad 258 case 2:
umairaftab 26:2f59456a7bad 259 break_flag = false;
umairaftab 26:2f59456a7bad 260 lcd.cls();
umairaftab 26:2f59456a7bad 261 lcd.locate(0,0);
umairaftab 26:2f59456a7bad 262 lcd.printf("Soil Humidity Setpoint");
umairaftab 26:2f59456a7bad 263
umairaftab 26:2f59456a7bad 264 while(!break_flag){
umairaftab 26:2f59456a7bad 265 lcd.locate(0,1);
umairaftab 26:2f59456a7bad 266 lcd.printf("S1: %4.2f",setpoint_soil_humid1);
umairaftab 26:2f59456a7bad 267 lcd.printf(" S2: %4.2f",setpoint_soil_humid2);
umairaftab 26:2f59456a7bad 268 key_value2 = Keypad();
umairaftab 26:2f59456a7bad 269 wait(0.2);
umairaftab 36:ce0ca02a8253 270 if(key_value2 == 62){ //up
umairaftab 26:2f59456a7bad 271 setpoint_soil_humid1++;
umairaftab 26:2f59456a7bad 272 setpoint_soil_humid2++;
umairaftab 26:2f59456a7bad 273 }
umairaftab 36:ce0ca02a8253 274 else if(key_value2 == 59){//down
umairaftab 26:2f59456a7bad 275 setpoint_soil_humid1--;
umairaftab 26:2f59456a7bad 276 setpoint_soil_humid2--;
umairaftab 26:2f59456a7bad 277 }
umairaftab 26:2f59456a7bad 278 else if(key_value2 == 75){break_flag=true;}//enterkey
umairaftab 26:2f59456a7bad 279 //if (setpoint_air_humidity <0 || setpoint_air_humidity >99) {setpoint_air_humidity=30.00;}
umairaftab 26:2f59456a7bad 280 }
umairaftab 26:2f59456a7bad 281
umairaftab 26:2f59456a7bad 282 lcd.cls();
umairaftab 26:2f59456a7bad 283 lcd.locate(0,0);
umairaftab 26:2f59456a7bad 284 lcd.printf("New Soil Setpoints:");
umairaftab 26:2f59456a7bad 285 lcd.locate(0,1);
umairaftab 26:2f59456a7bad 286 lcd.printf("S1: %4.2f",setpoint_soil_humid1);
umairaftab 26:2f59456a7bad 287 lcd.printf(" S2: %4.2f",setpoint_soil_humid2);
umairaftab 26:2f59456a7bad 288 wait(5);
umairaftab 26:2f59456a7bad 289 break;
umairaftab 26:2f59456a7bad 290 case 3:
umairaftab 26:2f59456a7bad 291
umairaftab 26:2f59456a7bad 292 break_flag = false;
umairaftab 26:2f59456a7bad 293 lcd.cls();
umairaftab 26:2f59456a7bad 294 lcd.locate(0,0);
umairaftab 26:2f59456a7bad 295 lcd.printf("Cur Air Tmp Setpoint");
umairaftab 26:2f59456a7bad 296 while(!break_flag){
umairaftab 26:2f59456a7bad 297 lcd.locate(0,1);
umairaftab 26:2f59456a7bad 298 lcd.printf("%3.1f",setpoint_MAX_air_temp);
umairaftab 26:2f59456a7bad 299 key_value2 = Keypad();
umairaftab 26:2f59456a7bad 300 wait(0.2);
umairaftab 36:ce0ca02a8253 301 if(key_value2 == 74){setpoint_MAX_air_temp++;}
umairaftab 36:ce0ca02a8253 302 else if(key_value2 == 71){setpoint_MAX_air_temp--;}
umairaftab 26:2f59456a7bad 303 else if(key_value2 == 75){break_flag=true;}
umairaftab 26:2f59456a7bad 304 if (setpoint_MAX_air_temp <0 || setpoint_MAX_air_temp >99) {setpoint_MAX_air_temp=45.0;}
umairaftab 26:2f59456a7bad 305 }
umairaftab 26:2f59456a7bad 306
umairaftab 26:2f59456a7bad 307 lcd.cls();
umairaftab 26:2f59456a7bad 308 lcd.locate(0,0);
umairaftab 26:2f59456a7bad 309 lcd.printf("NEW Air Tmp Setpoint");
umairaftab 26:2f59456a7bad 310 lcd.locate(0,1);
umairaftab 26:2f59456a7bad 311 lcd.printf("%3.1f",setpoint_MAX_air_temp);
umairaftab 26:2f59456a7bad 312 wait(5);
umairaftab 26:2f59456a7bad 313 break;
umairaftab 26:2f59456a7bad 314 }//switch end
umairaftab 26:2f59456a7bad 315
umairaftab 26:2f59456a7bad 316 }
umairaftab 14:72176f1e4907 317 //***************************************SETTINGS UI*************************************
umairaftab 12:b3137bb72ef7 318 void ui_settings(){
umairaftab 12:b3137bb72ef7 319
umairaftab 12:b3137bb72ef7 320 lcd.cls();
umairaftab 12:b3137bb72ef7 321 lcd.locate(0,0);
umairaftab 12:b3137bb72ef7 322 lcd.printf("Autus Settings");
umairaftab 12:b3137bb72ef7 323 lcd.locate(0,1);
umairaftab 12:b3137bb72ef7 324 lcd.printf("Performing Checks");
umairaftab 12:b3137bb72ef7 325 char key_value;
umairaftab 12:b3137bb72ef7 326 bool exit_settings=false;
umairaftab 12:b3137bb72ef7 327
umairaftab 12:b3137bb72ef7 328 //disable peltier
umairaftab 14:72176f1e4907 329 peltier(false,false,false,false,0);
umairaftab 12:b3137bb72ef7 330
umairaftab 12:b3137bb72ef7 331 wait(2);
umairaftab 32:d8b232481ec5 332 string menu[5];
umairaftab 12:b3137bb72ef7 333 menu[0]= "1.LED Brightness";
umairaftab 12:b3137bb72ef7 334 menu[1]= "2.Air Humidty Lvl";
umairaftab 12:b3137bb72ef7 335 menu[2]= "3.Soil Moisture Lvl";
umairaftab 12:b3137bb72ef7 336 menu[3]= "4.Air Temperature";
umairaftab 32:d8b232481ec5 337 menu[4]= " ";
umairaftab 12:b3137bb72ef7 338 lcd.cls();
umairaftab 12:b3137bb72ef7 339 int counter_menu =0 ;
umairaftab 29:b712f073a397 340 bool overflow_menu = false;
umairaftab 12:b3137bb72ef7 341 while(!exit_settings){
umairaftab 26:2f59456a7bad 342
umairaftab 12:b3137bb72ef7 343 key_value = Keypad();
umairaftab 35:8bea464c2028 344 printf("Key %d\n\r",key_value);
umairaftab 27:24478764d4b2 345 wait(0.1);
umairaftab 25:a6d1eaf2041c 346 if(key_value == 150){
umairaftab 12:b3137bb72ef7 347 lcd.locate(0,0);
umairaftab 12:b3137bb72ef7 348 lcd.printf(">%s",menu[counter_menu].c_str());
umairaftab 12:b3137bb72ef7 349 lcd.locate(0,1);
umairaftab 32:d8b232481ec5 350 if(counter_menu ==4){
umairaftab 25:a6d1eaf2041c 351 counter_menu = 0;
umairaftab 29:b712f073a397 352 overflow_menu=true;
umairaftab 25:a6d1eaf2041c 353 lcd.printf(" %s",menu[counter_menu].c_str());
umairaftab 12:b3137bb72ef7 354 }
umairaftab 12:b3137bb72ef7 355 else{
umairaftab 25:a6d1eaf2041c 356 lcd.printf(" %s",menu[counter_menu+1].c_str());
umairaftab 12:b3137bb72ef7 357 }
umairaftab 26:2f59456a7bad 358 //wait(0.2);
umairaftab 12:b3137bb72ef7 359 }//No Press If Block
umairaftab 36:ce0ca02a8253 360 else if(key_value == 68){//Down Key Pressed if block
umairaftab 12:b3137bb72ef7 361 lcd.cls();
umairaftab 29:b712f073a397 362 if(overflow_menu==false){
umairaftab 32:d8b232481ec5 363 counter_menu++;
umairaftab 33:d1b04f1a792a 364 //printf("CounterOverflow)");
umairaftab 32:d8b232481ec5 365 }
umairaftab 29:b712f073a397 366 else{overflow_menu=false;}
umairaftab 32:d8b232481ec5 367
umairaftab 12:b3137bb72ef7 368 }//Down Key Pressed if block end
umairaftab 36:ce0ca02a8253 369 else if(key_value == 65){ //OK Key Pressed if block
umairaftab 26:2f59456a7bad 370 settings_submenu(counter_menu);
umairaftab 33:d1b04f1a792a 371 lcd.cls();
umairaftab 12:b3137bb72ef7 372 } //OK button if block
umairaftab 36:ce0ca02a8253 373 else if(key_value == 75){ //ENTR Button
umairaftab 12:b3137bb72ef7 374 exit_settings = true;
umairaftab 12:b3137bb72ef7 375 lcd.cls();
umairaftab 12:b3137bb72ef7 376 lcd.printf("SAVE Config");
umairaftab 12:b3137bb72ef7 377 wait(2);
umairaftab 12:b3137bb72ef7 378 }
umairaftab 12:b3137bb72ef7 379
umairaftab 12:b3137bb72ef7 380 }//While settings loop exit
umairaftab 12:b3137bb72ef7 381 lcd.cls();
umairaftab 12:b3137bb72ef7 382 lcd.printf("Exit Settings");
umairaftab 25:a6d1eaf2041c 383 wait(5);
umairaftab 12:b3137bb72ef7 384 }
umairaftab 26:2f59456a7bad 385
umairaftab 26:2f59456a7bad 386
umairaftab 12:b3137bb72ef7 387 //Function to process keypad inputs
umairaftab 12:b3137bb72ef7 388 void process_user_input(char keypad_value_in, int ui_current_screen_in){
umairaftab 12:b3137bb72ef7 389
umairaftab 18:7ec1691d0d9d 390 if(keypad_value_in == 61){
umairaftab 12:b3137bb72ef7 391 if(lcd_timeout_flag == false){
umairaftab 12:b3137bb72ef7 392 switch (ui_current_screen_in){
umairaftab 12:b3137bb72ef7 393 case 1:
umairaftab 12:b3137bb72ef7 394 ui_screen2();
umairaftab 12:b3137bb72ef7 395 ui_current_screen_in =2;
umairaftab 12:b3137bb72ef7 396 break;
umairaftab 12:b3137bb72ef7 397 case 2:
umairaftab 12:b3137bb72ef7 398 ui_screen3();
umairaftab 12:b3137bb72ef7 399 ui_current_screen_in =3;
umairaftab 12:b3137bb72ef7 400 break;
umairaftab 12:b3137bb72ef7 401 case 3:
umairaftab 12:b3137bb72ef7 402 ui_screen4();
umairaftab 12:b3137bb72ef7 403 ui_current_screen_in =4;
umairaftab 12:b3137bb72ef7 404 break;
umairaftab 12:b3137bb72ef7 405 }//switch block current ui screen
umairaftab 12:b3137bb72ef7 406 lcd_timeout.reset();
umairaftab 12:b3137bb72ef7 407 lcd_timeout.start();
umairaftab 12:b3137bb72ef7 408 wait(2);
umairaftab 12:b3137bb72ef7 409 }// if block lcdflag
umairaftab 12:b3137bb72ef7 410 else{
umairaftab 12:b3137bb72ef7 411 ui_screen1();
umairaftab 12:b3137bb72ef7 412 wait(5);
umairaftab 12:b3137bb72ef7 413 }
umairaftab 12:b3137bb72ef7 414 }// if block 36 end
umairaftab 12:b3137bb72ef7 415
umairaftab 12:b3137bb72ef7 416 // check for setting screen press enter
umairaftab 18:7ec1691d0d9d 417 if(keypad_value_in == 58){
umairaftab 12:b3137bb72ef7 418 //Disable peltier
umairaftab 12:b3137bb72ef7 419 ui_settings();
umairaftab 12:b3137bb72ef7 420 wait(5);
umairaftab 12:b3137bb72ef7 421 }
umairaftab 14:72176f1e4907 422
umairaftab 14:72176f1e4907 423 if(keypad_value_in ==100){
umairaftab 14:72176f1e4907 424 ui_screen1();
umairaftab 17:0ff7385db570 425 wait(0.2);
umairaftab 14:72176f1e4907 426 }
umairaftab 12:b3137bb72ef7 427 }
umairaftab 12:b3137bb72ef7 428
umairaftab 12:b3137bb72ef7 429
umairaftab 12:b3137bb72ef7 430
umairaftab 12:b3137bb72ef7 431
umairaftab 8:2d462919519e 432 //***************************PLACEHOLDER FUNCTION TO DISABLE EVERYTHING **********************
umairaftab 8:2d462919519e 433 void disable_everything(){
umairaftab 8:2d462919519e 434
umairaftab 10:1a0fe96381b0 435 //Disable peltier,vac,fans,pumps,lights.
umairaftab 14:72176f1e4907 436 pumps(false,false,false,false);
umairaftab 14:72176f1e4907 437 peltier(false,false,false,false,0);
umairaftab 37:892872c3fa96 438 cycle_air_off();
umairaftab 8:2d462919519e 439 }
umairaftab 8:2d462919519e 440
umairaftab 8:2d462919519e 441
umairaftab 8:2d462919519e 442 //*********************************************************************************************
umairaftab 8:2d462919519e 443 //* *
umairaftab 8:2d462919519e 444 //* *
umairaftab 8:2d462919519e 445 //* *
umairaftab 8:2d462919519e 446 //* *
umairaftab 8:2d462919519e 447 //* MAIN ROUTINE *
umairaftab 8:2d462919519e 448 //* *
umairaftab 8:2d462919519e 449 //* DO NOT MODIFY WITHOUT TELLING UMAIR *
umairaftab 8:2d462919519e 450 //* *
umairaftab 8:2d462919519e 451 //* *
umairaftab 8:2d462919519e 452 //*********************************************************************************************
umairaftab 1:9ef26efedcea 453
umairaftab 1:9ef26efedcea 454 int main(void)
umairaftab 1:9ef26efedcea 455 {
umairaftab 8:2d462919519e 456
umairaftab 8:2d462919519e 457 //call function that disables everything.
umairaftab 8:2d462919519e 458 disable_everything();
umairaftab 8:2d462919519e 459
umairaftab 8:2d462919519e 460
umairaftab 31:a90b72ae9835 461 lcd_backlight_on();
umairaftab 8:2d462919519e 462 //FOR INTERNAL CLOCK
umairaftab 33:d1b04f1a792a 463 clock_mine.attach(&sec_inc, 1.0);
umairaftab 36:ce0ca02a8253 464
umairaftab 8:2d462919519e 465 char keypad_value;
umairaftab 11:f9ffd5ab7e94 466 int ui_current_screen = 1;
umairaftab 10:1a0fe96381b0 467 //************************************BOOT SEQUENCE*********************
umairaftab 8:2d462919519e 468 //call LCD boot
umairaftab 8:2d462919519e 469 ui_startup();
umairaftab 9:43c339533f7f 470 wait(2);
umairaftab 8:2d462919519e 471 //SET TIME
umairaftab 8:2d462919519e 472 rtcimp_settime(6,0);
umairaftab 8:2d462919519e 473 //call function that reads values
umairaftab 9:43c339533f7f 474
umairaftab 9:43c339533f7f 475 /* FOR CRTITICALITY
umairaftab 9:43c339533f7f 476 NVIC_DisableIRQ(TIMER3_IRQn);
umairaftab 9:43c339533f7f 477
umairaftab 9:43c339533f7f 478 // critical section
umairaftab 9:43c339533f7f 479
umairaftab 9:43c339533f7f 480 NVIC_EnableIRQ(TIMER3_IRQn);
umairaftab 38:9f4107db1bff 481 */ wait(5);
umairaftab 38:9f4107db1bff 482 lcd.cls();
umairaftab 38:9f4107db1bff 483 lcd.locate(0,0);
umairaftab 38:9f4107db1bff 484 lcd.printf("Find Pelt Temp Sense");
umairaftab 38:9f4107db1bff 485
umairaftab 44:083a8de27bd9 486 tempinit();
umairaftab 42:41f6c241a987 487 //peltierin_temp = dsen_temp_in;
umairaftab 42:41f6c241a987 488 //peltierout_temp = dsen_temp_out;
umairaftab 38:9f4107db1bff 489
umairaftab 38:9f4107db1bff 490 wait(2);
umairaftab 38:9f4107db1bff 491 lcd.cls();
umairaftab 38:9f4107db1bff 492 lcd.locate(0,0);
umairaftab 38:9f4107db1bff 493 lcd.printf("Find Pelt Temp Sense");
umairaftab 38:9f4107db1bff 494 lcd.printf("Found Them");
umairaftab 38:9f4107db1bff 495
umairaftab 38:9f4107db1bff 496 wait(2);
umairaftab 9:43c339533f7f 497 lcd.cls();
umairaftab 9:43c339533f7f 498 lcd.locate(0,0);
umairaftab 9:43c339533f7f 499 lcd.printf("Reading Sensors");
umairaftab 9:43c339533f7f 500
umairaftab 8:2d462919519e 501 read_sensors();
umairaftab 8:2d462919519e 502
umairaftab 9:43c339533f7f 503 wait(2);
umairaftab 9:43c339533f7f 504 lcd.cls();
umairaftab 9:43c339533f7f 505 lcd.locate(0,0);
umairaftab 9:43c339533f7f 506 lcd.printf("Done Reading Sensors");
umairaftab 8:2d462919519e 507 //call function that performs functions.
umairaftab 8:2d462919519e 508
umairaftab 9:43c339533f7f 509 wait(2);
umairaftab 9:43c339533f7f 510 lcd.cls();
umairaftab 9:43c339533f7f 511 lcd.locate(0,0);
umairaftab 9:43c339533f7f 512 lcd.printf("Watering Plants");
umairaftab 9:43c339533f7f 513
umairaftab 38:9f4107db1bff 514 waterplants();
umairaftab 9:43c339533f7f 515
umairaftab 9:43c339533f7f 516 wait(2);
umairaftab 9:43c339533f7f 517 lcd.cls();
umairaftab 9:43c339533f7f 518 lcd.locate(0,0);
umairaftab 9:43c339533f7f 519 lcd.printf("Air Humidity");
umairaftab 9:43c339533f7f 520
umairaftab 37:892872c3fa96 521 airhumidity();
umairaftab 9:43c339533f7f 522
umairaftab 9:43c339533f7f 523 wait(2);
umairaftab 9:43c339533f7f 524 lcd.cls();
umairaftab 9:43c339533f7f 525 lcd.locate(0,0);
umairaftab 9:43c339533f7f 526 lcd.printf("Cycling Air");
umairaftab 9:43c339533f7f 527
umairaftab 9:43c339533f7f 528 cycleair();
umairaftab 9:43c339533f7f 529
umairaftab 11:f9ffd5ab7e94 530 wait(2);
umairaftab 11:f9ffd5ab7e94 531 lcd.cls();
umairaftab 11:f9ffd5ab7e94 532 lcd.locate(0,0);
umairaftab 11:f9ffd5ab7e94 533 lcd.printf("Testing Lights");
umairaftab 37:892872c3fa96 534 led_test();
umairaftab 11:f9ffd5ab7e94 535
umairaftab 11:f9ffd5ab7e94 536
umairaftab 36:ce0ca02a8253 537 //INTILIZE SERIAL PARAMETERS
umairaftab 36:ce0ca02a8253 538 wait(2);
umairaftab 36:ce0ca02a8253 539 lcd.cls();
umairaftab 36:ce0ca02a8253 540 lcd.locate(0,0);
umairaftab 36:ce0ca02a8253 541 lcd.printf("Initialize Bluetooth");
umairaftab 36:ce0ca02a8253 542 bluetooth_dev.baud(9600);
umairaftab 36:ce0ca02a8253 543 bluetooth_dev.attach(&callback_bluetooth);
umairaftab 36:ce0ca02a8253 544
umairaftab 36:ce0ca02a8253 545
umairaftab 9:43c339533f7f 546 wait(5);
umairaftab 36:ce0ca02a8253 547 lcd.cls();
umairaftab 12:b3137bb72ef7 548 ui_current_screen = 1;
umairaftab 9:43c339533f7f 549 ui_screen1();
umairaftab 12:b3137bb72ef7 550 lcd_timeout.reset();
umairaftab 9:43c339533f7f 551 wait(5);
umairaftab 8:2d462919519e 552
umairaftab 37:892872c3fa96 553 //startup_flag = false ;
umairaftab 14:72176f1e4907 554 timer1ms.attach(&timer1, 0.001); //interrupt attached function(timer) with interval (1 ms)
umairaftab 25:a6d1eaf2041c 555 led_blue_pulsewidth=50;
umairaftab 25:a6d1eaf2041c 556 led_blue.period_us(1000);
umairaftab 25:a6d1eaf2041c 557
umairaftab 1:9ef26efedcea 558 while(1) {
umairaftab 8:2d462919519e 559
umairaftab 14:72176f1e4907 560
umairaftab 9:43c339533f7f 561 //FOR BUZZER
umairaftab 14:72176f1e4907 562
umairaftab 8:2d462919519e 563 keypad_value = Keypad();
umairaftab 17:0ff7385db570 564 wait(0.1);
umairaftab 25:a6d1eaf2041c 565
umairaftab 19:4313ad838fef 566 //lcd_timeout_check();
umairaftab 19:4313ad838fef 567 //process_user_input(keypad_value,ui_current_screen);
umairaftab 25:a6d1eaf2041c 568
umairaftab 36:ce0ca02a8253 569 //Press down arrow to change menu
umairaftab 36:ce0ca02a8253 570 if ( (keypad_value==68) && (ui_current_screen==1) ) {
umairaftab 19:4313ad838fef 571 ui_screen2();
umairaftab 25:a6d1eaf2041c 572 ui_current_screen=2;
umairaftab 22:7a1962d8af68 573 wait(5);
umairaftab 33:d1b04f1a792a 574 lcd.cls();
umairaftab 25:a6d1eaf2041c 575 //led_blue_pulsewidth=led_blue_pulsewidth+100;
umairaftab 25:a6d1eaf2041c 576 //led_blue.pulsewidth_us(led_blue_pulsewidth);
umairaftab 25:a6d1eaf2041c 577 //printf("%c\n\r",keypad_value);
umairaftab 19:4313ad838fef 578 }
umairaftab 36:ce0ca02a8253 579 else if ( (keypad_value==68) && (ui_current_screen==2)) {
umairaftab 19:4313ad838fef 580 ui_screen3();
umairaftab 33:d1b04f1a792a 581 ui_current_screen=3;
umairaftab 22:7a1962d8af68 582 wait(5);
umairaftab 33:d1b04f1a792a 583 lcd.cls();
umairaftab 25:a6d1eaf2041c 584 //printf("%c\n\r",keypad_value);
umairaftab 25:a6d1eaf2041c 585 }
umairaftab 36:ce0ca02a8253 586 else if ( (keypad_value==68) && (ui_current_screen==3)) {
umairaftab 37:892872c3fa96 587 red_light_value = MAX_RED_LIGHT;
umairaftab 37:892872c3fa96 588 blue_light_value = MAX_BLUE_LIGHT;
umairaftab 37:892872c3fa96 589 green_light_value = MAX_GREEN_LIGHT;
umairaftab 25:a6d1eaf2041c 590 ui_screen4();
umairaftab 25:a6d1eaf2041c 591 ui_current_screen=1;
umairaftab 25:a6d1eaf2041c 592 wait(5);
umairaftab 33:d1b04f1a792a 593 lcd.cls();
umairaftab 25:a6d1eaf2041c 594 //printf("%c\n\r",keypad_value);
umairaftab 25:a6d1eaf2041c 595 }
umairaftab 36:ce0ca02a8253 596 else if ( (keypad_value==75) ) { //Press Enter for settings
umairaftab 25:a6d1eaf2041c 597 ui_settings();
umairaftab 25:a6d1eaf2041c 598 ui_current_screen=1;
umairaftab 33:d1b04f1a792a 599 lcd.cls();
umairaftab 25:a6d1eaf2041c 600 //wait(5);
umairaftab 25:a6d1eaf2041c 601 //printf("%c\n\r",keypad_value);
umairaftab 19:4313ad838fef 602 }
umairaftab 46:302da7b90cba 603 else if(keypad_value == 73){
umairaftab 46:302da7b90cba 604 if(MAX_RED_LIGHT<100){
umairaftab 46:302da7b90cba 605 MAX_RED_LIGHT++;
umairaftab 46:302da7b90cba 606 pwm_red_led(1);
umairaftab 46:302da7b90cba 607 }
umairaftab 46:302da7b90cba 608 }
umairaftab 46:302da7b90cba 609 else if(keypad_value == 70){
umairaftab 46:302da7b90cba 610 if(MAX_RED_LIGHT>0){
umairaftab 46:302da7b90cba 611 MAX_RED_LIGHT--;
umairaftab 46:302da7b90cba 612 pwm_red_led(0);
umairaftab 46:302da7b90cba 613 }
umairaftab 46:302da7b90cba 614 }
umairaftab 46:302da7b90cba 615 else if(keypad_value == 67){
umairaftab 46:302da7b90cba 616 if(MAX_GREEN_LIGHT<100){
umairaftab 46:302da7b90cba 617 MAX_GREEN_LIGHT++;
umairaftab 46:302da7b90cba 618 pwm_green_led(1);
umairaftab 46:302da7b90cba 619 }
umairaftab 46:302da7b90cba 620 }
umairaftab 46:302da7b90cba 621 else if(keypad_value == 64){
umairaftab 46:302da7b90cba 622 if(MAX_GREEN_LIGHT>0){
umairaftab 46:302da7b90cba 623 MAX_GREEN_LIGHT--;
umairaftab 46:302da7b90cba 624 pwm_green_led(0);
umairaftab 46:302da7b90cba 625 }
umairaftab 46:302da7b90cba 626 }
umairaftab 46:302da7b90cba 627 else if(keypad_value == 61){
umairaftab 46:302da7b90cba 628 if(MAX_BLUE_LIGHT<100){
umairaftab 46:302da7b90cba 629 MAX_BLUE_LIGHT++;
umairaftab 46:302da7b90cba 630 pwm_blue_led(1);
umairaftab 46:302da7b90cba 631 }
umairaftab 46:302da7b90cba 632 }
umairaftab 46:302da7b90cba 633 else if(keypad_value == 58){
umairaftab 46:302da7b90cba 634 if(MAX_BLUE_LIGHT>0){
umairaftab 46:302da7b90cba 635 MAX_BLUE_LIGHT--;
umairaftab 46:302da7b90cba 636 pwm_blue_led(0);
umairaftab 46:302da7b90cba 637 }
umairaftab 46:302da7b90cba 638 }
umairaftab 19:4313ad838fef 639 else {
umairaftab 19:4313ad838fef 640 ui_screen1();
umairaftab 25:a6d1eaf2041c 641 wait(0.1);
umairaftab 19:4313ad838fef 642 }
umairaftab 30:417e8ba439ff 643
umairaftab 46:302da7b90cba 644 if (keypad_value == 62 ){ //Backlight red up
umairaftab 30:417e8ba439ff 645 lcd_backlight_on();
umairaftab 30:417e8ba439ff 646 }
umairaftab 46:302da7b90cba 647 if (keypad_value == 59 ){ //Backlight red down
umairaftab 30:417e8ba439ff 648 lcd_backlight_off();
umairaftab 30:417e8ba439ff 649 }
umairaftab 38:9f4107db1bff 650 if(keypad_value == 84){
umairaftab 38:9f4107db1bff 651 pelt_keypad_enable=true;
umairaftab 38:9f4107db1bff 652 }
umairaftab 21:592b7112bbba 653 printf("%d\n\r",keypad_value);
umairaftab 12:b3137bb72ef7 654 // -> Key pressed
umairaftab 11:f9ffd5ab7e94 655
umairaftab 38:9f4107db1bff 656
umairaftab 37:892872c3fa96 657 //LEDS Timeout functions
umairaftab 37:892872c3fa96 658 if(led_set_flag == false){
umairaftab 37:892872c3fa96 659 if( (abs(hour-led_off_time) > led_lights_timeout)||lights_startup_flag ==true){
umairaftab 37:892872c3fa96 660 // printf("MINON%d\n\r",::min);
umairaftab 37:892872c3fa96 661 set_leds();
umairaftab 37:892872c3fa96 662 led_set_time = hour;
umairaftab 37:892872c3fa96 663 lights_startup_flag = false;
umairaftab 37:892872c3fa96 664 // printf("SETLEDS\n\r");
umairaftab 37:892872c3fa96 665 }
umairaftab 37:892872c3fa96 666
umairaftab 37:892872c3fa96 667 }
umairaftab 37:892872c3fa96 668 if(led_set_flag ==true){
umairaftab 37:892872c3fa96 669 if(abs(hour-led_set_time) > led_lights_timeout){
umairaftab 37:892872c3fa96 670 // printf("MINOFF %d\n\r",::min);
umairaftab 37:892872c3fa96 671 turn_off_leds();
umairaftab 37:892872c3fa96 672 led_off_time = hour;
umairaftab 37:892872c3fa96 673 led_set_flag =false;
umairaftab 37:892872c3fa96 674 // printf("OFF\n\r");
umairaftab 37:892872c3fa96 675 }
umairaftab 37:892872c3fa96 676 }
umairaftab 37:892872c3fa96 677 //printf("MINOFF %d\n\r",::min);
umairaftab 38:9f4107db1bff 678 if( (abs((::min)-sensor_function_call_time) > sensor_function_call_timeout) || startup_flag==true){
umairaftab 37:892872c3fa96 679 lcd.cls();
umairaftab 37:892872c3fa96 680 lcd.locate(0,0);
umairaftab 37:892872c3fa96 681 lcd.printf("Updating Values");
umairaftab 37:892872c3fa96 682 lcd.locate(0,1);
umairaftab 37:892872c3fa96 683 lcd.printf("Performing func");
umairaftab 37:892872c3fa96 684 read_sensors();
umairaftab 37:892872c3fa96 685 airhumidity();
umairaftab 38:9f4107db1bff 686 peltierin_temp = dsen_temp_in;
umairaftab 38:9f4107db1bff 687 peltierout_temp = dsen_temp_out;
umairaftab 37:892872c3fa96 688 sensor_function_call_time=::min;
umairaftab 37:892872c3fa96 689 lcd.cls();
umairaftab 37:892872c3fa96 690 }
umairaftab 38:9f4107db1bff 691 /**********************PELTIER CALLER************************************************************************/
umairaftab 48:d83dc70e00a8 692 //pelt_keypad_enable = true;
umairaftab 40:28d1814d367e 693 if (pelt_keypad_enable == true){
umairaftab 38:9f4107db1bff 694 if ( ( abs( (::min)-pelt_call_time ) > pelt_call_timeout ) || pelt_first_time == true) {
umairaftab 38:9f4107db1bff 695
umairaftab 38:9f4107db1bff 696 lcd.cls();
umairaftab 38:9f4107db1bff 697 lcd.locate(0,0);
umairaftab 38:9f4107db1bff 698 lcd.printf("Adjusting Temperature");
umairaftab 38:9f4107db1bff 699 lcd.locate(0,1);
umairaftab 38:9f4107db1bff 700 lcd.printf("Pelt Functions");
umairaftab 40:28d1814d367e 701 wait(2);
umairaftab 42:41f6c241a987 702 //lcd.cls();
umairaftab 42:41f6c241a987 703 //wait(5);
umairaftab 42:41f6c241a987 704
umairaftab 42:41f6c241a987 705 lcd.cls();
umairaftab 42:41f6c241a987 706 lcd.locate(0,0);
umairaftab 42:41f6c241a987 707 lcd.printf("Find Pelt Temp Sense");
umairaftab 42:41f6c241a987 708
umairaftab 44:083a8de27bd9 709 //tempinit();
umairaftab 44:083a8de27bd9 710 readTemp(1);
umairaftab 44:083a8de27bd9 711 dsen_temp_in=temp;
umairaftab 44:083a8de27bd9 712 readTemp(0);
umairaftab 44:083a8de27bd9 713 dsen_temp_out=temp;
umairaftab 44:083a8de27bd9 714 printf("Pi%2.1f Po%2.1f\n\r",dsen_temp_in,dsen_temp_out);
umairaftab 42:41f6c241a987 715 peltierin_temp = dsen_temp_in;
umairaftab 42:41f6c241a987 716 peltierout_temp = dsen_temp_out;
umairaftab 42:41f6c241a987 717
umairaftab 45:ad99cb94f685 718 wait(5);
umairaftab 42:41f6c241a987 719 lcd.cls();
umairaftab 42:41f6c241a987 720 lcd.locate(0,0);
umairaftab 42:41f6c241a987 721 lcd.printf("Find Pelt Temp Sense");
umairaftab 42:41f6c241a987 722 lcd.printf("Found Them");
umairaftab 42:41f6c241a987 723 wait(2);
umairaftab 41:f484ea386062 724 lcd.cls();
umairaftab 38:9f4107db1bff 725 pelt_first_time = false ;
umairaftab 38:9f4107db1bff 726
umairaftab 38:9f4107db1bff 727 float pelt_inside_temp =0;
umairaftab 38:9f4107db1bff 728 bool exit_pelt = false;
umairaftab 38:9f4107db1bff 729 pelt_inside_temp = get_air_temp_inside(0);
umairaftab 49:76c1bfa8423b 730 bool read_temp1_valid=false;
umairaftab 49:76c1bfa8423b 731 bool read_temp2_valid=false;
umairaftab 38:9f4107db1bff 732 while (exit_pelt == false){
umairaftab 38:9f4107db1bff 733
umairaftab 38:9f4107db1bff 734 pelt_inside_temp = get_air_temp_inside(0);
umairaftab 38:9f4107db1bff 735
umairaftab 38:9f4107db1bff 736 if (dsen_temp_in<desire_temp) {
umairaftab 49:76c1bfa8423b 737 read_temp1_valid=false;
umairaftab 49:76c1bfa8423b 738 read_temp2_valid=false;
umairaftab 38:9f4107db1bff 739 peltier(true,true,false,true,90);
umairaftab 49:76c1bfa8423b 740
umairaftab 49:76c1bfa8423b 741 //wait(0.1);
umairaftab 49:76c1bfa8423b 742 while(!read_temp1_valid){
umairaftab 49:76c1bfa8423b 743 readTemp(1);
umairaftab 49:76c1bfa8423b 744 wait(0.1);
umairaftab 49:76c1bfa8423b 745 if(temp>0){
umairaftab 49:76c1bfa8423b 746 read_temp1_valid = true;
umairaftab 49:76c1bfa8423b 747 }
umairaftab 49:76c1bfa8423b 748 }
umairaftab 45:ad99cb94f685 749 dsen_temp_in=temp;
umairaftab 49:76c1bfa8423b 750 printf("Inside Temp:%2.1f\n\r",dsen_temp_in);
umairaftab 51:8bbe178047a9 751 /*while(!read_temp2_valid){
umairaftab 49:76c1bfa8423b 752 readTemp(0);
umairaftab 49:76c1bfa8423b 753 wait(0.1);
umairaftab 49:76c1bfa8423b 754 if(temp>0){
umairaftab 49:76c1bfa8423b 755 read_temp2_valid = true;
umairaftab 49:76c1bfa8423b 756 }
umairaftab 51:8bbe178047a9 757 }*/
umairaftab 51:8bbe178047a9 758 readTemp(0);
umairaftab 45:ad99cb94f685 759 dsen_temp_out=temp;
umairaftab 49:76c1bfa8423b 760 printf("Outside Temp:%2.1f\n\r",dsen_temp_out);
umairaftab 38:9f4107db1bff 761 }
umairaftab 38:9f4107db1bff 762 if (dsen_temp_in>=desire_temp) {
umairaftab 38:9f4107db1bff 763 peltier(true,true,false,true,0);
umairaftab 49:76c1bfa8423b 764 //wait(0.1);
umairaftab 49:76c1bfa8423b 765 while(!read_temp1_valid){
umairaftab 49:76c1bfa8423b 766 readTemp(1);
umairaftab 49:76c1bfa8423b 767 wait(0.1);
umairaftab 49:76c1bfa8423b 768 if(temp>0){
umairaftab 49:76c1bfa8423b 769 read_temp1_valid = true;
umairaftab 49:76c1bfa8423b 770 }
umairaftab 49:76c1bfa8423b 771 }
umairaftab 45:ad99cb94f685 772 dsen_temp_in=temp;
umairaftab 49:76c1bfa8423b 773 printf("Inside Temp:%2.1f\n\r",dsen_temp_in);
umairaftab 51:8bbe178047a9 774 /*while(!read_temp2_valid){
umairaftab 49:76c1bfa8423b 775 readTemp(0);
umairaftab 49:76c1bfa8423b 776 wait(0.1);
umairaftab 49:76c1bfa8423b 777 if(temp>0){
umairaftab 49:76c1bfa8423b 778 read_temp2_valid = true;
umairaftab 49:76c1bfa8423b 779 }
umairaftab 51:8bbe178047a9 780 }*/
umairaftab 51:8bbe178047a9 781 readTemp(0);
umairaftab 45:ad99cb94f685 782 dsen_temp_out=temp;
umairaftab 49:76c1bfa8423b 783 printf("Outside Temp:%2.1f\n\r",dsen_temp_out);
umairaftab 38:9f4107db1bff 784 }
umairaftab 38:9f4107db1bff 785 if (dsen_temp_in>=max_peltier_temp){
umairaftab 38:9f4107db1bff 786
umairaftab 38:9f4107db1bff 787 peltier(false,false,false,false,0);
umairaftab 38:9f4107db1bff 788 lcd.locate(0,0);
umairaftab 38:9f4107db1bff 789 lcd.printf("Pelt TEMP LIMIT");
umairaftab 38:9f4107db1bff 790 lcd.locate(0,1);
umairaftab 41:f484ea386062 791 lcd.printf("Pi %2.1 Po%2.1f",dsen_temp_in,dsen_temp_out);
umairaftab 38:9f4107db1bff 792 exit_pelt = true;
umairaftab 38:9f4107db1bff 793 pelt_overheat = true;
umairaftab 38:9f4107db1bff 794 }
umairaftab 38:9f4107db1bff 795 else{
umairaftab 38:9f4107db1bff 796 //lcd.cls();
umairaftab 38:9f4107db1bff 797 lcd.locate(0,0);
umairaftab 38:9f4107db1bff 798 lcd.printf("Air Temp %4.2f",pelt_inside_temp);
umairaftab 38:9f4107db1bff 799 lcd.locate(0,1);
umairaftab 41:f484ea386062 800 lcd.printf("Pi%2.1f Po%2.1f",dsen_temp_in,dsen_temp_out);
umairaftab 43:cf893fa88690 801 printf("Pi%2.1f Po%2.1f\n\r",dsen_temp_in,dsen_temp_out);
umairaftab 38:9f4107db1bff 802 wait(15);
umairaftab 38:9f4107db1bff 803 if ( (pelt_inside_temp-5<=desire_temp_air) && (pelt_inside_temp+5>=desire_temp_air) ){
umairaftab 38:9f4107db1bff 804 lcd.cls();
umairaftab 38:9f4107db1bff 805 lcd.locate(0,0);
umairaftab 38:9f4107db1bff 806 lcd.printf("Exiting Peltier");
umairaftab 38:9f4107db1bff 807 lcd.locate(0,1);
umairaftab 38:9f4107db1bff 808 lcd.printf("Temp within Range");
umairaftab 38:9f4107db1bff 809 exit_pelt = true;
umairaftab 45:ad99cb94f685 810 wait(5);
umairaftab 38:9f4107db1bff 811 }
umairaftab 38:9f4107db1bff 812 }
umairaftab 38:9f4107db1bff 813 }//pelt while end
umairaftab 38:9f4107db1bff 814 peltier(false,false,false,false,0);
umairaftab 38:9f4107db1bff 815 lcd.cls();
umairaftab 38:9f4107db1bff 816 lcd.locate(0,0);
umairaftab 38:9f4107db1bff 817 lcd.printf("Pelt Off");
umairaftab 38:9f4107db1bff 818 wait(5);
umairaftab 38:9f4107db1bff 819 lcd.cls();
umairaftab 38:9f4107db1bff 820 //lcd.locate(0,1);
umairaftab 38:9f4107db1bff 821 //lcd.printf("Temp within Range");
umairaftab 38:9f4107db1bff 822
umairaftab 38:9f4107db1bff 823 }//if block time check end
umairaftab 38:9f4107db1bff 824
umairaftab 38:9f4107db1bff 825 pelt_call_time = ::min ;
umairaftab 38:9f4107db1bff 826 //pelt_keypad_enable = false;
umairaftab 38:9f4107db1bff 827 }//Pelt IF keypad block end
umairaftab 38:9f4107db1bff 828
umairaftab 38:9f4107db1bff 829
umairaftab 37:892872c3fa96 830 printf("MIN: %d\n\r",::min);
umairaftab 37:892872c3fa96 831 startup_flag = false ;
umairaftab 8:2d462919519e 832 }//WHILE END
umairaftab 8:2d462919519e 833
umairaftab 8:2d462919519e 834
umairaftab 8:2d462919519e 835 }
umairaftab 8:2d462919519e 836
umairaftab 8:2d462919519e 837