Hepta2_Assembly_Ver.1
Dependencies: HeptaBattery Hepta2_9axis Hepta_Serial SDHCFileSystem HeptaTemp HeptaXbee mbed
Fork of Hepta_Camera_test by
Revision 3:4854731e663d, committed 2017-07-24
- Comitter:
- hepta2ume
- Date:
- Mon Jul 24 05:54:59 2017 +0000
- Parent:
- 2:726072016da1
- Commit message:
- Hepta_All
Changed in this revision
diff -r 726072016da1 -r 4854731e663d FATFileSystem.lib --- a/FATFileSystem.lib Fri Jul 21 10:38:11 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -http://mbed.org/users/mbed_unsupported/code/fatfilesystem/#333d6e93e58f
diff -r 726072016da1 -r 4854731e663d HeptaBattery.lib --- a/HeptaBattery.lib Fri Jul 21 10:38:11 2017 +0000 +++ b/HeptaBattery.lib Mon Jul 24 05:54:59 2017 +0000 @@ -1,1 +1,1 @@ -http://developer.mbed.org/users/hepta2ume/code/HeptaBattery/#1682fa22a51e +http://developer.mbed.org/users/hepta2ume/code/HeptaBattery/#035ad1d97299
diff -r 726072016da1 -r 4854731e663d HeptaSerial.lib --- a/HeptaSerial.lib Fri Jul 21 10:38:11 2017 +0000 +++ b/HeptaSerial.lib Mon Jul 24 05:54:59 2017 +0000 @@ -1,1 +1,1 @@ -https://developer.mbed.org/users/hepta2ume/code/HeptaSerial/#12659e671bad +https://developer.mbed.org/users/hepta2ume/code/Hepta_Serial/#57c7f33a3621
diff -r 726072016da1 -r 4854731e663d PowerControl.lib --- a/PowerControl.lib Fri Jul 21 10:38:11 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -https://developer.mbed.org/users/hepta2ume/code/PowerControl/#5c2343149451
diff -r 726072016da1 -r 4854731e663d SDHCFileSystem.cpp --- a/SDHCFileSystem.cpp Fri Jul 21 10:38:11 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,495 +0,0 @@ -/* mbed SDFileSystem Library, for providing file access to SD cards - * Copyright (c) 2008-2010, sford - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/* Introduction - * ------------ - * SD and MMC cards support a number of interfaces, but common to them all - * is one based on SPI. This is the one I'm implmenting because it means - * it is much more portable even though not so performant, and we already - * have the mbed SPI Interface! - * - * The main reference I'm using is Chapter 7, "SPI Mode" of: - * http://www.sdcard.org/developers/tech/sdcard/pls/Simplified_Physical_Layer_Spec.pdf - * - * SPI Startup - * ----------- - * The SD card powers up in SD mode. The SPI interface mode is selected by - * asserting CS low and sending the reset command (CMD0). The card will - * respond with a (R1) response. - * - * CMD8 is optionally sent to determine the voltage range supported, and - * indirectly determine whether it is a version 1.x SD/non-SD card or - * version 2.x. I'll just ignore this for now. - * - * ACMD41 is repeatedly issued to initialise the card, until "in idle" - * (bit 0) of the R1 response goes to '0', indicating it is initialised. - * - * You should also indicate whether the host supports High Capicity cards, - * and check whether the card is high capacity - i'll also ignore this - * - * SPI Protocol - * ------------ - * The SD SPI protocol is based on transactions made up of 8-bit words, with - * the host starting every bus transaction by asserting the CS signal low. The - * card always responds to commands, data blocks and errors. - * - * The protocol supports a CRC, but by default it is off (except for the - * first reset CMD0, where the CRC can just be pre-calculated, and CMD8) - * I'll leave the CRC off I think! - * - * Standard capacity cards have variable data block sizes, whereas High - * Capacity cards fix the size of data block to 512 bytes. I'll therefore - * just always use the Standard Capacity cards with a block size of 512 bytes. - * This is set with CMD16. - * - * You can read and write single blocks (CMD17, CMD25) or multiple blocks - * (CMD18, CMD25). For simplicity, I'll just use single block accesses. When - * the card gets a read command, it responds with a response token, and then - * a data token or an error. - * - * SPI Command Format - * ------------------ - * Commands are 6-bytes long, containing the command, 32-bit argument, and CRC. - * - * +---------------+------------+------------+-----------+----------+--------------+ - * | 01 | cmd[5:0] | arg[31:24] | arg[23:16] | arg[15:8] | arg[7:0] | crc[6:0] | 1 | - * +---------------+------------+------------+-----------+----------+--------------+ - * - * As I'm not using CRC, I can fix that byte to what is needed for CMD0 (0x95) - * - * All Application Specific commands shall be preceded with APP_CMD (CMD55). - * - * SPI Response Format - * ------------------- - * The main response format (R1) is a status byte (normally zero). Key flags: - * idle - 1 if the card is in an idle state/initialising - * cmd - 1 if an illegal command code was detected - * - * +-------------------------------------------------+ - * R1 | 0 | arg | addr | seq | crc | cmd | erase | idle | - * +-------------------------------------------------+ - * - * R1b is the same, except it is followed by a busy signal (zeros) until - * the first non-zero byte when it is ready again. - * - * Data Response Token - * ------------------- - * Every data block written to the card is acknowledged by a byte - * response token - * - * +----------------------+ - * | xxx | 0 | status | 1 | - * +----------------------+ - * 010 - OK! - * 101 - CRC Error - * 110 - Write Error - * - * Single Block Read and Write - * --------------------------- - * - * Block transfers have a byte header, followed by the data, followed - * by a 16-bit CRC. In our case, the data will always be 512 bytes. - * - * +------+---------+---------+- - - -+---------+-----------+----------+ - * | 0xFE | data[0] | data[1] | | data[n] | crc[15:8] | crc[7:0] | - * +------+---------+---------+- - - -+---------+-----------+----------+ - */ - - /* - * Comment: Changes for SDHC support till 32GB - * Name: KB - * Date: 07/24/2010 - * Release: 0.1 - */ - -#include "SDHCFileSystem.h" - -#define DEBUG -#define SD_COMMAND_TIMEOUT 5000 - - -SDFileSystem::SDFileSystem(PinName mosi, PinName miso, PinName sclk, PinName cs, const char* name) : - FATFileSystem(name), _spi(mosi, miso, sclk), _cs(cs) { - _cs = 1; -} - -#define R1_IDLE_STATE (1 << 0) -#define R1_ERASE_RESET (1 << 1) -#define R1_ILLEGAL_COMMAND (1 << 2) -#define R1_COM_CRC_ERROR (1 << 3) -#define R1_ERASE_SEQUENCE_ERROR (1 << 4) -#define R1_ADDRESS_ERROR (1 << 5) -#define R1_PARAMETER_ERROR (1 << 6) - -// Types -// - v1.x Standard Capacity -// - v2.x Standard Capacity -// - v2.x High Capacity -// - Not recognised as an SD Card - -#define SDCARD_FAIL 0 -#define SDCARD_V1 1 -#define SDCARD_V2 2 -#define SDCARD_V2HC 3 - -int SDFileSystem::initialise_card() { - // Set to 100kHz for initialisation, and clock card with cs = 1 - _spi.frequency(100000); - _cs = 1; - for(int i=0; i<16; i++) { - _spi.write(0xFF); - } - - // send CMD0, should return with all zeros except IDLE STATE set (bit 0) - if(_cmd(0, 0) != R1_IDLE_STATE) { - fprintf(stderr, "No disk, or could not put SD card in to SPI idle state\n"); - return SDCARD_FAIL; - } - - // send CMD8 to determine whther it is ver 2.x - int r = _cmd8(); - if(r == R1_IDLE_STATE) { - return initialise_card_v2(); - } else if(r == (R1_IDLE_STATE | R1_ILLEGAL_COMMAND)) { - return initialise_card_v1(); - } else { - fprintf(stderr, "Not in idle state after sending CMD8 (not an SD card?)\n"); - return SDCARD_FAIL; - } -} - -int SDFileSystem::initialise_card_v1() { - for(int i=0; i<SD_COMMAND_TIMEOUT; i++) { - _cmd(55, 0); - if(_cmd(41, 0) == 0) { - cdv = 512; - #ifdef DEBUG - printf("\n\rInit: SEDCARD_V1\n\r"); - #endif - return SDCARD_V1; - } - } - - fprintf(stderr, "Timeout waiting for v1.x card\n"); - return SDCARD_FAIL; -} - -int SDFileSystem::initialise_card_v2() { - - for(int i=0; i<SD_COMMAND_TIMEOUT; i++) { - wait_ms(50); - _cmd58(); - _cmd(55, 0); - if(_cmd(41, 0x40000000) == 0) { - _cmd58(); - #ifdef DEBUG - printf("\n\rInit: SDCARD_V2\n\r"); - #endif - cdv = 1; - return SDCARD_V2; - } - } - - fprintf(stderr, "Timeout waiting for v2.x card\n"); - return SDCARD_FAIL; -} - -int SDFileSystem::disk_initialize() { - - int i = initialise_card(); - #ifdef DEBUG - printf("init card = %d\n", i); - #endif - _sectors = _sd_sectors(); - - // Set block length to 512 (CMD16) - if(_cmd(16, 512) != 0) { - fprintf(stderr, "Set 512-byte block timed out\n"); - return 1; - } - - _spi.frequency(1000000); // Set to 1MHz for data transfer - return 0; -} - -int SDFileSystem::disk_write(const char *buffer, int block_number) { - // set write address for single block (CMD24) - if(_cmd(24, block_number * cdv) != 0) { - return 1; - } - - // send the data block - _write(buffer, 512); - return 0; -} - -int SDFileSystem::disk_read(char *buffer, int block_number) { - // set read address for single block (CMD17) - if(_cmd(17, block_number * cdv) != 0) { - return 1; - } - - // receive the data - _read(buffer, 512); - return 0; -} - -int SDFileSystem::disk_status() { return 0; } -int SDFileSystem::disk_sync() { return 0; } -int SDFileSystem::disk_sectors() { return _sectors; } - -// PRIVATE FUNCTIONS - -int SDFileSystem::_cmd(int cmd, int arg) { - _cs = 0; - - // send a command - _spi.write(0x40 | cmd); - _spi.write(arg >> 24); - _spi.write(arg >> 16); - _spi.write(arg >> 8); - _spi.write(arg >> 0); - _spi.write(0x95); - - // wait for the repsonse (response[7] == 0) - for(int i=0; i<SD_COMMAND_TIMEOUT; i++) { - int response = _spi.write(0xFF); - if(!(response & 0x80)) { - _cs = 1; - _spi.write(0xFF); - return response; - } - } - _cs = 1; - _spi.write(0xFF); - return -1; // timeout -} -int SDFileSystem::_cmdx(int cmd, int arg) { - _cs = 0; - - // send a command - _spi.write(0x40 | cmd); - _spi.write(arg >> 24); - _spi.write(arg >> 16); - _spi.write(arg >> 8); - _spi.write(arg >> 0); - _spi.write(0x95); - - // wait for the repsonse (response[7] == 0) - for(int i=0; i<SD_COMMAND_TIMEOUT; i++) { - int response = _spi.write(0xFF); - if(!(response & 0x80)) { - return response; - } - } - _cs = 1; - _spi.write(0xFF); - return -1; // timeout -} - - -int SDFileSystem::_cmd58() { - _cs = 0; - int arg = 0; - - // send a command - _spi.write(0x40 | 58); - _spi.write(arg >> 24); - _spi.write(arg >> 16); - _spi.write(arg >> 8); - _spi.write(arg >> 0); - _spi.write(0x95); - - // wait for the repsonse (response[7] == 0) - for(int i=0; i<SD_COMMAND_TIMEOUT; i++) { - int response = _spi.write(0xFF); - if(!(response & 0x80)) { - int ocr = _spi.write(0xFF) << 24; - ocr |= _spi.write(0xFF) << 16; - ocr |= _spi.write(0xFF) << 8; - ocr |= _spi.write(0xFF) << 0; -// printf("OCR = 0x%08X\n", ocr); - _cs = 1; - _spi.write(0xFF); - return response; - } - } - _cs = 1; - _spi.write(0xFF); - return -1; // timeout -} - -int SDFileSystem::_cmd8() { - _cs = 0; - - // send a command - _spi.write(0x40 | 8); // CMD8 - _spi.write(0x00); // reserved - _spi.write(0x00); // reserved - _spi.write(0x01); // 3.3v - _spi.write(0xAA); // check pattern - _spi.write(0x87); // crc - - // wait for the repsonse (response[7] == 0) - for(int i=0; i<SD_COMMAND_TIMEOUT * 1000; i++) { - char response[5]; - response[0] = _spi.write(0xFF); - if(!(response[0] & 0x80)) { - for(int j=1; j<5; j++) { - response[i] = _spi.write(0xFF); - } - _cs = 1; - _spi.write(0xFF); - return response[0]; - } - } - _cs = 1; - _spi.write(0xFF); - return -1; // timeout -} - -int SDFileSystem::_read(char *buffer, int length) { - _cs = 0; - - // read until start byte (0xFF) - while(_spi.write(0xFF) != 0xFE); - - // read data - for(int i=0; i<length; i++) { - buffer[i] = _spi.write(0xFF); - } - _spi.write(0xFF); // checksum - _spi.write(0xFF); - - _cs = 1; - _spi.write(0xFF); - return 0; -} - -int SDFileSystem::_write(const char *buffer, int length) { - _cs = 0; - - // indicate start of block - _spi.write(0xFE); - - // write the data - for(int i=0; i<length; i++) { - _spi.write(buffer[i]); - } - - // write the checksum - _spi.write(0xFF); - _spi.write(0xFF); - - // check the repsonse token - if((_spi.write(0xFF) & 0x1F) != 0x05) { - _cs = 1; - _spi.write(0xFF); - return 1; - } - - // wait for write to finish - while(_spi.write(0xFF) == 0); - - _cs = 1; - _spi.write(0xFF); - return 0; -} - -static int ext_bits(char *data, int msb, int lsb) { - int bits = 0; - int size = 1 + msb - lsb; - for(int i=0; i<size; i++) { - int position = lsb + i; - int byte = 15 - (position >> 3); - int bit = position & 0x7; - int value = (data[byte] >> bit) & 1; - bits |= value << i; - } - return bits; -} - -int SDFileSystem::_sd_sectors() { - - int c_size, c_size_mult, read_bl_len; - int block_len, mult, blocknr, capacity; - int blocks, hc_c_size; - uint64_t hc_capacity; - - // CMD9, Response R2 (R1 byte + 16-byte block read) - if(_cmdx(9, 0) != 0) { - fprintf(stderr, "Didn't get a response from the disk\n"); - return 0; - } - - char csd[16]; - if(_read(csd, 16) != 0) { - fprintf(stderr, "Couldn't read csd response from disk\n"); - return 0; - } - - // csd_structure : csd[127:126] - // c_size : csd[73:62] - // c_size_mult : csd[49:47] - // read_bl_len : csd[83:80] - the *maximum* read block length - - int csd_structure = ext_bits(csd, 127, 126); - - #ifdef DEBUG - printf("\n\rCSD_STRUCT = %d\n", csd_structure); - #endif - - switch (csd_structure){ - case 0: - cdv = 512; - c_size = ext_bits(csd, 73, 62); - c_size_mult = ext_bits(csd, 49, 47); - read_bl_len = ext_bits(csd, 83, 80); - - block_len = 1 << read_bl_len; - mult = 1 << (c_size_mult + 2); - blocknr = (c_size + 1) * mult; - capacity = blocknr * block_len; - blocks = capacity / 512; - #ifdef DEBUG - printf("\n\rSDCard\n\rc_size: %.4X \n\rcapacity: %.ld \n\rsectors: %d\n\r", c_size, capacity, blocks); - #endif - break; - - case 1: - cdv = 1; - hc_c_size = ext_bits(csd, 63, 48); - int hc_read_bl_len = ext_bits(csd, 83, 80); - hc_capacity = hc_c_size+1; - blocks = (hc_c_size+1)*1024; - #ifdef DEBUG - printf("\n\rSDHC Card \n\rhc_c_size: %.4X \n\rcapacity: %.lld \n\rsectors: %d\n\r", hc_c_size, hc_capacity*512*1024, blocks); - #endif - break; - - default: - fprintf(stderr, "This disk tastes funny! I only know about type 0 CSD structures\n"); - return 0; - break; - }; - return blocks; -} \ No newline at end of file
diff -r 726072016da1 -r 4854731e663d SDHCFileSystem.h --- a/SDHCFileSystem.h Fri Jul 21 10:38:11 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,86 +0,0 @@ -/* mbed SDFileSystem Library, for providing file access to SD cards - * Copyright (c) 2008-2010, sford - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -#ifndef MBED_SDHCFILESYSTEM_H -#define MBED_SDHCFILESYSTEM_H - -#include "mbed.h" -#include "FATFileSystem.h" - -/* Double Words */ -typedef unsigned long long uint64_t; -typedef long long sint64_t; - -/** Access the filesystem on an SD Card using SPI - * - * @code - * #include "mbed.h" - * #include "SDFileSystem.h" - * - * SDFileSystem sd(p5, p6, p7, p12, "sd"); // mosi, miso, sclk, cs - * - * int main() { - * FILE *fp = fopen("/sd/myfile.txt", "w"); - * fprintf(fp, "Hello World!\n"); - * fclose(fp); - * } - */ -class SDFileSystem : public FATFileSystem { -public: - - /** Create the File System for accessing an SD Card using SPI - * - * @param mosi SPI mosi pin connected to SD Card - * @param miso SPI miso pin conencted to SD Card - * @param sclk SPI sclk pin connected to SD Card - * @param cs DigitalOut pin used as SD Card chip select - * @param name The name used to access the virtual filesystem - */ - SDFileSystem(PinName mosi, PinName miso, PinName sclk, PinName cs, const char* name); - virtual int disk_initialize(); - virtual int disk_write(const char *buffer, int block_number); - virtual int disk_read(char *buffer, int block_number); - virtual int disk_status(); - virtual int disk_sync(); - virtual int disk_sectors(); - -protected: - - int _cmd(int cmd, int arg); - int _cmdx(int cmd, int arg); - int _cmd8(); - int _cmd58(); - int initialise_card(); - int initialise_card_v1(); - int initialise_card_v2(); - - int _read(char *buffer, int length); - int _write(const char *buffer, int length); - int _sd_sectors(); - int _sectors; - - SPI _spi; - DigitalOut _cs; - int cdv; -}; - -#endif
diff -r 726072016da1 -r 4854731e663d SDHCFileSystem.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SDHCFileSystem.lib Mon Jul 24 05:54:59 2017 +0000 @@ -0,0 +1,1 @@ +https://developer.mbed.org/users/hepta2ume/code/SDHCFileSystem/#ee6c3a0bbbbb
diff -r 726072016da1 -r 4854731e663d main.cpp --- a/main.cpp Fri Jul 21 10:38:11 2017 +0000 +++ b/main.cpp Mon Jul 24 05:54:59 2017 +0000 @@ -2,22 +2,22 @@ ************************************************************* H29/07_20/T.Umezawa 1:SD.....OK! -2:MPU9250(Accel) = -3:MPU9250(Gyro) = -4:MPU9250(Mag_compass) = -5:GPS sensing Mode = -6:CAM Mode = OK! -7:Temperature sensing = -8:Xbee mode = +2:MPU9250(Accel) = OK +3:MPU9250(Gyro) = OK +4:MPU9250(Mag_compass) = 微妙 +5:GPS sensing Mode = (サンプリング時間の修正) +6:CAM Mode = OK!(微妙だった) +7:Temperature sensing = OK! +8:Xbee mode = OK! ************************************************************* */ - #include "mbed.h" #include "SDHCFileSystem.h" #include "HeptaXbee.h" #include "HeptaSerial.h" #include "Hepta9axis.h" #include "HeptaTemp.h" +#include "HeptaBattery.h" #define USE_JPEG_HIGH_RESOLUTION 1 Serial pc(USBTX,USBRX); @@ -26,6 +26,7 @@ HeptaSerial camera(p13, p14); HeptaMPU9250 MPU9250(p28,p27,0xD0,0x18);//sda,scl,acc&gyro_address,mag_gyro HeptaTemp heptatemp(p17); +HeptaBattery bat(p16,p26); DigitalOut CAM_SW(p25);//CAM_control DigitalOut GPS_SW(p24);//GPS_control @@ -46,24 +47,28 @@ pc.printf("Hello world.\r\n"); pc.printf("My name is HEPTA2\r\n"); pc.printf("Please select mode.\r\n"); - pc.printf("1:SD test Mode\r\n"); - pc.printf("2:Gyro sening ModeE\r\n"); - pc.printf("3:Accel sensing Mode\r\n"); - pc.printf("4:Magnet sensig Mode\r\n"); - pc.printf("5:GPS sensing Mode\r\n"); - pc.printf("6:CAM mode\r\n"); - pc.printf("7:Temperature sensing Mode\r\n"); - pc.printf("8:Xbee Mode\r\n"); - pc.printf("9:Xbee & Temperature Mode\r\n");//恒温槽用 - pc.printf("10:All Transmitting Mode Mode\r\n"); + pc.printf("a:SD test Mode\r\n"); + pc.printf("b:Check Battery Level\r\n"); + pc.printf("c:Gyro Sening Mode\r\n"); + pc.printf("d:Accel Sensing Mode\r\n"); + pc.printf("e:Magnet Sensig Mode\r\n"); + pc.printf("f:GPS Test Sensing Mode\r\n"); + pc.printf("g:CAM Mode\r\n"); + pc.printf("h:Temperature Sensing Mode\r\n"); + pc.printf("i:Xbee Mode\r\n"); + pc.printf("j:Xbee & Temperature Mode\r\n");//恒温槽用 + pc.printf("k:All Transmitting Mode\r\n"); + pc.printf("l:Test Mode\r\n"); + pc.printf("m:Test Mode\r\n"); pc.printf("*********************************\r\n"); mode = pc.getc(); pc.printf("\r\n"); pc.printf("Your select Mode = %c\r\n",mode); wait(0.5); + switch(mode) { - case'1': { + case'a': { printf("=============\r\n"); printf("SD test Mode\r\n"); @@ -82,12 +87,24 @@ }//case'1' /* + ************************ + Check Battery Level mode + ************************ + */ + case'b': { + float bt; + bat.vol(&bt); + pc.printf("V = %f\r\n",bt); + break; + } + + /* ****************** Gyro sensing mode ****************** */ - case'2': { + case'c': { printf("===================\r\n"); printf("Gyro sensing Mode\r\n"); printf("===================\r\n"); @@ -106,7 +123,7 @@ ****************** */ - case'3': { + case'd': { printf("===================\r\n"); printf("Accel sensing Mode\r\n"); printf("===================\r\n"); @@ -125,7 +142,7 @@ ****************** */ - case'4': { + case'e': { float mx,my,mz; printf("===================\r\n"); printf("Magnet sensing Mode\r\n"); @@ -140,11 +157,26 @@ /* ****************** + GPS sensing mode + ****************** + */ + + case'f': { + + printf("===================\r\n"); + printf("GPS sensing Mode\r\n"); + printf("===================\r\n"); + while(1) pc.putc(camera.getc()); + break; + }//case'4' + + /* + ****************** Cam Snapshot mode ****************** */ - case'6': { + case'g': { GPS_SW = 0; CAM_SW = 1; printf("\r\n"); @@ -164,7 +196,7 @@ ****************** */ - case'7': { + case'h': { printf("==================\r\n"); printf("Temp sensing Mode\r\n"); printf("==================\r\n"); @@ -183,7 +215,7 @@ *********** */ - case'8': { + case'i': { int i=0,rcmd=0,cmdflag=0; xbee.printf("Count Up!\r"); @@ -211,29 +243,21 @@ ****************** */ - case'9': { + case'j': { printf("==================\r\n"); printf("Temp sensing Mode & Xbee\r\n"); printf("==================\r\n"); float temp; - //FILE *fp = fopen("/fs/myfile.csv", "a"); -// if(fp == NULL) { -// pc.printf("Could not open file for write\r\n"); -// } else { - while(1) - { - //for(int i = 0; i<100; i++) { - FILE *fp = fopen("/fs/myfile.csv", "a"); - heptatemp.temp_sense(&temp); - pc.printf("%f\r\n",temp); - xbee.printf("%f\r\n",temp); - fprintf(fp, "%f\n",temp); - fclose(fp); - } -// fclose(fp); -// } + while(1) { + FILE *fp = fopen("/fs/myfile.csv", "a"); + heptatemp.temp_sense(&temp); + pc.printf("%f\r\n",temp); + xbee.printf("%f\r\n",temp); + fprintf(fp, "%f\n",temp); + fclose(fp); + } break; }//case'9' @@ -243,7 +267,7 @@ ********************* */ - case'a': { + case'k': { printf("==================\r\n"); printf("All Transmitting Mode\r\n"); @@ -252,15 +276,13 @@ char ddata[60]; int dsize[6]; while(1) { - /* + MPU9250.sen_gyro_u16(gx,gy,gz,&dsize[0]); MPU9250.sen_acc_u16(ax,ay,az,&dsize[1]); MPU9250.sen_mag_u16(mx,my,mz,&dsize[2]); - gps.sensing_u16(lad,log,&dsize[3]); - battery.vol_u16(bt,&dsize[4]); + camera.lat_log_sensing_u16(lad,log,&dsize[3]); + bat.vol_u16(bt,&dsize[4]); heptatemp.temp_sense_u16(temp,&dsize[5]); - */ - //gyro.x_u16(gx,4); xbee.xbee_transmit(ddata,60,gx,gy,gz,ax,ay,az,mx,my,mz,lad,log,bt,temp,dsize[0],dsize[0],dsize[0],dsize[1],dsize[1],dsize[1],dsize[2],dsize[2],dsize[2],dsize[3],dsize[3],dsize[4],dsize[5],13); } break; @@ -271,7 +293,7 @@ ****************** */ - case'b': { + case'l': { GPS_SW = 0; CAM_SW = 1; printf("\r\n"); @@ -285,6 +307,20 @@ break; }//case'6' + case'm': { + pc.printf("L:GPS GPGGA Mode\r\n"); + int quality=0,stnum=0,gps_check=0; + char ns='A',ew='B',aunit='m'; + float time=0.0,latitude=0.0,longitude=0.0,hacu=0.0,altitude=0.0; + for(int i=1; i<10; i++) { + camera.gga_sensing(&time, &latitude, &ns, &longitude, &ew, &quality, &stnum, &hacu, &altitude, &aunit, &gps_check); + if((gps_check==0)|(gps_check==1)) { + 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); + } + } + break; + } + default: break;