Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: HEPTA_SENSOR Grove_Air_Quality_Sensor_Library mbed HEPTA_EPS HEPTA_COM HEPTA_CDH
main.cpp@33:644859c4fe1c, 2022-08-27 (annotated)
- 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?
| User | Revision | Line number | New 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 | } |