Kian Sek Tee
/
datalogger_Ain2
simple data logger writing to internal RAM. No existing over-written. search for next file count
main.cpp@0:8d245bbd9c2b, 2010-02-26 (annotated)
- Committer:
- teekiansek
- Date:
- Fri Feb 26 18:20:58 2010 +0000
- Revision:
- 0:8d245bbd9c2b
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
teekiansek | 0:8d245bbd9c2b | 1 | #include "mbed.h" |
teekiansek | 0:8d245bbd9c2b | 2 | #include "TextLCD.h" |
teekiansek | 0:8d245bbd9c2b | 3 | |
teekiansek | 0:8d245bbd9c2b | 4 | //#include "MAX6662.h" |
teekiansek | 0:8d245bbd9c2b | 5 | // Create the local filesystem under the name "local" |
teekiansek | 0:8d245bbd9c2b | 6 | |
teekiansek | 0:8d245bbd9c2b | 7 | LocalFileSystem local("local"); |
teekiansek | 0:8d245bbd9c2b | 8 | TextLCD lcd(p24, p25, p26, p27, p28, p29, p30); // rs, rw, e, d0, d1, d2, d3 |
teekiansek | 0:8d245bbd9c2b | 9 | DigitalOut led1(LED1); |
teekiansek | 0:8d245bbd9c2b | 10 | DigitalOut led2(LED2); |
teekiansek | 0:8d245bbd9c2b | 11 | DigitalOut led3(LED3); |
teekiansek | 0:8d245bbd9c2b | 12 | DigitalIn button(p12); |
teekiansek | 0:8d245bbd9c2b | 13 | |
teekiansek | 0:8d245bbd9c2b | 14 | AnalogIn grx(p16); // gyroscope x-axis |
teekiansek | 0:8d245bbd9c2b | 15 | AnalogIn gry(p17); // gyroscope y-axis |
teekiansek | 0:8d245bbd9c2b | 16 | AnalogIn acx(p18); // accelerometer x-axis |
teekiansek | 0:8d245bbd9c2b | 17 | AnalogIn acy(p19); // accelerometer y-axis |
teekiansek | 0:8d245bbd9c2b | 18 | AnalogIn acz(p20); // accelerometer z-axis |
teekiansek | 0:8d245bbd9c2b | 19 | |
teekiansek | 0:8d245bbd9c2b | 20 | |
teekiansek | 0:8d245bbd9c2b | 21 | |
teekiansek | 0:8d245bbd9c2b | 22 | char direct[]= "local"; |
teekiansek | 0:8d245bbd9c2b | 23 | char file[20]; |
teekiansek | 0:8d245bbd9c2b | 24 | char next_file[20]; |
teekiansek | 0:8d245bbd9c2b | 25 | int file_no; |
teekiansek | 0:8d245bbd9c2b | 26 | int count; |
teekiansek | 0:8d245bbd9c2b | 27 | bool not_found; |
teekiansek | 0:8d245bbd9c2b | 28 | bool check; |
teekiansek | 0:8d245bbd9c2b | 29 | |
teekiansek | 0:8d245bbd9c2b | 30 | //********************************************* |
teekiansek | 0:8d245bbd9c2b | 31 | //sub for filename search |
teekiansek | 0:8d245bbd9c2b | 32 | bool exists(char * root, char *filename) { |
teekiansek | 0:8d245bbd9c2b | 33 | |
teekiansek | 0:8d245bbd9c2b | 34 | DIR *d; |
teekiansek | 0:8d245bbd9c2b | 35 | struct dirent *p; |
teekiansek | 0:8d245bbd9c2b | 36 | d = opendir("/local"); |
teekiansek | 0:8d245bbd9c2b | 37 | |
teekiansek | 0:8d245bbd9c2b | 38 | //printf("\nList of files in the directory %s:\n", root); |
teekiansek | 0:8d245bbd9c2b | 39 | bool found = false; |
teekiansek | 0:8d245bbd9c2b | 40 | if ( d != NULL ) { |
teekiansek | 0:8d245bbd9c2b | 41 | while ( !found && (p = readdir(d)) != NULL ) { |
teekiansek | 0:8d245bbd9c2b | 42 | //printf(" - %s\n", p->d_name); |
teekiansek | 0:8d245bbd9c2b | 43 | if ( strcmp(p->d_name, filename) == 0 ) |
teekiansek | 0:8d245bbd9c2b | 44 | found = true; |
teekiansek | 0:8d245bbd9c2b | 45 | } |
teekiansek | 0:8d245bbd9c2b | 46 | } |
teekiansek | 0:8d245bbd9c2b | 47 | closedir(d); |
teekiansek | 0:8d245bbd9c2b | 48 | not_found=!found; |
teekiansek | 0:8d245bbd9c2b | 49 | return found; |
teekiansek | 0:8d245bbd9c2b | 50 | } |
teekiansek | 0:8d245bbd9c2b | 51 | |
teekiansek | 0:8d245bbd9c2b | 52 | //********************************************* |
teekiansek | 0:8d245bbd9c2b | 53 | |
teekiansek | 0:8d245bbd9c2b | 54 | // this routine could check the last number of file it is |
teekiansek | 0:8d245bbd9c2b | 55 | // last file _no = file_no - 1; |
teekiansek | 0:8d245bbd9c2b | 56 | |
teekiansek | 0:8d245bbd9c2b | 57 | //not_found=false; // intial |
teekiansek | 0:8d245bbd9c2b | 58 | |
teekiansek | 0:8d245bbd9c2b | 59 | |
teekiansek | 0:8d245bbd9c2b | 60 | //********************************************* |
teekiansek | 0:8d245bbd9c2b | 61 | //sub to search for filename |
teekiansek | 0:8d245bbd9c2b | 62 | int search( void ) { |
teekiansek | 0:8d245bbd9c2b | 63 | |
teekiansek | 0:8d245bbd9c2b | 64 | not_found=false; |
teekiansek | 0:8d245bbd9c2b | 65 | led1=button; |
teekiansek | 0:8d245bbd9c2b | 66 | file_no=1; |
teekiansek | 0:8d245bbd9c2b | 67 | count=0; |
teekiansek | 0:8d245bbd9c2b | 68 | |
teekiansek | 0:8d245bbd9c2b | 69 | while (not_found==false) { |
teekiansek | 0:8d245bbd9c2b | 70 | sprintf(file, "TEMP%d.CSV", file_no); |
teekiansek | 0:8d245bbd9c2b | 71 | // wait(.1); |
teekiansek | 0:8d245bbd9c2b | 72 | if ( exists(direct, file) ) { |
teekiansek | 0:8d245bbd9c2b | 73 | |
teekiansek | 0:8d245bbd9c2b | 74 | // lcd.cls(); |
teekiansek | 0:8d245bbd9c2b | 75 | //lcd.locate(0,0); |
teekiansek | 0:8d245bbd9c2b | 76 | //lcd.printf("Found %s",file); |
teekiansek | 0:8d245bbd9c2b | 77 | } else { |
teekiansek | 0:8d245bbd9c2b | 78 | |
teekiansek | 0:8d245bbd9c2b | 79 | lcd.cls(); |
teekiansek | 0:8d245bbd9c2b | 80 | //lcd.locate(0,0); |
teekiansek | 0:8d245bbd9c2b | 81 | lcd.printf("Not %s", file); |
teekiansek | 0:8d245bbd9c2b | 82 | } |
teekiansek | 0:8d245bbd9c2b | 83 | file_no++; |
teekiansek | 0:8d245bbd9c2b | 84 | // lcd.locate(0,1); |
teekiansek | 0:8d245bbd9c2b | 85 | //lcd.printf("%d", file_no-1); |
teekiansek | 0:8d245bbd9c2b | 86 | } |
teekiansek | 0:8d245bbd9c2b | 87 | check=1; |
teekiansek | 0:8d245bbd9c2b | 88 | led2=check; |
teekiansek | 0:8d245bbd9c2b | 89 | return file_no; |
teekiansek | 0:8d245bbd9c2b | 90 | } |
teekiansek | 0:8d245bbd9c2b | 91 | |
teekiansek | 0:8d245bbd9c2b | 92 | //*************************************************** |
teekiansek | 0:8d245bbd9c2b | 93 | |
teekiansek | 0:8d245bbd9c2b | 94 | //************************************************** |
teekiansek | 0:8d245bbd9c2b | 95 | //sub to delay input button |
teekiansek | 0:8d245bbd9c2b | 96 | //avoid bouncing effect |
teekiansek | 0:8d245bbd9c2b | 97 | |
teekiansek | 0:8d245bbd9c2b | 98 | int button_delay(bool b) { |
teekiansek | 0:8d245bbd9c2b | 99 | bool c = false; |
teekiansek | 0:8d245bbd9c2b | 100 | if (b==true) { |
teekiansek | 0:8d245bbd9c2b | 101 | wait(.5); |
teekiansek | 0:8d245bbd9c2b | 102 | c=true; |
teekiansek | 0:8d245bbd9c2b | 103 | } else { |
teekiansek | 0:8d245bbd9c2b | 104 | c=false; |
teekiansek | 0:8d245bbd9c2b | 105 | } |
teekiansek | 0:8d245bbd9c2b | 106 | return c; |
teekiansek | 0:8d245bbd9c2b | 107 | } |
teekiansek | 0:8d245bbd9c2b | 108 | |
teekiansek | 0:8d245bbd9c2b | 109 | //******************************************************* |
teekiansek | 0:8d245bbd9c2b | 110 | //main program start here |
teekiansek | 0:8d245bbd9c2b | 111 | |
teekiansek | 0:8d245bbd9c2b | 112 | bool sw; |
teekiansek | 0:8d245bbd9c2b | 113 | int no; |
teekiansek | 0:8d245bbd9c2b | 114 | |
teekiansek | 0:8d245bbd9c2b | 115 | int main() { |
teekiansek | 0:8d245bbd9c2b | 116 | |
teekiansek | 0:8d245bbd9c2b | 117 | while (1) { |
teekiansek | 0:8d245bbd9c2b | 118 | |
teekiansek | 0:8d245bbd9c2b | 119 | |
teekiansek | 0:8d245bbd9c2b | 120 | sw=button_delay(button); |
teekiansek | 0:8d245bbd9c2b | 121 | led1=sw; |
teekiansek | 0:8d245bbd9c2b | 122 | |
teekiansek | 0:8d245bbd9c2b | 123 | if (sw == false and no == 0) { |
teekiansek | 0:8d245bbd9c2b | 124 | led3=1; |
teekiansek | 0:8d245bbd9c2b | 125 | no=search(); |
teekiansek | 0:8d245bbd9c2b | 126 | lcd.locate(0,1); |
teekiansek | 0:8d245bbd9c2b | 127 | lcd.printf("it is %d", no-1); |
teekiansek | 0:8d245bbd9c2b | 128 | sprintf(next_file, "/local/temp%d.csv", file_no-1); |
teekiansek | 0:8d245bbd9c2b | 129 | } |
teekiansek | 0:8d245bbd9c2b | 130 | |
teekiansek | 0:8d245bbd9c2b | 131 | |
teekiansek | 0:8d245bbd9c2b | 132 | if (sw == true and no != 0) { |
teekiansek | 0:8d245bbd9c2b | 133 | no=0; |
teekiansek | 0:8d245bbd9c2b | 134 | led3=0; |
teekiansek | 0:8d245bbd9c2b | 135 | |
teekiansek | 0:8d245bbd9c2b | 136 | FILE *fp = fopen(next_file, "w"); |
teekiansek | 0:8d245bbd9c2b | 137 | //while (button) { |
teekiansek | 0:8d245bbd9c2b | 138 | while (button_delay(button)) { |
teekiansek | 0:8d245bbd9c2b | 139 | led2 = !led2; |
teekiansek | 0:8d245bbd9c2b | 140 | // time,data<cr> |
teekiansek | 0:8d245bbd9c2b | 141 | fprintf(fp,"%.2f,%.2f,%.2f,%.2f,%.2f\n",grx.read()*3.3, gry.read()*3.3,acx.read()*3.3,acy.read()*3.3,acz.read()*3.3); |
teekiansek | 0:8d245bbd9c2b | 142 | //pc.printf("%f,%f,%f\n",acx.read(),acy.read(),acz.read()); |
teekiansek | 0:8d245bbd9c2b | 143 | lcd.locate(0,0); |
teekiansek | 0:8d245bbd9c2b | 144 | lcd.printf("gx=%.2f,gy=%.2f",grx.read()*3.3, gry.read()*3.3); |
teekiansek | 0:8d245bbd9c2b | 145 | //lcd.printf("%.2f", f); |
teekiansek | 0:8d245bbd9c2b | 146 | lcd.locate(0,1); |
teekiansek | 0:8d245bbd9c2b | 147 | lcd.printf("ax=%.2f,ay=%.2f,az=%.2f",acx.read()*3.3,acy.read()*3.3,acz.read()*3.3); |
teekiansek | 0:8d245bbd9c2b | 148 | wait (.01); |
teekiansek | 0:8d245bbd9c2b | 149 | } |
teekiansek | 0:8d245bbd9c2b | 150 | fclose(fp); |
teekiansek | 0:8d245bbd9c2b | 151 | // lcd.cls(); |
teekiansek | 0:8d245bbd9c2b | 152 | //lcd.locate(0,0); |
teekiansek | 0:8d245bbd9c2b | 153 | ///lcd.printf("Press button to start"); |
teekiansek | 0:8d245bbd9c2b | 154 | // wait(.1); |
teekiansek | 0:8d245bbd9c2b | 155 | } |
teekiansek | 0:8d245bbd9c2b | 156 | } |
teekiansek | 0:8d245bbd9c2b | 157 | } |
teekiansek | 0:8d245bbd9c2b | 158 | |
teekiansek | 0:8d245bbd9c2b | 159 | |
teekiansek | 0:8d245bbd9c2b | 160 |