Sami Kanderian / Mbed 2 deprecated TestAnalogInPins

Dependencies:   mbed

Committer:
skanderian
Date:
Wed May 11 20:20:13 2016 +0000
Revision:
3:3b45e830ebe1
Parent:
2:f2583b56777e
Child:
4:9e93bf4863cb
Cleaned up version, no hex. Serial input takes form '#XX' where XX goes from '00' to '16'

Who changed what in which revision?

UserRevisionLine numberNew contents of line
skanderian 3:3b45e830ebe1 1 /*TestAnalogInPins: written by Sami Kanderian, last updated on 11 May 2016. It continuously reads
skanderian 3:3b45e830ebe1 2 and prints 16 Analog Input Pin voltages on the NPX Freescale FRDM-KL25Z microprocessor board via
skanderian 3:3b45e830ebe1 3 Serial inputs registered via an RX Interrupt trigger that changes the value of charCCIn, where
skanderian 3:3b45e830ebe1 4 charCCIn goes from '00' to '16'. charCCIn should be preceeded by a '#'. Serial baud rate is 9600.
skanderian 3:3b45e830ebe1 5 The data acquisition rate is defined by the variable updatePeriodMs.
skanderian 3:3b45e830ebe1 6
skanderian 3:3b45e830ebe1 7 Serial inputs followed by Carriage Return:
skanderian 3:3b45e830ebe1 8 '#00': print analog input voltages on all pins (deafault printout on startup)
skanderian 3:3b45e830ebe1 9 '#01': print analog input voltage on pin PTE20
skanderian 3:3b45e830ebe1 10 '#02': print analog input voltage on pin PTB0
skanderian 3:3b45e830ebe1 11 '#03': print analog input voltage on pin PTE21
skanderian 3:3b45e830ebe1 12 '#04': print analog input voltage on pin PTB1
skanderian 3:3b45e830ebe1 13 '#05': print analog input voltage on pin PTE22
skanderian 3:3b45e830ebe1 14 '#06': print analog input voltage on pin PTB2
skanderian 3:3b45e830ebe1 15 '#07': print analog input voltage on pin PTE23
skanderian 3:3b45e830ebe1 16 '#08': print analog input voltage on pin PTB3
skanderian 3:3b45e830ebe1 17 '#09': print analog input voltage on pin PTE29
skanderian 3:3b45e830ebe1 18 '#10': print analog input voltage on pin PTC2
skanderian 3:3b45e830ebe1 19 '#11': print analog input voltage on pin PTE30
skanderian 3:3b45e830ebe1 20 '#12': print analog input voltage on pin PTC1
skanderian 3:3b45e830ebe1 21 '#13': print analog input voltage on pin PTC0
skanderian 3:3b45e830ebe1 22 '#14': print analog input voltage on pin PTD1
skanderian 3:3b45e830ebe1 23 '#15': print analog input voltage on pin PTD5
skanderian 3:3b45e830ebe1 24 '#16': print analog input voltage on pin PTD6
skanderian 3:3b45e830ebe1 25 */
skanderian 3:3b45e830ebe1 26
skanderian 0:ce79b04fc2ca 27 #include "mbed.h"
skanderian 1:610dc7763656 28
skanderian 0:ce79b04fc2ca 29 //Declare hardware inputs
skanderian 3:3b45e830ebe1 30 Serial serial(USBTX, USBRX);
skanderian 0:ce79b04fc2ca 31 Timer timer;
skanderian 2:f2583b56777e 32
skanderian 3:3b45e830ebe1 33 //IMPORTANT NOTE: PTA1 and PTA2 ARE RESERVED FOR SERIAL COMMUNICATION VIA SDA USB!!! DO NOT USE FOR SENSOR/ACTUATOR I/O!!!
skanderian 2:f2583b56777e 34 //Analog inputs : 0-3.3V
skanderian 3:3b45e830ebe1 35 AnalogIn pin1(PTE20);//works as 16 bit ADC
skanderian 3:3b45e830ebe1 36 AnalogIn pin2(PTB0); //works as 12 bit ADC
skanderian 3:3b45e830ebe1 37 AnalogIn pin3(PTE21);//should be 16 bit ADC but doesnt work as ADC on mbed. Instead PTE21 reads whatever analog reading is input to PTE29
skanderian 3:3b45e830ebe1 38 AnalogIn pin4(PTB1); //works as 12 bit ADC
skanderian 3:3b45e830ebe1 39 AnalogIn pin5(PTE22);//works as 12 bit ADC
skanderian 3:3b45e830ebe1 40 AnalogIn pin6(PTB2);//works as 12 bit ADC
skanderian 3:3b45e830ebe1 41 AnalogIn pin7(PTE23);//works as 12 bit ADC
skanderian 3:3b45e830ebe1 42 AnalogIn pin8(PTB3); //works as 12 bit ADC
skanderian 3:3b45e830ebe1 43 AnalogIn pin9(PTE29);//works as 12 bit ADC
skanderian 3:3b45e830ebe1 44 AnalogIn pin10(PTC2);//works as 12 bit ADC
skanderian 3:3b45e830ebe1 45 AnalogIn pin11(PTE30);//works as 12 bit ADC
skanderian 3:3b45e830ebe1 46 AnalogIn pin12(PTC1);//works as 12 bit ADC
skanderian 3:3b45e830ebe1 47 AnalogIn pin13(PTC0);//works as 12 bit ADC
skanderian 3:3b45e830ebe1 48 AnalogIn pin14(PTD1);// doesnt work. Seems to be stuck at 3.3Vz
skanderian 3:3b45e830ebe1 49 AnalogIn pin15(PTD5);//works as 12 bit ADC
skanderian 3:3b45e830ebe1 50 AnalogIn pin16(PTD6);//works as 12 bit ADC
skanderian 2:f2583b56777e 51
skanderian 2:f2583b56777e 52 //Built in LEDs
skanderian 2:f2583b56777e 53 PwmOut rLed(LED_RED);
skanderian 2:f2583b56777e 54 PwmOut gLed(LED_GREEN);
skanderian 2:f2583b56777e 55 PwmOut bLed(LED_BLUE);
skanderian 2:f2583b56777e 56
skanderian 2:f2583b56777e 57 //New globals for RxInterrupt routine
skanderian 2:f2583b56777e 58 const int bufferSize = 256;
skanderian 2:f2583b56777e 59 char rxBuffer[bufferSize];
skanderian 2:f2583b56777e 60 char txBuffer[bufferSize];
skanderian 2:f2583b56777e 61 volatile int rxIn = 0;
skanderian 2:f2583b56777e 62 volatile int rxOut = 0;
skanderian 2:f2583b56777e 63 bool rxFlag = 0;
skanderian 0:ce79b04fc2ca 64
skanderian 3:3b45e830ebe1 65 //other globals
skanderian 3:3b45e830ebe1 66 char charCCIn[2];
skanderian 1:610dc7763656 67 int decCCIn;
skanderian 3:3b45e830ebe1 68 int updatePeriodMs = 1000;
skanderian 2:f2583b56777e 69
skanderian 2:f2583b56777e 70 void ledConfirmSent()//Light up blue LED 10%
skanderian 2:f2583b56777e 71 {
skanderian 2:f2583b56777e 72 rLed = 1;
skanderian 2:f2583b56777e 73 gLed = 1;
skanderian 2:f2583b56777e 74 bLed = 0.9;
skanderian 2:f2583b56777e 75 }
skanderian 2:f2583b56777e 76
skanderian 2:f2583b56777e 77 void ledConfirmReceive()//Light up green LED 10%
skanderian 2:f2583b56777e 78 {
skanderian 2:f2583b56777e 79 rLed = 1;
skanderian 2:f2583b56777e 80 gLed = 0.9;
skanderian 2:f2583b56777e 81 bLed = 1;
skanderian 2:f2583b56777e 82 }
skanderian 0:ce79b04fc2ca 83
skanderian 3:3b45e830ebe1 84 void sendAnalogIn(int pinNum) //send Analog input in V.
skanderian 3:3b45e830ebe1 85 //Pin inputs are normalized to have a max value of 1 so a 3.3 multiplier is used to convert back to voltage
skanderian 3:3b45e830ebe1 86 {
skanderian 2:f2583b56777e 87 if (pinNum == 0 || pinNum == 1) {
skanderian 3:3b45e830ebe1 88 serial.printf("%s%03.1f%s\r\n", "#PTE20: ", 3.3f*pin1.read(), "V");
skanderian 2:f2583b56777e 89 }
skanderian 2:f2583b56777e 90 if (pinNum == 0 || pinNum == 2) {
skanderian 3:3b45e830ebe1 91 serial.printf("%s%03.1f%s\r\n", "#PTB0: ", 3.3f*pin2.read(), "V");
skanderian 2:f2583b56777e 92 }
skanderian 2:f2583b56777e 93 if (pinNum == 0 || pinNum == 3) {
skanderian 3:3b45e830ebe1 94 serial.printf("%s%03.1f%s\r\n", "#PTE21: ", 3.3f*pin3.read(), "V");
skanderian 2:f2583b56777e 95 }
skanderian 2:f2583b56777e 96 if (pinNum == 0 || pinNum == 4) {
skanderian 3:3b45e830ebe1 97 serial.printf("%s%03.1f%s\r\n", "#PTB1: ", 3.3f*pin4.read(), "V");
skanderian 2:f2583b56777e 98 }
skanderian 2:f2583b56777e 99 if (pinNum == 0 || pinNum == 5) {
skanderian 3:3b45e830ebe1 100 serial.printf("%s%03.1f%s\r\n", "#PTE22: ", 3.3f*pin5.read(), "V");
skanderian 2:f2583b56777e 101 }
skanderian 2:f2583b56777e 102 if (pinNum == 0 || pinNum == 6) {
skanderian 3:3b45e830ebe1 103 serial.printf("%s%03.1f%s\r\n", "#PTB2: ", 3.3f*pin6.read(), "V");
skanderian 2:f2583b56777e 104 }
skanderian 2:f2583b56777e 105 if (pinNum == 0 || pinNum == 7) {
skanderian 3:3b45e830ebe1 106 serial.printf("%s%03.1f%s\r\n", "#PTE23: ", 3.3f*pin7.read(), "V");
skanderian 2:f2583b56777e 107 }
skanderian 2:f2583b56777e 108 if (pinNum == 0 || pinNum == 8) {
skanderian 3:3b45e830ebe1 109 serial.printf("%s%03.1f%s\r\n", "#PTB3: ", 3.3f*pin8.read(), "V");
skanderian 2:f2583b56777e 110 }
skanderian 2:f2583b56777e 111 if (pinNum == 0 || pinNum == 9) {
skanderian 3:3b45e830ebe1 112 serial.printf("%s%03.1f%s\r\n", "#PTE29: ", 3.3f*pin9.read(), "V");
skanderian 2:f2583b56777e 113 }
skanderian 2:f2583b56777e 114 if (pinNum == 0 || pinNum == 10) {
skanderian 3:3b45e830ebe1 115 serial.printf("%s%03.1f%s\r\n", "#PTC2: ", 3.3f*pin10.read(), "V");
skanderian 2:f2583b56777e 116 }
skanderian 2:f2583b56777e 117 if (pinNum == 0 || pinNum == 11) {
skanderian 3:3b45e830ebe1 118 serial.printf("%s%03.1f%s\r\n", "#PTE30: ", 3.3f*pin11.read(), "V");
skanderian 2:f2583b56777e 119 }
skanderian 2:f2583b56777e 120 if (pinNum == 0 || pinNum == 12) {
skanderian 3:3b45e830ebe1 121 serial.printf("%s%03.1f%s\r\n", "#PTC1: ", 3.3f*pin12.read(), "V");
skanderian 2:f2583b56777e 122 }
skanderian 2:f2583b56777e 123 if (pinNum == 0 || pinNum == 13) {
skanderian 3:3b45e830ebe1 124 serial.printf("%s%03.1f%s\r\n", "#PTC0: ", 3.3f*pin13.read(), "V");
skanderian 2:f2583b56777e 125 }
skanderian 2:f2583b56777e 126 if (pinNum == 0 || pinNum == 14) {
skanderian 3:3b45e830ebe1 127 serial.printf("%s%03.1f%s\r\n", "#PTD1: ", 3.3f*pin14.read(), "V");
skanderian 2:f2583b56777e 128 }
skanderian 2:f2583b56777e 129 if (pinNum == 0 || pinNum == 15) {
skanderian 3:3b45e830ebe1 130 serial.printf("%s%03.1f%s\r\n", "#PTD5: ", 3.3f*pin15.read(), "V");
skanderian 2:f2583b56777e 131 }
skanderian 2:f2583b56777e 132 if (pinNum == 0 || pinNum == 16) {
skanderian 3:3b45e830ebe1 133 serial.printf("%s%03.1f%s\r\n", "#PTD6: ", 3.3f*pin16.read(), "V");
skanderian 2:f2583b56777e 134 }
skanderian 2:f2583b56777e 135 ledConfirmSent();
skanderian 0:ce79b04fc2ca 136 }
skanderian 0:ce79b04fc2ca 137
skanderian 3:3b45e830ebe1 138 void runWhenNewSerialIn() {
skanderian 3:3b45e830ebe1 139 if (rxBuffer[0] !='#') {
skanderian 3:3b45e830ebe1 140 serial.printf("%s\r\n", "Input format should be '#XX'. First input character should be '#'");
skanderian 3:3b45e830ebe1 141 serial.printf("%s\r\n", "followed by XX where XX goes from '00' to '16'");
skanderian 3:3b45e830ebe1 142 }
skanderian 3:3b45e830ebe1 143 for (int i = 0; i < 2; i++) {
skanderian 3:3b45e830ebe1 144 charCCIn[i] = rxBuffer[i+1];
skanderian 2:f2583b56777e 145 }
skanderian 3:3b45e830ebe1 146 decCCIn=strtol(charCCIn,NULL,10);// this line converts char to int
skanderian 3:3b45e830ebe1 147 //decCCIn= 10*((int)(charCCIn[0])-48)+ ((int)(charCCIn[1])-48);// equivalent to line above
skanderian 3:3b45e830ebe1 148 serial.printf("%s%d\r\n", "decCCIn= ",decCCIn);
skanderian 2:f2583b56777e 149 }
skanderian 1:610dc7763656 150
skanderian 2:f2583b56777e 151 void Rx_interrupt() {
skanderian 2:f2583b56777e 152 // Loop just in case more than one character is in UART's receive FIFO buffer
skanderian 2:f2583b56777e 153 // Stop if buffer full
skanderian 2:f2583b56777e 154 //while ((serial.readable()) && (((rxIn + 1) % bufferSize) != 0)) {
skanderian 2:f2583b56777e 155 while (serial.readable()) {
skanderian 2:f2583b56777e 156 rxBuffer[rxIn] = serial.getc();
skanderian 2:f2583b56777e 157 if (rxBuffer[rxIn] == '\r') { //looking for character not string (string is double quotes) \r is CR, \n is LF
skanderian 2:f2583b56777e 158 rxFlag = 1;
skanderian 2:f2583b56777e 159 //Turn built in LED blue (at half intensity) to confirm command recieved
skanderian 2:f2583b56777e 160 ledConfirmReceive();
skanderian 2:f2583b56777e 161 //Execute runWhenNewSerialIn when new Rx recieved (ending with \r)
skanderian 2:f2583b56777e 162 runWhenNewSerialIn();
skanderian 2:f2583b56777e 163 rxFlag = 0; //reset flag to listen for next message
skanderian 2:f2583b56777e 164 rxIn = 0; // reset position index to 0
skanderian 1:610dc7763656 165
skanderian 2:f2583b56777e 166 } else {
skanderian 2:f2583b56777e 167 rxIn = (rxIn + 1) % bufferSize;
skanderian 1:610dc7763656 168 }
skanderian 1:610dc7763656 169 }
skanderian 1:610dc7763656 170 }
skanderian 0:ce79b04fc2ca 171
skanderian 2:f2583b56777e 172 int main() {
skanderian 2:f2583b56777e 173 serial.baud(9600);
skanderian 2:f2583b56777e 174 serial.attach(&Rx_interrupt, Serial::RxIrq);
skanderian 3:3b45e830ebe1 175 timer.start();
skanderian 3:3b45e830ebe1 176 //flash LED blue then green on startup or system reset
skanderian 2:f2583b56777e 177 ledConfirmSent();
skanderian 3:3b45e830ebe1 178 wait(0.2);
skanderian 3:3b45e830ebe1 179 ledConfirmReceive();
skanderian 0:ce79b04fc2ca 180
skanderian 2:f2583b56777e 181 while (1) {
skanderian 3:3b45e830ebe1 182 timer.reset();
skanderian 3:3b45e830ebe1 183 //Run sendAnalogIn in a loop. New decCCIn is registered with new serial input
skanderian 3:3b45e830ebe1 184 sendAnalogIn(decCCIn);
skanderian 3:3b45e830ebe1 185 //wait for updatePeriodMs to go by before printing analog voltage(s) again
skanderian 3:3b45e830ebe1 186 while(timer.read_ms()<updatePeriodMs);
skanderian 0:ce79b04fc2ca 187 }
skanderian 0:ce79b04fc2ca 188 }