Cosmic Ray Sheilding
Dependencies: mbed SDFileSystem ExtendedTimer
Revision 4:66eb0ab160b5, committed 2019-04-04
- Comitter:
- ccalderon22
- Date:
- Thu Apr 04 18:06:06 2019 +0000
- Parent:
- 3:466fdc08e0cd
- Commit message:
- Finished Code!
Changed in this revision
ExtendedTimer.lib | Show annotated file Show diff for this revision Revisions of this file |
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ExtendedTimer.lib Thu Apr 04 18:06:06 2019 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/teams/Whitworth-EN173-Resources/code/ExtendedTimer/#7a6067de3bff
--- a/main.cpp Thu Mar 21 17:45:42 2019 +0000 +++ b/main.cpp Thu Apr 04 18:06:06 2019 +0000 @@ -1,33 +1,100 @@ -#include <mbed.h> +/* Cosmic Ray Sheilding + Date Created: Spring Semester 2019 + + Program to detect number of Geiger Counter hits and read data to SDcard + The time since program start and the voltage + are written to a tab-delimited data file. + SD pins: DI = p5, DO = p6, SCK = p7, CS = p8 +*/ -InterruptIn geigerDelrin(p13); //Counter Serial Number:101 -InterruptIn geigerJello(p14); //Counter Serial Number:142 +#include "mbed.h" +#include "SDFileSystem.h" +#include "ExtendedTimer.h" + +InterruptIn geigerDelrin(p14); //Counter Serial Number Ending in:101 +InterruptIn geigerJello(p13); //Counter Serial Number Ending in:142 Serial pc (USBTX, USBRX); -Timer readPulse; +SDFileSystem fs(p5, p6, p7, p8, "fs"); +DigitalOut doneLED(LED1); + +ExtendedTimer t; +Ticker sampleTime; +Ticker saveTime; void countDelrinPulse(void); //Function called when Delrin Geiger reads pulse void countJelloPulse(void); //Function called when Jello Geiger reads pulse int jelloCount = 0; int delrinCount = 0; +bool timeToSample; +bool timeToSave; -int main() { - geigerDelrin.fall(&countDelrinPulse); //Geiger counter reads a hit - geigerJello.fall(&countJelloPulse); + void triggerSample() { + timeToSave = true; // flag to save data + } + + void triggerCollection() { + timeToSample = true; // flag to collect data + } - readPulse.start(); +int main(){ + //Geiger Counter Interrupts + geigerDelrin.fall(&countDelrinPulse); + geigerJello.fall(&countJelloPulse); + + // Mount the filesystem + bool mountFailure = fs.mount(); + + if (mountFailure != 0) { + pc.printf("Failed to mount the SD card.\r\n"); + return -1; // ends program with error status + } + FILE* fp = fopen("/fs/log.txt","w"); + if (fp == NULL) { + pc.printf("Failed to open the file.\r\n"); + fs.unmount(); + return -1; + } - while (true){ - if (readPulse > 60){ //Displays number of counts per 15 seconds - readPulse.reset(); - pc.printf("Delrin Count: %d \r\n", jelloCount); - pc.printf("Jello Count: %d \r\n", delrinCount); - jelloCount = 0; - delrinCount = 0; + // Data header + pc.printf("Time (s) \t Jello Count \t Delrin Count \r\n"); + fprintf(fp, "Time (s) \t Jello Count \t Delrin Count \r\n"); + + // Attach ISR(s) to tickers + sampleTime.attach(&triggerSample, 10); //Sample every 60 seconds + saveTime.attach(&triggerCollection, 30); //Save data every 5 minutes. + + timeToSample = true; + timeToSave = false; + + // Start the timer and ticker + t.start(); + + while (t.read() < 18000) { + if (timeToSample){ //Displays number of counts per 60 seconds + timeToSample = false; + pc.printf("%.2f \t\t %d \t\t %d \r\n",t.read(), jelloCount, delrinCount); + fprintf(fp, "%.2f \t\t %d \t\t %d \r\n",t.read(), jelloCount, delrinCount); + jelloCount = 0; + delrinCount = 0; + } + + if (timeToSave){ //Data will save every five minutes + timeToSave = false; + fclose(fp); + fp = fopen("/fs/log.txt","a"); + } } - } -} + + // Close file and unmount the file system + fclose(fp); + + fs.unmount(); + // LED on indicates that it is safe to remove the SD card + doneLED = 1; +} +//Incrementation of counts void countDelrinPulse(void){ delrinCount++; }