Seth Ruiter / Mbed 2 deprecated bouke

Dependencies:   MODSERIAL SDFileSystemSeth mbed

Fork of Opstellingbachelor_opdracht by Claudia Haarman

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?

UserRevisionLine numberNew 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 }