SiPM basded cosmic ray detector data acquisition system.

Dependencies:   DNSResolver EthernetNetIf FatFileSystem SDFileSystem mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 //#include "Websocket.h"
00003 #include "SDFileSystem.h"
00004 #include "SiPM.h"
00005 #include <vector>
00006 
00007 //Websocket ws("ws://sockets.mbed.org/ws/NickRyder/wo");
00008 char url[100] = "ws://pplxgo1.physics.ox.ac.uk:8008/log";
00009 //char url[100] = "ws://163.1.136.220:8008/log";
00010 //char url[100] = "ws://sockets.mbed.org:80/ws/NickRyder/wo";
00011 //Websocket ws(url);
00012 
00013 SDFileSystem sd(p5, p6, p7, p8, "sd");
00014 
00015 DigitalOut myled(LED1);
00016 DigitalOut webconnected(LED4);
00017 AnalogOut comparison(p18);
00018 AnalogIn temperature(p15);
00019 AnalogIn bias(p20);
00020 Serial pc(USBTX, USBRX);
00021 float scantime;
00022 unsigned long n;
00023 
00024 SiPM sipm1(p21, LED2);
00025 //SiPM sipm2(p22, LED3);
00026 
00027 void scan(float voltage, float waittime) {
00028     float scale = voltage / 3.3;
00029     comparison.write(scale);
00030     sipm1.reset();
00031 //    sipm2.reset();
00032     wait(waittime);
00033     sipm1.stop();
00034 //    sipm2.stop();
00035 }
00036 
00037 int main() {
00038     pc.printf("# Connecting together sipms.\n");
00039 //    sipm1.addother(&sipm2);
00040 //    sipm2.addother(&sipm1);
00041     pc.printf("# Done.\n");
00042     webconnected = 0;
00043     pc.printf("# Started.\n");
00044     time_t now = time(NULL);
00045     pc.printf("# Time is now %d\n", now);
00046     /*
00047       pc.printf("# Trying to set time...\n");
00048         int n = 0;
00049         char timeword[20];
00050         int j = 0;
00051         for (int i = 0; i < 20; i++) {
00052             if (pc.readable()) {
00053                 while (pc.readable()) {
00054                     timeword[j] = pc.getc();
00055                     j += 1;
00056                     wait(0.1);
00057                 }
00058             }
00059             wait(0.5);
00060         }
00061         timeword[j] = 0;
00062         n = atoi(timeword);
00063         pc.printf("# n = %d\n", n);
00064         if (n > 10000)  {
00065             set_time(n);
00066             now = time(NULL);         
00067             pc.printf("# Set time to %s", ctime(&now));
00068         } else  {
00069             pc.printf("# Failed to set time.\n");
00070         }
00071     }
00072     */
00073     myled = 1;
00074     scantime = 20.0;
00075     pc.printf("# Each scan is %f seconds.\n", scantime);
00076     vector<float> vscan;
00077 //    vscan.push_back(0.05);
00078 //    vscan.push_back(0.10);
00079 //    vscan.push_back(0.15);
00080 //    vscan.push_back(0.20);
00081 //    vscan.push_back(0.25);
00082 //    vscan.push_back(0.30);
00083 //    vscan.push_back(0.35);
00084 //    vscan.push_back(0.40);
00085 //    vscan.push_back(0.45);
00086     vscan.push_back(0.50);
00087 //    vscan.push_back(0.55);
00088     vscan.push_back(0.60);
00089 //    vscan.push_back(0.65);
00090     vscan.push_back(0.70);
00091 //    vscan.push_back(0.75);
00092     vscan.push_back(0.80);
00093 //    vscan.push_back(0.85);
00094     vscan.push_back(0.90);
00095 //    vscan.push_back(0.95);
00096     vscan.push_back(1.00);
00097     vscan.push_back(1.10);
00098     vscan.push_back(1.20);
00099     vscan.push_back(1.30);
00100     vscan.push_back(1.40);
00101     vscan.push_back(1.50);
00102     vscan.push_back(1.60);
00103 //   vscan.push_back(1.70);
00104 //    vscan.push_back(1.80);
00105 //    vscan.push_back(1.90);
00106 //    vscan.push_back(2.00);
00107 //    vscan.push_back(2.20);
00108 //    vscan.push_back(2.50);
00109 //    vscan.push_back(2.75);
00110     //vscan.push_back(3.00);
00111     vector<float>::iterator vit;
00112     int loop = 0;
00113     char msg[200];
00114     while (true) {
00115         pc.printf("# Starting loop %d.\n", loop);
00116         loop++;
00117         FILE * outp = NULL;
00118         for (vit = vscan.begin() ; vit != vscan.end(); vit++)   {
00119             float v = *vit;
00120             time_t start = time(NULL);
00121             pc.printf("# %f V started at %s", v, ctime(&start));
00122             scan(v, scantime);
00123             sprintf(msg, "%f, %f, %i, %i, %i, %s", 
00124                     scantime, v,
00125                     sipm1.n, sipm1.ncoincidence, sipm1.ntrig,
00126                     ctime(&start));
00127             outp = fopen("/sd/sipm.dat", "a");
00128             fprintf(outp, "%s", msg);
00129             fclose(outp);
00130             pc.printf(msg);
00131         }
00132     }
00133 }