Seth Ruiter / Mbed 2 deprecated bouke

Dependencies:   MODSERIAL SDFileSystemSeth mbed

Fork of Opstellingbachelor_opdracht by Claudia Haarman

Committer:
sdruiter
Date:
Fri Sep 07 13:35:25 2018 +0000
Revision:
11:d3b519e36914
Parent:
10:96c194005985
bouke versie

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 8:1326141017ea 11 DigitalOut SCK_1(PTD1); // sck pin of thermocouples
c_haarm 8:1326141017ea 12 DigitalOut CS_1(PTE25); // chip select pin of thermocouples
c_haarm 1:8b45b3ad350a 13
c_haarm 7:9f9ea047975d 14
sdruiter 11:d3b519e36914 15 DigitalIn pins[13]={D1, D2, D3, D4, D5, D6, D7, D8, D9, D10, D11, D12, D13}; //thermocouples 1 - 12 select corresponding pin numbers mbed
sdruiter 11:d3b519e36914 16 //DigitalIn pins[9]={D1, D2, D3, D4, D5, D6, D7, D8, D9, D10, D11, D12, D13}; //thermocouple select corresponding pin numbers mbed
c_haarm 1:8b45b3ad350a 17
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
sdruiter 11:d3b519e36914 37 const float Ts = 30; // 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
sdruiter 9:d9ba61ce7a29 46 float read_TC;
c_haarm 0:f7cd934498e4 47
c_haarm 0:f7cd934498e4 48 int trial_numb = 0;
c_haarm 0:f7cd934498e4 49
c_haarm 1:8b45b3ad350a 50 char filename_temp[64];
c_haarm 0:f7cd934498e4 51
c_haarm 0:f7cd934498e4 52
c_haarm 0:f7cd934498e4 53
c_haarm 0:f7cd934498e4 54 ////////////////////Functions///////////////////////////////////////////////////
c_haarm 0:f7cd934498e4 55 ////////////////////////////////////////////////////////////////////////////////
c_haarm 0:f7cd934498e4 56 ////////////////////////////////////////////////////////////////////////////////
c_haarm 0:f7cd934498e4 57
c_haarm 0:f7cd934498e4 58 void led_control(bool r, bool g, bool b) // control rgb LEDs
c_haarm 0:f7cd934498e4 59 {
c_haarm 0:f7cd934498e4 60 r_led.write(r);
c_haarm 0:f7cd934498e4 61 g_led.write(g);
c_haarm 0:f7cd934498e4 62 b_led.write(b);
c_haarm 0:f7cd934498e4 63 return;
c_haarm 0:f7cd934498e4 64 }
c_haarm 0:f7cd934498e4 65
c_haarm 0:f7cd934498e4 66 void fn1_activate() // function called by ticker every Ts seconds
c_haarm 0:f7cd934498e4 67 {
c_haarm 0:f7cd934498e4 68 fn1_go = 1; // go-flag active
c_haarm 0:f7cd934498e4 69 }
c_haarm 0:f7cd934498e4 70
c_haarm 4:afab0fda2cf4 71
c_haarm 1:8b45b3ad350a 72 void readTC()
c_haarm 1:8b45b3ad350a 73 {
c_haarm 5:f92906aaf1c2 74 //uses MAX31855 chip
c_haarm 5:f92906aaf1c2 75 //see https://datasheets.maximintegrated.com/en/ds/MAX31855.pdf for documentation
c_haarm 5:f92906aaf1c2 76
c_haarm 8:1326141017ea 77
c_haarm 8:1326141017ea 78 float d = 0;
sdruiter 11:d3b519e36914 79 int16_t b[12] = {0,0,0,0,0,0,0,0,0,0,0,0};
c_haarm 8:1326141017ea 80
c_haarm 5:f92906aaf1c2 81 CS_1 = 0; //Active-Low Chip Select. Set CS low to enable the serial interface.
c_haarm 8:1326141017ea 82 wait_us(0.2);
c_haarm 8:1326141017ea 83
c_haarm 1:8b45b3ad350a 84 for (int i = 15; i >= 0; i--) {
c_haarm 5:f92906aaf1c2 85 SCK_1 = 0; //set clock value to 0
c_haarm 8:1326141017ea 86 wait_us(0.1); //wait for 100ns
c_haarm 5:f92906aaf1c2 87 SCK_1 = 1; //then set clock high again
c_haarm 8:1326141017ea 88 wait_us(0.1); //wait for 100ns
sdruiter 11:d3b519e36914 89 for (int j = 0; j < 11; j++) { //read out bits for each thermocouple (0 to 11)
c_haarm 3:b525b7a56553 90 if (pins[j]) {
c_haarm 5:f92906aaf1c2 91 b[j] |= (1 << i); //bitshift
c_haarm 1:8b45b3ad350a 92 }
c_haarm 1:8b45b3ad350a 93 }
c_haarm 1:8b45b3ad350a 94 }
c_haarm 1:8b45b3ad350a 95
c_haarm 1:8b45b3ad350a 96 CS_1 = 1;
c_haarm 1:8b45b3ad350a 97
sdruiter 11:d3b519e36914 98 for (int j = 0; j < 11; j++) { //for every thermocouple (starting from 0 to 11, so 12 in total)
c_haarm 5:f92906aaf1c2 99 if (b[j] & 0x1) { //b[j] contains the bits that are received from every chip. if least significant bit is 1, then open circuit.
c_haarm 1:8b45b3ad350a 100 b[j] = 20000;
c_haarm 1:8b45b3ad350a 101 } else {
c_haarm 5:f92906aaf1c2 102 b[j] &= 0xfffc; //if no fault then select 14 bit thermocouple data from bitstring
c_haarm 7:9f9ea047975d 103 d = b[j] / 16.0;
c_haarm 1:8b45b3ad350a 104 }
sdruiter 9:d9ba61ce7a29 105 fprintf(fp, "%.3f \n\r", d);
c_haarm 8:1326141017ea 106 pc.printf("%.3f\t", d);
c_haarm 1:8b45b3ad350a 107 }
sdruiter 9:d9ba61ce7a29 108 fprintf(fp, "\n\r");
c_haarm 10:96c194005985 109 pc.printf("\n\r");
c_haarm 4:afab0fda2cf4 110 return;
c_haarm 1:8b45b3ad350a 111
c_haarm 1:8b45b3ad350a 112 }
c_haarm 0:f7cd934498e4 113
c_haarm 4:afab0fda2cf4 114 void getsample(bool meas)
c_haarm 4:afab0fda2cf4 115 {
c_haarm 4:afab0fda2cf4 116 if(meas){ // alleen data uitlezen en opslaan als meas = 1
sdruiter 11:d3b519e36914 117 readTC(); // call function to read thermocouple data
c_haarm 4:afab0fda2cf4 118 }
c_haarm 4:afab0fda2cf4 119 return;
c_haarm 4:afab0fda2cf4 120 }
c_haarm 4:afab0fda2cf4 121
c_haarm 4:afab0fda2cf4 122
c_haarm 0:f7cd934498e4 123 ////////////////////Main////////////////////////////////////////////////////////
c_haarm 0:f7cd934498e4 124 ////////////////////////////////////////////////////////////////////////////////
c_haarm 0:f7cd934498e4 125 ////////////////////////////////////////////////////////////////////////////////
c_haarm 0:f7cd934498e4 126
c_haarm 0:f7cd934498e4 127 int main()
c_haarm 0:f7cd934498e4 128 {
c_haarm 0:f7cd934498e4 129 pc.baud(baudrate);
c_haarm 0:f7cd934498e4 130 tick.attach(&fn1_activate,Ts);
c_haarm 0:f7cd934498e4 131 led_control(led_off,led_off,led_off); // start with LEDs off
c_haarm 8:1326141017ea 132
c_haarm 0:f7cd934498e4 133 while (1) {
c_haarm 0:f7cd934498e4 134 if(fn1_go) { // statements to execute when go-flag is active
c_haarm 0:f7cd934498e4 135 fn1_go = 0;
c_haarm 4:afab0fda2cf4 136 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 137 }
c_haarm 0:f7cd934498e4 138
c_haarm 0:f7cd934498e4 139 if(pc.readable()) { // if character available
c_haarm 0:f7cd934498e4 140 switch(pc.getc()) { // read a character from keyboard
c_haarm 0:f7cd934498e4 141 case 't':
c_haarm 0:f7cd934498e4 142 trial_numb++;
c_haarm 0:f7cd934498e4 143 pc.printf("Trial number: %d\n\r", trial_numb);
c_haarm 0:f7cd934498e4 144 pc.printf("Press 's' to start measurement\n\r");
c_haarm 0:f7cd934498e4 145 break;
c_haarm 0:f7cd934498e4 146 case 's':
c_haarm 0:f7cd934498e4 147 start = !start;
c_haarm 0:f7cd934498e4 148 if (start) {
c_haarm 2:5c856ceaea2e 149 led_control(led_off,led_on,led_off); //green LED during measurement
sdruiter 9:d9ba61ce7a29 150 sprintf(filename_temp, "/sd/temp%d.txt", trial_numb);
sdruiter 9:d9ba61ce7a29 151 fp = fopen(filename_temp, "w");
sdruiter 9:d9ba61ce7a29 152
c_haarm 0:f7cd934498e4 153 if(fp == NULL) {
c_haarm 0:f7cd934498e4 154 error("Could not open file for write\n\r");
c_haarm 0:f7cd934498e4 155 } else {
c_haarm 0:f7cd934498e4 156 pc.printf("Measurement started... \n\r");
c_haarm 0:f7cd934498e4 157 pc.printf("Press 's' to stop measurement\n\r");
c_haarm 4:afab0fda2cf4 158 meas = 1; // hiermee zorg je dat de functie getsample de data wegschrijft naar het .txt file
c_haarm 0:f7cd934498e4 159 }
c_haarm 0:f7cd934498e4 160 break;
c_haarm 0:f7cd934498e4 161 } else {
c_haarm 10:96c194005985 162 led_control(led_on,led_off,led_off); // RED LED when ready to stopped measuring
c_haarm 4:afab0fda2cf4 163 meas = 0; // hiermee stop je de output naar het .txt file
c_haarm 0:f7cd934498e4 164 fclose(fp);
sdruiter 9:d9ba61ce7a29 165
c_haarm 10:96c194005985 166 pc.printf("File saved as %s\n\r", filename_temp); // print filename to screen
c_haarm 10:96c194005985 167 pc.printf("Press 't' to start new trial\n\r"); // print message to screen
c_haarm 0:f7cd934498e4 168
c_haarm 0:f7cd934498e4 169 }
c_haarm 0:f7cd934498e4 170 break;
c_haarm 0:f7cd934498e4 171 }
c_haarm 0:f7cd934498e4 172 }
c_haarm 0:f7cd934498e4 173 }
c_haarm 0:f7cd934498e4 174 }