Arduino nano и Bluetooth-модуль

Xarell
Offline
Зарегистрирован: 04.08.2016

Здравствуйте, надеюсь на вашу помощь.

Программа должна принимать строки по "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 

p.masyukov
p.masyukov аватар
Offline
Зарегистрирован: 14.11.2015

Если со стандартными прошивками ---  скорость поставь 38400.

Вчера тоже дро...лся с этим модулем, но недолго.

Xarell
Offline
Зарегистрирован: 04.08.2016

Проблема решилась, написал немного другой "обработчик" и все заработало. Мб кому поможет.

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 бодах.