hoal
Dependencies: BMP180 SDFileSystem ds3231 mbed
main.cpp@0:288667fbea81, 2017-05-10 (annotated)
- Committer:
- SolManB
- Date:
- Wed May 10 00:26:17 2017 +0000
- Revision:
- 0:288667fbea81
Hola
Who changed what in which revision?
User | Revision | Line number | New 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 | } |