SiPM basded cosmic ray detector data acquisition system.
Dependencies: DNSResolver EthernetNetIf FatFileSystem SDFileSystem mbed
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 }
Generated on Tue Jul 19 2022 01:43:40 by 1.7.2