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 03:34:02 2014 +0000
Revision:
38:9f4107db1bff
Parent:
37:892872c3fa96
Child:
40:28d1814d367e
Peltier Functions Updated; DS18B20 Multiple sensors added.

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