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:
Sat Apr 12 21:08:13 2014 +0000
Revision:
17:0ff7385db570
Parent:
14:72176f1e4907
Child:
18:7ec1691d0d9d
Keypad_code updated ;

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 12:b3137bb72ef7 32 #include <string>
umairaftab 12:b3137bb72ef7 33 using namespace std;
umairaftab 12:b3137bb72ef7 34
umairaftab 8:2d462919519e 35 //SERIAL
umairaftab 8:2d462919519e 36 Serial bluetooth(PTA2, PTA1); // tx, rx
umairaftab 8:2d462919519e 37 Serial printer(PTC4,PTC3); // tx, rx
umairaftab 8:2d462919519e 38 //TICKERS
umairaftab 1:9ef26efedcea 39 Ticker timer1ms;
umairaftab 8:2d462919519e 40 Ticker clock_mine;
umairaftab 11:f9ffd5ab7e94 41 Timer lcd_timeout;
umairaftab 8:2d462919519e 42 //FLAGS
umairaftab 8:2d462919519e 43 bool startup_flag=true;
umairaftab 9:43c339533f7f 44 bool watered_plant1 = false;
umairaftab 9:43c339533f7f 45 int watered_plant1_time = 0;
umairaftab 9:43c339533f7f 46 bool watered_plant2 = false;
umairaftab 9:43c339533f7f 47 int watered_plant2_time = 0;
umairaftab 8:2d462919519e 48
umairaftab 8:2d462919519e 49 //SETPOINTS
umairaftab 8:2d462919519e 50 float setpoint_air_humidity = 30.00 ;
umairaftab 8:2d462919519e 51 float setpoint_soil_humid1 = 0.3 ;
umairaftab 8:2d462919519e 52 float setpoint_soil_humid2 = 0.3 ;
umairaftab 8:2d462919519e 53
umairaftab 12:b3137bb72ef7 54 float setpoint_MAX_air_temp = 45;
umairaftab 12:b3137bb72ef7 55
umairaftab 11:f9ffd5ab7e94 56 int setpoint_red_lights;
umairaftab 11:f9ffd5ab7e94 57 int setpoint_blue_lights;
umairaftab 11:f9ffd5ab7e94 58 int setpoint_green_lights;
umairaftab 12:b3137bb72ef7 59
umairaftab 8:2d462919519e 60 //WINDOWING
umairaftab 9:43c339533f7f 61 float window_f = 5 ;
umairaftab 8:2d462919519e 62 int window_i =2 ;
umairaftab 8:2d462919519e 63
umairaftab 8:2d462919519e 64 //GLOBAL VARS
umairaftab 8:2d462919519e 65 float current_water_level = 0;
umairaftab 12:b3137bb72ef7 66 bool lcd_timeout_flag=false;
umairaftab 12:b3137bb72ef7 67
umairaftab 8:2d462919519e 68 //SAFETY LIMITS
umairaftab 8:2d462919519e 69 const float max_peltier_temp = 68 ; //CELCIUS
umairaftab 12:b3137bb72ef7 70 const int MAX_WATERING_TIME_GAP = 20; //Number of Hours
umairaftab 12:b3137bb72ef7 71 const int CYCLE_AIR_TIME = 2; //Wait between on and off seconds
umairaftab 12:b3137bb72ef7 72 const int LCD_TIMEOUT_VALUE = 30; //Number of seconds
umairaftab 12:b3137bb72ef7 73
umairaftab 12:b3137bb72ef7 74
umairaftab 8:2d462919519e 75 //**************************FUNCTION TO READ SENSORS **********************************************
umairaftab 8:2d462919519e 76 void read_sensors(){
umairaftab 8:2d462919519e 77
umairaftab 8:2d462919519e 78 //Read values for AIR
umairaftab 8:2d462919519e 79
umairaftab 8:2d462919519e 80 //OUTSIDE
umairaftab 8:2d462919519e 81 outside_humidity = get_air_humid_outside();
umairaftab 8:2d462919519e 82 outside_temp = get_air_temp_outside(temp_unit);
umairaftab 8:2d462919519e 83 outside_dewpoint = get_air_dewpoint_outside();
umairaftab 8:2d462919519e 84
umairaftab 8:2d462919519e 85 //INSIDE
umairaftab 8:2d462919519e 86 inside_humidity = get_air_humid_inside();
umairaftab 8:2d462919519e 87 inside_temp = get_air_temp_inside(temp_unit);
umairaftab 8:2d462919519e 88 inside_dewpoint = get_air_dewpoint_inside();
umairaftab 8:2d462919519e 89
umairaftab 8:2d462919519e 90 //Read value for soil
umairaftab 8:2d462919519e 91 read_soil_humidity();
umairaftab 8:2d462919519e 92 calc_soil_humid_values(); //values in soil1_humid and soil2_humid perecentages
umairaftab 11:f9ffd5ab7e94 93 soil1_humidity = soil1_humid ;
umairaftab 11:f9ffd5ab7e94 94 soil2_humidity = soil2_humid ;
umairaftab 14:72176f1e4907 95 //printf("%4.2f \n\r",soil1_humidity);
umairaftab 14:72176f1e4907 96 //READ LOAD SENSOR
umairaftab 14:72176f1e4907 97 read_weight();
umairaftab 14:72176f1e4907 98 calc_weight();
umairaftab 14:72176f1e4907 99 weight_sensor = weight1;
umairaftab 8:2d462919519e 100 }
umairaftab 8:2d462919519e 101
umairaftab 8:2d462919519e 102 //****************************Functions that perform tasks**************************************
umairaftab 9:43c339533f7f 103 //Water Plants
umairaftab 8:2d462919519e 104 void waterplants(){
umairaftab 8:2d462919519e 105
umairaftab 8:2d462919519e 106
umairaftab 9:43c339533f7f 107 if(startup_flag == true){
umairaftab 14:72176f1e4907 108 //call for pump function
umairaftab 14:72176f1e4907 109
umairaftab 9:43c339533f7f 110 watered_plant1 = true;
umairaftab 9:43c339533f7f 111 watered_plant1_time = hour ;
umairaftab 9:43c339533f7f 112 watered_plant2 = true;
umairaftab 9:43c339533f7f 113 watered_plant2_time = hour ;
umairaftab 14:72176f1e4907 114 pumps(true,true,true,false);
umairaftab 14:72176f1e4907 115 wait(5.0);
umairaftab 14:72176f1e4907 116 pumps(false,false,false,false);
umairaftab 9:43c339533f7f 117 }
umairaftab 9:43c339533f7f 118 else{
umairaftab 9:43c339533f7f 119
umairaftab 10:1a0fe96381b0 120 if( (soil1_humid < setpoint_soil_humid1) || (watered_plant1 == false) ){
umairaftab 9:43c339533f7f 121 //enable pump1
umairaftab 9:43c339533f7f 122 watered_plant1 = true;
umairaftab 9:43c339533f7f 123 watered_plant1_time = hour ;
umairaftab 14:72176f1e4907 124 pumps(true,true,true,false);
umairaftab 14:72176f1e4907 125 wait(5.0);
umairaftab 14:72176f1e4907 126 pumps(false,false,false,false);
umairaftab 9:43c339533f7f 127 }
umairaftab 10:1a0fe96381b0 128 if( (soil2_humid < setpoint_soil_humid2) || (watered_plant2 == false) ){
umairaftab 9:43c339533f7f 129 //enable pump2
umairaftab 9:43c339533f7f 130 watered_plant2 = true;
umairaftab 9:43c339533f7f 131 watered_plant2_time = hour ;
umairaftab 14:72176f1e4907 132 pumps(true,true,true,false);
umairaftab 14:72176f1e4907 133 wait(5.0);
umairaftab 14:72176f1e4907 134 pumps(false,false,false,false);
umairaftab 9:43c339533f7f 135 }
umairaftab 9:43c339533f7f 136 }
umairaftab 10:1a0fe96381b0 137 //Make sure it is watered at least every x hours in case soil humid doesnt work
umairaftab 9:43c339533f7f 138 if (watered_plant1 == true){
umairaftab 9:43c339533f7f 139 if(abs(hour-watered_plant1_time)>MAX_WATERING_TIME_GAP){
umairaftab 9:43c339533f7f 140 watered_plant1 = false;
umairaftab 9:43c339533f7f 141 }
umairaftab 9:43c339533f7f 142 }
umairaftab 9:43c339533f7f 143 if (watered_plant2 == true){
umairaftab 9:43c339533f7f 144 if(abs(hour-watered_plant2_time)>MAX_WATERING_TIME_GAP){
umairaftab 9:43c339533f7f 145 watered_plant2 = false;
umairaftab 9:43c339533f7f 146 }
umairaftab 9:43c339533f7f 147 }
umairaftab 9:43c339533f7f 148
umairaftab 9:43c339533f7f 149 }
umairaftab 9:43c339533f7f 150
umairaftab 9:43c339533f7f 151 // Air Humidity Level
umairaftab 9:43c339533f7f 152 void airhumidity(){
umairaftab 9:43c339533f7f 153
umairaftab 11:f9ffd5ab7e94 154 if( !( (setpoint_air_humidity+window_f > inside_humidity) && (setpoint_air_humidity-window_f < inside_humidity) ) ){
umairaftab 9:43c339533f7f 155
umairaftab 9:43c339533f7f 156 //Turn on Air humidity fan
umairaftab 14:72176f1e4907 157 pumps(false,false,false,true);
umairaftab 9:43c339533f7f 158 wait(5);
umairaftab 9:43c339533f7f 159 //Turn off Air humisity fan
umairaftab 14:72176f1e4907 160 pumps(false,false,false,false);
umairaftab 9:43c339533f7f 161 }
umairaftab 9:43c339533f7f 162 }
umairaftab 9:43c339533f7f 163
umairaftab 9:43c339533f7f 164 //CYCLE AIR
umairaftab 9:43c339533f7f 165 void cycleair(){
umairaftab 9:43c339533f7f 166
umairaftab 9:43c339533f7f 167 //Turn on fan
umairaftab 9:43c339533f7f 168 wait(CYCLE_AIR_TIME);
umairaftab 9:43c339533f7f 169 //turn of fan
umairaftab 8:2d462919519e 170
umairaftab 8:2d462919519e 171 }
umairaftab 14:72176f1e4907 172 //**********************************LCD TIMEOUT FUNCTION*********************************
umairaftab 12:b3137bb72ef7 173 void lcd_timeout_check(){
umairaftab 12:b3137bb72ef7 174
umairaftab 12:b3137bb72ef7 175 if(lcd_timeout.read()>LCD_TIMEOUT_VALUE){
umairaftab 12:b3137bb72ef7 176 lcd_timeout_flag = true;
umairaftab 12:b3137bb72ef7 177 }
umairaftab 12:b3137bb72ef7 178
umairaftab 12:b3137bb72ef7 179 }
umairaftab 14:72176f1e4907 180 //***************************************SETTINGS UI*************************************
umairaftab 12:b3137bb72ef7 181 void ui_settings(){
umairaftab 12:b3137bb72ef7 182
umairaftab 12:b3137bb72ef7 183 lcd.cls();
umairaftab 12:b3137bb72ef7 184 lcd.locate(0,0);
umairaftab 12:b3137bb72ef7 185 lcd.printf("Autus Settings");
umairaftab 12:b3137bb72ef7 186 lcd.locate(0,1);
umairaftab 12:b3137bb72ef7 187 lcd.printf("Performing Checks");
umairaftab 12:b3137bb72ef7 188 char key_value;
umairaftab 12:b3137bb72ef7 189 bool exit_settings=false;
umairaftab 12:b3137bb72ef7 190
umairaftab 12:b3137bb72ef7 191 //disable peltier
umairaftab 14:72176f1e4907 192 peltier(false,false,false,false,0);
umairaftab 12:b3137bb72ef7 193
umairaftab 12:b3137bb72ef7 194 wait(2);
umairaftab 12:b3137bb72ef7 195 string menu[4];
umairaftab 12:b3137bb72ef7 196 menu[0]= "1.LED Brightness";
umairaftab 12:b3137bb72ef7 197 menu[1]= "2.Air Humidty Lvl";
umairaftab 12:b3137bb72ef7 198 menu[2]= "3.Soil Moisture Lvl";
umairaftab 12:b3137bb72ef7 199 menu[3]= "4.Air Temperature";
umairaftab 12:b3137bb72ef7 200
umairaftab 12:b3137bb72ef7 201 lcd.cls();
umairaftab 12:b3137bb72ef7 202 int counter_menu =0 ;
umairaftab 12:b3137bb72ef7 203 while(!exit_settings){
umairaftab 12:b3137bb72ef7 204 key_value = Keypad();
umairaftab 12:b3137bb72ef7 205 if(key_value == 100){
umairaftab 12:b3137bb72ef7 206 lcd.locate(0,0);
umairaftab 12:b3137bb72ef7 207 lcd.printf(">%s",menu[counter_menu].c_str());
umairaftab 12:b3137bb72ef7 208 lcd.locate(0,1);
umairaftab 12:b3137bb72ef7 209 if(counter_menu ==3){
umairaftab 12:b3137bb72ef7 210 counter_menu = 0;
umairaftab 12:b3137bb72ef7 211 lcd.printf(" %s",menu[counter_menu].c_str());
umairaftab 12:b3137bb72ef7 212 }
umairaftab 12:b3137bb72ef7 213 else{
umairaftab 12:b3137bb72ef7 214 lcd.printf(" %s",menu[counter_menu+1].c_str());
umairaftab 12:b3137bb72ef7 215 }
umairaftab 12:b3137bb72ef7 216 wait(0.2);
umairaftab 12:b3137bb72ef7 217 }//No Press If Block
umairaftab 12:b3137bb72ef7 218 else if(key_value == 44){//Down Key Pressed if block
umairaftab 12:b3137bb72ef7 219 lcd.cls();
umairaftab 12:b3137bb72ef7 220 counter_menu++;
umairaftab 12:b3137bb72ef7 221 }//Down Key Pressed if block end
umairaftab 12:b3137bb72ef7 222 else if(key_value == 41){ //OK Key Pressed if block
umairaftab 12:b3137bb72ef7 223 char key_value2;
umairaftab 12:b3137bb72ef7 224 bool break_flag = false;
umairaftab 12:b3137bb72ef7 225 switch(counter_menu){
umairaftab 12:b3137bb72ef7 226 case 0:
umairaftab 12:b3137bb72ef7 227 lcd.cls();
umairaftab 12:b3137bb72ef7 228 lcd.locate(0,0);
umairaftab 12:b3137bb72ef7 229 lcd.printf("Not Authorised");
umairaftab 12:b3137bb72ef7 230 wait(5);
umairaftab 12:b3137bb72ef7 231 break;
umairaftab 12:b3137bb72ef7 232 case 1:
umairaftab 12:b3137bb72ef7 233 break_flag = false;
umairaftab 12:b3137bb72ef7 234 lcd.cls();
umairaftab 12:b3137bb72ef7 235 lcd.locate(0,0);
umairaftab 12:b3137bb72ef7 236 lcd.printf("Cur Air Humidity Lvl");
umairaftab 12:b3137bb72ef7 237 //lcd.locate(0,1);
umairaftab 12:b3137bb72ef7 238 //lcd.printf("%3.1f",setpoint_air_humidity);
umairaftab 12:b3137bb72ef7 239 while(!break_flag){
umairaftab 12:b3137bb72ef7 240 lcd.locate(0,1);
umairaftab 12:b3137bb72ef7 241 lcd.printf("%3.1f",setpoint_air_humidity);
umairaftab 12:b3137bb72ef7 242 key_value2 = Keypad();
umairaftab 12:b3137bb72ef7 243 wait(0.2);
umairaftab 12:b3137bb72ef7 244 if(key_value2 == 50){setpoint_air_humidity++;}
umairaftab 12:b3137bb72ef7 245 else if(key_value2 == 47){setpoint_air_humidity--;}
umairaftab 12:b3137bb72ef7 246 else if(key_value2 == 51){break_flag=true;}
umairaftab 12:b3137bb72ef7 247 if (setpoint_air_humidity <0 || setpoint_air_humidity >99) {setpoint_air_humidity=30.00;}
umairaftab 12:b3137bb72ef7 248 }
umairaftab 12:b3137bb72ef7 249
umairaftab 12:b3137bb72ef7 250 lcd.cls();
umairaftab 12:b3137bb72ef7 251 lcd.locate(0,0);
umairaftab 12:b3137bb72ef7 252 lcd.printf("NEW Air Humid Setpoint");
umairaftab 12:b3137bb72ef7 253 lcd.locate(0,1);
umairaftab 12:b3137bb72ef7 254 lcd.printf("%3.1f",setpoint_air_humidity);
umairaftab 12:b3137bb72ef7 255 wait(5);
umairaftab 12:b3137bb72ef7 256
umairaftab 12:b3137bb72ef7 257 break;
umairaftab 12:b3137bb72ef7 258 case 2:
umairaftab 12:b3137bb72ef7 259 break_flag = false;
umairaftab 12:b3137bb72ef7 260 lcd.cls();
umairaftab 12:b3137bb72ef7 261 lcd.locate(0,0);
umairaftab 12:b3137bb72ef7 262 lcd.printf("Soil Humidity Setpoint");
umairaftab 12:b3137bb72ef7 263
umairaftab 12:b3137bb72ef7 264 while(!break_flag){
umairaftab 12:b3137bb72ef7 265 lcd.locate(0,1);
umairaftab 12:b3137bb72ef7 266 lcd.printf("S1: %4.2f",setpoint_soil_humid1);
umairaftab 12:b3137bb72ef7 267 lcd.printf(" S2: %4.2f",setpoint_soil_humid2);
umairaftab 12:b3137bb72ef7 268 key_value2 = Keypad();
umairaftab 12:b3137bb72ef7 269 wait(0.2);
umairaftab 12:b3137bb72ef7 270 if(key_value2 == 50){
umairaftab 12:b3137bb72ef7 271 setpoint_soil_humid1++;
umairaftab 12:b3137bb72ef7 272 setpoint_soil_humid2++;
umairaftab 12:b3137bb72ef7 273 }
umairaftab 12:b3137bb72ef7 274 else if(key_value2 == 47){
umairaftab 12:b3137bb72ef7 275 setpoint_soil_humid1--;
umairaftab 12:b3137bb72ef7 276 setpoint_soil_humid2--;
umairaftab 12:b3137bb72ef7 277 }
umairaftab 12:b3137bb72ef7 278 else if(key_value2 == 51){break_flag=true;}
umairaftab 12:b3137bb72ef7 279 //if (setpoint_air_humidity <0 || setpoint_air_humidity >99) {setpoint_air_humidity=30.00;}
umairaftab 12:b3137bb72ef7 280 }
umairaftab 12:b3137bb72ef7 281
umairaftab 12:b3137bb72ef7 282 lcd.cls();
umairaftab 12:b3137bb72ef7 283 lcd.locate(0,0);
umairaftab 12:b3137bb72ef7 284 lcd.printf("New Soil Setpoints:");
umairaftab 12:b3137bb72ef7 285 lcd.locate(0,1);
umairaftab 12:b3137bb72ef7 286 lcd.printf("S1: %4.2f",setpoint_soil_humid1);
umairaftab 12:b3137bb72ef7 287 lcd.printf(" S2: %4.2f",setpoint_soil_humid2);
umairaftab 12:b3137bb72ef7 288 wait(5);
umairaftab 12:b3137bb72ef7 289 break;
umairaftab 12:b3137bb72ef7 290 case 3:
umairaftab 12:b3137bb72ef7 291
umairaftab 12:b3137bb72ef7 292 break_flag = false;
umairaftab 12:b3137bb72ef7 293 lcd.cls();
umairaftab 12:b3137bb72ef7 294 lcd.locate(0,0);
umairaftab 12:b3137bb72ef7 295 lcd.printf("Cur Air Tmp Setpoint");
umairaftab 12:b3137bb72ef7 296 while(!break_flag){
umairaftab 12:b3137bb72ef7 297 lcd.locate(0,1);
umairaftab 12:b3137bb72ef7 298 lcd.printf("%3.1f",setpoint_MAX_air_temp);
umairaftab 12:b3137bb72ef7 299 key_value2 = Keypad();
umairaftab 12:b3137bb72ef7 300 wait(0.2);
umairaftab 12:b3137bb72ef7 301 if(key_value2 == 50){setpoint_MAX_air_temp++;}
umairaftab 12:b3137bb72ef7 302 else if(key_value2 == 47){setpoint_MAX_air_temp--;}
umairaftab 12:b3137bb72ef7 303 else if(key_value2 == 51){break_flag=true;}
umairaftab 12:b3137bb72ef7 304 if (setpoint_MAX_air_temp <0 || setpoint_MAX_air_temp >99) {setpoint_MAX_air_temp=45.0;}
umairaftab 12:b3137bb72ef7 305 }
umairaftab 12:b3137bb72ef7 306
umairaftab 12:b3137bb72ef7 307 lcd.cls();
umairaftab 12:b3137bb72ef7 308 lcd.locate(0,0);
umairaftab 12:b3137bb72ef7 309 lcd.printf("NEW Air Tmp Setpoint");
umairaftab 12:b3137bb72ef7 310 lcd.locate(0,1);
umairaftab 12:b3137bb72ef7 311 lcd.printf("%3.1f",setpoint_MAX_air_temp);
umairaftab 12:b3137bb72ef7 312 wait(5);
umairaftab 12:b3137bb72ef7 313 break;
umairaftab 12:b3137bb72ef7 314 }//switch end
umairaftab 12:b3137bb72ef7 315 } //OK button if block
umairaftab 12:b3137bb72ef7 316 else if(key_value == 57){
umairaftab 12:b3137bb72ef7 317 exit_settings = true;
umairaftab 12:b3137bb72ef7 318 lcd.cls();
umairaftab 12:b3137bb72ef7 319 lcd.printf("SAVE Config");
umairaftab 12:b3137bb72ef7 320 wait(2);
umairaftab 12:b3137bb72ef7 321 }
umairaftab 12:b3137bb72ef7 322
umairaftab 12:b3137bb72ef7 323 }//While settings loop exit
umairaftab 12:b3137bb72ef7 324 lcd.cls();
umairaftab 12:b3137bb72ef7 325 lcd.printf("Exit Settings");
umairaftab 12:b3137bb72ef7 326 wait(2);
umairaftab 12:b3137bb72ef7 327 }
umairaftab 12:b3137bb72ef7 328 //Function to process keypad inputs
umairaftab 12:b3137bb72ef7 329 void process_user_input(char keypad_value_in, int ui_current_screen_in){
umairaftab 12:b3137bb72ef7 330
umairaftab 17:0ff7385db570 331 if(keypad_value_in == 60){
umairaftab 12:b3137bb72ef7 332 if(lcd_timeout_flag == false){
umairaftab 12:b3137bb72ef7 333 switch (ui_current_screen_in){
umairaftab 12:b3137bb72ef7 334 case 1:
umairaftab 12:b3137bb72ef7 335 ui_screen2();
umairaftab 12:b3137bb72ef7 336 ui_current_screen_in =2;
umairaftab 12:b3137bb72ef7 337 break;
umairaftab 12:b3137bb72ef7 338 case 2:
umairaftab 12:b3137bb72ef7 339 ui_screen3();
umairaftab 12:b3137bb72ef7 340 ui_current_screen_in =3;
umairaftab 12:b3137bb72ef7 341 break;
umairaftab 12:b3137bb72ef7 342 case 3:
umairaftab 12:b3137bb72ef7 343 ui_screen4();
umairaftab 12:b3137bb72ef7 344 ui_current_screen_in =4;
umairaftab 12:b3137bb72ef7 345 break;
umairaftab 12:b3137bb72ef7 346 }//switch block current ui screen
umairaftab 12:b3137bb72ef7 347 lcd_timeout.reset();
umairaftab 12:b3137bb72ef7 348 lcd_timeout.start();
umairaftab 12:b3137bb72ef7 349 wait(2);
umairaftab 12:b3137bb72ef7 350 }// if block lcdflag
umairaftab 12:b3137bb72ef7 351 else{
umairaftab 12:b3137bb72ef7 352 ui_screen1();
umairaftab 12:b3137bb72ef7 353 wait(5);
umairaftab 12:b3137bb72ef7 354 }
umairaftab 12:b3137bb72ef7 355 }// if block 36 end
umairaftab 12:b3137bb72ef7 356
umairaftab 12:b3137bb72ef7 357 // check for setting screen press enter
umairaftab 12:b3137bb72ef7 358 if(keypad_value_in == 51){
umairaftab 12:b3137bb72ef7 359 //Disable peltier
umairaftab 12:b3137bb72ef7 360 ui_settings();
umairaftab 12:b3137bb72ef7 361 wait(5);
umairaftab 12:b3137bb72ef7 362 }
umairaftab 14:72176f1e4907 363
umairaftab 14:72176f1e4907 364 if(keypad_value_in ==100){
umairaftab 14:72176f1e4907 365 ui_screen1();
umairaftab 17:0ff7385db570 366 wait(0.2);
umairaftab 14:72176f1e4907 367 }
umairaftab 12:b3137bb72ef7 368 }
umairaftab 12:b3137bb72ef7 369
umairaftab 12:b3137bb72ef7 370
umairaftab 12:b3137bb72ef7 371
umairaftab 12:b3137bb72ef7 372
umairaftab 8:2d462919519e 373 //***************************PLACEHOLDER FUNCTION TO DISABLE EVERYTHING **********************
umairaftab 8:2d462919519e 374 void disable_everything(){
umairaftab 8:2d462919519e 375
umairaftab 10:1a0fe96381b0 376 //Disable peltier,vac,fans,pumps,lights.
umairaftab 14:72176f1e4907 377 pumps(false,false,false,false);
umairaftab 14:72176f1e4907 378 peltier(false,false,false,false,0);
umairaftab 8:2d462919519e 379 }
umairaftab 8:2d462919519e 380
umairaftab 8:2d462919519e 381
umairaftab 8:2d462919519e 382 //*********************************************************************************************
umairaftab 8:2d462919519e 383 //* *
umairaftab 8:2d462919519e 384 //* *
umairaftab 8:2d462919519e 385 //* *
umairaftab 8:2d462919519e 386 //* *
umairaftab 8:2d462919519e 387 //* MAIN ROUTINE *
umairaftab 8:2d462919519e 388 //* *
umairaftab 8:2d462919519e 389 //* DO NOT MODIFY WITHOUT TELLING UMAIR *
umairaftab 8:2d462919519e 390 //* *
umairaftab 8:2d462919519e 391 //* *
umairaftab 8:2d462919519e 392 //*********************************************************************************************
umairaftab 1:9ef26efedcea 393
umairaftab 1:9ef26efedcea 394 int main(void)
umairaftab 1:9ef26efedcea 395 {
umairaftab 8:2d462919519e 396
umairaftab 8:2d462919519e 397 //call function that disables everything.
umairaftab 8:2d462919519e 398 disable_everything();
umairaftab 8:2d462919519e 399
umairaftab 8:2d462919519e 400
umairaftab 9:43c339533f7f 401
umairaftab 8:2d462919519e 402 //FOR INTERNAL CLOCK
umairaftab 8:2d462919519e 403 clock_mine.attach(&sec_inc, 1.0);
umairaftab 8:2d462919519e 404 char keypad_value;
umairaftab 11:f9ffd5ab7e94 405 int ui_current_screen = 1;
umairaftab 10:1a0fe96381b0 406 //************************************BOOT SEQUENCE*********************
umairaftab 8:2d462919519e 407 //call LCD boot
umairaftab 8:2d462919519e 408 ui_startup();
umairaftab 9:43c339533f7f 409 wait(2);
umairaftab 8:2d462919519e 410 //SET TIME
umairaftab 8:2d462919519e 411 rtcimp_settime(6,0);
umairaftab 8:2d462919519e 412 //call function that reads values
umairaftab 9:43c339533f7f 413
umairaftab 9:43c339533f7f 414 /* FOR CRTITICALITY
umairaftab 9:43c339533f7f 415 NVIC_DisableIRQ(TIMER3_IRQn);
umairaftab 9:43c339533f7f 416
umairaftab 9:43c339533f7f 417 // critical section
umairaftab 9:43c339533f7f 418
umairaftab 9:43c339533f7f 419 NVIC_EnableIRQ(TIMER3_IRQn);
umairaftab 9:43c339533f7f 420 */
umairaftab 9:43c339533f7f 421 lcd.cls();
umairaftab 9:43c339533f7f 422 lcd.locate(0,0);
umairaftab 9:43c339533f7f 423 lcd.printf("Reading Sensors");
umairaftab 9:43c339533f7f 424
umairaftab 8:2d462919519e 425 read_sensors();
umairaftab 8:2d462919519e 426
umairaftab 9:43c339533f7f 427 wait(2);
umairaftab 9:43c339533f7f 428 lcd.cls();
umairaftab 9:43c339533f7f 429 lcd.locate(0,0);
umairaftab 9:43c339533f7f 430 lcd.printf("Done Reading Sensors");
umairaftab 8:2d462919519e 431 //call function that performs functions.
umairaftab 8:2d462919519e 432
umairaftab 9:43c339533f7f 433 wait(2);
umairaftab 9:43c339533f7f 434 lcd.cls();
umairaftab 9:43c339533f7f 435 lcd.locate(0,0);
umairaftab 9:43c339533f7f 436 lcd.printf("Watering Plants");
umairaftab 9:43c339533f7f 437
umairaftab 9:43c339533f7f 438 waterplants();
umairaftab 9:43c339533f7f 439
umairaftab 9:43c339533f7f 440 wait(2);
umairaftab 9:43c339533f7f 441 lcd.cls();
umairaftab 9:43c339533f7f 442 lcd.locate(0,0);
umairaftab 9:43c339533f7f 443 lcd.printf("Air Humidity");
umairaftab 9:43c339533f7f 444
umairaftab 9:43c339533f7f 445 airhumidity();
umairaftab 9:43c339533f7f 446
umairaftab 9:43c339533f7f 447 wait(2);
umairaftab 9:43c339533f7f 448 lcd.cls();
umairaftab 9:43c339533f7f 449 lcd.locate(0,0);
umairaftab 9:43c339533f7f 450 lcd.printf("Cycling Air");
umairaftab 9:43c339533f7f 451
umairaftab 9:43c339533f7f 452 cycleair();
umairaftab 9:43c339533f7f 453
umairaftab 11:f9ffd5ab7e94 454 wait(2);
umairaftab 11:f9ffd5ab7e94 455 lcd.cls();
umairaftab 11:f9ffd5ab7e94 456 lcd.locate(0,0);
umairaftab 11:f9ffd5ab7e94 457 lcd.printf("Testing Lights");
umairaftab 11:f9ffd5ab7e94 458 //led_test();
umairaftab 11:f9ffd5ab7e94 459
umairaftab 11:f9ffd5ab7e94 460
umairaftab 9:43c339533f7f 461 wait(5);
umairaftab 12:b3137bb72ef7 462 ui_current_screen = 1;
umairaftab 9:43c339533f7f 463 ui_screen1();
umairaftab 12:b3137bb72ef7 464 lcd_timeout.reset();
umairaftab 9:43c339533f7f 465 wait(5);
umairaftab 8:2d462919519e 466
umairaftab 14:72176f1e4907 467 startup_flag = false ;
umairaftab 14:72176f1e4907 468 timer1ms.attach(&timer1, 0.001); //interrupt attached function(timer) with interval (1 ms)
umairaftab 1:9ef26efedcea 469 while(1) {
umairaftab 8:2d462919519e 470
umairaftab 14:72176f1e4907 471
umairaftab 9:43c339533f7f 472 //FOR BUZZER
umairaftab 14:72176f1e4907 473
umairaftab 8:2d462919519e 474 keypad_value = Keypad();
umairaftab 17:0ff7385db570 475 wait(0.1);
umairaftab 11:f9ffd5ab7e94 476 //timer1ms.detach();
umairaftab 13:6bf09cd68013 477 //something
umairaftab 12:b3137bb72ef7 478 lcd_timeout_check();
umairaftab 12:b3137bb72ef7 479 process_user_input(keypad_value,ui_current_screen);
umairaftab 12:b3137bb72ef7 480
umairaftab 12:b3137bb72ef7 481
umairaftab 12:b3137bb72ef7 482
umairaftab 12:b3137bb72ef7 483 // -> Key pressed
umairaftab 11:f9ffd5ab7e94 484
umairaftab 8:2d462919519e 485 }//WHILE END
umairaftab 8:2d462919519e 486
umairaftab 8:2d462919519e 487
umairaftab 8:2d462919519e 488 }
umairaftab 8:2d462919519e 489
umairaftab 8:2d462919519e 490