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#?

Committer:
ChrisLusetic
Date:
Fri Mar 29 15:49:15 2019 +0000
Revision:
0:15f3699c39a5
Initial and final commit;

Who changed what in which revision?

UserRevisionLine numberNew 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 }