hoal

Dependencies:   BMP180 SDFileSystem ds3231 mbed

Committer:
SolManB
Date:
Wed May 10 00:26:17 2017 +0000
Revision:
0:288667fbea81
Hola

Who changed what in which revision?

UserRevisionLine numberNew contents of line
SolManB 0:288667fbea81 1 #include "mbed.h"
SolManB 0:288667fbea81 2 #include "SDFileSystem.h"
SolManB 0:288667fbea81 3 #include "BMP180.h"
SolManB 0:288667fbea81 4 #include "ds3231.h"
SolManB 0:288667fbea81 5
SolManB 0:288667fbea81 6 SDFileSystem sd(p5, p6, p7, p12, "sd");
SolManB 0:288667fbea81 7 DigitalOut led1(LED1);
SolManB 0:288667fbea81 8 DigitalOut led2(LED2);
SolManB 0:288667fbea81 9 DigitalOut led3(LED3);
SolManB 0:288667fbea81 10 DigitalOut led4(LED4);
SolManB 0:288667fbea81 11 I2C i2(p9,p10);
SolManB 0:288667fbea81 12 BMP180 bmp(&i2);
SolManB 0:288667fbea81 13 AnalogIn bat(p20);
SolManB 0:288667fbea81 14 Serial xbee(p13,p14);
SolManB 0:288667fbea81 15 Ds3231 rtc(p9,p10);
SolManB 0:288667fbea81 16
SolManB 0:288667fbea81 17 //constantes
SolManB 0:288667fbea81 18 const int addra = 0x32;
SolManB 0:288667fbea81 19 enum REG_ADDRS {
SolManB 0:288667fbea81 20 CTRL_REG1_A = 0x20,//decir que ejes quiero habilitar y a que frecuencia
SolManB 0:288667fbea81 21 CTRL_REG4_A = 0x23,//para la escala
SolManB 0:288667fbea81 22 OUT_X_A = 0x28,
SolManB 0:288667fbea81 23 OUT_Y_A = 0x2A,
SolManB 0:288667fbea81 24 OUT_Z_A = 0x2C,
SolManB 0:288667fbea81 25 };
SolManB 0:288667fbea81 26
SolManB 0:288667fbea81 27 //variables
SolManB 0:288667fbea81 28 Ticker vel;
SolManB 0:288667fbea81 29 Timer t;
SolManB 0:288667fbea81 30 time_t epoch_time;
SolManB 0:288667fbea81 31 char time1[3],fecha[18],nombre[30],acc[6],dato1[100],dato2[11];
SolManB 0:288667fbea81 32 int seg1, seg2=-1, milis,cel, i=0,ax,ay,az,en=0;
SolManB 0:288667fbea81 33 float temp;
SolManB 0:288667fbea81 34 FILE *fp;
SolManB 0:288667fbea81 35
SolManB 0:288667fbea81 36 bool writer(int i2cdir,int addr, char valor) // para escribir en el i2c
SolManB 0:288667fbea81 37 {
SolManB 0:288667fbea81 38 char data[2] = {addr, valor};
SolManB 0:288667fbea81 39 return i2.write(i2cdir, data, 2) == 0;
SolManB 0:288667fbea81 40 }
SolManB 0:288667fbea81 41
SolManB 0:288667fbea81 42 void configAcel()//para configurar el acelerometro
SolManB 0:288667fbea81 43 {
SolManB 0:288667fbea81 44 i2.frequency(200000);
SolManB 0:288667fbea81 45 char regv;
SolManB 0:288667fbea81 46 regv = 0; //Se inicializa la variable
SolManB 0:288667fbea81 47 regv |= 0x77; //X/Y/Z axis enable y a 400Hz/
SolManB 0:288667fbea81 48 writer(addra,CTRL_REG1_A,regv);
SolManB 0:288667fbea81 49 regv = 0;
SolManB 0:288667fbea81 50 regv |= 0x08; //2g a high resolution
SolManB 0:288667fbea81 51 writer(addra,CTRL_REG4_A,regv);
SolManB 0:288667fbea81 52 }
SolManB 0:288667fbea81 53
SolManB 0:288667fbea81 54 bool recv(char sad, char sub, char *buf, int length) {
SolManB 0:288667fbea81 55 if (length > 1) sub |= 0x80;
SolManB 0:288667fbea81 56
SolManB 0:288667fbea81 57 return i2.write(sad, &sub, 1, true) == 0 && i2.read(sad, buf, length) == 0;
SolManB 0:288667fbea81 58 }
SolManB 0:288667fbea81 59
SolManB 0:288667fbea81 60 bool aclect(int *ax, int *ay, int *az, char acc[6]) {
SolManB 0:288667fbea81 61 if (recv(addra, OUT_X_A, acc, 6)) {
SolManB 0:288667fbea81 62 *ax = short(acc[1] << 8 | acc[0]); //32768/4=8192
SolManB 0:288667fbea81 63 *ay = short(acc[3] << 8 | acc[2]);
SolManB 0:288667fbea81 64 *az = short(acc[5] << 8 | acc[4]);
SolManB 0:288667fbea81 65 return true;
SolManB 0:288667fbea81 66 }
SolManB 0:288667fbea81 67 return false;
SolManB 0:288667fbea81 68 }
SolManB 0:288667fbea81 69
SolManB 0:288667fbea81 70 void almacenamiento(char dat[])
SolManB 0:288667fbea81 71 {
SolManB 0:288667fbea81 72 if(i==0)//Archivo de crear la rutina
SolManB 0:288667fbea81 73 {
SolManB 0:288667fbea81 74 strftime(nombre,30,"/sd/%y%m%d_%H%M%S.txt", localtime(&epoch_time));
SolManB 0:288667fbea81 75 fp= fopen(nombre, "a+");
SolManB 0:288667fbea81 76 if(fp == NULL) error("Could not open file for write\n");
SolManB 0:288667fbea81 77
SolManB 0:288667fbea81 78 }
SolManB 0:288667fbea81 79
SolManB 0:288667fbea81 80 fprintf(fp,dat);
SolManB 0:288667fbea81 81 fprintf(fp,"\n");
SolManB 0:288667fbea81 82 i++;
SolManB 0:288667fbea81 83 if(i==6000)//Para cerrar el archivo
SolManB 0:288667fbea81 84 {
SolManB 0:288667fbea81 85 fclose(fp);
SolManB 0:288667fbea81 86 i=0;
SolManB 0:288667fbea81 87 led2=!led2;
SolManB 0:288667fbea81 88
SolManB 0:288667fbea81 89 }
SolManB 0:288667fbea81 90 }
SolManB 0:288667fbea81 91
SolManB 0:288667fbea81 92 void lectura()//para la captura de datos
SolManB 0:288667fbea81 93 {
SolManB 0:288667fbea81 94 //lectura del reloj
SolManB 0:288667fbea81 95 epoch_time = rtc.get_epoch();
SolManB 0:288667fbea81 96 strftime(fecha, 19, "%d/%m/%y\t%H:%M:%S", localtime(&epoch_time));
SolManB 0:288667fbea81 97 strftime(time1,3,"%S", localtime(&epoch_time));
SolManB 0:288667fbea81 98
SolManB 0:288667fbea81 99 seg1=atoi(time1);
SolManB 0:288667fbea81 100 if(seg1 != seg2){seg2=seg1;t.stop(); t.reset();t.start();}
SolManB 0:288667fbea81 101 milis=t.read_ms();
SolManB 0:288667fbea81 102
SolManB 0:288667fbea81 103 //Sensor de temperatura
SolManB 0:288667fbea81 104 bmp.startTemperature();
SolManB 0:288667fbea81 105 if(bmp.getTemperature(&temp) != 0)
SolManB 0:288667fbea81 106 printf("Error al tomar la temperatura");
SolManB 0:288667fbea81 107 cel=int(temp);
SolManB 0:288667fbea81 108
SolManB 0:288667fbea81 109 //acelerometro
SolManB 0:288667fbea81 110 aclect(&ax, &ay, &az, acc);
SolManB 0:288667fbea81 111
SolManB 0:288667fbea81 112 //almacenamiento
SolManB 0:288667fbea81 113 sprintf(dato1,"%d\t%d\t%d\t%d\t%s\t%d",ax,ay,az,cel,fecha,milis);
SolManB 0:288667fbea81 114 almacenamiento(dato1);
SolManB 0:288667fbea81 115
SolManB 0:288667fbea81 116 }
SolManB 0:288667fbea81 117
SolManB 0:288667fbea81 118
SolManB 0:288667fbea81 119 int main()
SolManB 0:288667fbea81 120 {
SolManB 0:288667fbea81 121 led1=0;
SolManB 0:288667fbea81 122 led2=0;
SolManB 0:288667fbea81 123 led3=0;
SolManB 0:288667fbea81 124 led4=0;
SolManB 0:288667fbea81 125 //configuraciones
SolManB 0:288667fbea81 126 xbee.baud(115200);
SolManB 0:288667fbea81 127 bmp.init();
SolManB 0:288667fbea81 128 configAcel();
SolManB 0:288667fbea81 129
SolManB 0:288667fbea81 130 vel.attach(&lectura,0.008);
SolManB 0:288667fbea81 131
SolManB 0:288667fbea81 132 while(1)
SolManB 0:288667fbea81 133 {
SolManB 0:288667fbea81 134 led1!=led1;
SolManB 0:288667fbea81 135 wait(0.5);
SolManB 0:288667fbea81 136 }
SolManB 0:288667fbea81 137 }