для управления турелью

Dependencies:   mbed

Committer:
Yar
Date:
Thu Jan 19 05:22:19 2017 +0000
Revision:
3:e47c0c98f515
Parent:
2:a9d63ae515ad
MPU6050

Who changed what in which revision?

UserRevisionLine numberNew 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 }