Sat program

Dependencies:   Adafruit_GFX Adafruit_RTCLib BMP180 L3GD20 LSM303DLHC SHTx mbed

Committer:
oscarvzfz
Date:
Tue Apr 05 16:17:27 2016 +0000
Revision:
1:526ac0828b77
Parent:
0:07c50519b515
blabla

Who changed what in which revision?

UserRevisionLine numberNew contents of line
oscarvzfz 0:07c50519b515 1 #include "mbed.h"
oscarvzfz 0:07c50519b515 2 #include "Adafruit_SSD1306.h"
oscarvzfz 0:07c50519b515 3 #include "DS1307.h"
oscarvzfz 0:07c50519b515 4 #include "SHTx/sht15.hpp"
oscarvzfz 0:07c50519b515 5 #include "L3GD20.h"
oscarvzfz 0:07c50519b515 6 #include "LSM303DLHC.h"
oscarvzfz 0:07c50519b515 7 #include "BMP180.h"
oscarvzfz 0:07c50519b515 8 #include "MS5803.h"
oscarvzfz 1:526ac0828b77 9 #include "SDFileSystem.h"
oscarvzfz 1:526ac0828b77 10 #include "FastJpegCamera.h"
oscarvzfz 1:526ac0828b77 11 #include<stdio.h>
oscarvzfz 1:526ac0828b77 12 #include<string.h>
oscarvzfz 1:526ac0828b77 13 #include<iostream>
oscarvzfz 1:526ac0828b77 14 #include<fstream>
oscarvzfz 1:526ac0828b77 15 #include<errno.h>
oscarvzfz 0:07c50519b515 16
oscarvzfz 1:526ac0828b77 17 //Puertos
oscarvzfz 1:526ac0828b77 18 DigitalOut LEDs[4] = { DigitalOut(LED4), DigitalOut(LED3), DigitalOut(LED2), DigitalOut(LED1)};
oscarvzfz 0:07c50519b515 19 I2C myI2C(p9,p10);
oscarvzfz 0:07c50519b515 20 Adafruit_SSD1306_I2c o(myI2C,D13,0x7A,64,128);
oscarvzfz 1:526ac0828b77 21 //Serial pc(USBTX,USBRX);
oscarvzfz 1:526ac0828b77 22 Serial xbee(p28,p27);
oscarvzfz 0:07c50519b515 23 RtcDs1307 gRtc ( myI2C );
oscarvzfz 0:07c50519b515 24 DateTime dt;
oscarvzfz 0:07c50519b515 25 SHTx::SHT15 sensor(p22, p21);
oscarvzfz 0:07c50519b515 26 L3GD20 gyro(p9, p10);
oscarvzfz 0:07c50519b515 27 LSM303DLHC compass(p9, p10);
oscarvzfz 1:526ac0828b77 28 BMP180 bmp180(&myI2C);
oscarvzfz 1:526ac0828b77 29 AnalogIn uv(p20);
oscarvzfz 1:526ac0828b77 30 AnalogIn Vol(p19);
oscarvzfz 1:526ac0828b77 31 MS5803 press_sensor( p9, p10, 0x76);
oscarvzfz 1:526ac0828b77 32 SDFileSystem sd(p5, p6, p7, p8, "sd");
oscarvzfz 1:526ac0828b77 33 Timer timer;
oscarvzfz 1:526ac0828b77 34 InterruptIn geiger(p29);
oscarvzfz 1:526ac0828b77 35
oscarvzfz 1:526ac0828b77 36
oscarvzfz 1:526ac0828b77 37 //variables
oscarvzfz 0:07c50519b515 38 float ax, ay, az;
oscarvzfz 0:07c50519b515 39 float mx, my, mz;
oscarvzfz 0:07c50519b515 40 float gx, gy, gz;
oscarvzfz 0:07c50519b515 41 double yaw,pitch,roll;
oscarvzfz 0:07c50519b515 42 int press;
oscarvzfz 0:07c50519b515 43 float temp;
oscarvzfz 0:07c50519b515 44 float uv_rad=0;
oscarvzfz 1:526ac0828b77 45 using namespace std;
oscarvzfz 1:526ac0828b77 46 int m=0;
oscarvzfz 1:526ac0828b77 47 int loop_count;
oscarvzfz 1:526ac0828b77 48 float amperaje;
oscarvzfz 1:526ac0828b77 49 float voltaje;
oscarvzfz 1:526ac0828b77 50 char file[32];
oscarvzfz 1:526ac0828b77 51 char send_buffer[15000];
oscarvzfz 1:526ac0828b77 52 char final[20000];
oscarvzfz 1:526ac0828b77 53 int cont=0;
oscarvzfz 1:526ac0828b77 54 #define M_PI 3.14159265358979323846
oscarvzfz 1:526ac0828b77 55 #define archivof "/sd/fotos/pic%05d.jpg"
oscarvzfz 1:526ac0828b77 56 #define archivod "/sd/datos/dato%05d.txt"
oscarvzfz 0:07c50519b515 57
oscarvzfz 1:526ac0828b77 58 void contador()
oscarvzfz 1:526ac0828b77 59 {
oscarvzfz 1:526ac0828b77 60 cont++;
oscarvzfz 1:526ac0828b77 61 }
oscarvzfz 0:07c50519b515 62
oscarvzfz 1:526ac0828b77 63 int main() {
oscarvzfz 1:526ac0828b77 64 wait(3);
oscarvzfz 1:526ac0828b77 65
oscarvzfz 1:526ac0828b77 66 o.clearDisplay();
oscarvzfz 1:526ac0828b77 67 o.setTextCursor(0,0);
oscarvzfz 1:526ac0828b77 68 //pc.printf("CANSAT v.2 UPAEP\n\r");
oscarvzfz 0:07c50519b515 69
oscarvzfz 1:526ac0828b77 70 o.printf("CANSAT v.2 UPAEP\n\r");
oscarvzfz 1:526ac0828b77 71 o.display();
oscarvzfz 1:526ac0828b77 72 geiger.mode(PullUp);
oscarvzfz 1:526ac0828b77 73 geiger.rise(&contador);
oscarvzfz 1:526ac0828b77 74
oscarvzfz 1:526ac0828b77 75 wait(1);
oscarvzfz 1:526ac0828b77 76 LEDs[0]=!LEDs[0];
oscarvzfz 1:526ac0828b77 77
oscarvzfz 1:526ac0828b77 78 mkdir("/sd/fotos", 0777);
oscarvzfz 1:526ac0828b77 79 mkdir("/sd/datos", 0777);
oscarvzfz 0:07c50519b515 80 sensor.setOTPReload(false);
oscarvzfz 0:07c50519b515 81 sensor.setResolution(true);
oscarvzfz 1:526ac0828b77 82 timer.start();
oscarvzfz 1:526ac0828b77 83 xbee.baud(115200);
oscarvzfz 1:526ac0828b77 84 FastJpegCamera fast_jpeg_camera(p13, p14, xbee);
oscarvzfz 1:526ac0828b77 85 o.clearDisplay();
oscarvzfz 1:526ac0828b77 86 o.setTextCursor(0,0);
oscarvzfz 1:526ac0828b77 87 o.printf("Tomara la foto, la foto debe tardar aproximadamente 4 segundos, si tarda es que esta mal la camara");
oscarvzfz 1:526ac0828b77 88 o.display();
oscarvzfz 1:526ac0828b77 89
oscarvzfz 1:526ac0828b77 90 while(1)
oscarvzfz 1:526ac0828b77 91 {
oscarvzfz 1:526ac0828b77 92 wait(2);
oscarvzfz 1:526ac0828b77 93 xbee.baud(115200);
oscarvzfz 1:526ac0828b77 94 loop_count += 1;
oscarvzfz 1:526ac0828b77 95 //h=0;
oscarvzfz 1:526ac0828b77 96 //t=1;
oscarvzfz 1:526ac0828b77 97 //pc.printf("%f\n\r",timer.read());
oscarvzfz 1:526ac0828b77 98 timer.reset();
oscarvzfz 1:526ac0828b77 99 fast_jpeg_camera.shoot(loop_count);
oscarvzfz 1:526ac0828b77 100 FILE *picture;
oscarvzfz 0:07c50519b515 101
oscarvzfz 1:526ac0828b77 102 int size, read_size, packet_index;
oscarvzfz 1:526ac0828b77 103 char send_buffer[10240];
oscarvzfz 1:526ac0828b77 104 packet_index = 1;
oscarvzfz 1:526ac0828b77 105 char file[32];
oscarvzfz 1:526ac0828b77 106 sprintf(file, archivof, loop_count);
oscarvzfz 1:526ac0828b77 107 picture = fopen(file, "r");
oscarvzfz 1:526ac0828b77 108 //printf("Getting Picture Size\n");
oscarvzfz 0:07c50519b515 109
oscarvzfz 0:07c50519b515 110
oscarvzfz 1:526ac0828b77 111 fseek(picture, 0, SEEK_END);
oscarvzfz 1:526ac0828b77 112 size = ftell(picture);
oscarvzfz 1:526ac0828b77 113 fseek(picture, 0, SEEK_SET);
oscarvzfz 1:526ac0828b77 114 //printf("Total Picture size: %i\n",size);
oscarvzfz 1:526ac0828b77 115 // xbee.printf("Total Picture size: %i\n",size);
oscarvzfz 1:526ac0828b77 116
oscarvzfz 1:526ac0828b77 117 while(!feof(picture)) {
oscarvzfz 1:526ac0828b77 118 //while(packet_index = 1){
oscarvzfz 1:526ac0828b77 119 //Read from the file into our send buffer
oscarvzfz 1:526ac0828b77 120 read_size = fread(send_buffer, 1, sizeof(send_buffer)-1, picture);
oscarvzfz 1:526ac0828b77 121
oscarvzfz 1:526ac0828b77 122 //Send data through our socket
oscarvzfz 1:526ac0828b77 123
oscarvzfz 1:526ac0828b77 124 packet_index++;
oscarvzfz 1:526ac0828b77 125
oscarvzfz 1:526ac0828b77 126 }
oscarvzfz 1:526ac0828b77 127
oscarvzfz 1:526ac0828b77 128 fclose(picture);
oscarvzfz 1:526ac0828b77 129 o.clearDisplay();
oscarvzfz 1:526ac0828b77 130 o.setTextCursor(0,0);
oscarvzfz 1:526ac0828b77 131 o.printf("Foto %d\n\r",loop_count );
oscarvzfz 1:526ac0828b77 132 o.display();
oscarvzfz 1:526ac0828b77 133 o.printf("Datos \n\r");
oscarvzfz 1:526ac0828b77 134 fclose(picture);
oscarvzfz 1:526ac0828b77 135 LEDs[1]=!LEDs[1];
oscarvzfz 1:526ac0828b77 136 bmp180.init();
oscarvzfz 1:526ac0828b77 137 compass.read(&ax, &ay, &az, &mx, &my, &mz);
oscarvzfz 1:526ac0828b77 138 gyro.read(&gx, &gy, &gz);
oscarvzfz 1:526ac0828b77 139 roll=atan2(ay, az);
oscarvzfz 1:526ac0828b77 140
oscarvzfz 1:526ac0828b77 141 pitch=atan((-ax)/(ay*sin(roll)+az*cos(roll)));
oscarvzfz 1:526ac0828b77 142 yaw=atan2(mz*sin(roll)-my*cos(roll),mx*cos(pitch)+my*sin(pitch)*sin(roll)+mz*sin(pitch)*cos(roll));
oscarvzfz 1:526ac0828b77 143 press_sensor.Barometer_MS5803();
oscarvzfz 1:526ac0828b77 144 bmp180.startTemperature();
oscarvzfz 1:526ac0828b77 145 wait_ms(5); // Wait for conversion to complete
oscarvzfz 1:526ac0828b77 146 if(bmp180.getTemperature(&temp) != 0) {o.printf("Error getting temperature\n");}
oscarvzfz 1:526ac0828b77 147 bmp180.startPressure(BMP180::ULTRA_LOW_POWER);
oscarvzfz 1:526ac0828b77 148 wait_ms(10); // Wait for conversion to complete
oscarvzfz 1:526ac0828b77 149 if(bmp180.getPressure(&press) != 0) {o.printf("Error getting pressure\n");}
oscarvzfz 1:526ac0828b77 150 xbee.baud(9600);
oscarvzfz 1:526ac0828b77 151 uv_rad=((uv.read()*3.3)-1)/0.125;
oscarvzfz 1:526ac0828b77 152 if(uv_rad<0)uv_rad=0;
oscarvzfz 1:526ac0828b77 153 sensor.update();
oscarvzfz 1:526ac0828b77 154 dt = gRtc.now();
oscarvzfz 1:526ac0828b77 155
oscarvzfz 1:526ac0828b77 156 voltaje=(Vol.read()*3.3)/(.2423);
oscarvzfz 1:526ac0828b77 157
oscarvzfz 1:526ac0828b77 158
oscarvzfz 1:526ac0828b77 159 o.setTextCursor(0,0);
oscarvzfz 1:526ac0828b77 160 o.clearDisplay();
oscarvzfz 1:526ac0828b77 161
oscarvzfz 1:526ac0828b77 162 char fil[32];
oscarvzfz 1:526ac0828b77 163 sprintf(fil, archivod, loop_count);
oscarvzfz 1:526ac0828b77 164 FILE *fp = fopen(fil, "w");
oscarvzfz 1:526ac0828b77 165
oscarvzfz 1:526ac0828b77 166
oscarvzfz 1:526ac0828b77 167 o.printf("%u/%u/%02u %2u:%02u:%02u\n\r",dt.month(),dt.day(),dt.year(),(dt.hour()),dt.minute(),dt.second());
oscarvzfz 1:526ac0828b77 168 o.printf("Temperatura: %3.2f C\r\n", sensor.getTemperature());
oscarvzfz 1:526ac0828b77 169 o.printf("Humedad: %3.2f %%\r\n", sensor.getHumidity());
oscarvzfz 1:526ac0828b77 170 o.printf("P=%d Pa\n\rT=%.2fC\n\r", press, temp);
oscarvzfz 1:526ac0828b77 171 o.printf("r:%.1fp:%.1fy:%.1f\n\r",roll*180/M_PI,pitch*180/M_PI,yaw*180/M_PI);
oscarvzfz 1:526ac0828b77 172 o.printf("UV=%.3fmW/cm^2\n\r",uv_rad);
oscarvzfz 1:526ac0828b77 173 o.printf("P=%.0fPa T=%.2fC\r\n", press_sensor.MS5803_Pressure()*100,press_sensor.MS5803_Temperature());
oscarvzfz 1:526ac0828b77 174 o.printf("Vol:%f V\n\r",voltaje);
oscarvzfz 1:526ac0828b77 175 o.printf("Geiger: %d en tiempo:%f\n\r",cont,timer.read());
oscarvzfz 1:526ac0828b77 176
oscarvzfz 1:526ac0828b77 177 fprintf(fp,"%u/%u/%02u %2u:%02u:%02u\n\r",dt.month(),dt.day(),dt.year(),(dt.hour()),dt.minute(),dt.second());
oscarvzfz 1:526ac0828b77 178 fprintf(fp,"Temperatura: %3.2f C\r\n", sensor.getTemperature());
oscarvzfz 1:526ac0828b77 179 fprintf(fp,"Humedad: %3.2f %%\r\n", sensor.getHumidity());
oscarvzfz 1:526ac0828b77 180 fprintf(fp,"P=%d Pa\n\rT=%.2fC\n\r", press, temp);
oscarvzfz 1:526ac0828b77 181 fprintf(fp,"r:%.1fp:%.1fy:%.1f\n\r",roll*180/M_PI,pitch*180/M_PI,yaw*180/M_PI);
oscarvzfz 1:526ac0828b77 182 fprintf(fp,"UV=%.3fmW/cm^2\n\r",uv_rad);
oscarvzfz 1:526ac0828b77 183 fprintf(fp,"P=%.0fPa T=%.2fC\r\n", press_sensor.MS5803_Pressure()*100,press_sensor.MS5803_Temperature());
oscarvzfz 1:526ac0828b77 184 fprintf(fp,"Vol:%f V\n\r",voltaje);
oscarvzfz 1:526ac0828b77 185 fprintf(fp,"Geiger: %d en tiempo:%f\n\r",cont,timer.read());
oscarvzfz 1:526ac0828b77 186
oscarvzfz 1:526ac0828b77 187 cont=0;
oscarvzfz 1:526ac0828b77 188 timer.reset();
oscarvzfz 1:526ac0828b77 189 fclose(fp);
oscarvzfz 1:526ac0828b77 190 m++;
oscarvzfz 1:526ac0828b77 191
oscarvzfz 1:526ac0828b77 192 o.fillCircle(125,61,2,1);
oscarvzfz 1:526ac0828b77 193 o.drawCircle(118,61,2,1);
oscarvzfz 1:526ac0828b77 194 o.fillCircle(111,61,2,1);
oscarvzfz 1:526ac0828b77 195 o.drawCircle(104,61,2,1);
oscarvzfz 1:526ac0828b77 196 o.fillCircle(97,61,2,1);
oscarvzfz 1:526ac0828b77 197 o.display();
oscarvzfz 1:526ac0828b77 198
oscarvzfz 1:526ac0828b77 199 //Envio
oscarvzfz 1:526ac0828b77 200
oscarvzfz 1:526ac0828b77 201 xbee.printf("INI%2u,%2u,%2u,",(dt.hour()),dt.minute(),dt.second());
oscarvzfz 1:526ac0828b77 202 xbee.printf("%.3f,",uv_rad);
oscarvzfz 1:526ac0828b77 203 xbee.printf("%2.2f,%2.2f,%2.2f,%2.2f,%2.2f,2.2f,%3.1f,%3.1f,%3.1f,",ax,ay,az,gx,gy,gz,yaw,pitch,roll);
oscarvzfz 1:526ac0828b77 204 xbee.printf("%2.2f,%7d,",temp,press);
oscarvzfz 1:526ac0828b77 205 xbee.printf("%2.2f,%3.1f,", sensor.getTemperature(),sensor.getHumidity());
oscarvzfz 1:526ac0828b77 206 xbee.printf("%7.0f,%2.2f,", press_sensor.MS5803_Pressure()*100,press_sensor.MS5803_Temperature());
oscarvzfz 1:526ac0828b77 207 xbee.printf("%1.1f,",voltaje);
oscarvzfz 1:526ac0828b77 208 xbee.printf("%5u,",cont);
oscarvzfz 1:526ac0828b77 209 xbee.printf("%7i,",size);
oscarvzfz 1:526ac0828b77 210 m=0;
oscarvzfz 1:526ac0828b77 211 while(m<read_size)
oscarvzfz 1:526ac0828b77 212 {
oscarvzfz 1:526ac0828b77 213 xbee.printf("%02hx",send_buffer[m]);
oscarvzfz 1:526ac0828b77 214 m++;
oscarvzfz 1:526ac0828b77 215
oscarvzfz 1:526ac0828b77 216 }
oscarvzfz 1:526ac0828b77 217 xbee.printf("FIN");
oscarvzfz 1:526ac0828b77 218 m=0;
oscarvzfz 1:526ac0828b77 219
oscarvzfz 1:526ac0828b77 220 strcpy(send_buffer, "");
oscarvzfz 0:07c50519b515 221
oscarvzfz 0:07c50519b515 222 }
oscarvzfz 0:07c50519b515 223
oscarvzfz 1:526ac0828b77 224 }