This code reads 5 analog inputs, converts them to string, then sends them over USART to PC. On PC LabVIEW app read and displays and logs values
Dependencies: mbed
This code reads analog inputs form A0 to A4, which then gets converted to string and sent over USART.
String are parsed in the following manner:
Start char: $ Delimiter char: # End char: ?
example: Reading A01=2.53V and A02=1.2V the resulted parsed string would be: $2.530#1.200#?
main.cpp@0:15f3699c39a5, 2019-03-29 (annotated)
- Committer:
- ChrisLusetic
- Date:
- Fri Mar 29 15:49:15 2019 +0000
- Revision:
- 0:15f3699c39a5
Initial and final commit;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ChrisLusetic | 0:15f3699c39a5 | 1 | //TODO: dodati sd card logger |
ChrisLusetic | 0:15f3699c39a5 | 2 | //TODO: dodati conversion for sensors |
ChrisLusetic | 0:15f3699c39a5 | 3 | //TODO: Serial Read from LabView on start |
ChrisLusetic | 0:15f3699c39a5 | 4 | //TODO: PWM output |
ChrisLusetic | 0:15f3699c39a5 | 5 | |
ChrisLusetic | 0:15f3699c39a5 | 6 | #include "mbed.h" |
ChrisLusetic | 0:15f3699c39a5 | 7 | #include "stdio.h" |
ChrisLusetic | 0:15f3699c39a5 | 8 | #include "string" |
ChrisLusetic | 0:15f3699c39a5 | 9 | |
ChrisLusetic | 0:15f3699c39a5 | 10 | #define SAMPLE_RATE 0.01 |
ChrisLusetic | 0:15f3699c39a5 | 11 | Serial pc(USBTX, USBRX); // tx, rx |
ChrisLusetic | 0:15f3699c39a5 | 12 | |
ChrisLusetic | 0:15f3699c39a5 | 13 | Timer timer; |
ChrisLusetic | 0:15f3699c39a5 | 14 | AnalogIn a_input[] = {A0,A1,A2,A3,A4}; |
ChrisLusetic | 0:15f3699c39a5 | 15 | const int numberOfInputs=5; |
ChrisLusetic | 0:15f3699c39a5 | 16 | float analog_values[numberOfInputs]; |
ChrisLusetic | 0:15f3699c39a5 | 17 | |
ChrisLusetic | 0:15f3699c39a5 | 18 | char buffer[100]; |
ChrisLusetic | 0:15f3699c39a5 | 19 | char temp[30]; |
ChrisLusetic | 0:15f3699c39a5 | 20 | void read_inputs(); |
ChrisLusetic | 0:15f3699c39a5 | 21 | void convert_inputs(); |
ChrisLusetic | 0:15f3699c39a5 | 22 | void send_results(); |
ChrisLusetic | 0:15f3699c39a5 | 23 | |
ChrisLusetic | 0:15f3699c39a5 | 24 | void flushSerialBuffer(void) { char char1 = 0; while (pc.readable()) { char1 = pc.getc(); } return; } |
ChrisLusetic | 0:15f3699c39a5 | 25 | |
ChrisLusetic | 0:15f3699c39a5 | 26 | int main() { |
ChrisLusetic | 0:15f3699c39a5 | 27 | timer.start(); |
ChrisLusetic | 0:15f3699c39a5 | 28 | flushSerialBuffer(); |
ChrisLusetic | 0:15f3699c39a5 | 29 | while(1){ |
ChrisLusetic | 0:15f3699c39a5 | 30 | if (timer.read() > SAMPLE_RATE) { |
ChrisLusetic | 0:15f3699c39a5 | 31 | read_inputs(); |
ChrisLusetic | 0:15f3699c39a5 | 32 | convert_inputs(); |
ChrisLusetic | 0:15f3699c39a5 | 33 | send_results(); |
ChrisLusetic | 0:15f3699c39a5 | 34 | timer.reset(); |
ChrisLusetic | 0:15f3699c39a5 | 35 | } |
ChrisLusetic | 0:15f3699c39a5 | 36 | } |
ChrisLusetic | 0:15f3699c39a5 | 37 | } |
ChrisLusetic | 0:15f3699c39a5 | 38 | void read_inputs(){ |
ChrisLusetic | 0:15f3699c39a5 | 39 | for (int i=0;i<numberOfInputs;i++){ |
ChrisLusetic | 0:15f3699c39a5 | 40 | analog_values[i]= a_input[i].read()*3.3; //convert to voltage |
ChrisLusetic | 0:15f3699c39a5 | 41 | } |
ChrisLusetic | 0:15f3699c39a5 | 42 | } |
ChrisLusetic | 0:15f3699c39a5 | 43 | void convert_inputs(){ |
ChrisLusetic | 0:15f3699c39a5 | 44 | for (int i=0;i<numberOfInputs;i++){ |
ChrisLusetic | 0:15f3699c39a5 | 45 | sprintf(temp,"%.3f",analog_values[i]); //convert float to string |
ChrisLusetic | 0:15f3699c39a5 | 46 | strcat(temp,"#"); //add delimiter |
ChrisLusetic | 0:15f3699c39a5 | 47 | strcat(buffer,temp); //concatenate buffer and new value |
ChrisLusetic | 0:15f3699c39a5 | 48 | } |
ChrisLusetic | 0:15f3699c39a5 | 49 | strcat(buffer,"?"); //end char |
ChrisLusetic | 0:15f3699c39a5 | 50 | } |
ChrisLusetic | 0:15f3699c39a5 | 51 | void send_results(){ |
ChrisLusetic | 0:15f3699c39a5 | 52 | pc.printf(buffer); //serial send buffer |
ChrisLusetic | 0:15f3699c39a5 | 53 | sprintf(buffer,"$"); //start char |
ChrisLusetic | 0:15f3699c39a5 | 54 | } |