Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: MODSERIAL SDFileSystemSeth mbed
Fork of Opstellingbachelor_opdracht by
main.cpp@4:afab0fda2cf4, 2016-10-06 (annotated)
- Committer:
- c_haarm
- Date:
- Thu Oct 06 19:12:11 2016 +0000
- Revision:
- 4:afab0fda2cf4
- Parent:
- 3:b525b7a56553
- Child:
- 5:f92906aaf1c2
infinite while loop. removed by putting extra function (getsample) in script which is called by ticker every Ts seconds. After pressing 's' the variable 'meas' is put to value 1. Not tested yet!
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
c_haarm | 0:f7cd934498e4 | 1 | #include "mbed.h" |
c_haarm | 0:f7cd934498e4 | 2 | #include "MODSERIAL.h" |
c_haarm | 0:f7cd934498e4 | 3 | #include "SDFileSystem.h" |
c_haarm | 0:f7cd934498e4 | 4 | |
c_haarm | 0:f7cd934498e4 | 5 | |
c_haarm | 0:f7cd934498e4 | 6 | ////////////////////Declarations//////////////////////////////////////////////// |
c_haarm | 0:f7cd934498e4 | 7 | //////////////////////////////////////////////////////////////////////////////// |
c_haarm | 0:f7cd934498e4 | 8 | //////////////////////////////////////////////////////////////////////////////// |
c_haarm | 0:f7cd934498e4 | 9 | |
c_haarm | 1:8b45b3ad350a | 10 | // Thermocouple pin declarations |
c_haarm | 3:b525b7a56553 | 11 | DigitalOut SCK_1(D0); // sck pin of thermocouples |
c_haarm | 3:b525b7a56553 | 12 | DigitalOut CS_1(D1); // chip select pin of thermocouples |
c_haarm | 1:8b45b3ad350a | 13 | |
c_haarm | 3:b525b7a56553 | 14 | DigitalIn pins[12]={D2, D3, D4, D5, D6, D7, D8, D9, D10, D11, D12, D13}; //thermocouples 1 - 12 select corresponding pin numbers mbed |
c_haarm | 1:8b45b3ad350a | 15 | |
c_haarm | 1:8b45b3ad350a | 16 | double d; |
c_haarm | 1:8b45b3ad350a | 17 | int b[12] = { }; |
c_haarm | 1:8b45b3ad350a | 18 | |
c_haarm | 1:8b45b3ad350a | 19 | // Torque sensor |
c_haarm | 0:f7cd934498e4 | 20 | AnalogIn fcs(PTB2); // force sensor output connected to analog 0 |
c_haarm | 0:f7cd934498e4 | 21 | |
c_haarm | 1:8b45b3ad350a | 22 | |
c_haarm | 1:8b45b3ad350a | 23 | // LED |
c_haarm | 0:f7cd934498e4 | 24 | DigitalOut r_led(LED_RED); |
c_haarm | 0:f7cd934498e4 | 25 | DigitalOut g_led(LED_GREEN); |
c_haarm | 0:f7cd934498e4 | 26 | DigitalOut b_led(LED_BLUE); |
c_haarm | 0:f7cd934498e4 | 27 | |
c_haarm | 1:8b45b3ad350a | 28 | // Serial connection and SD |
c_haarm | 0:f7cd934498e4 | 29 | MODSERIAL pc(USBTX,USBRX, 1024, 512); |
c_haarm | 0:f7cd934498e4 | 30 | SDFileSystem sd(PTE3, PTE1, PTE2, PTE4, "sd"); // MOSI, MISO, SCK, CS |
c_haarm | 0:f7cd934498e4 | 31 | FILE *fp; |
c_haarm | 0:f7cd934498e4 | 32 | |
c_haarm | 1:8b45b3ad350a | 33 | // Other declarations |
c_haarm | 0:f7cd934498e4 | 34 | Ticker tick; |
c_haarm | 0:f7cd934498e4 | 35 | |
c_haarm | 0:f7cd934498e4 | 36 | const int baudrate = 115200; // baud rate |
c_haarm | 0:f7cd934498e4 | 37 | const float Ts = 0.005; // sample time (sec) |
c_haarm | 0:f7cd934498e4 | 38 | |
c_haarm | 0:f7cd934498e4 | 39 | const int led_on = 0; |
c_haarm | 0:f7cd934498e4 | 40 | const int led_off = 1; |
c_haarm | 0:f7cd934498e4 | 41 | |
c_haarm | 0:f7cd934498e4 | 42 | volatile bool fn1_go = 0; // go-flag starts in disabled state |
c_haarm | 0:f7cd934498e4 | 43 | volatile bool start = 0; |
c_haarm | 4:afab0fda2cf4 | 44 | volatile bool meas = 0; |
c_haarm | 0:f7cd934498e4 | 45 | |
c_haarm | 0:f7cd934498e4 | 46 | float fcs_read; |
c_haarm | 0:f7cd934498e4 | 47 | |
c_haarm | 0:f7cd934498e4 | 48 | int trial_numb = 0; |
c_haarm | 0:f7cd934498e4 | 49 | int cal_numb = 1; |
c_haarm | 0:f7cd934498e4 | 50 | |
c_haarm | 1:8b45b3ad350a | 51 | char filename_torque[64]; |
c_haarm | 1:8b45b3ad350a | 52 | char filename_temp[64]; |
c_haarm | 1:8b45b3ad350a | 53 | char filename_cal[64]; |
c_haarm | 1:8b45b3ad350a | 54 | |
c_haarm | 0:f7cd934498e4 | 55 | |
c_haarm | 0:f7cd934498e4 | 56 | |
c_haarm | 0:f7cd934498e4 | 57 | |
c_haarm | 0:f7cd934498e4 | 58 | ////////////////////Functions/////////////////////////////////////////////////// |
c_haarm | 0:f7cd934498e4 | 59 | //////////////////////////////////////////////////////////////////////////////// |
c_haarm | 0:f7cd934498e4 | 60 | //////////////////////////////////////////////////////////////////////////////// |
c_haarm | 0:f7cd934498e4 | 61 | |
c_haarm | 0:f7cd934498e4 | 62 | void led_control(bool r, bool g, bool b) // control rgb LEDs |
c_haarm | 0:f7cd934498e4 | 63 | { |
c_haarm | 0:f7cd934498e4 | 64 | r_led.write(r); |
c_haarm | 0:f7cd934498e4 | 65 | g_led.write(g); |
c_haarm | 0:f7cd934498e4 | 66 | b_led.write(b); |
c_haarm | 0:f7cd934498e4 | 67 | return; |
c_haarm | 0:f7cd934498e4 | 68 | } |
c_haarm | 0:f7cd934498e4 | 69 | |
c_haarm | 0:f7cd934498e4 | 70 | void fn1_activate() // function called by ticker every Ts seconds |
c_haarm | 0:f7cd934498e4 | 71 | { |
c_haarm | 0:f7cd934498e4 | 72 | fn1_go = 1; // go-flag active |
c_haarm | 0:f7cd934498e4 | 73 | } |
c_haarm | 0:f7cd934498e4 | 74 | |
c_haarm | 4:afab0fda2cf4 | 75 | |
c_haarm | 1:8b45b3ad350a | 76 | void readTC() |
c_haarm | 1:8b45b3ad350a | 77 | { |
c_haarm | 1:8b45b3ad350a | 78 | CS_1 = 0; |
c_haarm | 1:8b45b3ad350a | 79 | wait_ms(70); |
c_haarm | 1:8b45b3ad350a | 80 | |
c_haarm | 1:8b45b3ad350a | 81 | for (int i = 15; i >= 0; i--) { |
c_haarm | 1:8b45b3ad350a | 82 | SCK_1 = 0; |
c_haarm | 1:8b45b3ad350a | 83 | SCK_1 = 1; |
c_haarm | 1:8b45b3ad350a | 84 | for (int j = 0; j <= 11; j++) { |
c_haarm | 3:b525b7a56553 | 85 | if (pins[j]) { |
c_haarm | 1:8b45b3ad350a | 86 | b[j] |= (1 << i); |
c_haarm | 1:8b45b3ad350a | 87 | } |
c_haarm | 1:8b45b3ad350a | 88 | } |
c_haarm | 1:8b45b3ad350a | 89 | } |
c_haarm | 1:8b45b3ad350a | 90 | |
c_haarm | 1:8b45b3ad350a | 91 | CS_1 = 1; |
c_haarm | 1:8b45b3ad350a | 92 | |
c_haarm | 1:8b45b3ad350a | 93 | for (int j = 0; j <= 11; j++) { |
c_haarm | 1:8b45b3ad350a | 94 | if (b[j] & 0x1) { |
c_haarm | 1:8b45b3ad350a | 95 | b[j] = 20000; |
c_haarm | 1:8b45b3ad350a | 96 | } else { |
c_haarm | 1:8b45b3ad350a | 97 | b[j] &= 0xfffc; |
c_haarm | 1:8b45b3ad350a | 98 | d = b[j] / 16.0 * 100.0; |
c_haarm | 1:8b45b3ad350a | 99 | b[j] = d; |
c_haarm | 1:8b45b3ad350a | 100 | } |
c_haarm | 3:b525b7a56553 | 101 | fprintf(fp, "%.3d\t", b[j]); |
c_haarm | 1:8b45b3ad350a | 102 | } |
c_haarm | 1:8b45b3ad350a | 103 | fprintf(fp, "\n\r"); |
c_haarm | 4:afab0fda2cf4 | 104 | return; |
c_haarm | 1:8b45b3ad350a | 105 | |
c_haarm | 1:8b45b3ad350a | 106 | } |
c_haarm | 0:f7cd934498e4 | 107 | |
c_haarm | 4:afab0fda2cf4 | 108 | void getsample(bool meas) |
c_haarm | 4:afab0fda2cf4 | 109 | { |
c_haarm | 4:afab0fda2cf4 | 110 | if(meas){ // alleen data uitlezen en opslaan als meas = 1 |
c_haarm | 4:afab0fda2cf4 | 111 | fcs_read = fcs.read(); // capture torque sensor data |
c_haarm | 4:afab0fda2cf4 | 112 | fprintf(fp, "%.3f\t", fcs_read); // output data to file |
c_haarm | 4:afab0fda2cf4 | 113 | readTC(); // call function to read thermocouple data |
c_haarm | 4:afab0fda2cf4 | 114 | } |
c_haarm | 4:afab0fda2cf4 | 115 | return; |
c_haarm | 4:afab0fda2cf4 | 116 | } |
c_haarm | 4:afab0fda2cf4 | 117 | |
c_haarm | 4:afab0fda2cf4 | 118 | |
c_haarm | 0:f7cd934498e4 | 119 | ////////////////////Main//////////////////////////////////////////////////////// |
c_haarm | 0:f7cd934498e4 | 120 | //////////////////////////////////////////////////////////////////////////////// |
c_haarm | 0:f7cd934498e4 | 121 | //////////////////////////////////////////////////////////////////////////////// |
c_haarm | 0:f7cd934498e4 | 122 | |
c_haarm | 0:f7cd934498e4 | 123 | int main() |
c_haarm | 0:f7cd934498e4 | 124 | { |
c_haarm | 0:f7cd934498e4 | 125 | pc.baud(baudrate); |
c_haarm | 0:f7cd934498e4 | 126 | tick.attach(&fn1_activate,Ts); |
c_haarm | 0:f7cd934498e4 | 127 | led_control(led_off,led_off,led_off); // start with LEDs off |
c_haarm | 0:f7cd934498e4 | 128 | |
c_haarm | 0:f7cd934498e4 | 129 | while (1) { |
c_haarm | 0:f7cd934498e4 | 130 | if(fn1_go) { // statements to execute when go-flag is active |
c_haarm | 0:f7cd934498e4 | 131 | fn1_go = 0; |
c_haarm | 4:afab0fda2cf4 | 132 | getsample(meas); // deze functie wordt elke ts seconde aangeroepen. afhankelijk van waarde meas (0 of 1) wordt de data opgeslagen in textfile |
c_haarm | 0:f7cd934498e4 | 133 | } |
c_haarm | 0:f7cd934498e4 | 134 | |
c_haarm | 0:f7cd934498e4 | 135 | if(pc.readable()) { // if character available |
c_haarm | 0:f7cd934498e4 | 136 | switch(pc.getc()) { // read a character from keyboard |
c_haarm | 0:f7cd934498e4 | 137 | case 'c': |
c_haarm | 1:8b45b3ad350a | 138 | led_control(led_on,led_on,led_off); //orange LED during calibration |
c_haarm | 1:8b45b3ad350a | 139 | sprintf(filename_cal, "/sd/cal_torque_%d.txt", cal_numb); //construct new textfile |
c_haarm | 1:8b45b3ad350a | 140 | fp = fopen(filename_cal, "w"); |
c_haarm | 0:f7cd934498e4 | 141 | if(fp == NULL) { |
c_haarm | 0:f7cd934498e4 | 142 | error("Could not open file for write\n"); |
c_haarm | 0:f7cd934498e4 | 143 | } else { |
c_haarm | 0:f7cd934498e4 | 144 | while(1) { |
c_haarm | 0:f7cd934498e4 | 145 | for (int i = 0; i<50; i++) { //get 50 samples from torque sensor |
c_haarm | 0:f7cd934498e4 | 146 | fcs_read = fcs.read(); |
c_haarm | 0:f7cd934498e4 | 147 | fprintf(fp, "%.3f\t \n\r", fcs_read); //output values to the screen |
c_haarm | 0:f7cd934498e4 | 148 | } |
c_haarm | 0:f7cd934498e4 | 149 | break; |
c_haarm | 0:f7cd934498e4 | 150 | } |
c_haarm | 0:f7cd934498e4 | 151 | } |
c_haarm | 0:f7cd934498e4 | 152 | fclose(fp); //close file |
c_haarm | 0:f7cd934498e4 | 153 | cal_numb++; //increment calibration number |
c_haarm | 1:8b45b3ad350a | 154 | pc.printf("File saved as %s\n\r", filename_cal); //print name of calibration file to screen |
c_haarm | 0:f7cd934498e4 | 155 | pc.printf("Press 'c' to record new calibration or 't' to start new trial\n\r"); // print message to screen |
c_haarm | 0:f7cd934498e4 | 156 | break; |
c_haarm | 0:f7cd934498e4 | 157 | case 't': |
c_haarm | 0:f7cd934498e4 | 158 | trial_numb++; |
c_haarm | 0:f7cd934498e4 | 159 | pc.printf("Trial number: %d\n\r", trial_numb); |
c_haarm | 0:f7cd934498e4 | 160 | pc.printf("Press 's' to start measurement\n\r"); |
c_haarm | 0:f7cd934498e4 | 161 | break; |
c_haarm | 0:f7cd934498e4 | 162 | case 's': |
c_haarm | 0:f7cd934498e4 | 163 | start = !start; |
c_haarm | 0:f7cd934498e4 | 164 | if (start) { |
c_haarm | 2:5c856ceaea2e | 165 | led_control(led_off,led_on,led_off); //green LED during measurement |
c_haarm | 0:f7cd934498e4 | 166 | sprintf(filename_torque, "/sd/trial%d.txt", trial_numb); //construct new textfile to store data from torque sensor |
c_haarm | 0:f7cd934498e4 | 167 | fp = fopen(filename_torque, "w"); |
c_haarm | 0:f7cd934498e4 | 168 | if(fp == NULL) { |
c_haarm | 0:f7cd934498e4 | 169 | error("Could not open file for write\n\r"); |
c_haarm | 0:f7cd934498e4 | 170 | } else { |
c_haarm | 0:f7cd934498e4 | 171 | pc.printf("Measurement started... \n\r"); |
c_haarm | 0:f7cd934498e4 | 172 | pc.printf("Press 's' to stop measurement\n\r"); |
c_haarm | 4:afab0fda2cf4 | 173 | meas = 1; // hiermee zorg je dat de functie getsample de data wegschrijft naar het .txt file |
c_haarm | 0:f7cd934498e4 | 174 | } |
c_haarm | 0:f7cd934498e4 | 175 | break; |
c_haarm | 0:f7cd934498e4 | 176 | } else { |
c_haarm | 0:f7cd934498e4 | 177 | led_control(led_on,led_off,led_off); // RED LED when ready to stopped measuring |
c_haarm | 4:afab0fda2cf4 | 178 | meas = 0; // hiermee stop je de output naar het .txt file |
c_haarm | 0:f7cd934498e4 | 179 | fclose(fp); |
c_haarm | 0:f7cd934498e4 | 180 | pc.printf("File saved as %s\n\r", filename_torque); // print filename to screen |
c_haarm | 1:8b45b3ad350a | 181 | pc.printf("Press 'c' to perform new calibration or 't' to start new trial\n\r"); // print message to screen |
c_haarm | 0:f7cd934498e4 | 182 | |
c_haarm | 0:f7cd934498e4 | 183 | } |
c_haarm | 0:f7cd934498e4 | 184 | break; |
c_haarm | 0:f7cd934498e4 | 185 | } |
c_haarm | 0:f7cd934498e4 | 186 | } |
c_haarm | 0:f7cd934498e4 | 187 | } |
c_haarm | 0:f7cd934498e4 | 188 | } |