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