text export
Dependencies: X_NUCLEO_IKS01A3
main.cpp@9:8c7774aca512, 2021-05-19 (annotated)
- Committer:
- gpmbed
- Date:
- Wed May 19 15:54:08 2021 +0000
- Revision:
- 9:8c7774aca512
- Parent:
- 6:94151942f287
test export
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
gpmbed | 9:8c7774aca512 | 1 | /* mbed Microcontroller Library |
gpmbed | 9:8c7774aca512 | 2 | * Copyright (c) 2019 ARM Limited |
gpmbed | 9:8c7774aca512 | 3 | * SPDX-License-Identifier: Apache-2.0 |
gpmbed | 9:8c7774aca512 | 4 | */ |
gpmbed | 9:8c7774aca512 | 5 | |
gpmbed | 9:8c7774aca512 | 6 | #include "mbed.h" |
gpmbed | 9:8c7774aca512 | 7 | #include "BufferedSerial.h" |
gpmbed | 9:8c7774aca512 | 8 | #include "platform/mbed_thread.h" |
gpmbed | 9:8c7774aca512 | 9 | |
gpmbed | 9:8c7774aca512 | 10 | BufferedSerial pc(USBTX, USBRX,115200); //Serial port for debug |
gpmbed | 9:8c7774aca512 | 11 | BufferedSerial COM2(PC_12, PD_2,115200); //Serial port COM2 |
gpmbed | 9:8c7774aca512 | 12 | |
cparata | 0:535249dc4bf5 | 13 | |
gpmbed | 9:8c7774aca512 | 14 | DigitalInOut MYPIO_0(PA_9); //D8 |
gpmbed | 9:8c7774aca512 | 15 | DigitalInOut MYPIO_1(PC_7); //D9 |
gpmbed | 9:8c7774aca512 | 16 | DigitalInOut MYPIO_2(PB_6); //D10 |
gpmbed | 9:8c7774aca512 | 17 | DigitalInOut MYPIO_3(PA_7); //D11 |
gpmbed | 9:8c7774aca512 | 18 | DigitalInOut MYPIO_4(PA_6); //D12 |
cparata | 0:535249dc4bf5 | 19 | |
gpmbed | 9:8c7774aca512 | 20 | DigitalOut LED_FAB(PB_5); |
gpmbed | 9:8c7774aca512 | 21 | DigitalOut GREEN_LED(PA_5); |
gpmbed | 9:8c7774aca512 | 22 | DigitalIn WATER_DETECT(PB_1); //water detect 0=ok 1=Water |
cparata | 0:535249dc4bf5 | 23 | |
gpmbed | 9:8c7774aca512 | 24 | AnalogIn Analog_0(PA_0); |
gpmbed | 9:8c7774aca512 | 25 | AnalogIn Analog_1(PA_1); |
gpmbed | 9:8c7774aca512 | 26 | char strAdc[10]; |
gpmbed | 9:8c7774aca512 | 27 | |
gpmbed | 9:8c7774aca512 | 28 | // Blinking rate in milliseconds |
gpmbed | 9:8c7774aca512 | 29 | #define BLINKING_RATE_MS 500 |
gpmbed | 9:8c7774aca512 | 30 | |
gpmbed | 9:8c7774aca512 | 31 | char cmdParams[10][10]; |
gpmbed | 9:8c7774aca512 | 32 | unsigned char cmdParamsCount = 0; |
gpmbed | 9:8c7774aca512 | 33 | |
cparata | 0:535249dc4bf5 | 34 | |
cparata | 0:535249dc4bf5 | 35 | /* Helper function for printing floats & doubles */ |
cparata | 5:7c883cce2bc4 | 36 | static char *print_double(char *str, double v, int decimalDigits = 2) |
cparata | 0:535249dc4bf5 | 37 | { |
cparata | 5:7c883cce2bc4 | 38 | int i = 1; |
cparata | 5:7c883cce2bc4 | 39 | int intPart, fractPart; |
cparata | 5:7c883cce2bc4 | 40 | int len; |
cparata | 5:7c883cce2bc4 | 41 | char *ptr; |
gpmbed | 9:8c7774aca512 | 42 | uint8_t fracSign = 0; //0 = negativo 1=positivo |
gpmbed | 9:8c7774aca512 | 43 | |
gpmbed | 9:8c7774aca512 | 44 | if(v<0){ fracSign = 0; } |
gpmbed | 9:8c7774aca512 | 45 | else{ fracSign=1; } |
gpmbed | 9:8c7774aca512 | 46 | |
cparata | 0:535249dc4bf5 | 47 | |
cparata | 5:7c883cce2bc4 | 48 | /* prepare decimal digits multiplicator */ |
cparata | 5:7c883cce2bc4 | 49 | for (; decimalDigits != 0; i *= 10, decimalDigits--); |
cparata | 0:535249dc4bf5 | 50 | |
cparata | 5:7c883cce2bc4 | 51 | /* calculate integer & fractinal parts */ |
gpmbed | 9:8c7774aca512 | 52 | intPart = abs((int)v); |
cparata | 5:7c883cce2bc4 | 53 | fractPart = (int)((v - (double)(int)v) * i); |
gpmbed | 9:8c7774aca512 | 54 | fractPart = abs(fractPart); |
cparata | 0:535249dc4bf5 | 55 | |
cparata | 5:7c883cce2bc4 | 56 | /* fill in integer part */ |
gpmbed | 9:8c7774aca512 | 57 | if(fracSign == 0){ sprintf(str, "-%i.", intPart); } |
gpmbed | 9:8c7774aca512 | 58 | else{ sprintf(str, "%i.", intPart); } |
gpmbed | 9:8c7774aca512 | 59 | |
cparata | 0:535249dc4bf5 | 60 | |
cparata | 5:7c883cce2bc4 | 61 | /* prepare fill in of fractional part */ |
cparata | 5:7c883cce2bc4 | 62 | len = strlen(str); |
cparata | 5:7c883cce2bc4 | 63 | ptr = &str[len]; |
cparata | 0:535249dc4bf5 | 64 | |
cparata | 5:7c883cce2bc4 | 65 | /* fill in leading fractional zeros */ |
cparata | 5:7c883cce2bc4 | 66 | for (i /= 10; i > 1; i /= 10, ptr++) { |
cparata | 5:7c883cce2bc4 | 67 | if (fractPart >= i) { |
cparata | 5:7c883cce2bc4 | 68 | break; |
cparata | 5:7c883cce2bc4 | 69 | } |
cparata | 5:7c883cce2bc4 | 70 | *ptr = '0'; |
cparata | 0:535249dc4bf5 | 71 | } |
cparata | 0:535249dc4bf5 | 72 | |
cparata | 5:7c883cce2bc4 | 73 | /* fill in (rest of) fractional part */ |
cparata | 5:7c883cce2bc4 | 74 | sprintf(ptr, "%i", fractPart); |
cparata | 0:535249dc4bf5 | 75 | |
cparata | 5:7c883cce2bc4 | 76 | return str; |
cparata | 0:535249dc4bf5 | 77 | } |
cparata | 0:535249dc4bf5 | 78 | |
gpmbed | 9:8c7774aca512 | 79 | |
gpmbed | 9:8c7774aca512 | 80 | unsigned char splitString(char *textToSplit,const char *delimiter) |
gpmbed | 9:8c7774aca512 | 81 | { |
gpmbed | 9:8c7774aca512 | 82 | cmdParamsCount = 0; |
gpmbed | 9:8c7774aca512 | 83 | char * token = strtok(textToSplit,delimiter); |
gpmbed | 9:8c7774aca512 | 84 | |
gpmbed | 9:8c7774aca512 | 85 | |
gpmbed | 9:8c7774aca512 | 86 | while(token != NULL) |
gpmbed | 9:8c7774aca512 | 87 | { |
gpmbed | 9:8c7774aca512 | 88 | sprintf(cmdParams[cmdParamsCount],"%s",token); |
gpmbed | 9:8c7774aca512 | 89 | token = strtok(NULL, delimiter); |
gpmbed | 9:8c7774aca512 | 90 | cmdParamsCount++; |
gpmbed | 9:8c7774aca512 | 91 | } |
gpmbed | 9:8c7774aca512 | 92 | |
gpmbed | 9:8c7774aca512 | 93 | return cmdParamsCount; |
gpmbed | 9:8c7774aca512 | 94 | } |
gpmbed | 9:8c7774aca512 | 95 | |
gpmbed | 9:8c7774aca512 | 96 | bool startsWith(const char *pre, const char *str) |
gpmbed | 9:8c7774aca512 | 97 | { |
gpmbed | 9:8c7774aca512 | 98 | size_t lenpre = strlen(pre), |
gpmbed | 9:8c7774aca512 | 99 | lenstr = strlen(str); |
gpmbed | 9:8c7774aca512 | 100 | return lenstr < lenpre ? false : memcmp(pre, str, lenpre) == 0; |
gpmbed | 9:8c7774aca512 | 101 | } |
gpmbed | 9:8c7774aca512 | 102 | |
gpmbed | 9:8c7774aca512 | 103 | |
gpmbed | 9:8c7774aca512 | 104 | char outBuffer[255]; |
gpmbed | 9:8c7774aca512 | 105 | char inBuffer[255] = ""; |
gpmbed | 9:8c7774aca512 | 106 | char inChar[1]; |
gpmbed | 9:8c7774aca512 | 107 | char gpio_map[6] = "00000"; |
gpmbed | 9:8c7774aca512 | 108 | void execute_com1_cmd() |
gpmbed | 9:8c7774aca512 | 109 | { |
gpmbed | 9:8c7774aca512 | 110 | inBuffer[strlen(inBuffer)-1] = 0; |
gpmbed | 9:8c7774aca512 | 111 | if(startsWith("SET GPIO1_IN",inBuffer)){ MYPIO_0.input(); gpio_map[0] = '1'; } |
gpmbed | 9:8c7774aca512 | 112 | else if(startsWith("SET GPIO2_IN",inBuffer)){ MYPIO_1.input(); gpio_map[1] = '1';} |
gpmbed | 9:8c7774aca512 | 113 | else if(startsWith("SET GPIO3_IN",inBuffer)){ MYPIO_2.input(); gpio_map[2] = '1';} |
gpmbed | 9:8c7774aca512 | 114 | else if(startsWith("SET GPIO4_IN",inBuffer)){ MYPIO_3.input(); gpio_map[3] = '1';} |
gpmbed | 9:8c7774aca512 | 115 | else if(startsWith("SET GPIO5_IN",inBuffer)){ MYPIO_4.input(); gpio_map[4] = '1';} |
gpmbed | 9:8c7774aca512 | 116 | else if(startsWith("SET GPIO1_OUT",inBuffer)){ MYPIO_0.output(); gpio_map[0] = '0';} |
gpmbed | 9:8c7774aca512 | 117 | else if(startsWith("SET GPIO2_OUT",inBuffer)){ MYPIO_1.output(); gpio_map[1] = '0';} |
gpmbed | 9:8c7774aca512 | 118 | else if(startsWith("SET GPIO3_OUT",inBuffer)){ MYPIO_2.output(); gpio_map[2] = '0';} |
gpmbed | 9:8c7774aca512 | 119 | else if(startsWith("SET GPIO4_OUT",inBuffer)){ MYPIO_3.output(); gpio_map[3] = '0';} |
gpmbed | 9:8c7774aca512 | 120 | else if(startsWith("SET GPIO5_OUT",inBuffer)){ MYPIO_4.output(); gpio_map[4] = '0';} |
gpmbed | 9:8c7774aca512 | 121 | else if(startsWith("SET GPIO1 1",inBuffer)){ MYPIO_0.write(1); } |
gpmbed | 9:8c7774aca512 | 122 | else if(startsWith("SET GPIO1 0",inBuffer)){ MYPIO_0.write(0); } |
gpmbed | 9:8c7774aca512 | 123 | else if(startsWith("SET GPIO2 1",inBuffer)){ MYPIO_1.write(1); } |
gpmbed | 9:8c7774aca512 | 124 | else if(startsWith("SET GPIO2 0",inBuffer)){ MYPIO_1.write(0); } |
gpmbed | 9:8c7774aca512 | 125 | else if(startsWith("SET GPIO3 1",inBuffer)){ MYPIO_2.write(1); } |
gpmbed | 9:8c7774aca512 | 126 | else if(startsWith("SET GPIO3 0",inBuffer)){ MYPIO_2.write(0); } |
gpmbed | 9:8c7774aca512 | 127 | else if(startsWith("SET GPIO4 1",inBuffer)){ MYPIO_3.write(1); } |
gpmbed | 9:8c7774aca512 | 128 | else if(startsWith("SET GPIO4 0",inBuffer)){ MYPIO_3.write(0); } |
gpmbed | 9:8c7774aca512 | 129 | else if(startsWith("SET GPIO5 1",inBuffer)){ MYPIO_4.write(1); } |
gpmbed | 9:8c7774aca512 | 130 | else if(startsWith("SET GPIO5 0",inBuffer)){ MYPIO_4.write(0); } |
gpmbed | 9:8c7774aca512 | 131 | else if(startsWith("GET GPIO1",inBuffer)){ sprintf(outBuffer,"%d\r\n",MYPIO_0.read()); pc.write(outBuffer,strlen(outBuffer)); } |
gpmbed | 9:8c7774aca512 | 132 | else if(startsWith("GET GPIO2",inBuffer)){ sprintf(outBuffer,"%d\r\n",MYPIO_1.read()); pc.write(outBuffer,strlen(outBuffer)); } |
gpmbed | 9:8c7774aca512 | 133 | else if(startsWith("GET GPIO3",inBuffer)){ sprintf(outBuffer,"%d\r\n",MYPIO_2.read()); pc.write(outBuffer,strlen(outBuffer)); } |
gpmbed | 9:8c7774aca512 | 134 | else if(startsWith("GET GPIO4",inBuffer)){ sprintf(outBuffer,"%d\r\n",MYPIO_3.read()); pc.write(outBuffer,strlen(outBuffer)); } |
gpmbed | 9:8c7774aca512 | 135 | else if(startsWith("GET GPIO5",inBuffer)){ sprintf(outBuffer,"%d\r\n",MYPIO_4.read()); pc.write(outBuffer,strlen(outBuffer)); } |
gpmbed | 9:8c7774aca512 | 136 | else if(startsWith("GET GPIO_MAP",inBuffer)){ sprintf(outBuffer,"%s\r\n",gpio_map); pc.write(outBuffer,strlen(outBuffer)); } |
gpmbed | 9:8c7774aca512 | 137 | else if(startsWith("GET ADC0",inBuffer)){ sprintf(outBuffer,"%s\r\n",print_double(strAdc,Analog_0*3.3,4)); pc.write(outBuffer,strlen(outBuffer)); } |
gpmbed | 9:8c7774aca512 | 138 | else if(startsWith("GET ADC1",inBuffer)){ sprintf(outBuffer,"%s\r\n",print_double(strAdc,Analog_1*3.3,4)); pc.write(outBuffer,strlen(outBuffer));} |
gpmbed | 9:8c7774aca512 | 139 | else if(startsWith("SET LED 1",inBuffer)){ LED_FAB.write(1); } |
gpmbed | 9:8c7774aca512 | 140 | else if(startsWith("SET LED 0",inBuffer)){ LED_FAB.write(0); } |
gpmbed | 9:8c7774aca512 | 141 | } |
gpmbed | 9:8c7774aca512 | 142 | |
gpmbed | 9:8c7774aca512 | 143 | |
gpmbed | 9:8c7774aca512 | 144 | |
cparata | 5:7c883cce2bc4 | 145 | int main() |
cparata | 5:7c883cce2bc4 | 146 | { |
gpmbed | 9:8c7774aca512 | 147 | // Initialise the digital pin LED1 as an output |
gpmbed | 9:8c7774aca512 | 148 | MYPIO_0.output(); MYPIO_0 = 0; |
gpmbed | 9:8c7774aca512 | 149 | MYPIO_1.output(); MYPIO_1 = 0; |
gpmbed | 9:8c7774aca512 | 150 | MYPIO_2.output(); MYPIO_2 = 0; |
gpmbed | 9:8c7774aca512 | 151 | MYPIO_3.output(); MYPIO_3 = 0; |
gpmbed | 9:8c7774aca512 | 152 | MYPIO_4.output(); MYPIO_4 = 0; |
gpmbed | 9:8c7774aca512 | 153 | LED_FAB = 1; |
gpmbed | 9:8c7774aca512 | 154 | while (true) { |
gpmbed | 9:8c7774aca512 | 155 | //led = !led; |
gpmbed | 9:8c7774aca512 | 156 | /* |
gpmbed | 9:8c7774aca512 | 157 | while(pc.readable()) |
gpmbed | 9:8c7774aca512 | 158 | { |
gpmbed | 9:8c7774aca512 | 159 | pc.read(inChar,1); |
gpmbed | 9:8c7774aca512 | 160 | if(inChar[0] == '\n') |
gpmbed | 9:8c7774aca512 | 161 | { |
gpmbed | 9:8c7774aca512 | 162 | execute_com1_cmd(); |
gpmbed | 9:8c7774aca512 | 163 | sprintf(inBuffer,""); |
gpmbed | 9:8c7774aca512 | 164 | } |
gpmbed | 9:8c7774aca512 | 165 | else{ |
gpmbed | 9:8c7774aca512 | 166 | sprintf(inBuffer,"%s%c",inBuffer,inChar[0]); |
gpmbed | 9:8c7774aca512 | 167 | } |
gpmbed | 9:8c7774aca512 | 168 | //pc.write(inBuffer,strlen(inBuffer)); |
gpmbed | 9:8c7774aca512 | 169 | } |
gpmbed | 9:8c7774aca512 | 170 | */ |
gpmbed | 9:8c7774aca512 | 171 | thread_sleep_for(1000); |
gpmbed | 9:8c7774aca512 | 172 | LED_FAB = !LED_FAB; |
gpmbed | 9:8c7774aca512 | 173 | GREEN_LED =!GREEN_LED; |
cparata | 5:7c883cce2bc4 | 174 | } |
cparata | 0:535249dc4bf5 | 175 | } |