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 05:09:16 2014 +0000
Revision:
45:ad99cb94f685
Parent:
44:083a8de27bd9
Child:
46:302da7b90cba
Peltier temp sense test 3.0;

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 38:9f4107db1bff 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 19:4313ad838fef 603 else {
umairaftab 19:4313ad838fef 604 ui_screen1();
umairaftab 25:a6d1eaf2041c 605 wait(0.1);
umairaftab 19:4313ad838fef 606 }
umairaftab 30:417e8ba439ff 607
umairaftab 36:ce0ca02a8253 608 if (keypad_value == 73 ){ //Backlight red up
umairaftab 30:417e8ba439ff 609 lcd_backlight_on();
umairaftab 30:417e8ba439ff 610 }
umairaftab 36:ce0ca02a8253 611 if (keypad_value == 70 ){ //Backlight red down
umairaftab 30:417e8ba439ff 612 lcd_backlight_off();
umairaftab 30:417e8ba439ff 613 }
umairaftab 38:9f4107db1bff 614 if(keypad_value == 84){
umairaftab 38:9f4107db1bff 615 pelt_keypad_enable=true;
umairaftab 38:9f4107db1bff 616 }
umairaftab 21:592b7112bbba 617 printf("%d\n\r",keypad_value);
umairaftab 12:b3137bb72ef7 618 // -> Key pressed
umairaftab 11:f9ffd5ab7e94 619
umairaftab 38:9f4107db1bff 620
umairaftab 37:892872c3fa96 621 //LEDS Timeout functions
umairaftab 37:892872c3fa96 622 if(led_set_flag == false){
umairaftab 37:892872c3fa96 623 if( (abs(hour-led_off_time) > led_lights_timeout)||lights_startup_flag ==true){
umairaftab 37:892872c3fa96 624 // printf("MINON%d\n\r",::min);
umairaftab 37:892872c3fa96 625 set_leds();
umairaftab 37:892872c3fa96 626 led_set_time = hour;
umairaftab 37:892872c3fa96 627 lights_startup_flag = false;
umairaftab 37:892872c3fa96 628 // printf("SETLEDS\n\r");
umairaftab 37:892872c3fa96 629 }
umairaftab 37:892872c3fa96 630
umairaftab 37:892872c3fa96 631 }
umairaftab 37:892872c3fa96 632 if(led_set_flag ==true){
umairaftab 37:892872c3fa96 633 if(abs(hour-led_set_time) > led_lights_timeout){
umairaftab 37:892872c3fa96 634 // printf("MINOFF %d\n\r",::min);
umairaftab 37:892872c3fa96 635 turn_off_leds();
umairaftab 37:892872c3fa96 636 led_off_time = hour;
umairaftab 37:892872c3fa96 637 led_set_flag =false;
umairaftab 37:892872c3fa96 638 // printf("OFF\n\r");
umairaftab 37:892872c3fa96 639 }
umairaftab 37:892872c3fa96 640 }
umairaftab 37:892872c3fa96 641 //printf("MINOFF %d\n\r",::min);
umairaftab 38:9f4107db1bff 642 if( (abs((::min)-sensor_function_call_time) > sensor_function_call_timeout) || startup_flag==true){
umairaftab 37:892872c3fa96 643 lcd.cls();
umairaftab 37:892872c3fa96 644 lcd.locate(0,0);
umairaftab 37:892872c3fa96 645 lcd.printf("Updating Values");
umairaftab 37:892872c3fa96 646 lcd.locate(0,1);
umairaftab 37:892872c3fa96 647 lcd.printf("Performing func");
umairaftab 37:892872c3fa96 648 read_sensors();
umairaftab 37:892872c3fa96 649 airhumidity();
umairaftab 38:9f4107db1bff 650 peltierin_temp = dsen_temp_in;
umairaftab 38:9f4107db1bff 651 peltierout_temp = dsen_temp_out;
umairaftab 37:892872c3fa96 652 sensor_function_call_time=::min;
umairaftab 37:892872c3fa96 653 lcd.cls();
umairaftab 37:892872c3fa96 654 }
umairaftab 38:9f4107db1bff 655 /**********************PELTIER CALLER************************************************************************/
umairaftab 44:083a8de27bd9 656 pelt_keypad_enable = true;
umairaftab 40:28d1814d367e 657 if (pelt_keypad_enable == true){
umairaftab 38:9f4107db1bff 658 if ( ( abs( (::min)-pelt_call_time ) > pelt_call_timeout ) || pelt_first_time == true) {
umairaftab 38:9f4107db1bff 659
umairaftab 38:9f4107db1bff 660 lcd.cls();
umairaftab 38:9f4107db1bff 661 lcd.locate(0,0);
umairaftab 38:9f4107db1bff 662 lcd.printf("Adjusting Temperature");
umairaftab 38:9f4107db1bff 663 lcd.locate(0,1);
umairaftab 38:9f4107db1bff 664 lcd.printf("Pelt Functions");
umairaftab 40:28d1814d367e 665 wait(2);
umairaftab 42:41f6c241a987 666 //lcd.cls();
umairaftab 42:41f6c241a987 667 //wait(5);
umairaftab 42:41f6c241a987 668
umairaftab 42:41f6c241a987 669 lcd.cls();
umairaftab 42:41f6c241a987 670 lcd.locate(0,0);
umairaftab 42:41f6c241a987 671 lcd.printf("Find Pelt Temp Sense");
umairaftab 42:41f6c241a987 672
umairaftab 44:083a8de27bd9 673 //tempinit();
umairaftab 44:083a8de27bd9 674 readTemp(1);
umairaftab 44:083a8de27bd9 675 dsen_temp_in=temp;
umairaftab 44:083a8de27bd9 676 readTemp(0);
umairaftab 44:083a8de27bd9 677 dsen_temp_out=temp;
umairaftab 44:083a8de27bd9 678 printf("Pi%2.1f Po%2.1f\n\r",dsen_temp_in,dsen_temp_out);
umairaftab 42:41f6c241a987 679 peltierin_temp = dsen_temp_in;
umairaftab 42:41f6c241a987 680 peltierout_temp = dsen_temp_out;
umairaftab 42:41f6c241a987 681
umairaftab 45:ad99cb94f685 682 wait(5);
umairaftab 42:41f6c241a987 683 lcd.cls();
umairaftab 42:41f6c241a987 684 lcd.locate(0,0);
umairaftab 42:41f6c241a987 685 lcd.printf("Find Pelt Temp Sense");
umairaftab 42:41f6c241a987 686 lcd.printf("Found Them");
umairaftab 42:41f6c241a987 687 wait(2);
umairaftab 41:f484ea386062 688 lcd.cls();
umairaftab 38:9f4107db1bff 689 pelt_first_time = false ;
umairaftab 38:9f4107db1bff 690
umairaftab 38:9f4107db1bff 691 float pelt_inside_temp =0;
umairaftab 38:9f4107db1bff 692 bool exit_pelt = false;
umairaftab 38:9f4107db1bff 693 pelt_inside_temp = get_air_temp_inside(0);
umairaftab 38:9f4107db1bff 694
umairaftab 38:9f4107db1bff 695 while (exit_pelt == false){
umairaftab 38:9f4107db1bff 696
umairaftab 38:9f4107db1bff 697 pelt_inside_temp = get_air_temp_inside(0);
umairaftab 38:9f4107db1bff 698
umairaftab 38:9f4107db1bff 699 if (dsen_temp_in<desire_temp) {
umairaftab 38:9f4107db1bff 700 peltier(true,true,false,true,90);
umairaftab 45:ad99cb94f685 701 readTemp(1);
umairaftab 45:ad99cb94f685 702 dsen_temp_in=temp;
umairaftab 45:ad99cb94f685 703 readTemp(0);
umairaftab 45:ad99cb94f685 704 dsen_temp_out=temp;
umairaftab 38:9f4107db1bff 705 }
umairaftab 38:9f4107db1bff 706 if (dsen_temp_in>=desire_temp) {
umairaftab 38:9f4107db1bff 707 peltier(true,true,false,true,0);
umairaftab 45:ad99cb94f685 708 readTemp(1);
umairaftab 45:ad99cb94f685 709 dsen_temp_in=temp;
umairaftab 45:ad99cb94f685 710 readTemp(0);
umairaftab 45:ad99cb94f685 711 dsen_temp_out=temp;
umairaftab 38:9f4107db1bff 712 }
umairaftab 38:9f4107db1bff 713 if (dsen_temp_in>=max_peltier_temp){
umairaftab 38:9f4107db1bff 714
umairaftab 38:9f4107db1bff 715 peltier(false,false,false,false,0);
umairaftab 38:9f4107db1bff 716 lcd.locate(0,0);
umairaftab 38:9f4107db1bff 717 lcd.printf("Pelt TEMP LIMIT");
umairaftab 38:9f4107db1bff 718 lcd.locate(0,1);
umairaftab 41:f484ea386062 719 lcd.printf("Pi %2.1 Po%2.1f",dsen_temp_in,dsen_temp_out);
umairaftab 38:9f4107db1bff 720 exit_pelt = true;
umairaftab 38:9f4107db1bff 721 pelt_overheat = true;
umairaftab 38:9f4107db1bff 722 }
umairaftab 38:9f4107db1bff 723 else{
umairaftab 38:9f4107db1bff 724 //lcd.cls();
umairaftab 38:9f4107db1bff 725 lcd.locate(0,0);
umairaftab 38:9f4107db1bff 726 lcd.printf("Air Temp %4.2f",pelt_inside_temp);
umairaftab 38:9f4107db1bff 727 lcd.locate(0,1);
umairaftab 41:f484ea386062 728 lcd.printf("Pi%2.1f Po%2.1f",dsen_temp_in,dsen_temp_out);
umairaftab 43:cf893fa88690 729 printf("Pi%2.1f Po%2.1f\n\r",dsen_temp_in,dsen_temp_out);
umairaftab 38:9f4107db1bff 730 wait(15);
umairaftab 38:9f4107db1bff 731 if ( (pelt_inside_temp-5<=desire_temp_air) && (pelt_inside_temp+5>=desire_temp_air) ){
umairaftab 38:9f4107db1bff 732 lcd.cls();
umairaftab 38:9f4107db1bff 733 lcd.locate(0,0);
umairaftab 38:9f4107db1bff 734 lcd.printf("Exiting Peltier");
umairaftab 38:9f4107db1bff 735 lcd.locate(0,1);
umairaftab 38:9f4107db1bff 736 lcd.printf("Temp within Range");
umairaftab 38:9f4107db1bff 737 exit_pelt = true;
umairaftab 45:ad99cb94f685 738 wait(5);
umairaftab 38:9f4107db1bff 739 }
umairaftab 38:9f4107db1bff 740 }
umairaftab 38:9f4107db1bff 741 }//pelt while end
umairaftab 38:9f4107db1bff 742 peltier(false,false,false,false,0);
umairaftab 38:9f4107db1bff 743 lcd.cls();
umairaftab 38:9f4107db1bff 744 lcd.locate(0,0);
umairaftab 38:9f4107db1bff 745 lcd.printf("Pelt Off");
umairaftab 38:9f4107db1bff 746 wait(5);
umairaftab 38:9f4107db1bff 747 lcd.cls();
umairaftab 38:9f4107db1bff 748 //lcd.locate(0,1);
umairaftab 38:9f4107db1bff 749 //lcd.printf("Temp within Range");
umairaftab 38:9f4107db1bff 750
umairaftab 38:9f4107db1bff 751 }//if block time check end
umairaftab 38:9f4107db1bff 752
umairaftab 38:9f4107db1bff 753 pelt_call_time = ::min ;
umairaftab 38:9f4107db1bff 754 //pelt_keypad_enable = false;
umairaftab 38:9f4107db1bff 755 }//Pelt IF keypad block end
umairaftab 38:9f4107db1bff 756
umairaftab 38:9f4107db1bff 757
umairaftab 37:892872c3fa96 758 printf("MIN: %d\n\r",::min);
umairaftab 37:892872c3fa96 759 startup_flag = false ;
umairaftab 8:2d462919519e 760 }//WHILE END
umairaftab 8:2d462919519e 761
umairaftab 8:2d462919519e 762
umairaftab 8:2d462919519e 763 }
umairaftab 8:2d462919519e 764
umairaftab 8:2d462919519e 765