Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
main.cpp
00001 /* Includes */ 00002 #include "mbed.h" 00003 #include <iostream> 00004 #include <string.h> 00005 00006 PwmOut Driver1 (p21); 00007 PwmOut Driver2 (p22); 00008 PwmOut Driver3 (p23); 00009 00010 PwmOut Driver4 (p24); 00011 PwmOut Driver5 (p25); 00012 PwmOut Driver6 (p26); 00013 00014 using namespace std; 00015 00016 /* Declaration serial devices */ 00017 Serial pc(USBTX, USBRX); // tx, rx 00018 Serial sensafetyGateway(p13, p14); // tx, rx 00019 00020 /* Global variables */ 00021 char temp; 00022 string buf; 00023 string receivedStr; 00024 char reqStr[] = "comreq"; // Communication request C-string 00025 char comConfMsg[] = "comconf"; // Communication confirmation C-string 00026 char valConfMsg[] = "valconf"; // Communication value confirmation C-string 00027 char receivedMessage[1000]; 00028 00029 typedef struct { 00030 int in; 00031 int out; 00032 string buf[100]; 00033 bool msgReceived; 00034 } buffer; 00035 00036 buffer serialBuffer; 00037 00038 /* Function prototypes */ 00039 void callback(); 00040 void sendMsg(char msg[], size_t msgSize); 00041 void updateDriver(int drivernr, char value); 00042 00043 int main() 00044 { 00045 serialBuffer.in = 0; 00046 serialBuffer.out = 0; 00047 serialBuffer.msgReceived = false; 00048 size_t size; 00049 00050 sensafetyGateway.attach(&callback); // Callback function 00051 00052 printf("\r\n-----Debugging mbed application active-----\r\n"); 00053 00054 while(1) { 00055 if (serialBuffer.msgReceived) { 00056 if (strcmp(reqStr, serialBuffer.buf[serialBuffer.out].c_str()) == 0) { // If received msg is a communication request.. 00057 size = (sizeof(comConfMsg) / sizeof(comConfMsg[0])); 00058 sendMsg(comConfMsg, size); // Send confirmation message 00059 } else { // else it is a value message.. 00060 printf(" Received message: %s\n\r" , serialBuffer.buf[serialBuffer.out].c_str() ); 00061 strcpy(receivedMessage , serialBuffer.buf[serialBuffer.out].c_str()); 00062 printf("Received [%d] on driver number [%d]\n\r", receivedMessage[2] , receivedMessage[0] ); 00063 updateDriver( receivedMessage[0], receivedMessage[2] ); 00064 size = (sizeof(valConfMsg) / sizeof(valConfMsg[0])); 00065 sendMsg(valConfMsg, size); // Send value confirmation 00066 } 00067 serialBuffer.msgReceived = false; 00068 serialBuffer.out++; 00069 if (serialBuffer.out == 100) { 00070 serialBuffer.out = 0; 00071 } 00072 00073 } 00074 } 00075 } 00076 00077 /* Function to send message over UART */ 00078 void sendMsg(char msg[], size_t msgSize) 00079 { 00080 if (sensafetyGateway.writeable()) { 00081 for(int i = 0; i < msgSize; i++) { 00082 sensafetyGateway.putc(msg[i]); 00083 } 00084 } 00085 } 00086 00087 /* Callaback function for receiving characters */ 00088 void callback() 00089 { 00090 //if data is ready in the buffer 00091 while (sensafetyGateway.readable()) { 00092 //read 1 character 00093 temp = sensafetyGateway.getc(); 00094 buf += temp; 00095 00096 if ( (temp == '\0') | (buf.size() > 10)) { //if complete message is received 00097 serialBuffer.msgReceived = true; 00098 serialBuffer.buf[serialBuffer.in] = buf; 00099 serialBuffer.in++; 00100 if (serialBuffer.in == 100) { 00101 serialBuffer.in = 0; 00102 } 00103 buf.clear(); 00104 } 00105 } 00106 } 00107 00108 void updateDriver(int drivernr, char value) 00109 { 00110 float pwmValue = 0; 00111 pwmValue = ( value / 255 ); 00112 00113 switch (drivernr) { 00114 case 1: 00115 Driver1 = pwmValue; 00116 printf("Led Driver [1] updated with value [%.2f]\n\r", pwmValue); 00117 break; 00118 case 2: 00119 Driver2 = pwmValue; 00120 printf("Led Driver [2] updated with value [%.2f]\n\r", pwmValue); 00121 break; 00122 case 3: 00123 Driver3 = pwmValue; 00124 printf("Led Driver [3] updated with value [%.2f]\r", pwmValue); 00125 break; 00126 case 4: 00127 Driver4 = pwmValue; 00128 printf("Led Driver [4] updated with value [%.2f]\n\r", pwmValue); 00129 break; 00130 case 5: 00131 Driver5 = pwmValue; 00132 printf("Led Driver [5] updated with value [%.2f]\n\r", pwmValue); 00133 break; 00134 case 6: 00135 Driver6 = pwmValue; 00136 printf("Led Driver [6] updated with value [%.2f]\n\r", pwmValue); 00137 break; 00138 default: 00139 break; 00140 } 00141 }
Generated on Fri Jul 22 2022 05:33:01 by
