text export

Dependencies:   X_NUCLEO_IKS01A3

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 /* mbed Microcontroller Library
00002  * Copyright (c) 2019 ARM Limited
00003  * SPDX-License-Identifier: Apache-2.0
00004  */
00005 
00006 #include "mbed.h"
00007 #include "BufferedSerial.h"
00008 #include "platform/mbed_thread.h"
00009 
00010 BufferedSerial      pc(USBTX, USBRX,115200);    //Serial port for debug
00011 BufferedSerial      COM2(PC_12, PD_2,115200);    //Serial port COM2
00012 
00013 
00014 DigitalInOut MYPIO_0(PA_9); //D8
00015 DigitalInOut MYPIO_1(PC_7); //D9
00016 DigitalInOut MYPIO_2(PB_6); //D10
00017 DigitalInOut MYPIO_3(PA_7); //D11
00018 DigitalInOut MYPIO_4(PA_6); //D12
00019 
00020 DigitalOut  LED_FAB(PB_5);
00021 DigitalOut  GREEN_LED(PA_5);
00022 DigitalIn   WATER_DETECT(PB_1); //water detect   0=ok  1=Water
00023 
00024 AnalogIn Analog_0(PA_0);
00025 AnalogIn Analog_1(PA_1);
00026 char strAdc[10];
00027 
00028 // Blinking rate in milliseconds
00029 #define BLINKING_RATE_MS                                                    500
00030 
00031 char cmdParams[10][10];
00032 unsigned char cmdParamsCount = 0;
00033 
00034 
00035 /* Helper function for printing floats & doubles */
00036 static char *print_double(char *str, double v, int decimalDigits = 2)
00037 {
00038     int i = 1;
00039     int intPart, fractPart;
00040     int len;
00041     char *ptr;
00042     uint8_t fracSign = 0; //0 = negativo 1=positivo
00043     
00044     if(v<0){ fracSign = 0; }
00045     else{ fracSign=1; }
00046 
00047 
00048     /* prepare decimal digits multiplicator */
00049     for (; decimalDigits != 0; i *= 10, decimalDigits--);
00050 
00051     /* calculate integer & fractinal parts */
00052     intPart = abs((int)v);
00053     fractPart = (int)((v - (double)(int)v) * i);
00054     fractPart = abs(fractPart);
00055 
00056     /* fill in integer part */
00057     if(fracSign == 0){ sprintf(str, "-%i.", intPart); }
00058     else{     sprintf(str, "%i.", intPart); }
00059 
00060 
00061     /* prepare fill in of fractional part */
00062     len = strlen(str);
00063     ptr = &str[len];
00064 
00065     /* fill in leading fractional zeros */
00066     for (i /= 10; i > 1; i /= 10, ptr++) {
00067         if (fractPart >= i) {
00068             break;
00069         }
00070         *ptr = '0';
00071     }
00072 
00073     /* fill in (rest of) fractional part */
00074     sprintf(ptr, "%i", fractPart);
00075 
00076     return str;
00077 }
00078 
00079 
00080 unsigned char splitString(char *textToSplit,const char *delimiter)
00081 {
00082     cmdParamsCount = 0;
00083     char * token = strtok(textToSplit,delimiter);
00084     
00085     
00086     while(token != NULL)
00087     {
00088         sprintf(cmdParams[cmdParamsCount],"%s",token);    
00089         token = strtok(NULL, delimiter);
00090         cmdParamsCount++;
00091     }
00092     
00093     return cmdParamsCount;
00094 }
00095 
00096 bool startsWith(const char *pre, const char *str)
00097 {
00098     size_t lenpre = strlen(pre),
00099            lenstr = strlen(str);
00100     return lenstr < lenpre ? false : memcmp(pre, str, lenpre) == 0;
00101 }
00102 
00103 
00104 char outBuffer[255];
00105 char inBuffer[255] = "";
00106 char inChar[1];
00107 char gpio_map[6] = "00000";
00108 void execute_com1_cmd()
00109 {
00110     inBuffer[strlen(inBuffer)-1] = 0;
00111          if(startsWith("SET GPIO1_IN",inBuffer)){ MYPIO_0.input(); gpio_map[0] = '1'; }
00112     else if(startsWith("SET GPIO2_IN",inBuffer)){ MYPIO_1.input(); gpio_map[1] = '1';}
00113     else if(startsWith("SET GPIO3_IN",inBuffer)){ MYPIO_2.input(); gpio_map[2] = '1';}
00114     else if(startsWith("SET GPIO4_IN",inBuffer)){ MYPIO_3.input(); gpio_map[3] = '1';}
00115     else if(startsWith("SET GPIO5_IN",inBuffer)){ MYPIO_4.input(); gpio_map[4] = '1';}
00116     else if(startsWith("SET GPIO1_OUT",inBuffer)){ MYPIO_0.output(); gpio_map[0] = '0';}
00117     else if(startsWith("SET GPIO2_OUT",inBuffer)){ MYPIO_1.output(); gpio_map[1] = '0';}
00118     else if(startsWith("SET GPIO3_OUT",inBuffer)){ MYPIO_2.output(); gpio_map[2] = '0';}
00119     else if(startsWith("SET GPIO4_OUT",inBuffer)){ MYPIO_3.output(); gpio_map[3] = '0';}
00120     else if(startsWith("SET GPIO5_OUT",inBuffer)){ MYPIO_4.output(); gpio_map[4] = '0';}
00121     else if(startsWith("SET GPIO1 1",inBuffer)){ MYPIO_0.write(1); }
00122     else if(startsWith("SET GPIO1 0",inBuffer)){ MYPIO_0.write(0); }
00123     else if(startsWith("SET GPIO2 1",inBuffer)){ MYPIO_1.write(1); }
00124     else if(startsWith("SET GPIO2 0",inBuffer)){ MYPIO_1.write(0); }
00125     else if(startsWith("SET GPIO3 1",inBuffer)){ MYPIO_2.write(1); }
00126     else if(startsWith("SET GPIO3 0",inBuffer)){ MYPIO_2.write(0); }
00127     else if(startsWith("SET GPIO4 1",inBuffer)){ MYPIO_3.write(1); }
00128     else if(startsWith("SET GPIO4 0",inBuffer)){ MYPIO_3.write(0); }    
00129     else if(startsWith("SET GPIO5 1",inBuffer)){ MYPIO_4.write(1); }
00130     else if(startsWith("SET GPIO5 0",inBuffer)){ MYPIO_4.write(0); }    
00131     else if(startsWith("GET GPIO1",inBuffer)){ sprintf(outBuffer,"%d\r\n",MYPIO_0.read()); pc.write(outBuffer,strlen(outBuffer)); }
00132     else if(startsWith("GET GPIO2",inBuffer)){ sprintf(outBuffer,"%d\r\n",MYPIO_1.read()); pc.write(outBuffer,strlen(outBuffer)); }
00133     else if(startsWith("GET GPIO3",inBuffer)){ sprintf(outBuffer,"%d\r\n",MYPIO_2.read()); pc.write(outBuffer,strlen(outBuffer)); }
00134     else if(startsWith("GET GPIO4",inBuffer)){ sprintf(outBuffer,"%d\r\n",MYPIO_3.read()); pc.write(outBuffer,strlen(outBuffer)); }
00135     else if(startsWith("GET GPIO5",inBuffer)){ sprintf(outBuffer,"%d\r\n",MYPIO_4.read()); pc.write(outBuffer,strlen(outBuffer)); }
00136     else if(startsWith("GET GPIO_MAP",inBuffer)){ sprintf(outBuffer,"%s\r\n",gpio_map); pc.write(outBuffer,strlen(outBuffer)); } 
00137     else if(startsWith("GET ADC0",inBuffer)){ sprintf(outBuffer,"%s\r\n",print_double(strAdc,Analog_0*3.3,4)); pc.write(outBuffer,strlen(outBuffer)); }
00138     else if(startsWith("GET ADC1",inBuffer)){ sprintf(outBuffer,"%s\r\n",print_double(strAdc,Analog_1*3.3,4)); pc.write(outBuffer,strlen(outBuffer));}
00139     else if(startsWith("SET LED 1",inBuffer)){ LED_FAB.write(1); }    
00140     else if(startsWith("SET LED 0",inBuffer)){ LED_FAB.write(0); } 
00141 }
00142 
00143 
00144 
00145 int main()
00146 {
00147     // Initialise the digital pin LED1 as an output
00148     MYPIO_0.output();   MYPIO_0 = 0;
00149     MYPIO_1.output();   MYPIO_1 = 0;
00150     MYPIO_2.output();   MYPIO_2 = 0;
00151     MYPIO_3.output();   MYPIO_3 = 0;
00152     MYPIO_4.output();   MYPIO_4 = 0;
00153     LED_FAB = 1;
00154     while (true) {
00155         //led = !led;
00156         /*
00157         while(pc.readable())
00158         {
00159             pc.read(inChar,1);
00160             if(inChar[0] == '\n')
00161             {
00162                 execute_com1_cmd();
00163                 sprintf(inBuffer,"");
00164             }
00165             else{
00166                 sprintf(inBuffer,"%s%c",inBuffer,inChar[0]);
00167             }
00168             //pc.write(inBuffer,strlen(inBuffer));
00169         }
00170         */
00171         thread_sleep_for(1000);
00172         LED_FAB = !LED_FAB;
00173         GREEN_LED =!GREEN_LED;
00174     }
00175 }