Sensafety: iLP / Mbed 2 deprecated LampDriver

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

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 }