A simple example of a serial communication interface for setting variables in an Mbed program with help of mydsc library.

Dependencies:   mbed mydsc

Committer:
ghsalazar
Date:
Fri Feb 28 20:07:32 2020 +0000
Revision:
1:2cd22f07b879
Parent:
0:46aa79a823ee
Child:
2:f884fffe2c4b
An example for serial communication with terminal interface.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ghsalazar 0:46aa79a823ee 1 /**
ghsalazar 0:46aa79a823ee 2 @file main.cpp
ghsalazar 0:46aa79a823ee 3 @author Gastón SALAZAR <gaston_salazar@yahoo.com>
ghsalazar 0:46aa79a823ee 4 */
ghsalazar 0:46aa79a823ee 5
ghsalazar 0:46aa79a823ee 6 #include "mbed.h"
ghsalazar 1:2cd22f07b879 7 #include "stdio.h"
ghsalazar 1:2cd22f07b879 8 #include "stdlib.h"
ghsalazar 1:2cd22f07b879 9 #include "ctype.h"
ghsalazar 0:46aa79a823ee 10
ghsalazar 1:2cd22f07b879 11 #include "mydsc_kvp.h"
ghsalazar 0:46aa79a823ee 12
ghsalazar 1:2cd22f07b879 13 const unsigned VALUE_SIZE = 128;
ghsalazar 0:46aa79a823ee 14
ghsalazar 1:2cd22f07b879 15 float kp = 0;
ghsalazar 1:2cd22f07b879 16 float ki = 0;
ghsalazar 1:2cd22f07b879 17
ghsalazar 1:2cd22f07b879 18 char* get_proportional(void)
ghsalazar 0:46aa79a823ee 19 {
ghsalazar 1:2cd22f07b879 20 static char value[VALUE_SIZE];
ghsalazar 1:2cd22f07b879 21
ghsalazar 1:2cd22f07b879 22 sprintf(value, "%f", kp);
ghsalazar 1:2cd22f07b879 23 return value;
ghsalazar 0:46aa79a823ee 24 }
ghsalazar 0:46aa79a823ee 25
ghsalazar 1:2cd22f07b879 26 int set_proportional(char* value)
ghsalazar 0:46aa79a823ee 27 {
ghsalazar 1:2cd22f07b879 28 sscanf(value, "%f", &kp);
ghsalazar 1:2cd22f07b879 29 return MYDSC_KVP_SUCCESS;
ghsalazar 1:2cd22f07b879 30 }
ghsalazar 0:46aa79a823ee 31
ghsalazar 1:2cd22f07b879 32 char* get_integral(void)
ghsalazar 1:2cd22f07b879 33 {
ghsalazar 1:2cd22f07b879 34 static char value[VALUE_SIZE];
ghsalazar 0:46aa79a823ee 35
ghsalazar 1:2cd22f07b879 36 sprintf(value, "%f", ki);
ghsalazar 1:2cd22f07b879 37 return value;
ghsalazar 1:2cd22f07b879 38 }
ghsalazar 1:2cd22f07b879 39
ghsalazar 1:2cd22f07b879 40 int set_integral(char* value)
ghsalazar 1:2cd22f07b879 41 {
ghsalazar 1:2cd22f07b879 42 sscanf(value, "%f", &kp);
ghsalazar 1:2cd22f07b879 43 return MYDSC_KVP_SUCCESS;
ghsalazar 0:46aa79a823ee 44 }
ghsalazar 0:46aa79a823ee 45
ghsalazar 0:46aa79a823ee 46 int main()
ghsalazar 0:46aa79a823ee 47 {
ghsalazar 1:2cd22f07b879 48 // Setup
ghsalazar 1:2cd22f07b879 49 const unsigned short BUFFER_SIZE = 128;
ghsalazar 1:2cd22f07b879 50 static char command_buffer[BUFFER_SIZE];
ghsalazar 1:2cd22f07b879 51 static char key_buffer[BUFFER_SIZE];
ghsalazar 1:2cd22f07b879 52 static char value_buffer[BUFFER_SIZE];
ghsalazar 1:2cd22f07b879 53
ghsalazar 1:2cd22f07b879 54 Serial serial(USBTX, USBRX);
ghsalazar 1:2cd22f07b879 55 serial.baud(9600);
ghsalazar 1:2cd22f07b879 56 serial.format(8, SerialBase::None, 1);
ghsalazar 1:2cd22f07b879 57 serial.printf("\r\nHello, world!");
ghsalazar 1:2cd22f07b879 58
ghsalazar 1:2cd22f07b879 59 mydsc_kvp_t kvp;
ghsalazar 1:2cd22f07b879 60 mydsc_kvp_init(&kvp);
ghsalazar 1:2cd22f07b879 61 mydsc_kvp_append(&kvp, "proportional", &get_proportional,
ghsalazar 1:2cd22f07b879 62 &set_proportional);
ghsalazar 1:2cd22f07b879 63 mydsc_kvp_append(&kvp, "integral", &get_integral, &set_integral);
ghsalazar 1:2cd22f07b879 64 serial.printf("\r\nVersion:\t%s", mydsc_kvp_get_value(&kvp, "version"));
ghsalazar 1:2cd22f07b879 65
ghsalazar 1:2cd22f07b879 66 while(1) {
ghsalazar 1:2cd22f07b879 67 // Loop
ghsalazar 1:2cd22f07b879 68 int result = 0;
ghsalazar 1:2cd22f07b879 69 char* value = "";
ghsalazar 1:2cd22f07b879 70
ghsalazar 1:2cd22f07b879 71 serial.printf("\r\n> ");
ghsalazar 1:2cd22f07b879 72
ghsalazar 1:2cd22f07b879 73 serial.scanf("%s",command_buffer);
ghsalazar 1:2cd22f07b879 74 if (strcmp(command_buffer, "set") == 0) {
ghsalazar 1:2cd22f07b879 75 serial.scanf("%s",key_buffer);
ghsalazar 1:2cd22f07b879 76 serial.scanf("%s",value_buffer);
ghsalazar 1:2cd22f07b879 77 result = mydsc_kvp_set_value(&kvp, key_buffer, value_buffer);
ghsalazar 1:2cd22f07b879 78
ghsalazar 1:2cd22f07b879 79 if (result == MYDSC_KVP_SUCCESS)
ghsalazar 1:2cd22f07b879 80 serial.printf("\r\nOk");
ghsalazar 1:2cd22f07b879 81 else if (result == MYDSC_KVP_NO_SET)
ghsalazar 1:2cd22f07b879 82 serial.printf("\r\nError: Value can't be changed");
ghsalazar 1:2cd22f07b879 83 else if (result == MYDSC_KVP_NO_KEY)
ghsalazar 1:2cd22f07b879 84 serial.printf("\r\nError: There isn't such setting");
ghsalazar 1:2cd22f07b879 85 else if (result == MYDSC_KVP_WRONG_VALUE)
ghsalazar 1:2cd22f07b879 86 serial.printf("\r\nError: The value is wrong");
ghsalazar 1:2cd22f07b879 87 else
ghsalazar 1:2cd22f07b879 88 serial.printf("\r\nError: Unknown error");
ghsalazar 1:2cd22f07b879 89 }
ghsalazar 1:2cd22f07b879 90
ghsalazar 1:2cd22f07b879 91 else if (strcmp(command_buffer,"get") == 0) {
ghsalazar 1:2cd22f07b879 92 serial.scanf("%s",key_buffer);
ghsalazar 1:2cd22f07b879 93 value = mydsc_kvp_get_value(&kvp,key_buffer);
ghsalazar 1:2cd22f07b879 94 if (NULL != value)
ghsalazar 1:2cd22f07b879 95 serial.printf("\r\n%s", value);
ghsalazar 1:2cd22f07b879 96 else
ghsalazar 1:2cd22f07b879 97 serial.printf("\r\nError: There isn't such setting");
ghsalazar 1:2cd22f07b879 98 serial.printf("\r\nOk");
ghsalazar 1:2cd22f07b879 99 }
ghsalazar 1:2cd22f07b879 100 else if (strcmp(command_buffer,"help") == 0) {
ghsalazar 1:2cd22f07b879 101 serial.printf("\r\nAvailable commands are: get help set");
ghsalazar 1:2cd22f07b879 102 serial.printf("\r\nOk");
ghsalazar 1:2cd22f07b879 103 }
ghsalazar 1:2cd22f07b879 104 else
ghsalazar 1:2cd22f07b879 105 serial.printf("\r\nError: %s doesn't exist\r\n", command_buffer);
ghsalazar 1:2cd22f07b879 106 }
ghsalazar 0:46aa79a823ee 107 }