Arduino nano и Bluetooth-модуль
- Войдите на сайт для отправки комментариев
Чт, 04/08/2016 - 21:21
Здравствуйте, надеюсь на вашу помощь.
Программа должна принимать строки по "Serial" и обрабатывать их в соответствии с этими самыми строками.
Проблема в том, что по "юсб" и с монитором порта все работает как надо, а при передаче данных по синезубу плата никак не реагирует.
Думал что неправильные данные передаю по синезубу, записал принимаемую строку в еепром, после чего ее вывел, и она была правильной. Так почему же ардуинка не реагирует на принимаемые данные по синезубу?
Часть скетча ардуинки:
void setup() {
Serial.begin(9600);
}
void loop() {
while (Serial.available()) {
delay(1);
if (Serial.available() > 0) {
char c = Serial.read();
readString += c;
}
}
if (readString.length() > 0) {
if (readString.substring(0, 6) == "motion") {
String one;
String two;
String three;
int z = 0;
char m[30];
readString.toCharArray(m, 30);
for (int i = 7; i < 30; i++) {
if (m[i] == ',') {
z++;
}
if (z == 0 && m[i] != ',') {
one += m[i];
}
if (z == 1 && m[i] != ',') {
two += m[i];
}
if (z == 2 && m[i] != ',') {
three += m[i];
}
if (z == 3) {
m[i] = 1;
}
}
motion(one.toInt(), two.toInt(), three.toInt());
readString = "";
}
Опять же повтрорюсь, при подключении через монитор порта все работает как часы, а через блютуз не фурычит :(.
Часть "передающего" строку кода
OutputStream outStream = clientSocket.getOutputStream();
outStream.write(mess.getBytes(Charset.forName("UTF-8")));
где mess - String.
Общий вид строки - simple 0, 0, 0
Если со стандартными прошивками --- скорость поставь 38400.
Вчера тоже дро...лся с этим модулем, но недолго.
Проблема решилась, написал немного другой "обработчик" и все заработало. Мб кому поможет.
String par; bool sb = false; void loop() { if(Serial.available()>0){ do{ char c = Serial.read(); par+=c; if(c == '$' && sb == false){ sb = true; } if(c == '$' && sb == true){ sb = false; pr(); } }while(sb); } }Общий вид строки - $simple string$. Где после второго символа '$' осуществляется переход в функцию "pr()".
void pr(){ char prepar[par.length()]; par.toCharArray(prepar, par.length()); if(par.substring(1, 10)=="setPointB"){ setPointB(); par = ""; } }В функции "pr()" необходимо выполнить операцию par = "".
Все это дело работало на 9600 бодах.