text export

Dependencies:   X_NUCLEO_IKS01A3

main.cpp

Committer:
gpmbed
Date:
2021-05-19
Revision:
9:8c7774aca512
Parent:
6:94151942f287

File content as of revision 9:8c7774aca512:

/* mbed Microcontroller Library
 * Copyright (c) 2019 ARM Limited
 * SPDX-License-Identifier: Apache-2.0
 */

#include "mbed.h"
#include "BufferedSerial.h"
#include "platform/mbed_thread.h"

BufferedSerial      pc(USBTX, USBRX,115200);    //Serial port for debug
BufferedSerial      COM2(PC_12, PD_2,115200);    //Serial port COM2


DigitalInOut MYPIO_0(PA_9); //D8
DigitalInOut MYPIO_1(PC_7); //D9
DigitalInOut MYPIO_2(PB_6); //D10
DigitalInOut MYPIO_3(PA_7); //D11
DigitalInOut MYPIO_4(PA_6); //D12

DigitalOut  LED_FAB(PB_5);
DigitalOut  GREEN_LED(PA_5);
DigitalIn   WATER_DETECT(PB_1); //water detect   0=ok  1=Water

AnalogIn Analog_0(PA_0);
AnalogIn Analog_1(PA_1);
char strAdc[10];

// Blinking rate in milliseconds
#define BLINKING_RATE_MS                                                    500

char cmdParams[10][10];
unsigned char cmdParamsCount = 0;


/* Helper function for printing floats & doubles */
static char *print_double(char *str, double v, int decimalDigits = 2)
{
    int i = 1;
    int intPart, fractPart;
    int len;
    char *ptr;
    uint8_t fracSign = 0; //0 = negativo 1=positivo
    
    if(v<0){ fracSign = 0; }
    else{ fracSign=1; }


    /* prepare decimal digits multiplicator */
    for (; decimalDigits != 0; i *= 10, decimalDigits--);

    /* calculate integer & fractinal parts */
    intPart = abs((int)v);
    fractPart = (int)((v - (double)(int)v) * i);
    fractPart = abs(fractPart);

    /* fill in integer part */
    if(fracSign == 0){ sprintf(str, "-%i.", intPart); }
    else{     sprintf(str, "%i.", intPart); }


    /* prepare fill in of fractional part */
    len = strlen(str);
    ptr = &str[len];

    /* fill in leading fractional zeros */
    for (i /= 10; i > 1; i /= 10, ptr++) {
        if (fractPart >= i) {
            break;
        }
        *ptr = '0';
    }

    /* fill in (rest of) fractional part */
    sprintf(ptr, "%i", fractPart);

    return str;
}


unsigned char splitString(char *textToSplit,const char *delimiter)
{
    cmdParamsCount = 0;
    char * token = strtok(textToSplit,delimiter);
    
    
    while(token != NULL)
    {
        sprintf(cmdParams[cmdParamsCount],"%s",token);    
        token = strtok(NULL, delimiter);
        cmdParamsCount++;
    }
    
    return cmdParamsCount;
}

bool startsWith(const char *pre, const char *str)
{
    size_t lenpre = strlen(pre),
           lenstr = strlen(str);
    return lenstr < lenpre ? false : memcmp(pre, str, lenpre) == 0;
}


char outBuffer[255];
char inBuffer[255] = "";
char inChar[1];
char gpio_map[6] = "00000";
void execute_com1_cmd()
{
    inBuffer[strlen(inBuffer)-1] = 0;
         if(startsWith("SET GPIO1_IN",inBuffer)){ MYPIO_0.input(); gpio_map[0] = '1'; }
    else if(startsWith("SET GPIO2_IN",inBuffer)){ MYPIO_1.input(); gpio_map[1] = '1';}
    else if(startsWith("SET GPIO3_IN",inBuffer)){ MYPIO_2.input(); gpio_map[2] = '1';}
    else if(startsWith("SET GPIO4_IN",inBuffer)){ MYPIO_3.input(); gpio_map[3] = '1';}
    else if(startsWith("SET GPIO5_IN",inBuffer)){ MYPIO_4.input(); gpio_map[4] = '1';}
    else if(startsWith("SET GPIO1_OUT",inBuffer)){ MYPIO_0.output(); gpio_map[0] = '0';}
    else if(startsWith("SET GPIO2_OUT",inBuffer)){ MYPIO_1.output(); gpio_map[1] = '0';}
    else if(startsWith("SET GPIO3_OUT",inBuffer)){ MYPIO_2.output(); gpio_map[2] = '0';}
    else if(startsWith("SET GPIO4_OUT",inBuffer)){ MYPIO_3.output(); gpio_map[3] = '0';}
    else if(startsWith("SET GPIO5_OUT",inBuffer)){ MYPIO_4.output(); gpio_map[4] = '0';}
    else if(startsWith("SET GPIO1 1",inBuffer)){ MYPIO_0.write(1); }
    else if(startsWith("SET GPIO1 0",inBuffer)){ MYPIO_0.write(0); }
    else if(startsWith("SET GPIO2 1",inBuffer)){ MYPIO_1.write(1); }
    else if(startsWith("SET GPIO2 0",inBuffer)){ MYPIO_1.write(0); }
    else if(startsWith("SET GPIO3 1",inBuffer)){ MYPIO_2.write(1); }
    else if(startsWith("SET GPIO3 0",inBuffer)){ MYPIO_2.write(0); }
    else if(startsWith("SET GPIO4 1",inBuffer)){ MYPIO_3.write(1); }
    else if(startsWith("SET GPIO4 0",inBuffer)){ MYPIO_3.write(0); }    
    else if(startsWith("SET GPIO5 1",inBuffer)){ MYPIO_4.write(1); }
    else if(startsWith("SET GPIO5 0",inBuffer)){ MYPIO_4.write(0); }    
    else if(startsWith("GET GPIO1",inBuffer)){ sprintf(outBuffer,"%d\r\n",MYPIO_0.read()); pc.write(outBuffer,strlen(outBuffer)); }
    else if(startsWith("GET GPIO2",inBuffer)){ sprintf(outBuffer,"%d\r\n",MYPIO_1.read()); pc.write(outBuffer,strlen(outBuffer)); }
    else if(startsWith("GET GPIO3",inBuffer)){ sprintf(outBuffer,"%d\r\n",MYPIO_2.read()); pc.write(outBuffer,strlen(outBuffer)); }
    else if(startsWith("GET GPIO4",inBuffer)){ sprintf(outBuffer,"%d\r\n",MYPIO_3.read()); pc.write(outBuffer,strlen(outBuffer)); }
    else if(startsWith("GET GPIO5",inBuffer)){ sprintf(outBuffer,"%d\r\n",MYPIO_4.read()); pc.write(outBuffer,strlen(outBuffer)); }
    else if(startsWith("GET GPIO_MAP",inBuffer)){ sprintf(outBuffer,"%s\r\n",gpio_map); pc.write(outBuffer,strlen(outBuffer)); } 
    else if(startsWith("GET ADC0",inBuffer)){ sprintf(outBuffer,"%s\r\n",print_double(strAdc,Analog_0*3.3,4)); pc.write(outBuffer,strlen(outBuffer)); }
    else if(startsWith("GET ADC1",inBuffer)){ sprintf(outBuffer,"%s\r\n",print_double(strAdc,Analog_1*3.3,4)); pc.write(outBuffer,strlen(outBuffer));}
    else if(startsWith("SET LED 1",inBuffer)){ LED_FAB.write(1); }    
    else if(startsWith("SET LED 0",inBuffer)){ LED_FAB.write(0); } 
}



int main()
{
    // Initialise the digital pin LED1 as an output
    MYPIO_0.output();   MYPIO_0 = 0;
    MYPIO_1.output();   MYPIO_1 = 0;
    MYPIO_2.output();   MYPIO_2 = 0;
    MYPIO_3.output();   MYPIO_3 = 0;
    MYPIO_4.output();   MYPIO_4 = 0;
    LED_FAB = 1;
    while (true) {
        //led = !led;
        /*
        while(pc.readable())
        {
            pc.read(inChar,1);
            if(inChar[0] == '\n')
            {
                execute_com1_cmd();
                sprintf(inBuffer,"");
            }
            else{
                sprintf(inBuffer,"%s%c",inBuffer,inChar[0]);
            }
            //pc.write(inBuffer,strlen(inBuffer));
        }
        */
        thread_sleep_for(1000);
        LED_FAB = !LED_FAB;
        GREEN_LED =!GREEN_LED;
    }
}