Yaroslav Barabanov
/
turret_2017
для управления турелью
uart.cpp@3:e47c0c98f515, 2017-01-19 (annotated)
- Committer:
- Yar
- Date:
- Thu Jan 19 05:22:19 2017 +0000
- Revision:
- 3:e47c0c98f515
- Parent:
- 2:a9d63ae515ad
MPU6050
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Yar | 0:690effcc5be0 | 1 | #include "uart.hpp" |
Yar | 0:690effcc5be0 | 2 | #include "mbed.h" |
Yar | 3:e47c0c98f515 | 3 | //#include "rtos.h" |
Yar | 0:690effcc5be0 | 4 | #include <string> |
Yar | 0:690effcc5be0 | 5 | #include <stdlib.h> |
Yar | 3:e47c0c98f515 | 6 | #include "main.hpp" |
Yar | 0:690effcc5be0 | 7 | #include "servo.hpp" |
Yar | 0:690effcc5be0 | 8 | #include "gun.hpp" |
Yar | 3:e47c0c98f515 | 9 | #include "led_color.hpp" |
Yar | 3:e47c0c98f515 | 10 | |
Yar | 3:e47c0c98f515 | 11 | StateLed UartStateLed; |
Yar | 0:690effcc5be0 | 12 | |
Yar | 0:690effcc5be0 | 13 | using namespace std; |
Yar | 0:690effcc5be0 | 14 | // скорость UART |
Yar | 3:e47c0c98f515 | 15 | const int baudRate = UART_BAUDRATE; |
Yar | 0:690effcc5be0 | 16 | // время обновления UART |
Yar | 0:690effcc5be0 | 17 | const int uartDelay = 10; |
Yar | 2:a9d63ae515ad | 18 | //const int servoDigit = 10; |
Yar | 0:690effcc5be0 | 19 | |
Yar | 3:e47c0c98f515 | 20 | Serial pc(PIN_UART_TX, PIN_UART_RX, baudRate); |
Yar | 3:e47c0c98f515 | 21 | /* |
Yar | 0:690effcc5be0 | 22 | void uartThread(void const *argument) { |
Yar | 0:690effcc5be0 | 23 | while (true) { |
Yar | 3:e47c0c98f515 | 24 | //Thread::wait(uartDelay); |
Yar | 0:690effcc5be0 | 25 | string inputData = ""; |
Yar | 0:690effcc5be0 | 26 | if (pc.readable() > 0) { |
Yar | 0:690effcc5be0 | 27 | while(true) { |
Yar | 0:690effcc5be0 | 28 | char p = pc.getc(); |
Yar | 0:690effcc5be0 | 29 | inputData = inputData + p; |
Yar | 0:690effcc5be0 | 30 | if(p == '\n' || p == '\r') { |
Yar | 0:690effcc5be0 | 31 | pc.printf("\n"); |
Yar | 0:690effcc5be0 | 32 | pc.printf(inputData.c_str()); |
Yar | 0:690effcc5be0 | 33 | pc.printf("\n"); |
Yar | 0:690effcc5be0 | 34 | break; |
Yar | 0:690effcc5be0 | 35 | } // if |
Yar | 0:690effcc5be0 | 36 | } // while |
Yar | 3:e47c0c98f515 | 37 | if (inputData.length() > 3) |
Yar | 0:690effcc5be0 | 38 | if (inputData.substr(0, 3) == "get") { |
Yar | 0:690effcc5be0 | 39 | pc.printf("servo 0 %f\n", getServoAngle(0)); |
Yar | 0:690effcc5be0 | 40 | pc.printf("servo 1 %d\n", getServoAngle(1)); |
Yar | 0:690effcc5be0 | 41 | } else |
Yar | 2:a9d63ae515ad | 42 | if (inputData.substr(0, 3) == "set" && inputData.length() > 13) { |
Yar | 0:690effcc5be0 | 43 | char* pEnd; |
Yar | 0:690effcc5be0 | 44 | double servoOne, servoTwo; |
Yar | 0:690effcc5be0 | 45 | // строка с командой |
Yar | 0:690effcc5be0 | 46 | string setdata = inputData.substr(0, 13); |
Yar | 0:690effcc5be0 | 47 | // строка с числом |
Yar | 0:690effcc5be0 | 48 | string numer = inputData.substr(14, inputData.length()); |
Yar | 0:690effcc5be0 | 49 | if (setdata == "set all angle") { |
Yar | 0:690effcc5be0 | 50 | servoOne = strtod(numer.c_str(), &pEnd); |
Yar | 0:690effcc5be0 | 51 | servoTwo = strtod(pEnd, NULL); |
Yar | 0:690effcc5be0 | 52 | setServoAngle(servoOne, 0); |
Yar | 0:690effcc5be0 | 53 | setServoAngle(servoTwo, 1); |
Yar | 0:690effcc5be0 | 54 | } else |
Yar | 0:690effcc5be0 | 55 | if (setdata == "set all speed") { |
Yar | 0:690effcc5be0 | 56 | servoOne = strtod(numer.c_str(), &pEnd); |
Yar | 0:690effcc5be0 | 57 | servoTwo = strtod(pEnd, NULL); |
Yar | 0:690effcc5be0 | 58 | setServoSpeed(servoOne, 0); |
Yar | 0:690effcc5be0 | 59 | setServoSpeed(servoTwo, 1); |
Yar | 0:690effcc5be0 | 60 | } else |
Yar | 0:690effcc5be0 | 61 | if (setdata == "set one speed") { |
Yar | 0:690effcc5be0 | 62 | servoOne = strtod(numer.c_str(), NULL); |
Yar | 0:690effcc5be0 | 63 | setServoSpeed(servoOne, 0); |
Yar | 0:690effcc5be0 | 64 | } else |
Yar | 0:690effcc5be0 | 65 | if (setdata == "set two speed") { |
Yar | 0:690effcc5be0 | 66 | servoTwo = strtod(numer.c_str(), NULL); |
Yar | 0:690effcc5be0 | 67 | setServoSpeed(servoTwo, 1); |
Yar | 0:690effcc5be0 | 68 | } else |
Yar | 0:690effcc5be0 | 69 | if (setdata == "set one angle") { |
Yar | 0:690effcc5be0 | 70 | servoOne = strtod(numer.c_str(), NULL); |
Yar | 0:690effcc5be0 | 71 | setServoAngle(servoOne, 0); |
Yar | 0:690effcc5be0 | 72 | } else |
Yar | 0:690effcc5be0 | 73 | if (setdata == "set two angle") { |
Yar | 0:690effcc5be0 | 74 | servoTwo = strtod(numer.c_str(), NULL); |
Yar | 0:690effcc5be0 | 75 | setServoAngle(servoTwo, 1); |
Yar | 0:690effcc5be0 | 76 | } |
Yar | 0:690effcc5be0 | 77 | } else |
Yar | 3:e47c0c98f515 | 78 | if (inputData.length() >= 4 && inputData.substr(0, 4) == "shot") { |
Yar | 0:690effcc5be0 | 79 | shotGun(); |
Yar | 0:690effcc5be0 | 80 | } else |
Yar | 3:e47c0c98f515 | 81 | if (inputData.length() >= 6 && inputData.substr(0, 6) == "gun on") { |
Yar | 0:690effcc5be0 | 82 | enabledGun(); |
Yar | 0:690effcc5be0 | 83 | } else |
Yar | 3:e47c0c98f515 | 84 | if (inputData.length() >= 7 && inputData.substr(0, 7) == "gun off") { |
Yar | 0:690effcc5be0 | 85 | disabledGun(); |
Yar | 3:e47c0c98f515 | 86 | } else |
Yar | 3:e47c0c98f515 | 87 | if (inputData.length() >= 7 && inputData.substr(0, 7) == "led red") { |
Yar | 3:e47c0c98f515 | 88 | UartStateLed.setLedRed(); |
Yar | 3:e47c0c98f515 | 89 | } else |
Yar | 3:e47c0c98f515 | 90 | if (inputData.length() >= 9 && inputData.substr(0, 9) == "led green") { |
Yar | 3:e47c0c98f515 | 91 | UartStateLed.setLedRed(); |
Yar | 3:e47c0c98f515 | 92 | } else |
Yar | 3:e47c0c98f515 | 93 | if (inputData.length() >= 8 && inputData.substr(0, 8) == "led blue") { |
Yar | 3:e47c0c98f515 | 94 | UartStateLed.setLedRed(); |
Yar | 3:e47c0c98f515 | 95 | } else |
Yar | 3:e47c0c98f515 | 96 | if (inputData.length() >= 8 && inputData.substr(0, 8) == "led null") { |
Yar | 3:e47c0c98f515 | 97 | UartStateLed.setLedNull(); |
Yar | 3:e47c0c98f515 | 98 | } else |
Yar | 3:e47c0c98f515 | 99 | if (inputData.length() >= 9 && inputData.substr(0, 9) == "led white") { |
Yar | 3:e47c0c98f515 | 100 | UartStateLed.setLedRed(); |
Yar | 0:690effcc5be0 | 101 | } |
Yar | 0:690effcc5be0 | 102 | } // if |
Yar | 0:690effcc5be0 | 103 | while(pc.readable() > 0) { |
Yar | 0:690effcc5be0 | 104 | char p = pc.getc(); |
Yar | 0:690effcc5be0 | 105 | } |
Yar | 0:690effcc5be0 | 106 | } |
Yar | 3:e47c0c98f515 | 107 | } |
Yar | 3:e47c0c98f515 | 108 | */ |
Yar | 3:e47c0c98f515 | 109 | |
Yar | 3:e47c0c98f515 | 110 | void uartUpdate(void) { |
Yar | 3:e47c0c98f515 | 111 | string inputData = ""; |
Yar | 3:e47c0c98f515 | 112 | if (pc.readable() > 0) { |
Yar | 3:e47c0c98f515 | 113 | while(true) { |
Yar | 3:e47c0c98f515 | 114 | char p = pc.getc(); |
Yar | 3:e47c0c98f515 | 115 | inputData = inputData + p; |
Yar | 3:e47c0c98f515 | 116 | if(p == '\n' || p == '\r') { |
Yar | 3:e47c0c98f515 | 117 | pc.printf("\n"); |
Yar | 3:e47c0c98f515 | 118 | pc.printf(inputData.c_str()); |
Yar | 3:e47c0c98f515 | 119 | pc.printf("\n"); |
Yar | 3:e47c0c98f515 | 120 | break; |
Yar | 3:e47c0c98f515 | 121 | } // if |
Yar | 3:e47c0c98f515 | 122 | } // while |
Yar | 3:e47c0c98f515 | 123 | if (inputData.length() > 3) |
Yar | 3:e47c0c98f515 | 124 | if (inputData.substr(0, 3) == "get") { |
Yar | 3:e47c0c98f515 | 125 | pc.printf("servo 0 %f\n", getServoAngle(0)); |
Yar | 3:e47c0c98f515 | 126 | pc.printf("servo 1 %d\n", getServoAngle(1)); |
Yar | 3:e47c0c98f515 | 127 | } else |
Yar | 3:e47c0c98f515 | 128 | if (inputData.substr(0, 3) == "set" && inputData.length() > 13) { |
Yar | 3:e47c0c98f515 | 129 | char* pEnd; |
Yar | 3:e47c0c98f515 | 130 | double servoOne, servoTwo; |
Yar | 3:e47c0c98f515 | 131 | // строка с командой |
Yar | 3:e47c0c98f515 | 132 | string setdata = inputData.substr(0, 13); |
Yar | 3:e47c0c98f515 | 133 | // строка с числом |
Yar | 3:e47c0c98f515 | 134 | string numer = inputData.substr(14, inputData.length()); |
Yar | 3:e47c0c98f515 | 135 | if (setdata == "set all angle") { |
Yar | 3:e47c0c98f515 | 136 | servoOne = strtod(numer.c_str(), &pEnd); |
Yar | 3:e47c0c98f515 | 137 | servoTwo = strtod(pEnd, NULL); |
Yar | 3:e47c0c98f515 | 138 | setServoAngle(servoOne, 0); |
Yar | 3:e47c0c98f515 | 139 | setServoAngle(servoTwo, 1); |
Yar | 3:e47c0c98f515 | 140 | } else |
Yar | 3:e47c0c98f515 | 141 | if (setdata == "set all speed") { |
Yar | 3:e47c0c98f515 | 142 | servoOne = strtod(numer.c_str(), &pEnd); |
Yar | 3:e47c0c98f515 | 143 | servoTwo = strtod(pEnd, NULL); |
Yar | 3:e47c0c98f515 | 144 | setServoSpeed(servoOne, 0); |
Yar | 3:e47c0c98f515 | 145 | setServoSpeed(servoTwo, 1); |
Yar | 3:e47c0c98f515 | 146 | } else |
Yar | 3:e47c0c98f515 | 147 | if (setdata == "set one speed") { |
Yar | 3:e47c0c98f515 | 148 | servoOne = strtod(numer.c_str(), NULL); |
Yar | 3:e47c0c98f515 | 149 | setServoSpeed(servoOne, 0); |
Yar | 3:e47c0c98f515 | 150 | } else |
Yar | 3:e47c0c98f515 | 151 | if (setdata == "set two speed") { |
Yar | 3:e47c0c98f515 | 152 | servoTwo = strtod(numer.c_str(), NULL); |
Yar | 3:e47c0c98f515 | 153 | setServoSpeed(servoTwo, 1); |
Yar | 3:e47c0c98f515 | 154 | } else |
Yar | 3:e47c0c98f515 | 155 | if (setdata == "set one angle") { |
Yar | 3:e47c0c98f515 | 156 | servoOne = strtod(numer.c_str(), NULL); |
Yar | 3:e47c0c98f515 | 157 | setServoAngle(servoOne, 0); |
Yar | 3:e47c0c98f515 | 158 | } else |
Yar | 3:e47c0c98f515 | 159 | if (setdata == "set two angle") { |
Yar | 3:e47c0c98f515 | 160 | servoTwo = strtod(numer.c_str(), NULL); |
Yar | 3:e47c0c98f515 | 161 | setServoAngle(servoTwo, 1); |
Yar | 3:e47c0c98f515 | 162 | } |
Yar | 3:e47c0c98f515 | 163 | } else |
Yar | 3:e47c0c98f515 | 164 | if (inputData.length() >= 4 && inputData.substr(0, 4) == "shot") { |
Yar | 3:e47c0c98f515 | 165 | shotGun(); |
Yar | 3:e47c0c98f515 | 166 | } else |
Yar | 3:e47c0c98f515 | 167 | if (inputData.length() >= 6 && inputData.substr(0, 6) == "gun on") { |
Yar | 3:e47c0c98f515 | 168 | enabledGun(); |
Yar | 3:e47c0c98f515 | 169 | } else |
Yar | 3:e47c0c98f515 | 170 | if (inputData.length() >= 7 && inputData.substr(0, 7) == "gun off") { |
Yar | 3:e47c0c98f515 | 171 | disabledGun(); |
Yar | 3:e47c0c98f515 | 172 | } else |
Yar | 3:e47c0c98f515 | 173 | if (inputData.length() >= 7 && inputData.substr(0, 7) == "led red") { |
Yar | 3:e47c0c98f515 | 174 | UartStateLed.setLedRed(); |
Yar | 3:e47c0c98f515 | 175 | } else |
Yar | 3:e47c0c98f515 | 176 | if (inputData.length() >= 9 && inputData.substr(0, 9) == "led green") { |
Yar | 3:e47c0c98f515 | 177 | UartStateLed.setLedRed(); |
Yar | 3:e47c0c98f515 | 178 | } else |
Yar | 3:e47c0c98f515 | 179 | if (inputData.length() >= 8 && inputData.substr(0, 8) == "led blue") { |
Yar | 3:e47c0c98f515 | 180 | UartStateLed.setLedRed(); |
Yar | 3:e47c0c98f515 | 181 | } else |
Yar | 3:e47c0c98f515 | 182 | if (inputData.length() >= 8 && inputData.substr(0, 8) == "led null") { |
Yar | 3:e47c0c98f515 | 183 | UartStateLed.setLedNull(); |
Yar | 3:e47c0c98f515 | 184 | } else |
Yar | 3:e47c0c98f515 | 185 | if (inputData.length() >= 9 && inputData.substr(0, 9) == "led white") { |
Yar | 3:e47c0c98f515 | 186 | UartStateLed.setLedRed(); |
Yar | 3:e47c0c98f515 | 187 | } |
Yar | 3:e47c0c98f515 | 188 | } // if |
Yar | 3:e47c0c98f515 | 189 | while(pc.readable() > 0) { |
Yar | 3:e47c0c98f515 | 190 | char p = pc.getc(); |
Yar | 3:e47c0c98f515 | 191 | } |
Yar | 3:e47c0c98f515 | 192 | //} |
Yar | 0:690effcc5be0 | 193 | } |