Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
uart.cpp
- Committer:
- Yar
- Date:
- 2017-01-19
- Revision:
- 3:e47c0c98f515
- Parent:
- 2:a9d63ae515ad
File content as of revision 3:e47c0c98f515:
#include "uart.hpp"
#include "mbed.h"
//#include "rtos.h"
#include <string>
#include <stdlib.h>
#include "main.hpp"
#include "servo.hpp"
#include "gun.hpp"
#include "led_color.hpp"
StateLed UartStateLed;
using namespace std;
// скорость UART
const int baudRate = UART_BAUDRATE;
// время обновления UART
const int uartDelay = 10;
//const int servoDigit = 10;
Serial pc(PIN_UART_TX, PIN_UART_RX, baudRate);
/*
void uartThread(void const *argument) {
while (true) {
//Thread::wait(uartDelay);
string inputData = "";
if (pc.readable() > 0) {
while(true) {
char p = pc.getc();
inputData = inputData + p;
if(p == '\n' || p == '\r') {
pc.printf("\n");
pc.printf(inputData.c_str());
pc.printf("\n");
break;
} // if
} // while
if (inputData.length() > 3)
if (inputData.substr(0, 3) == "get") {
pc.printf("servo 0 %f\n", getServoAngle(0));
pc.printf("servo 1 %d\n", getServoAngle(1));
} else
if (inputData.substr(0, 3) == "set" && inputData.length() > 13) {
char* pEnd;
double servoOne, servoTwo;
// строка с командой
string setdata = inputData.substr(0, 13);
// строка с числом
string numer = inputData.substr(14, inputData.length());
if (setdata == "set all angle") {
servoOne = strtod(numer.c_str(), &pEnd);
servoTwo = strtod(pEnd, NULL);
setServoAngle(servoOne, 0);
setServoAngle(servoTwo, 1);
} else
if (setdata == "set all speed") {
servoOne = strtod(numer.c_str(), &pEnd);
servoTwo = strtod(pEnd, NULL);
setServoSpeed(servoOne, 0);
setServoSpeed(servoTwo, 1);
} else
if (setdata == "set one speed") {
servoOne = strtod(numer.c_str(), NULL);
setServoSpeed(servoOne, 0);
} else
if (setdata == "set two speed") {
servoTwo = strtod(numer.c_str(), NULL);
setServoSpeed(servoTwo, 1);
} else
if (setdata == "set one angle") {
servoOne = strtod(numer.c_str(), NULL);
setServoAngle(servoOne, 0);
} else
if (setdata == "set two angle") {
servoTwo = strtod(numer.c_str(), NULL);
setServoAngle(servoTwo, 1);
}
} else
if (inputData.length() >= 4 && inputData.substr(0, 4) == "shot") {
shotGun();
} else
if (inputData.length() >= 6 && inputData.substr(0, 6) == "gun on") {
enabledGun();
} else
if (inputData.length() >= 7 && inputData.substr(0, 7) == "gun off") {
disabledGun();
} else
if (inputData.length() >= 7 && inputData.substr(0, 7) == "led red") {
UartStateLed.setLedRed();
} else
if (inputData.length() >= 9 && inputData.substr(0, 9) == "led green") {
UartStateLed.setLedRed();
} else
if (inputData.length() >= 8 && inputData.substr(0, 8) == "led blue") {
UartStateLed.setLedRed();
} else
if (inputData.length() >= 8 && inputData.substr(0, 8) == "led null") {
UartStateLed.setLedNull();
} else
if (inputData.length() >= 9 && inputData.substr(0, 9) == "led white") {
UartStateLed.setLedRed();
}
} // if
while(pc.readable() > 0) {
char p = pc.getc();
}
}
}
*/
void uartUpdate(void) {
string inputData = "";
if (pc.readable() > 0) {
while(true) {
char p = pc.getc();
inputData = inputData + p;
if(p == '\n' || p == '\r') {
pc.printf("\n");
pc.printf(inputData.c_str());
pc.printf("\n");
break;
} // if
} // while
if (inputData.length() > 3)
if (inputData.substr(0, 3) == "get") {
pc.printf("servo 0 %f\n", getServoAngle(0));
pc.printf("servo 1 %d\n", getServoAngle(1));
} else
if (inputData.substr(0, 3) == "set" && inputData.length() > 13) {
char* pEnd;
double servoOne, servoTwo;
// строка с командой
string setdata = inputData.substr(0, 13);
// строка с числом
string numer = inputData.substr(14, inputData.length());
if (setdata == "set all angle") {
servoOne = strtod(numer.c_str(), &pEnd);
servoTwo = strtod(pEnd, NULL);
setServoAngle(servoOne, 0);
setServoAngle(servoTwo, 1);
} else
if (setdata == "set all speed") {
servoOne = strtod(numer.c_str(), &pEnd);
servoTwo = strtod(pEnd, NULL);
setServoSpeed(servoOne, 0);
setServoSpeed(servoTwo, 1);
} else
if (setdata == "set one speed") {
servoOne = strtod(numer.c_str(), NULL);
setServoSpeed(servoOne, 0);
} else
if (setdata == "set two speed") {
servoTwo = strtod(numer.c_str(), NULL);
setServoSpeed(servoTwo, 1);
} else
if (setdata == "set one angle") {
servoOne = strtod(numer.c_str(), NULL);
setServoAngle(servoOne, 0);
} else
if (setdata == "set two angle") {
servoTwo = strtod(numer.c_str(), NULL);
setServoAngle(servoTwo, 1);
}
} else
if (inputData.length() >= 4 && inputData.substr(0, 4) == "shot") {
shotGun();
} else
if (inputData.length() >= 6 && inputData.substr(0, 6) == "gun on") {
enabledGun();
} else
if (inputData.length() >= 7 && inputData.substr(0, 7) == "gun off") {
disabledGun();
} else
if (inputData.length() >= 7 && inputData.substr(0, 7) == "led red") {
UartStateLed.setLedRed();
} else
if (inputData.length() >= 9 && inputData.substr(0, 9) == "led green") {
UartStateLed.setLedRed();
} else
if (inputData.length() >= 8 && inputData.substr(0, 8) == "led blue") {
UartStateLed.setLedRed();
} else
if (inputData.length() >= 8 && inputData.substr(0, 8) == "led null") {
UartStateLed.setLedNull();
} else
if (inputData.length() >= 9 && inputData.substr(0, 9) == "led white") {
UartStateLed.setLedRed();
}
} // if
while(pc.readable() > 0) {
char p = pc.getc();
}
//}
}