asdf

Dependencies:   SDFileSystem mbed

Fork of All_Combined_Real by JanPaul Bergeson

Committer:
colingm
Date:
Wed Mar 23 14:32:41 2016 +0000
Revision:
5:6532c5a5f576
Parent:
4:70411c8dadcc
asdf

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jphbergeson 0:26713d1db198 1 #include "mbed.h"
jphbergeson 0:26713d1db198 2 #include "nmea.h"
jphbergeson 0:26713d1db198 3 #include "SDFileSystem.h"
jphbergeson 1:5fa445bd14a6 4 #include "SPI.h"
jphbergeson 3:c611fff05072 5 #include "temp_sensor.h"
colingm 5:6532c5a5f576 6 #include "XBeeLib.h"
jphbergeson 0:26713d1db198 7
jphbergeson 1:5fa445bd14a6 8 #define NUM_PIXELS 2048
jphbergeson 0:26713d1db198 9 #define BUF_SIZE 1024
jphbergeson 2:146625d6992d 10
jphbergeson 2:146625d6992d 11 // TODO make a new file (name=timestamp) each time we start recording data
jphbergeson 1:5fa445bd14a6 12 #define OUTPUT_FILE "/sd/data.csv"
jphbergeson 0:26713d1db198 13
jphbergeson 1:5fa445bd14a6 14 // pinout for spectrometer
jphbergeson 1:5fa445bd14a6 15
jphbergeson 1:5fa445bd14a6 16 // Mosi (#8) -> PTD2
jphbergeson 1:5fa445bd14a6 17 // Miso (#7) -> PTD3
jphbergeson 1:5fa445bd14a6 18 // Sclk (#9) -> PTD1
jphbergeson 1:5fa445bd14a6 19
jphbergeson 1:5fa445bd14a6 20 // Pixel_rdy (#6) -> PTA1
jphbergeson 1:5fa445bd14a6 21 // Fifo_cs (#3) -> PTB23
jphbergeson 1:5fa445bd14a6 22 // Trigger (#13) -> PTA2
jphbergeson 2:146625d6992d 23
jphbergeson 4:70411c8dadcc 24 // spi_cs (#10) -> PTC2
jphbergeson 4:70411c8dadcc 25
jphbergeson 1:5fa445bd14a6 26 SPI spi(PTD2, PTD3, PTD1); // mosi, miso, sclk
jphbergeson 1:5fa445bd14a6 27
jphbergeson 4:70411c8dadcc 28 DigitalOut spi_cs(PTC2);
jphbergeson 4:70411c8dadcc 29
jphbergeson 1:5fa445bd14a6 30 DigitalIn pixel_rdy(PTA1);
jphbergeson 1:5fa445bd14a6 31 DigitalOut fifo_cs(PTB23);
jphbergeson 1:5fa445bd14a6 32 DigitalOut trigger(PTA2);
jphbergeson 1:5fa445bd14a6 33
jphbergeson 1:5fa445bd14a6 34 // Blinking red LED
jphbergeson 0:26713d1db198 35 DigitalOut led(LED_RED);
jphbergeson 0:26713d1db198 36
jphbergeson 1:5fa445bd14a6 37 // GPS connection (through arduino)
jphbergeson 0:26713d1db198 38 Serial duino(PTC4, PTC3);
jphbergeson 1:5fa445bd14a6 39
jphbergeson 1:5fa445bd14a6 40 // USB serial to PC
jphbergeson 0:26713d1db198 41 Serial pc(USBTX, USBRX);
jphbergeson 0:26713d1db198 42
jphbergeson 0:26713d1db198 43 /**************************************************
jphbergeson 0:26713d1db198 44 ** SD FILE SYSTEM **
jphbergeson 0:26713d1db198 45 **************************************************/
jphbergeson 0:26713d1db198 46 SDFileSystem sd(PTE3, PTE1, PTE2, PTE4, "sd");
jphbergeson 0:26713d1db198 47 FILE *fpData;
jphbergeson 0:26713d1db198 48
jphbergeson 2:146625d6992d 49 void read_pixels()
jphbergeson 2:146625d6992d 50 {
colingm 5:6532c5a5f576 51 char data[NUM_PIXELS];
jphbergeson 1:5fa445bd14a6 52 for (int i = 0; i < NUM_PIXELS; i++) {
jphbergeson 2:146625d6992d 53
jphbergeson 1:5fa445bd14a6 54 while (!pixel_rdy);
jphbergeson 2:146625d6992d 55
jphbergeson 1:5fa445bd14a6 56 fifo_cs = 0;
jphbergeson 1:5fa445bd14a6 57 data[i] = spi.write(0x00); // write a dummy byte just to read the data
jphbergeson 1:5fa445bd14a6 58 fifo_cs = 1;
jphbergeson 2:146625d6992d 59
jphbergeson 1:5fa445bd14a6 60 }
jphbergeson 2:146625d6992d 61
jphbergeson 1:5fa445bd14a6 62 // write to file and pc
jphbergeson 1:5fa445bd14a6 63 fpData = fopen(OUTPUT_FILE, "a");
jphbergeson 2:146625d6992d 64 for (int i = 0; i < NUM_PIXELS; i++) {
jphbergeson 1:5fa445bd14a6 65 pc.printf(",%d", data[i]);
jphbergeson 1:5fa445bd14a6 66 fprintf(fpData, ",%d", data[i]);
jphbergeson 1:5fa445bd14a6 67 }
jphbergeson 1:5fa445bd14a6 68 pc.printf("\r\n");
jphbergeson 1:5fa445bd14a6 69 fprintf(fpData, "\r\n");
jphbergeson 1:5fa445bd14a6 70 fclose(fpData);
colingm 5:6532c5a5f576 71
colingm 5:6532c5a5f576 72 XBeeSend((const char *)data, 2048);
jphbergeson 1:5fa445bd14a6 73 }
jphbergeson 1:5fa445bd14a6 74
jphbergeson 2:146625d6992d 75 void gps_read() {
jphbergeson 2:146625d6992d 76 char buffer[BUF_SIZE];
jphbergeson 2:146625d6992d 77
jphbergeson 2:146625d6992d 78 get_nmea(&duino, buffer, BUF_SIZE);
jphbergeson 2:146625d6992d 79
jphbergeson 2:146625d6992d 80 struct NMEA_data nmea = parse_line(buffer);
jphbergeson 2:146625d6992d 81
jphbergeson 2:146625d6992d 82 // determine whether there's a lock
jphbergeson 2:146625d6992d 83 char lock_str[BUF_SIZE];
jphbergeson 2:146625d6992d 84 if ( nmea.lock_flag == 'A' )
jphbergeson 2:146625d6992d 85 sprintf(lock_str, "Has lock");
jphbergeson 2:146625d6992d 86 else
jphbergeson 2:146625d6992d 87 sprintf(lock_str, "No lock");
jphbergeson 2:146625d6992d 88
jphbergeson 2:146625d6992d 89 // assemble data into summary string
jphbergeson 2:146625d6992d 90 char status_str[BUF_SIZE];
jphbergeson 2:146625d6992d 91 sprintf(status_str, "%02d:%02d:%02d,%d/%d/%d,%dd %lf' %c %dd %lf' %c,%s",
jphbergeson 2:146625d6992d 92 nmea.hours, nmea.minutes, nmea.seconds,
jphbergeson 2:146625d6992d 93 nmea.month, nmea.day, nmea.year,
jphbergeson 2:146625d6992d 94 nmea.latitude, nmea.latitude_minutes, nmea.latitude_direction,
jphbergeson 2:146625d6992d 95 nmea.longitude, nmea.longitude_minutes, nmea.longitude_direction, lock_str);
jphbergeson 2:146625d6992d 96
jphbergeson 2:146625d6992d 97 // print to pc, sd card
jphbergeson 2:146625d6992d 98 pc.printf("%s", status_str);
jphbergeson 2:146625d6992d 99
jphbergeson 2:146625d6992d 100 fpData = fopen(OUTPUT_FILE, "a");
jphbergeson 2:146625d6992d 101 fprintf(fpData, "%s", status_str);
jphbergeson 2:146625d6992d 102 fclose(fpData);
jphbergeson 2:146625d6992d 103 }
jphbergeson 2:146625d6992d 104
jphbergeson 0:26713d1db198 105 int main()
jphbergeson 0:26713d1db198 106 {
jphbergeson 0:26713d1db198 107 pc.baud(115200); // make sure to set computer TERA Term or whatever to 115200 baud!!!
jphbergeson 0:26713d1db198 108 duino.baud(9600);
jphbergeson 0:26713d1db198 109 pc.printf("Initializing ...\r\n");
jphbergeson 2:146625d6992d 110
colingm 5:6532c5a5f576 111 XBeeInit(&pc);
jphbergeson 1:5fa445bd14a6 112 fifo_cs = 1;
jphbergeson 1:5fa445bd14a6 113 trigger = 0;
jphbergeson 1:5fa445bd14a6 114 wait(0.5f);
jphbergeson 3:c611fff05072 115
jphbergeson 3:c611fff05072 116 init_temp_sensor(); // TODO: stop execution & send error message if can't init temp sensor (or other things)
jphbergeson 2:146625d6992d 117
jphbergeson 2:146625d6992d 118
jphbergeson 0:26713d1db198 119 while (true) {
jphbergeson 2:146625d6992d 120
jphbergeson 0:26713d1db198 121 led = !led;
jphbergeson 2:146625d6992d 122
colingm 5:6532c5a5f576 123 // gps_read();
jphbergeson 3:c611fff05072 124
jphbergeson 3:c611fff05072 125 check_temp();
jphbergeson 3:c611fff05072 126 // Display result
jphbergeson 3:c611fff05072 127 pc.printf(",%s", TempCelsiusDisplay);
jphbergeson 3:c611fff05072 128 fpData = fopen(OUTPUT_FILE, "a");
jphbergeson 3:c611fff05072 129 fprintf(fpData, ",%s", TempCelsiusDisplay);
jphbergeson 3:c611fff05072 130 fclose(fpData);
jphbergeson 2:146625d6992d 131
jphbergeson 1:5fa445bd14a6 132 // Trigger an acquisition from spectrometer
jphbergeson 1:5fa445bd14a6 133 trigger = 1;
jphbergeson 1:5fa445bd14a6 134 wait_ms(1);
jphbergeson 1:5fa445bd14a6 135 trigger = 0;
jphbergeson 1:5fa445bd14a6 136 read_pixels();
jphbergeson 2:146625d6992d 137
jphbergeson 0:26713d1db198 138 wait(0.5f);
jphbergeson 0:26713d1db198 139 }
jphbergeson 0:26713d1db198 140 }