Sami Kanderian / Mbed 2 deprecated TestAnalogInPins

Dependencies:   mbed

Committer:
skanderian
Date:
Wed May 11 16:13:49 2016 +0000
Revision:
2:f2583b56777e
Parent:
1:610dc7763656
Child:
3:3b45e830ebe1
Sens desired pin # as hex. Example: #FE000100 gives readout for pin 1, #FE000F00 gives readout for pin 15

Who changed what in which revision?

UserRevisionLine numberNew contents of line
skanderian 2:f2583b56777e 1 //Chesapeake Embedded code by Sami Kanderian. Date of last update (version) shown below.
skanderian 0:ce79b04fc2ca 2 #include "mbed.h"
skanderian 2:f2583b56777e 3 #include "string"
skanderian 2:f2583b56777e 4 #include "iostream"
skanderian 2:f2583b56777e 5 #include "math.h"
skanderian 2:f2583b56777e 6 //#include "stdio.h"
skanderian 1:610dc7763656 7 //#include "rtos.h"
skanderian 1:610dc7763656 8
skanderian 0:ce79b04fc2ca 9 //Declare hardware inputs
skanderian 0:ce79b04fc2ca 10 Timer timer;
skanderian 2:f2583b56777e 11 Serial serial(USBTX, USBRX);
skanderian 2:f2583b56777e 12 //IMPORTANT NOTE: PTA1 and PTA2 ARE RESERVED FOR SERIAL COMMUNICATION!!! DO NOT USE FOR SENSOR/ACTUATOR I/O!!!
skanderian 2:f2583b56777e 13
skanderian 2:f2583b56777e 14 //Analog inputs : 0-3.3V
skanderian 2:f2583b56777e 15 AnalogIn pin1(PTE20);
skanderian 2:f2583b56777e 16 AnalogIn pin2(PTB0);
skanderian 2:f2583b56777e 17 AnalogIn pin3(PTE21);//should be 16bit but doesnt work on mbed
skanderian 2:f2583b56777e 18 AnalogIn pin4(PTB1);
skanderian 2:f2583b56777e 19 AnalogIn pin5(PTE22);
skanderian 2:f2583b56777e 20 AnalogIn pin6(PTB2);
skanderian 2:f2583b56777e 21 AnalogIn pin7(PTE23);
skanderian 2:f2583b56777e 22 AnalogIn pin8(PTB3);
skanderian 2:f2583b56777e 23 AnalogIn pin9(PTE29);
skanderian 2:f2583b56777e 24 AnalogIn pin10(PTC2);
skanderian 2:f2583b56777e 25 AnalogIn pin11(PTE30);
skanderian 2:f2583b56777e 26 AnalogIn pin12(PTC1);
skanderian 2:f2583b56777e 27 AnalogIn pin13(PTC0);
skanderian 2:f2583b56777e 28 AnalogIn pin14(PTD1);// doesnt work. Seems to be stuck at 3.3
skanderian 2:f2583b56777e 29 AnalogIn pin15(PTD5);
skanderian 2:f2583b56777e 30 AnalogIn pin16(PTD6);
skanderian 2:f2583b56777e 31
skanderian 2:f2583b56777e 32 //Built in LEDs
skanderian 2:f2583b56777e 33 PwmOut rLed(LED_RED);
skanderian 2:f2583b56777e 34 PwmOut gLed(LED_GREEN);
skanderian 2:f2583b56777e 35 PwmOut bLed(LED_BLUE);
skanderian 2:f2583b56777e 36
skanderian 2:f2583b56777e 37 //Date version as global
skanderian 2:f2583b56777e 38 string dateVersion = "#Microcontroller Detected! uC code ver.: 04.12.2016";
skanderian 2:f2583b56777e 39
skanderian 2:f2583b56777e 40 //New globals for RxInterrupt routine
skanderian 2:f2583b56777e 41 const int bufferSize = 256;
skanderian 2:f2583b56777e 42 char rxBuffer[bufferSize];
skanderian 2:f2583b56777e 43 char txBuffer[bufferSize];
skanderian 2:f2583b56777e 44 volatile int rxIn = 0;
skanderian 2:f2583b56777e 45 volatile int rxOut = 0;
skanderian 2:f2583b56777e 46 bool rxFlag = 0;
skanderian 0:ce79b04fc2ca 47
skanderian 0:ce79b04fc2ca 48 //Declare globals
skanderian 1:610dc7763656 49 char hexCCIn[2];
skanderian 1:610dc7763656 50 char hexDDDDIn[4];
skanderian 1:610dc7763656 51 int decCCIn;
skanderian 1:610dc7763656 52 int decDDDDIn;
skanderian 1:610dc7763656 53
skanderian 2:f2583b56777e 54
skanderian 2:f2583b56777e 55 void ledConfirmSent()//Light up blue LED 10%
skanderian 2:f2583b56777e 56 {
skanderian 2:f2583b56777e 57 rLed = 1;
skanderian 2:f2583b56777e 58 gLed = 1;
skanderian 2:f2583b56777e 59 bLed = 0.9;
skanderian 2:f2583b56777e 60 }
skanderian 2:f2583b56777e 61
skanderian 2:f2583b56777e 62 void ledConfirmReceive()//Light up green LED 10%
skanderian 2:f2583b56777e 63 {
skanderian 2:f2583b56777e 64 rLed = 1;
skanderian 2:f2583b56777e 65 gLed = 0.9;
skanderian 2:f2583b56777e 66 bLed = 1;
skanderian 2:f2583b56777e 67 }
skanderian 0:ce79b04fc2ca 68
skanderian 2:f2583b56777e 69 void sendAnalogIn(int pinNum) //send Analog input in V
skanderian 2:f2583b56777e 70 {
skanderian 2:f2583b56777e 71
skanderian 2:f2583b56777e 72 //serial.printf("\r\n");
skanderian 2:f2583b56777e 73 if (pinNum == 0 || pinNum == 1) {
skanderian 2:f2583b56777e 74 serial.printf("%s%03.1f%s\r\n", "#PTE20: ", 3.3f*pin1.read(), "V^");
skanderian 2:f2583b56777e 75 }
skanderian 2:f2583b56777e 76 if (pinNum == 0 || pinNum == 2) {
skanderian 2:f2583b56777e 77 serial.printf("%s%03.1f%s\r\n", "#PTB0: ", 3.3f*pin2.read(), "V^");
skanderian 2:f2583b56777e 78 }
skanderian 2:f2583b56777e 79 if (pinNum == 0 || pinNum == 3) {
skanderian 2:f2583b56777e 80 serial.printf("%s%03.1f%s\r\n", "#PTE21: ", 3.3f*pin3.read(), "V^");
skanderian 2:f2583b56777e 81 }
skanderian 2:f2583b56777e 82 if (pinNum == 0 || pinNum == 4) {
skanderian 2:f2583b56777e 83 serial.printf("%s%03.1f%s\r\n", "#PTB1: ", 3.3f*pin4.read(), "V^");
skanderian 2:f2583b56777e 84 }
skanderian 2:f2583b56777e 85 if (pinNum == 0 || pinNum == 5) {
skanderian 2:f2583b56777e 86 serial.printf("%s%03.1f%s\r\n", "#PTE22: ", 3.3f*pin5.read(), "V^");
skanderian 2:f2583b56777e 87 }
skanderian 2:f2583b56777e 88 if (pinNum == 0 || pinNum == 6) {
skanderian 2:f2583b56777e 89 serial.printf("%s%03.1f%s\r\n", "#PTB2: ", 3.3f*pin6.read(), "V^");
skanderian 2:f2583b56777e 90 }
skanderian 2:f2583b56777e 91 if (pinNum == 0 || pinNum == 7) {
skanderian 2:f2583b56777e 92 serial.printf("%s%03.1f%s\r\n", "#PTE23: ", 3.3f*pin7.read(), "V^");
skanderian 2:f2583b56777e 93 }
skanderian 2:f2583b56777e 94 if (pinNum == 0 || pinNum == 8) {
skanderian 2:f2583b56777e 95 serial.printf("%s%03.1f%s\r\n", "#PTB3: ", 3.3f*pin8.read(), "V^");
skanderian 2:f2583b56777e 96 }
skanderian 2:f2583b56777e 97 if (pinNum == 0 || pinNum == 9) {
skanderian 2:f2583b56777e 98 serial.printf("%s%03.1f%s\r\n", "#PTE29: ", 3.3f*pin9.read(), "V^");
skanderian 2:f2583b56777e 99 }
skanderian 2:f2583b56777e 100 if (pinNum == 0 || pinNum == 10) {
skanderian 2:f2583b56777e 101 serial.printf("%s%03.1f%s\r\n", "#PTC2: ", 3.3f*pin10.read(), "V^");
skanderian 2:f2583b56777e 102 }
skanderian 2:f2583b56777e 103 if (pinNum == 0 || pinNum == 11) {
skanderian 2:f2583b56777e 104 serial.printf("%s%03.1f%s\r\n", "#PTE30: ", 3.3f*pin11.read(), "V^");
skanderian 2:f2583b56777e 105 }
skanderian 2:f2583b56777e 106 if (pinNum == 0 || pinNum == 12) {
skanderian 2:f2583b56777e 107 serial.printf("%s%03.1f%s\r\n", "#PTC1: ", 3.3f*pin12.read(), "V^");
skanderian 2:f2583b56777e 108 }
skanderian 2:f2583b56777e 109 if (pinNum == 0 || pinNum == 13) {
skanderian 2:f2583b56777e 110 serial.printf("%s%03.1f%s\r\n", "#PTC0: ", 3.3f*pin13.read(), "V^");
skanderian 2:f2583b56777e 111 }
skanderian 2:f2583b56777e 112 if (pinNum == 0 || pinNum == 14) {
skanderian 2:f2583b56777e 113 serial.printf("%s%03.1f%s\r\n", "#PTD1: ", 3.3f*pin14.read(), "V^");
skanderian 2:f2583b56777e 114 }
skanderian 2:f2583b56777e 115 if (pinNum == 0 || pinNum == 15) {
skanderian 2:f2583b56777e 116 serial.printf("%s%03.1f%s\r\n", "#PTD5: ", 3.3f*pin15.read(), "V^");
skanderian 2:f2583b56777e 117 }
skanderian 2:f2583b56777e 118 if (pinNum == 0 || pinNum == 16) {
skanderian 2:f2583b56777e 119 serial.printf("%s%03.1f%s\r\n", "#PTD6: ", 3.3f*pin16.read(), "V^");
skanderian 2:f2583b56777e 120 }
skanderian 0:ce79b04fc2ca 121
skanderian 2:f2583b56777e 122 ledConfirmSent();
skanderian 0:ce79b04fc2ca 123 }
skanderian 0:ce79b04fc2ca 124
skanderian 2:f2583b56777e 125 string decToHexDDDD(int i) {
skanderian 2:f2583b56777e 126 //Do twos complement to handle negative numbers
skanderian 2:f2583b56777e 127 if (i < 0) {
skanderian 2:f2583b56777e 128 i = 32767 - i;
skanderian 2:f2583b56777e 129 }
skanderian 2:f2583b56777e 130 char hex_string[10];
skanderian 2:f2583b56777e 131 sprintf(hex_string, "0x%02X", i);
skanderian 2:f2583b56777e 132 return string(hex_string);
skanderian 2:f2583b56777e 133 }
skanderian 2:f2583b56777e 134
skanderian 2:f2583b56777e 135 int hexDDDDToDec(char hex[]) {
skanderian 2:f2583b56777e 136 int decValue = strtol(hex, NULL, 16);
skanderian 2:f2583b56777e 137 if (decValue >= 32768) { //Do twos complement to handle negative numbers
skanderian 2:f2583b56777e 138 decValue = 32767 - decValue;
skanderian 2:f2583b56777e 139 }
skanderian 2:f2583b56777e 140 return decValue;
skanderian 2:f2583b56777e 141 }
skanderian 2:f2583b56777e 142
skanderian 2:f2583b56777e 143 int hexToDec(char hex[]) {
skanderian 2:f2583b56777e 144 int decValue = strtol(hex, NULL, 16);
skanderian 2:f2583b56777e 145 return decValue;
skanderian 2:f2583b56777e 146 }
skanderian 2:f2583b56777e 147
skanderian 2:f2583b56777e 148 int hexToDecSub(char hex[], int st, int ed) {
skanderian 2:f2583b56777e 149 int n = ed - st + 1;
skanderian 2:f2583b56777e 150 char hexSubset[n];
skanderian 2:f2583b56777e 151 for (int i = st; i < ed + 1; i++) {
skanderian 2:f2583b56777e 152 hexSubset[i - st] = hex[i];
skanderian 2:f2583b56777e 153 }
skanderian 2:f2583b56777e 154 int decValue = strtol(hexSubset, NULL, 16);
skanderian 2:f2583b56777e 155 return decValue;
skanderian 0:ce79b04fc2ca 156 }
skanderian 0:ce79b04fc2ca 157
skanderian 2:f2583b56777e 158 void sendHexDDDDValTimes100(float val) {
skanderian 2:f2583b56777e 159 int valTimes100 = (int) ((100 * val));
skanderian 2:f2583b56777e 160 string hexDDDD = decToHexDDDD(valTimes100);
skanderian 2:f2583b56777e 161 int nLeadingZeros = 4 - hexDDDD.length();
skanderian 1:610dc7763656 162
skanderian 2:f2583b56777e 163 char hexDDDDout[hexDDDD.length()];
skanderian 2:f2583b56777e 164 for (int i = 0; i < hexDDDD.length(); i++) {
skanderian 2:f2583b56777e 165 hexDDDDout[i] = hexDDDD[i];
skanderian 2:f2583b56777e 166 }
skanderian 2:f2583b56777e 167 char leadingZeros[nLeadingZeros];
skanderian 2:f2583b56777e 168 for (int i = 0; i < nLeadingZeros; i++) {
skanderian 2:f2583b56777e 169 leadingZeros[i] = '0';
skanderian 2:f2583b56777e 170 }
skanderian 2:f2583b56777e 171 //serial.printf("#%s%saa^\r\n", leadingZeros, hexDDDDout);
skanderian 2:f2583b56777e 172 serial.printf("#%s%saa", leadingZeros, hexDDDDout);
skanderian 2:f2583b56777e 173 //ledConfirmSent();
skanderian 0:ce79b04fc2ca 174 }
skanderian 0:ce79b04fc2ca 175
skanderian 2:f2583b56777e 176 void runSingleCommand(int comInd) {
skanderian 2:f2583b56777e 177 int endBuffer = (comInd + 1)*8;
skanderian 2:f2583b56777e 178 int startBuffer = endBuffer - 7;
skanderian 2:f2583b56777e 179
skanderian 2:f2583b56777e 180 //get hexCCIn
skanderian 2:f2583b56777e 181 for (int i = 0; i < 2; i++) {
skanderian 2:f2583b56777e 182 hexCCIn[i] = rxBuffer[i + startBuffer];
skanderian 2:f2583b56777e 183 }
skanderian 2:f2583b56777e 184 //serial.printf("hexCCIn= is %s\r\n", hexCCIn);
skanderian 2:f2583b56777e 185
skanderian 2:f2583b56777e 186 for (int i = 0; i < 4; i++) {
skanderian 2:f2583b56777e 187 hexDDDDIn[i] = rxBuffer[i + startBuffer + 2];
skanderian 0:ce79b04fc2ca 188 }
skanderian 0:ce79b04fc2ca 189
skanderian 2:f2583b56777e 190 decCCIn = hexToDec(hexCCIn);
skanderian 2:f2583b56777e 191 decDDDDIn = hexDDDDToDec(hexDDDDIn);
skanderian 2:f2583b56777e 192
skanderian 2:f2583b56777e 193 //Make sure incoming checksum pans out: DO THIS LATER
skanderian 2:f2583b56777e 194
skanderian 2:f2583b56777e 195 if (comInd == 0) { //include # if first command
skanderian 2:f2583b56777e 196 startBuffer = startBuffer - 1;
skanderian 2:f2583b56777e 197 }
skanderian 2:f2583b56777e 198 int i2 = 0;
skanderian 2:f2583b56777e 199 for (int i = startBuffer; i <= endBuffer; i++) { // duplicate bytes 0 to 9 for now;
skanderian 2:f2583b56777e 200 txBuffer[i2] = rxBuffer[i];
skanderian 2:f2583b56777e 201 i2++;
skanderian 2:f2583b56777e 202 }
skanderian 2:f2583b56777e 203
skanderian 2:f2583b56777e 204 //Do action based on CC: already in while loop
skanderian 2:f2583b56777e 205
skanderian 0:ce79b04fc2ca 206
skanderian 0:ce79b04fc2ca 207 }
skanderian 0:ce79b04fc2ca 208
skanderian 2:f2583b56777e 209 void runWhenNewSerialIn() {
skanderian 2:f2583b56777e 210 int nCommands = (rxIn - 1) / 8; //find out how many commands are sent in one serial message
skanderian 2:f2583b56777e 211 //serial.printf("%s%d%s\r\n", "#nCommands: ", nCommands, "commands");
skanderian 2:f2583b56777e 212 for (int comInd = 0; comInd < nCommands; comInd++) { // duplicate bytes 0 to 9 for now;
skanderian 2:f2583b56777e 213 runSingleCommand(comInd);
skanderian 2:f2583b56777e 214 }
skanderian 2:f2583b56777e 215 serial.printf("^\r\n"); //end line after responses to all commands returned
skanderian 2:f2583b56777e 216 }
skanderian 1:610dc7763656 217
skanderian 2:f2583b56777e 218 void Rx_interrupt() {
skanderian 2:f2583b56777e 219 // Loop just in case more than one character is in UART's receive FIFO buffer
skanderian 2:f2583b56777e 220 // Stop if buffer full
skanderian 2:f2583b56777e 221 //while ((serial.readable()) && (((rxIn + 1) % bufferSize) != 0)) {
skanderian 2:f2583b56777e 222 while (serial.readable()) {
skanderian 2:f2583b56777e 223 rxBuffer[rxIn] = serial.getc();
skanderian 2:f2583b56777e 224 if (rxBuffer[rxIn] == '\r') { //looking for character not string (string is double quotes) \r is CR, \n is LF
skanderian 2:f2583b56777e 225 rxFlag = 1;
skanderian 2:f2583b56777e 226 //Turn built in LED blue (at half intensity) to confirm command recieved
skanderian 2:f2583b56777e 227 ledConfirmReceive();
skanderian 2:f2583b56777e 228 //Execute runWhenNewSerialIn when new Rx recieved (ending with \r)
skanderian 2:f2583b56777e 229 runWhenNewSerialIn();
skanderian 2:f2583b56777e 230 rxFlag = 0; //reset flag to listen for next message
skanderian 2:f2583b56777e 231 rxIn = 0; // reset position index to 0
skanderian 1:610dc7763656 232
skanderian 2:f2583b56777e 233 } else {
skanderian 2:f2583b56777e 234 rxIn = (rxIn + 1) % bufferSize;
skanderian 1:610dc7763656 235 }
skanderian 1:610dc7763656 236 }
skanderian 1:610dc7763656 237 }
skanderian 0:ce79b04fc2ca 238
skanderian 2:f2583b56777e 239 int main() {
skanderian 2:f2583b56777e 240
skanderian 2:f2583b56777e 241 serial.baud(9600);
skanderian 2:f2583b56777e 242 serial.attach(&Rx_interrupt, Serial::RxIrq);
skanderian 0:ce79b04fc2ca 243
skanderian 2:f2583b56777e 244 //rLed.period(0.001f);
skanderian 2:f2583b56777e 245 //gLed.period(0.001f);
skanderian 2:f2583b56777e 246 //bLed.period(0.001f);
skanderian 2:f2583b56777e 247
skanderian 0:ce79b04fc2ca 248
skanderian 2:f2583b56777e 249 //flash LED blue then green on startup or system reset
skanderian 2:f2583b56777e 250 //serial.printf("Before Blue on Startup^\r\n");
skanderian 2:f2583b56777e 251 ledConfirmSent();
skanderian 2:f2583b56777e 252 ledConfirmReceive();
skanderian 2:f2583b56777e 253 //serial.printf("After Green on Startup^\r\n");
skanderian 2:f2583b56777e 254 timer.start();
skanderian 0:ce79b04fc2ca 255
skanderian 2:f2583b56777e 256 while (1) {
skanderian 2:f2583b56777e 257 //scanf("%10s", rxBuffer);// NO! Use Rx_interrupt instead!
skanderian 2:f2583b56777e 258 //Always keep running computePressureCommand when pump is enabled (runPump=true)
skanderian 2:f2583b56777e 259 sendAnalogIn(decDDDDIn);
skanderian 2:f2583b56777e 260 wait(1);
skanderian 0:ce79b04fc2ca 261 }
skanderian 0:ce79b04fc2ca 262 }