Claudia Haarman / Mbed 2 deprecated Opstellingbachelor_opdracht

Dependencies:   MODSERIAL SDFileSystemSeth mbed

Fork of Opstellingbachelor_opdracht by Seth Ruiter

Committer:
c_haarm
Date:
Sun Sep 04 18:45:07 2016 +0000
Revision:
1:8b45b3ad350a
Parent:
0:f7cd934498e4
Child:
2:5c856ceaea2e
thermocouple sensors also included, not compiled 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 1:8b45b3ad350a 11 DigitalOut SCK_1(2);
c_haarm 1:8b45b3ad350a 12 DigitalOut CS_1(3);
c_haarm 1:8b45b3ad350a 13
c_haarm 1:8b45b3ad350a 14 int pins[12] = {4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16};
c_haarm 1:8b45b3ad350a 15
c_haarm 1:8b45b3ad350a 16 for (int i = 0; i <= 11; i++)
c_haarm 1:8b45b3ad350a 17 {
c_haarm 1:8b45b3ad350a 18 DigitalOut(pins[i], INPUT);
c_haarm 1:8b45b3ad350a 19 }
c_haarm 1:8b45b3ad350a 20
c_haarm 1:8b45b3ad350a 21 double d;
c_haarm 1:8b45b3ad350a 22 int b[12] = { };
c_haarm 1:8b45b3ad350a 23
c_haarm 1:8b45b3ad350a 24 // Torque sensor
c_haarm 0:f7cd934498e4 25 AnalogIn fcs(PTB2); // force sensor output connected to analog 0
c_haarm 0:f7cd934498e4 26
c_haarm 1:8b45b3ad350a 27
c_haarm 1:8b45b3ad350a 28 // LED
c_haarm 0:f7cd934498e4 29 DigitalOut r_led(LED_RED);
c_haarm 0:f7cd934498e4 30 DigitalOut g_led(LED_GREEN);
c_haarm 0:f7cd934498e4 31 DigitalOut b_led(LED_BLUE);
c_haarm 0:f7cd934498e4 32
c_haarm 1:8b45b3ad350a 33 // Serial connection and SD
c_haarm 0:f7cd934498e4 34 MODSERIAL pc(USBTX,USBRX, 1024, 512);
c_haarm 0:f7cd934498e4 35 SDFileSystem sd(PTE3, PTE1, PTE2, PTE4, "sd"); // MOSI, MISO, SCK, CS
c_haarm 0:f7cd934498e4 36 FILE *fp;
c_haarm 0:f7cd934498e4 37
c_haarm 1:8b45b3ad350a 38 // Other declarations
c_haarm 0:f7cd934498e4 39 Ticker tick;
c_haarm 0:f7cd934498e4 40
c_haarm 0:f7cd934498e4 41 const int baudrate = 115200; // baud rate
c_haarm 0:f7cd934498e4 42 const float Ts = 0.005; // sample time (sec)
c_haarm 0:f7cd934498e4 43
c_haarm 0:f7cd934498e4 44 const int led_on = 0;
c_haarm 0:f7cd934498e4 45 const int led_off = 1;
c_haarm 0:f7cd934498e4 46
c_haarm 0:f7cd934498e4 47 volatile bool fn1_go = 0; // go-flag starts in disabled state
c_haarm 0:f7cd934498e4 48 volatile bool start = 0;
c_haarm 0:f7cd934498e4 49
c_haarm 0:f7cd934498e4 50 float fcs_read;
c_haarm 0:f7cd934498e4 51
c_haarm 0:f7cd934498e4 52 int trial_numb = 0;
c_haarm 0:f7cd934498e4 53 int cal_numb = 1;
c_haarm 0:f7cd934498e4 54
c_haarm 1:8b45b3ad350a 55 char filename_torque[64];
c_haarm 1:8b45b3ad350a 56 char filename_temp[64];
c_haarm 1:8b45b3ad350a 57 char filename_cal[64];
c_haarm 1:8b45b3ad350a 58
c_haarm 0:f7cd934498e4 59
c_haarm 0:f7cd934498e4 60
c_haarm 0:f7cd934498e4 61
c_haarm 0:f7cd934498e4 62 ////////////////////Functions///////////////////////////////////////////////////
c_haarm 0:f7cd934498e4 63 ////////////////////////////////////////////////////////////////////////////////
c_haarm 0:f7cd934498e4 64 ////////////////////////////////////////////////////////////////////////////////
c_haarm 0:f7cd934498e4 65
c_haarm 0:f7cd934498e4 66 void led_control(bool r, bool g, bool b) // control rgb LEDs
c_haarm 0:f7cd934498e4 67 {
c_haarm 0:f7cd934498e4 68 r_led.write(r);
c_haarm 0:f7cd934498e4 69 g_led.write(g);
c_haarm 0:f7cd934498e4 70 b_led.write(b);
c_haarm 0:f7cd934498e4 71 return;
c_haarm 0:f7cd934498e4 72 }
c_haarm 0:f7cd934498e4 73
c_haarm 0:f7cd934498e4 74 void fn1_activate() // function called by ticker every Ts seconds
c_haarm 0:f7cd934498e4 75 {
c_haarm 0:f7cd934498e4 76 fn1_go = 1; // go-flag active
c_haarm 0:f7cd934498e4 77 }
c_haarm 0:f7cd934498e4 78
c_haarm 1:8b45b3ad350a 79 void readTC()
c_haarm 1:8b45b3ad350a 80 {
c_haarm 1:8b45b3ad350a 81 CS_1 = 0;
c_haarm 1:8b45b3ad350a 82 wait_ms(70);
c_haarm 1:8b45b3ad350a 83
c_haarm 1:8b45b3ad350a 84 for (int i = 15; i >= 0; i--) {
c_haarm 1:8b45b3ad350a 85 SCK_1 = 0;
c_haarm 1:8b45b3ad350a 86 SCK_1 = 1;
c_haarm 1:8b45b3ad350a 87 for (int j = 0; j <= 11; j++) {
c_haarm 1:8b45b3ad350a 88 if (digitalRead(pins[j])) {
c_haarm 1:8b45b3ad350a 89 b[j] |= (1 << i);
c_haarm 1:8b45b3ad350a 90 }
c_haarm 1:8b45b3ad350a 91 }
c_haarm 1:8b45b3ad350a 92 }
c_haarm 1:8b45b3ad350a 93
c_haarm 1:8b45b3ad350a 94 CS_1 = 1;
c_haarm 1:8b45b3ad350a 95
c_haarm 1:8b45b3ad350a 96 // capture torque sensor data
c_haarm 1:8b45b3ad350a 97 fcs_read = fcs.read();
c_haarm 1:8b45b3ad350a 98
c_haarm 1:8b45b3ad350a 99 // output data to file
c_haarm 1:8b45b3ad350a 100 fprintf(fp, "%.3f\t", fcs_read);
c_haarm 1:8b45b3ad350a 101
c_haarm 1:8b45b3ad350a 102
c_haarm 1:8b45b3ad350a 103 for (int j = 0; j <= 11; j++) {
c_haarm 1:8b45b3ad350a 104 if (b[j] & 0x1) {
c_haarm 1:8b45b3ad350a 105 b[j] = 20000;
c_haarm 1:8b45b3ad350a 106 } else {
c_haarm 1:8b45b3ad350a 107 b[j] &= 0xfffc;
c_haarm 1:8b45b3ad350a 108 d = b[j] / 16.0 * 100.0;
c_haarm 1:8b45b3ad350a 109 b[j] = d;
c_haarm 1:8b45b3ad350a 110 }
c_haarm 1:8b45b3ad350a 111 fprintf(fp, "%.3f\t", b[j]);
c_haarm 1:8b45b3ad350a 112 }
c_haarm 1:8b45b3ad350a 113 fprintf(fp, "\n\r");
c_haarm 1:8b45b3ad350a 114
c_haarm 1:8b45b3ad350a 115
c_haarm 1:8b45b3ad350a 116 }
c_haarm 0:f7cd934498e4 117
c_haarm 0:f7cd934498e4 118 ////////////////////Main////////////////////////////////////////////////////////
c_haarm 0:f7cd934498e4 119 ////////////////////////////////////////////////////////////////////////////////
c_haarm 0:f7cd934498e4 120 ////////////////////////////////////////////////////////////////////////////////
c_haarm 0:f7cd934498e4 121
c_haarm 0:f7cd934498e4 122 int main()
c_haarm 0:f7cd934498e4 123 {
c_haarm 0:f7cd934498e4 124 pc.baud(baudrate);
c_haarm 0:f7cd934498e4 125 tick.attach(&fn1_activate,Ts);
c_haarm 0:f7cd934498e4 126 led_control(led_off,led_off,led_off); // start with LEDs off
c_haarm 0:f7cd934498e4 127
c_haarm 0:f7cd934498e4 128 while (1) {
c_haarm 0:f7cd934498e4 129 if(fn1_go) { // statements to execute when go-flag is active
c_haarm 0:f7cd934498e4 130 fn1_go = 0;
c_haarm 0:f7cd934498e4 131
c_haarm 0:f7cd934498e4 132 }
c_haarm 0:f7cd934498e4 133
c_haarm 0:f7cd934498e4 134 if(pc.readable()) { // if character available
c_haarm 0:f7cd934498e4 135 switch(pc.getc()) { // read a character from keyboard
c_haarm 0:f7cd934498e4 136 case 'c':
c_haarm 1:8b45b3ad350a 137 led_control(led_on,led_on,led_off); //orange LED during calibration
c_haarm 1:8b45b3ad350a 138 sprintf(filename_cal, "/sd/cal_torque_%d.txt", cal_numb); //construct new textfile
c_haarm 1:8b45b3ad350a 139 fp = fopen(filename_cal, "w");
c_haarm 0:f7cd934498e4 140 if(fp == NULL) {
c_haarm 0:f7cd934498e4 141 error("Could not open file for write\n");
c_haarm 0:f7cd934498e4 142 } else {
c_haarm 0:f7cd934498e4 143 while(1) {
c_haarm 0:f7cd934498e4 144 for (int i = 0; i<50; i++) { //get 50 samples from torque sensor
c_haarm 0:f7cd934498e4 145 fcs_read = fcs.read();
c_haarm 0:f7cd934498e4 146 fprintf(fp, "%.3f\t \n\r", fcs_read); //output values to the screen
c_haarm 0:f7cd934498e4 147 }
c_haarm 0:f7cd934498e4 148 break;
c_haarm 0:f7cd934498e4 149 }
c_haarm 0:f7cd934498e4 150 }
c_haarm 0:f7cd934498e4 151 fclose(fp); //close file
c_haarm 0:f7cd934498e4 152 cal_numb++; //increment calibration number
c_haarm 1:8b45b3ad350a 153 pc.printf("File saved as %s\n\r", filename_cal); //print name of calibration file to screen
c_haarm 0:f7cd934498e4 154 pc.printf("Press 'c' to record new calibration or 't' to start new trial\n\r"); // print message to screen
c_haarm 0:f7cd934498e4 155 break;
c_haarm 0:f7cd934498e4 156 case 't':
c_haarm 0:f7cd934498e4 157 trial_numb++;
c_haarm 0:f7cd934498e4 158 pc.printf("Trial number: %d\n\r", trial_numb);
c_haarm 0:f7cd934498e4 159 pc.printf("Press 's' to start measurement\n\r");
c_haarm 0:f7cd934498e4 160 break;
c_haarm 0:f7cd934498e4 161 case 's':
c_haarm 0:f7cd934498e4 162 start = !start;
c_haarm 0:f7cd934498e4 163 if (start) {
c_haarm 0:f7cd934498e4 164 led_control(led_off,led_on,led_off); //green LED during calibration
c_haarm 0:f7cd934498e4 165 sprintf(filename_torque, "/sd/trial%d.txt", trial_numb); //construct new textfile to store data from torque sensor
c_haarm 0:f7cd934498e4 166 fp = fopen(filename_torque, "w");
c_haarm 0:f7cd934498e4 167 if(fp == NULL) {
c_haarm 0:f7cd934498e4 168 error("Could not open file for write\n\r");
c_haarm 0:f7cd934498e4 169 } else {
c_haarm 0:f7cd934498e4 170 pc.printf("Measurement started... \n\r");
c_haarm 0:f7cd934498e4 171 pc.printf("Press 's' to stop measurement\n\r");
c_haarm 0:f7cd934498e4 172 while(1) {
c_haarm 1:8b45b3ad350a 173 readTC(b);
c_haarm 0:f7cd934498e4 174 }
c_haarm 0:f7cd934498e4 175 break;
c_haarm 0:f7cd934498e4 176 }
c_haarm 0:f7cd934498e4 177
c_haarm 0:f7cd934498e4 178 break;
c_haarm 0:f7cd934498e4 179 } else {
c_haarm 0:f7cd934498e4 180 led_control(led_on,led_off,led_off); // RED LED when ready to stopped measuring
c_haarm 0:f7cd934498e4 181 fclose(fp);
c_haarm 0:f7cd934498e4 182 pc.printf("File saved as %s\n\r", filename_torque); // print filename to screen
c_haarm 1:8b45b3ad350a 183 pc.printf("Press 'c' to perform new calibration or 't' to start new trial\n\r"); // print message to screen
c_haarm 0:f7cd934498e4 184
c_haarm 0:f7cd934498e4 185 }
c_haarm 0:f7cd934498e4 186 break;
c_haarm 0:f7cd934498e4 187 }
c_haarm 0:f7cd934498e4 188 }
c_haarm 0:f7cd934498e4 189 }
c_haarm 0:f7cd934498e4 190 }