Group B Mission

Dependencies:   mbed HeptaBattery SDFileSystem Hepta9axis HeptaTemp

Committer:
tandin
Date:
Mon Aug 26 01:15:31 2019 +0000
Revision:
24:cc228716a85f
Parent:
23:3dad6c03c214
Updated

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 0:bdbd3d6fc5d5 1 #include "mbed.h"
mbed_official 0:bdbd3d6fc5d5 2 #include "SDFileSystem.h"
umeume 2:1c5cdb2c3e0f 3 #include "HeptaXbee.h"
umeume 2:1c5cdb2c3e0f 4 #include "HeptaCamera_GPS.h"
umeume 2:1c5cdb2c3e0f 5 #include "Hepta9axis.h"
umeume 2:1c5cdb2c3e0f 6 #include "HeptaTemp.h"
umeume 2:1c5cdb2c3e0f 7 #include "HeptaBattery.h"
tandin 21:9592659dd31f 8 #include"Air_Quality.h"
tandin 21:9592659dd31f 9
tandin 21:9592659dd31f 10 AnalogIn sensorUV(p18);
tandin 21:9592659dd31f 11 AirQuality airqualitysensor;
tandin 21:9592659dd31f 12 int current_quality = -1;
tandin 21:9592659dd31f 13 PinName analogPin = p15;
umeume 2:1c5cdb2c3e0f 14
umeume 2:1c5cdb2c3e0f 15 Serial pc(USBTX,USBRX);
HEPTA 9:942eb6e8c117 16 SDFileSystem sd(p5, p6, p7, p8, "sd");
umeume 2:1c5cdb2c3e0f 17 HeptaXbee xbee(p9,p10);
umeume 2:1c5cdb2c3e0f 18 HeptaCamera_GPS cam_gps(p13, p14,p25,p24);
HEPTA 10:4d6870d0caa0 19 Hepta9axis n_axis(p28,p27,0xD0,0x18);
HEPTA 7:fab080b8be64 20 HeptaTemp temp(p17);
HEPTA 13:a1fa75a002f6 21 HeptaBattery battery(p16,p26);
umeume 2:1c5cdb2c3e0f 22
tandin 23:3dad6c03c214 23 int rcmd = 0,cmdflag = 0;
tandin 23:3dad6c03c214 24
tandin 23:3dad6c03c214 25 void commandget()
tandin 23:3dad6c03c214 26 {
tandin 23:3dad6c03c214 27 rcmd=pc.getc();
tandin 23:3dad6c03c214 28 cmdflag = 1;
tandin 23:3dad6c03c214 29 }
tandin 23:3dad6c03c214 30 void initialize()
tandin 23:3dad6c03c214 31 {
tandin 23:3dad6c03c214 32 rcmd = 0;
tandin 23:3dad6c03c214 33 cmdflag = 0;
tandin 23:3dad6c03c214 34 }
tandin 23:3dad6c03c214 35 void receive(int *xrcmd, int *xcmdflag)
tandin 23:3dad6c03c214 36 {
tandin 23:3dad6c03c214 37 pc.attach(commandget,Serial::RxIrq);
tandin 23:3dad6c03c214 38 *xrcmd = rcmd;
tandin 23:3dad6c03c214 39 *xcmdflag = cmdflag;
tandin 23:3dad6c03c214 40 }
tandin 21:9592659dd31f 41 // Interrupt Handler
tandin 21:9592659dd31f 42 void AirQualityInterrupt()
tandin 21:9592659dd31f 43 {
tandin 21:9592659dd31f 44 AnalogIn sensor(analogPin);
tandin 21:9592659dd31f 45 airqualitysensor.last_vol = airqualitysensor.first_vol;
tandin 21:9592659dd31f 46 airqualitysensor.first_vol = sensor.read()*1000;
tandin 21:9592659dd31f 47 airqualitysensor.timer_index = 1;
tandin 21:9592659dd31f 48 }
umeume 5:c5ccb1b07e8f 49
umeume 2:1c5cdb2c3e0f 50 int main()
umeume 2:1c5cdb2c3e0f 51 {
tandin 21:9592659dd31f 52 pc.baud(9600);
tandin 21:9592659dd31f 53 xbee.baud(9600);
tandin 21:9592659dd31f 54 pc.printf("Xbee Uplink Ok Mode\r\n");
tandin 21:9592659dd31f 55 float bt;
tandin 21:9592659dd31f 56 float temper;
tandin 21:9592659dd31f 57 //char str[100];
tandin 21:9592659dd31f 58 float ax,ay,az;
tandin 21:9592659dd31f 59 float gx,gy,gz;
tandin 21:9592659dd31f 60 float mx,my,mz;
tandin 21:9592659dd31f 61 int rcmd=0,cmdflag=0;
tandin 21:9592659dd31f 62 int flag = 0;
tandin 22:228f5d9aed7b 63 FILE *dummy = fopen("/sd/dummy.txt","w");
tandin 22:228f5d9aed7b 64 fclose(dummy);
tandin 21:9592659dd31f 65 while(1) {
tandin 21:9592659dd31f 66 battery.power_saving_mode(&flag,&bt);
tandin 21:9592659dd31f 67 temp.temp_sense(&temper);
tandin 23:3dad6c03c214 68
tandin 21:9592659dd31f 69 wait(0.5);
tandin 21:9592659dd31f 70 xbee.xbee_receive(&rcmd,&cmdflag);
tandin 23:3dad6c03c214 71 //receive(&rcmd,&cmdflag);
tandin 23:3dad6c03c214 72 xbee.printf("Type q to see commands available.\r\n");
tandin 23:3dad6c03c214 73 pc.printf("Type q to see commands available.\r\n");
tandin 21:9592659dd31f 74 if(flag == 1) {
tandin 21:9592659dd31f 75 pc.printf("Low Battery\r\n");
tandin 21:9592659dd31f 76 xbee.printf("Low Battery\r\n");
tandin 21:9592659dd31f 77 } else if(temper > 35.0) {
tandin 22:228f5d9aed7b 78 pc.printf("High Temperature\n\r");
tandin 22:228f5d9aed7b 79 xbee.printf("High Temperature\n\r");
tandin 21:9592659dd31f 80 } else if((flag == 1) & (temper > 35.0)) {
tandin 22:228f5d9aed7b 81 pc.printf("Low Battery and High Temperature\n\r");
tandin 22:228f5d9aed7b 82 xbee.printf("Low Battery and High Temperature\n\r");
tandin 21:9592659dd31f 83 }
tandin 21:9592659dd31f 84 if (cmdflag == 1) {
tandin 23:3dad6c03c214 85
tandin 21:9592659dd31f 86 pc.printf("Command Get = %d\r\n",rcmd);
tandin 23:3dad6c03c214 87 xbee.printf("HEPTA is ready to command\r\n",rcmd);
tandin 21:9592659dd31f 88 switch (rcmd) {
tandin 23:3dad6c03c214 89 case 'h':
tandin 23:3dad6c03c214 90 for(int i = 0; i < 50; i++){
tandin 23:3dad6c03c214 91 pc.printf("flag = %d, bt = %.2f [V], temp = %.1f [C]\r\n",flag,bt,temper);
tandin 23:3dad6c03c214 92 xbee.printf("flag = %d, bt = %.2f [V], temp = %.1f [C]\r\n",flag,bt,temper);
tandin 23:3dad6c03c214 93 }
tandin 23:3dad6c03c214 94 break;
tandin 23:3dad6c03c214 95 case 'q':
tandin 23:3dad6c03c214 96 xbee.printf("HEPTA Uplink OK\r\n");
tandin 23:3dad6c03c214 97 xbee.printf("a for Air Quality. \r\n");
tandin 23:3dad6c03c214 98 xbee.printf("b for UV Reading. \r\n");
tandin 23:3dad6c03c214 99 xbee.printf("c for Take a snaphot. \r\n");
tandin 23:3dad6c03c214 100 xbee.printf("d for Air Temperature.\r\n");
tandin 23:3dad6c03c214 101 xbee.printf("e for Satellite Attitude. \r\n");
tandin 23:3dad6c03c214 102 xbee.printf("f for GPS Data. \r\n");
tandin 23:3dad6c03c214 103 xbee.printf("h for Housekeeping Data. \r\n");
tandin 23:3dad6c03c214 104 wait(3.0);
tandin 23:3dad6c03c214 105 break;
tandin 22:228f5d9aed7b 106 case 'a':
tandin 21:9592659dd31f 107 airqualitysensor.init(analogPin, AirQualityInterrupt);
tandin 23:3dad6c03c214 108 for(int i = 0; i < 50; i++){
tandin 21:9592659dd31f 109 current_quality=airqualitysensor.slope();
tandin 21:9592659dd31f 110 if (current_quality >= 0) { // if a valid data returned.
tandin 21:9592659dd31f 111 if (current_quality == 0){
tandin 21:9592659dd31f 112 printf("High pollution! Force signal active\n\r");
tandin 21:9592659dd31f 113 xbee.printf("High pollution! Force signal active\n\r");
tandin 21:9592659dd31f 114 }
tandin 21:9592659dd31f 115 else if (current_quality == 1){
tandin 21:9592659dd31f 116 printf("High pollution!\n\r");
tandin 21:9592659dd31f 117 xbee.printf("High pollution!\n\r");
tandin 21:9592659dd31f 118 }
tandin 21:9592659dd31f 119 else if (current_quality == 2){
tandin 21:9592659dd31f 120 printf("Low pollution!\n\r");
tandin 21:9592659dd31f 121 xbee.printf("Low pollution!\n\r");
tandin 21:9592659dd31f 122 }
tandin 21:9592659dd31f 123 else if (current_quality == 3){
tandin 21:9592659dd31f 124 printf("Fresh air\n\r");
tandin 21:9592659dd31f 125 xbee.printf("Fresh air\n\r");
tandin 21:9592659dd31f 126 }
tandin 21:9592659dd31f 127 }
tandin 21:9592659dd31f 128 wait(1.0);
tandin 21:9592659dd31f 129 }
tandin 21:9592659dd31f 130 break;
tandin 23:3dad6c03c214 131 case 'b':
tandin 21:9592659dd31f 132 float value;
tandin 23:3dad6c03c214 133 for(int i = 0; i < 50; i++){
tandin 21:9592659dd31f 134 value = sensorUV;
tandin 22:228f5d9aed7b 135 pc.printf("\rUV Value = %3.2f%%\r\n",value*100);
tandin 22:228f5d9aed7b 136 xbee.printf("\rUV Value = %3.2f%%\r\n",value*100);
tandin 21:9592659dd31f 137 wait(1.0);
tandin 21:9592659dd31f 138 }
tandin 21:9592659dd31f 139 break;
tandin 23:3dad6c03c214 140 case 'c':
tandin 21:9592659dd31f 141
tandin 21:9592659dd31f 142 pc.printf("Camera Snapshot Mode\r\n");
tandin 21:9592659dd31f 143 pc.printf("Hit Any Key To Take Picture\r\n");
tandin 21:9592659dd31f 144 xbee.printf("Camera Snapshot Mode\r\n");
tandin 21:9592659dd31f 145 xbee.printf("Hit Any Key To Take Picture\r\n");
tandin 22:228f5d9aed7b 146 while(!xbee.readable()) {}
tandin 21:9592659dd31f 147 cam_gps.Sync();
tandin 21:9592659dd31f 148 cam_gps.initialize(HeptaCamera_GPS::Baud115200, HeptaCamera_GPS::JpegResolution320x240);
tandin 21:9592659dd31f 149 cam_gps.test_jpeg_snapshot_picture("/sd/test.jpg");
tandin 21:9592659dd31f 150 break;
tandin 23:3dad6c03c214 151 case 'd':
tandin 21:9592659dd31f 152 float temper;
tandin 23:3dad6c03c214 153 for (int i=0;i<50;i++) {
tandin 21:9592659dd31f 154 temp.temp_sense(&temper);
tandin 21:9592659dd31f 155 pc.printf("Air Temperature: %f\n\r", temper);
tandin 21:9592659dd31f 156 xbee.printf("Air Temperature: %f\n\r", temper);
tandin 21:9592659dd31f 157 wait(1.0);
tandin 21:9592659dd31f 158 }
tandin 21:9592659dd31f 159 break;
tandin 23:3dad6c03c214 160 case 'e':
tandin 23:3dad6c03c214 161 for (int i=0;i<50;i++) {
tandin 21:9592659dd31f 162 n_axis.sen_acc(&ax,&ay,&az);
tandin 21:9592659dd31f 163 n_axis.sen_mag(&mx,&my,&mz);
tandin 21:9592659dd31f 164 n_axis.sen_gyro(&gx,&gy,&gz);
tandin 21:9592659dd31f 165 pc.printf("Acceleration: %f,%f,%f\t",ax,ay,az);
tandin 21:9592659dd31f 166 pc.printf("Magnetism: %f,%f,%f\t",mx,my,mz);
tandin 21:9592659dd31f 167 pc.printf("Velocity: %f,%f,%f\r\n",gx,gy,gz);
tandin 21:9592659dd31f 168 xbee.printf("Acceleration: %f,%f,%f\t",ax,ay,az);
tandin 21:9592659dd31f 169 xbee.printf("Magnetism: %f,%f,%f\t",mx,my,mz);
tandin 21:9592659dd31f 170 xbee.printf("Velocity: %f,%f,%f\r\n",gx,gy,gz);
tandin 21:9592659dd31f 171 wait(1.0);
tandin 21:9592659dd31f 172 }
tandin 21:9592659dd31f 173
tandin 21:9592659dd31f 174 break;
tandin 23:3dad6c03c214 175 case 'f':
tandin 21:9592659dd31f 176
tandin 21:9592659dd31f 177 cam_gps.gps_setting();
tandin 21:9592659dd31f 178 int quality=0,stnum=0,gps_check=0;
tandin 21:9592659dd31f 179 char ns='A',ew='B',aunit='m';
tandin 21:9592659dd31f 180 float time=0.0,latitude=0.0,longitude=0.0,hacu=0.0,altitude=0.0;
tandin 23:3dad6c03c214 181 for(int i=1; i<50; i++) {
tandin 21:9592659dd31f 182 cam_gps.gga_sensing(&time, &latitude, &ns, &longitude, &ew, &quality, &stnum, &hacu, &altitude, &aunit, &gps_check);
tandin 21:9592659dd31f 183 if((gps_check==0)|(gps_check==1)) {
tandin 21:9592659dd31f 184 pc.printf("GPGGA,%f,%f,%c,%f,%c,%d,%d,%f,%f,%c\r\n",time,latitude,ns,longitude,ew,quality,stnum,hacu,altitude,aunit);
tandin 21:9592659dd31f 185 xbee.printf("GPGGA,%f,%f,%c,%f,%c,%d,%d,%f,%f,%c\r\n",time,latitude,ns,longitude,ew,quality,stnum,hacu,altitude,aunit);
tandin 21:9592659dd31f 186 }
tandin 21:9592659dd31f 187 }
tandin 21:9592659dd31f 188 break;
tandin 21:9592659dd31f 189 default:
tandin 22:228f5d9aed7b 190 pc.printf("Unknown command.\r\n");
tandin 22:228f5d9aed7b 191 xbee.printf("Unknown command.\r\n");
tandin 21:9592659dd31f 192 }
tandin 21:9592659dd31f 193
tandin 21:9592659dd31f 194 xbee.initialize();
tandin 21:9592659dd31f 195 }
tandin 21:9592659dd31f 196 wait(1.0);
tandin 21:9592659dd31f 197 }
umeume 2:1c5cdb2c3e0f 198 }