John Anthony Jose / Mbed 2 deprecated Group4_WaterCollector_System

Dependencies:   HEPTA_SENSOR Grove_Air_Quality_Sensor_Library mbed HEPTA_EPS HEPTA_COM HEPTA_CDH

Committer:
johnanthonyjose
Date:
Sat Aug 27 01:47:21 2022 +0000
Revision:
33:644859c4fe1c
Parent:
32:c22cbcfb4635
Final Code for presentation

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 0:bdbd3d6fc5d5 1 #include "mbed.h"
johnanthonyjose 33:644859c4fe1c 2 #include "mbed_events.h"
HeptaSatTraining2019 25:ccc5ff675e0c 3 #include "HEPTA_CDH.h"
HeptaSatTraining2019 25:ccc5ff675e0c 4 #include "HEPTA_EPS.h"
MEXT1 27:b4689aa48bf5 5 #include "HEPTA_SENSOR.h"
MEXT1 27:b4689aa48bf5 6 #include "HEPTA_COM.h"
johnanthonyjose 33:644859c4fe1c 7 #include"Air_Quality.h"
johnanthonyjose 33:644859c4fe1c 8
johnanthonyjose 33:644859c4fe1c 9
HeptaSatTraining2019 26:220e5f95168a 10 HEPTA_CDH cdh(p5, p6, p7, p8, "sd");
HeptaSatTraining2019 26:220e5f95168a 11 HEPTA_EPS eps(p16,p26);
MEXT1 27:b4689aa48bf5 12 HEPTA_SENSOR sensor(p17,
johnanthonyjose 33:644859c4fe1c 13 p28,p27,0x19,0x69,0x13,
johnanthonyjose 33:644859c4fe1c 14 p13, p14,p25,p24);
heptasat2021 29:eb84063fe5c9 15 HEPTA_COM com(p9,p10);
heptasat2021 29:eb84063fe5c9 16 DigitalOut condition(LED1);
johnanthonyjose 33:644859c4fe1c 17 AirQuality airqualitysensor;
johnanthonyjose 33:644859c4fe1c 18 PinName analogPin = p19;
johnanthonyjose 33:644859c4fe1c 19 AnalogIn soil(p18);
johnanthonyjose 33:644859c4fe1c 20 int s = 0;
johnanthonyjose 33:644859c4fe1c 21 int sprinkler_switch = 0; //0 = OFF, 1 = ON
johnanthonyjose 33:644859c4fe1c 22 Timer sattime;
johnanthonyjose 33:644859c4fe1c 23 Timer buzzertime;
johnanthonyjose 33:644859c4fe1c 24 Ticker sound;
johnanthonyjose 33:644859c4fe1c 25
johnanthonyjose 33:644859c4fe1c 26 #define mC 261.626
johnanthonyjose 33:644859c4fe1c 27 #define mD 293.665
johnanthonyjose 33:644859c4fe1c 28 #define mE 329.628
johnanthonyjose 33:644859c4fe1c 29 #define mF 349.228
johnanthonyjose 33:644859c4fe1c 30 #define mG 391.995
johnanthonyjose 33:644859c4fe1c 31 #define mA 440.000
johnanthonyjose 33:644859c4fe1c 32 #define mB 493.883
johnanthonyjose 33:644859c4fe1c 33 float mm[]= {mC*4,mD*4,mE*4,mF*4,mG*4,mA*4,mB*4,mC*8}; //timbre
johnanthonyjose 33:644859c4fe1c 34 // Guess: Use p22 for buzzer. If not working, just change
johnanthonyjose 33:644859c4fe1c 35 DigitalOut sp1(p22); //DigitalOut for buzzer
johnanthonyjose 33:644859c4fe1c 36 //Thread thread;
johnanthonyjose 33:644859c4fe1c 37
heptasat2021 29:eb84063fe5c9 38 Serial sat(USBTX,USBRX,9600);
MEXT1 27:b4689aa48bf5 39 int rcmd = 0,cmdflag = 0; //command variable
heptasat2021 29:eb84063fe5c9 40
johnanthonyjose 33:644859c4fe1c 41 void tick(void)
johnanthonyjose 33:644859c4fe1c 42 {
johnanthonyjose 33:644859c4fe1c 43 sp1.write(s);
johnanthonyjose 33:644859c4fe1c 44 s=!s;
johnanthonyjose 33:644859c4fe1c 45 }
johnanthonyjose 33:644859c4fe1c 46
johnanthonyjose 33:644859c4fe1c 47 // Interrupt Handler
johnanthonyjose 33:644859c4fe1c 48 void AirQualityInterrupt()
johnanthonyjose 33:644859c4fe1c 49 {
johnanthonyjose 33:644859c4fe1c 50 AnalogIn sensor(analogPin);
johnanthonyjose 33:644859c4fe1c 51 airqualitysensor.last_vol = airqualitysensor.first_vol;
johnanthonyjose 33:644859c4fe1c 52 airqualitysensor.first_vol = sensor.read()*1000;
johnanthonyjose 33:644859c4fe1c 53 // com.printf("%d\r\n",airqualitysensor.first_vol);
johnanthonyjose 33:644859c4fe1c 54 airqualitysensor.timer_index = 1;
johnanthonyjose 33:644859c4fe1c 55 }
johnanthonyjose 33:644859c4fe1c 56
johnanthonyjose 33:644859c4fe1c 57 //Thread function responsible for turning on the buzzer
johnanthonyjose 33:644859c4fe1c 58 void buzzer_asnyc()
johnanthonyjose 33:644859c4fe1c 59 {
johnanthonyjose 33:644859c4fe1c 60 Ticker sound;
johnanthonyjose 33:644859c4fe1c 61 buzzertime.start();
johnanthonyjose 33:644859c4fe1c 62 //sound on
johnanthonyjose 33:644859c4fe1c 63 sprinkler_switch = 1;
johnanthonyjose 33:644859c4fe1c 64 for(int i=0; i < sizeof(mm)/sizeof(mm[0]); i++) {
johnanthonyjose 33:644859c4fe1c 65 sound.attach(&tick,1.0/mm[i]/2.0);
johnanthonyjose 33:644859c4fe1c 66 wait(0.5f);
johnanthonyjose 33:644859c4fe1c 67 }
johnanthonyjose 33:644859c4fe1c 68 sound.detach();
johnanthonyjose 33:644859c4fe1c 69 sprinkler_switch = 0;
johnanthonyjose 33:644859c4fe1c 70 }
johnanthonyjose 33:644859c4fe1c 71
johnanthonyjose 33:644859c4fe1c 72
johnanthonyjose 33:644859c4fe1c 73 int main()
johnanthonyjose 33:644859c4fe1c 74 {
heptasat2021 29:eb84063fe5c9 75 sat.printf("From Sat : Nominal Operation\r\n");
heptasat2021 29:eb84063fe5c9 76 com.printf("From Sat : Nominal Operation\r\n");
heptasat2021 29:eb84063fe5c9 77 com.baud(9600);
heptasat2021 29:eb84063fe5c9 78 int flag = 0; //condition flag
johnanthonyjose 33:644859c4fe1c 79 float batvol, temp; //voltage, temperature
johnanthonyjose 33:644859c4fe1c 80 float moisture = 0.0; //moisture
johnanthonyjose 33:644859c4fe1c 81 long air_quality = -1; //air quality
johnanthonyjose 33:644859c4fe1c 82
heptasat2021 29:eb84063fe5c9 83 int rcmd=0,cmdflag=0; //command variable
heptasat2021 29:eb84063fe5c9 84 sattime.start();
heptasat2021 29:eb84063fe5c9 85 eps.turn_on_regulator();//turn on 3.3V conveter
johnanthonyjose 33:644859c4fe1c 86
johnanthonyjose 33:644859c4fe1c 87 char target_dir[] = "/sd/mydir";
johnanthonyjose 33:644859c4fe1c 88 char basename[] = "sdtest.csv";
johnanthonyjose 33:644859c4fe1c 89 char target_path[] ="/sd/mydir/sdtest.csv";
johnanthonyjose 33:644859c4fe1c 90
johnanthonyjose 33:644859c4fe1c 91 // strcat(target_path,target_dir);
johnanthonyjose 33:644859c4fe1c 92 // strcat(target_path,"/");
johnanthonyjose 33:644859c4fe1c 93 // strcat(target_path,basename);
johnanthonyjose 33:644859c4fe1c 94 // check saving to SD card
johnanthonyjose 33:644859c4fe1c 95 mkdir(target_dir, 0777);
johnanthonyjose 33:644859c4fe1c 96 //TODO: Overwrite basename if it exists.
johnanthonyjose 33:644859c4fe1c 97 sat.printf("Full Path %s\r\n",target_path);
johnanthonyjose 33:644859c4fe1c 98 // remove the original file
johnanthonyjose 33:644859c4fe1c 99 // remove(target_path);
johnanthonyjose 33:644859c4fe1c 100 FILE *fp = fopen(target_path, "w");
johnanthonyjose 33:644859c4fe1c 101 if(fp == NULL) {
johnanthonyjose 33:644859c4fe1c 102 error("Could not open file for write\r\n");
johnanthonyjose 33:644859c4fe1c 103 }
johnanthonyjose 33:644859c4fe1c 104 fclose(fp);
johnanthonyjose 33:644859c4fe1c 105
johnanthonyjose 33:644859c4fe1c 106 //TODO: Fix the wait timer inside
johnanthonyjose 33:644859c4fe1c 107 airqualitysensor.init(analogPin, AirQualityInterrupt); //Turn on Air Quality
johnanthonyjose 33:644859c4fe1c 108
johnanthonyjose 33:644859c4fe1c 109 //Assume that the satellite is accessible.
johnanthonyjose 33:644859c4fe1c 110 //TODO: Establish first that satellite is available.
johnanthonyjose 33:644859c4fe1c 111 sat.printf("Sending Satellite Data...\r\n");
johnanthonyjose 33:644859c4fe1c 112
johnanthonyjose 33:644859c4fe1c 113 int packet_num = 0;
johnanthonyjose 33:644859c4fe1c 114 while(1) {
heptasat2021 30:f300d1e88f4c 115 com.xbee_receive(&rcmd,&cmdflag);//interupting by ground station command
johnanthonyjose 33:644859c4fe1c 116
heptasat2021 29:eb84063fe5c9 117 //satellite condition led
heptasat2021 29:eb84063fe5c9 118 condition = !condition;
johnanthonyjose 33:644859c4fe1c 119
heptasat2021 29:eb84063fe5c9 120 //senssing HK data(dummy data)
heptasat2021 29:eb84063fe5c9 121 eps.vol(&batvol);
MEXT1 27:b4689aa48bf5 122 sensor.temp_sense(&temp);
johnanthonyjose 33:644859c4fe1c 123
heptasat2021 29:eb84063fe5c9 124 //Transmitting HK data to Ground Station(GS)
heptasat2021 29:eb84063fe5c9 125 com.printf("HEPTASAT::Condition = %d, Time = %f [s], batVol = %.2f [V],Temp = %.2f [C]\r\n",flag,sattime.read(),batvol,temp);
heptasat2021 29:eb84063fe5c9 126 wait_ms(1000);
johnanthonyjose 33:644859c4fe1c 127
johnanthonyjose 33:644859c4fe1c 128 //Collect Data from GST Sensors
johnanthonyjose 33:644859c4fe1c 129 moisture = soil.read() * 1000.0;
johnanthonyjose 33:644859c4fe1c 130 air_quality=airqualitysensor.slope();
johnanthonyjose 33:644859c4fe1c 131 sprinkler_switch = 0; //OFF
johnanthonyjose 33:644859c4fe1c 132 FILE *fp = fopen(target_path, "a");
johnanthonyjose 33:644859c4fe1c 133 sat.printf("Time = %.0f, Moisture = %0.4f,Air Quality = %0.2ld, Sprinkler = %d\r\n",sattime.read(),moisture,air_quality,sprinkler_switch);
johnanthonyjose 33:644859c4fe1c 134 fprintf(fp,"Time = %.0f, Moisture = %0.4f,Air Quality = %0.2ld, Sprinkler = %d\r\n",sattime.read(),moisture,air_quality,sprinkler_switch);
johnanthonyjose 33:644859c4fe1c 135 fclose(fp);
johnanthonyjose 33:644859c4fe1c 136 packet_num++;
johnanthonyjose 33:644859c4fe1c 137 //For every 10 packets, delete the file.
johnanthonyjose 33:644859c4fe1c 138 // if (packet_num % 100 == 0) {
johnanthonyjose 33:644859c4fe1c 139 // remove(target_path);
johnanthonyjose 33:644859c4fe1c 140 // }
MEXT1 27:b4689aa48bf5 141 //Contents of command
HeptaSatTraining2019 26:220e5f95168a 142 if (cmdflag == 1) {
HeptaSatTraining2019 26:220e5f95168a 143 if (rcmd == 'a') {
johnanthonyjose 33:644859c4fe1c 144 //Download GST Farm Sensors data from SD Card
heptasat2021 29:eb84063fe5c9 145 sat.printf("rcmd=%c,cmdflag=%d\r\n",rcmd,cmdflag);
johnanthonyjose 33:644859c4fe1c 146 com.printf("Hepta-Sat Uplink Ok\r\n");
johnanthonyjose 33:644859c4fe1c 147 char buffer[2048];
johnanthonyjose 33:644859c4fe1c 148 //Send all contents of SD Cards.
johnanthonyjose 33:644859c4fe1c 149 //TODO: Make it buffered
johnanthonyjose 33:644859c4fe1c 150 //TODO: Add temporary for safety
johnanthonyjose 33:644859c4fe1c 151 fp = fopen(target_path,"r");
johnanthonyjose 33:644859c4fe1c 152 while(fgets(buffer,2048,fp)) {
johnanthonyjose 33:644859c4fe1c 153 char send_GS[2048];
johnanthonyjose 33:644859c4fe1c 154 strcpy(send_GS, buffer);
johnanthonyjose 33:644859c4fe1c 155 com.printf(send_GS);
MEXT1 27:b4689aa48bf5 156 }
heptasat2021 29:eb84063fe5c9 157 fclose(fp);
johnanthonyjose 33:644859c4fe1c 158 // remove the original file
johnanthonyjose 33:644859c4fe1c 159 remove(target_path);
johnanthonyjose 33:644859c4fe1c 160 } else if (rcmd == 'b') {
johnanthonyjose 33:644859c4fe1c 161 //Activate Buzzer
johnanthonyjose 33:644859c4fe1c 162 sat.printf("rcmd=%c,cmdflag=%d\r\n",rcmd,cmdflag);
johnanthonyjose 33:644859c4fe1c 163 com.printf("Hepta-Sat Uplink Ok\r\n");
johnanthonyjose 33:644859c4fe1c 164 sat.printf("Current Sattime: %d\r\n",sattime.read());
johnanthonyjose 33:644859c4fe1c 165
johnanthonyjose 33:644859c4fe1c 166 int time=2; //Duration of time
johnanthonyjose 33:644859c4fe1c 167
johnanthonyjose 33:644859c4fe1c 168 for(int t=time;t>=0; t--) {
johnanthonyjose 33:644859c4fe1c 169 //sound on
johnanthonyjose 33:644859c4fe1c 170 for(int i=0; i < sizeof(mm)/sizeof(mm[0]); i++) {
johnanthonyjose 33:644859c4fe1c 171 sound.attach(&tick,1.0/mm[i]/2.0);
johnanthonyjose 33:644859c4fe1c 172 wait(0.5f);
johnanthonyjose 33:644859c4fe1c 173 }
johnanthonyjose 33:644859c4fe1c 174 sound.detach();
johnanthonyjose 33:644859c4fe1c 175 sat.printf("Current time: %d\r\n",t);
heptasat2021 29:eb84063fe5c9 176 }
johnanthonyjose 33:644859c4fe1c 177 //
johnanthonyjose 33:644859c4fe1c 178 // if(sattime.read() > 300) {
johnanthonyjose 33:644859c4fe1c 179 // //sound on
johnanthonyjose 33:644859c4fe1c 180 // for(int i=0; i < sizeof(mm)/sizeof(mm[0]); i++) {
johnanthonyjose 33:644859c4fe1c 181 // sound.attach(&tick,1.0/mm[i]/2.0);
johnanthonyjose 33:644859c4fe1c 182 // wait(0.5f);
johnanthonyjose 33:644859c4fe1c 183 // }
johnanthonyjose 33:644859c4fe1c 184 // sound.detach();
johnanthonyjose 33:644859c4fe1c 185 // }
johnanthonyjose 33:644859c4fe1c 186 //else {
johnanthonyjose 33:644859c4fe1c 187 // sat.printf("Catch Some error here.\r\n");
johnanthonyjose 33:644859c4fe1c 188 // }
johnanthonyjose 33:644859c4fe1c 189 } else if (rcmd == 'c') {
heptasat2021 29:eb84063fe5c9 190 //Please insert your answer
heptasat2021 29:eb84063fe5c9 191
johnanthonyjose 33:644859c4fe1c 192 } else if (rcmd == 'd') {
heptasat2021 29:eb84063fe5c9 193 //Please insert your answer
heptasat2021 29:eb84063fe5c9 194
johnanthonyjose 33:644859c4fe1c 195 } else if (rcmd == 'e') {
heptasat2021 29:eb84063fe5c9 196 //Please insert your answer
heptasat2021 29:eb84063fe5c9 197
HeptaSatTraining2019 26:220e5f95168a 198 }
heptasat2021 30:f300d1e88f4c 199 com.initialize();
HeptaSatTraining2019 26:220e5f95168a 200 }
HeptaSatTraining2019 24:3659e0c223c8 201 }
johnanthonyjose 33:644859c4fe1c 202
heptasat2021 29:eb84063fe5c9 203 sattime.stop();
heptasat2021 29:eb84063fe5c9 204 sat.printf("From Sat : End of operation\r\n");
heptasat2021 29:eb84063fe5c9 205 com.printf("From Sat : End of operation\r\n");
MEXT1 27:b4689aa48bf5 206 }