Не отправляет команды hс-06 (Arduino UNO)

Тема в разделе "Arduino & Shields", создана пользователем novchik, 23 окт 2019.

  1. novchik

    novchik Нуб

    Добрый день, не как не могу решить проблему с коннектом блютуза и ардуино.
    Проблема в следующем: Если подключить ардуино к ПК то через терминал команды принимает и меняет значения как надо, но если я отключаю от ПК и подключаю к повербанку и пытаюсь подключиться через блютуз то только работает чтение а запись нет. Заливал другой скетч, все нормально модуль рабочий принимает и отправляет а в этом нет.
    Скетч не мой а взят с https://www.drive2.ru/l/516106910861100235
    Хозяин просто не отвечает, 2 дня пытаюсь сделать.
    Может я не так отправляю команды? Сделал простое приложение которое отправляет буквы (Q.W.E.R). Приложение от хозяина тоже нет так как ссылка не доступна.

    Код (C++):
    #include <EEPROM.h>
    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>

    // #define BT Serial3
    #define ON 0
    #define OFF !ON
    #define FAULT 5 // погрешность в измерении высоты в %
    #define DEL 100 // время включения реле для надува/спуска давления

    LiquidCrystal_I2C lcd(0x27, 16, 2);

    unsigned long t0 = 0, t1 = 0;
    String inputString = "";
    boolean stringComplete = false;
    int level[4] = {0}, ht[4] = {0}, perm[4] = {0};
    const int col = 4;
    int relpinin[col] = {
      3, 5, 7, 9
    };
    int relpinout[col] = {
      4, 6, 8, 10
    };
    boolean mode = 0, up1 = 0, dw1 = 0, up2 = 0, dw2 = 0, up3 = 0, dw3 = 0, up4 = 0, dw4 = 0, up5 = 0, dw5 = 0, up6 = 0, dw6 = 0;

    void setup () {
      /*EEPROM.write(0, 0);
      EEPROM.write(1, 0);
      EEPROM.write(2, 0);
      EEPROM.write(3, 0);*/

     
      level[0] = EEPROM.read(0);
      level[1] = EEPROM.read(1);
      level[2] = EEPROM.read(2);
      level[3] = EEPROM.read(3);
      Wire.begin();
      inputString.reserve(200);
      Serial.begin(9600);
      Serial.begin(9600);
      Serial.setTimeout(200);
      for (int i = 0; i < col; i++) {
        pinMode(relpinin[i], OUTPUT);
        digitalWrite(relpinin[i], OFF);
      }
      for (int i = 0; i < col; i++) {
        pinMode(relpinout[i], OUTPUT);
        digitalWrite(relpinout[i], OFF);
      }
      lcd.init();
      lcd.backlight();
    }

    void loop () {
     
      serialEvent();
     
      if (millis() - t0 >= 500) {
      ht[0] = map(analogRead(0), 0, 1023, 0, 100);
      ht[1] = map(analogRead(1), 0, 1023, 0, 100);
      ht[2] = map(analogRead(2), 0, 1023, 0, 100);
      ht[3] = map(analogRead(3), 0, 1023, 0, 100);
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print(ht[0]);
        lcd.print("%");
        lcd.setCursor(10, 0);
        lcd.print(ht[1]);
        lcd.print("%");
        lcd.setCursor(0, 1);
        lcd.print(ht[2]);
        lcd.print("%");
        lcd.setCursor(10, 1);
        lcd.print(ht[3]);
        lcd.print("%");Serial.print(ht[0]);Serial.print(" ");
      Serial.print(ht[1]);Serial.print(" ");
      Serial.print(ht[2]);Serial.print(" ");
      Serial.print(ht[3]);Serial.print(" ");
      Serial.print(level[0]);Serial.print(" ");
      Serial.print(level[1]);Serial.print(" ");
      Serial.print(level[2]);Serial.print(" ");
      Serial.print(level[3]);Serial.print(" ");
      Serial.print(perm[0]);Serial.print(" ");
      Serial.print(perm[1]);Serial.print(" ");
      Serial.print(perm[2]);Serial.print(" ");
      Serial.print(perm[3]);Serial.print(" ");
      Serial.println(" ");
        t0 = millis();
      }

      /*Serial.print(ht[0]);Serial.print(" ");
      Serial.print(ht[1]);Serial.print(" ");
      Serial.print(ht[2]);Serial.print(" ");
      Serial.print(ht[3]);Serial.print(" ");
      Serial.print(level[0]);Serial.print(" ");
      Serial.print(level[1]);Serial.print(" ");
      Serial.print(level[2]);Serial.print(" ");
      Serial.print(level[3]);Serial.print(" ");
      Serial.print(perm[0]);Serial.print(" ");
      Serial.print(perm[1]);Serial.print(" ");
      Serial.print(perm[2]);Serial.print(" ");
      Serial.print(perm[3]);Serial.print(" ");
      Serial.println(" ");*/

      for (int i = 0; i < col; i++) {
        if (abs(ht[i] - level[i]) >= FAULT && level[i] > ht[i]) {
          perm[i] = 1;
        } else if (abs(ht[i] - level[i]) >= FAULT && level[i] < ht[i]) {
          perm[i] = -1;
        } else if (abs(ht[i] - level[i]) <= 1) {
          perm[i] = 0;
        }

        if (perm[i] == 0) {
         digitalWrite(relpinin[i], OFF);
         digitalWrite(relpinout[i], OFF);
        } else if (perm[i] == 1) {
         digitalWrite(relpinin[i], ON);
         digitalWrite(relpinout[i], OFF);
        } else if (perm[i] == -1) {
         digitalWrite(relpinin[i], OFF);
         digitalWrite(relpinout[i], ON);
        }
      }

      if (millis() - t1 >= 150) {   // скорость подьема или отпускания
      if (up1) {
        if (level[0] < 100) level[0]++;
        EEPROM.write(0, level[0]);
        if (level[1] < 100) level[1]++;
        EEPROM.write(1, level[1]);
      }
      if (dw1) {
        if (level[0] > 0) level[0]--;
        EEPROM.write(0, level[0]);
        if (level[1] > 0) level[1]--;
        EEPROM.write(1, level[1]);
      }

      if (up2) {
        if (level[2] < 100) level[2]++;
        EEPROM.write(2, level[2]);
        if (level[3] < 100) level[3]++;
        EEPROM.write(3, level[3]);
      }
      if (dw2) {
        if (level[2] > 0) level[2]--;
        EEPROM.write(2, level[2]);
        if (level[3] > 0) level[3]--;
        EEPROM.write(3, level[3]);
      }
     
      if (up3) {
        if (level[0] < 100) level[0]++;
        EEPROM.write(0, level[0]);
      }
      if (dw3) {
        if (level[0] > 0) level[0]--;
        EEPROM.write(0, level[0]);
      }

      if (up4) {
        if (level[1] < 100) level[1]++;
        EEPROM.write(1, level[1]);
      }
      if (dw4) {
        if (level[1] > 0) level[1]--;
        EEPROM.write(1, level[1]);
      }

      if (up5) {
        if (level[2] < 100) level[2]++;
        EEPROM.write(2, level[2]);
      }
      if (dw5) {
        if (level[2] > 0) level[2]--;
        EEPROM.write(2, level[2]);
      }

      if (up6) {
        if (level[3] < 100) level[3]++;
        EEPROM.write(3, level[3]);
      }
      if (dw6) {
        if (level[3] > 0) level[3]--;
        EEPROM.write(3, level[3]);
      }
     
      t1 = millis();
      }

     
      if (stringComplete) {
        String h[4] = {""};
       
        if (inputString.indexOf("A") != -1)      //Перед право
        h[0] = inputString.substring(inputString.indexOf("A") + 1, inputString.indexOf("B"));
        if (inputString.indexOf("B") != -1)     //Перед лево
        h[1] = inputString.substring(inputString.indexOf("B") + 1, inputString.indexOf("C"));
        if (inputString.indexOf("C") != -1)     //Зад Право
        h[2] = inputString.substring(inputString.indexOf("C") + 1, inputString.indexOf("D"));
        if (inputString.indexOf("D") != -1)   // Зад лево
        h[3] = inputString.substring(inputString.indexOf("D") + 1, inputString.length() + 1);

        if (h[0] != "") {
          level[0] = h[0].toInt();
          EEPROM.write(0, level[0]);
        }
        if (h[1] != "") {
          level[1] = h[1].toInt();
          EEPROM.write(1, level[1]);
        }
        if (h[2] != "") {
          level[2] = h[2].toInt();
          EEPROM.write(2, level[2]);
        }
        if (h[3] != "") {
          level[3] = h[3].toInt();
          EEPROM.write(3, level[3]);
        }

        /*if (inputString.indexOf("change") != -1) {
          mode != mode;
        }*/


        if (inputString.indexOf("Q") != -1) {   //Перед контур
          up1 = 1;
        } else if (inputString.indexOf("W") != -1) {  //Задний  вверх
          dw1 = 1;
        } else if (inputString.indexOf("E") != -1) {  //Перед вниз
          up2 = 1;
        } else if (inputString.indexOf("R") != -1) { //Зад вниз
          dw2 = 1;
        } else if (inputString.indexOf("T") != -1) { // перед лево вверх
          up3 = 1;
        } else if (inputString.indexOf("Y") != -1) { // перед лево вниз
          dw3 = 1;
        } else if (inputString.indexOf("U") != -1) { // перед право вверх
          up4 = 1;
        } else if (inputString.indexOf("I") != -1) { // перед право вниз
          dw4 = 1;
        } else if (inputString.indexOf("O") != -1) { // зад лево вверх
          up5 = 1;
        } else if (inputString.indexOf("P") != -1) { // зад лево вниз
          dw5 = 1;
        } else if (inputString.indexOf("F") != -1) { // зад право вверх
          up6 = 1;
        } else if (inputString.indexOf("G") != -1) { // зад право вниз
          dw6 = 1;
        } else if (inputString.indexOf("S") != -1) {
          up1 = 0;
          dw1 = 0;
          up2 = 0;
          dw2 = 0;
          up3 = 0;
          dw3 = 0;
          up4 = 0;
          dw4 = 0;
          up5 = 0;
          dw5 = 0;
          up6 = 0;
          dw6 = 0;
        }
       
        /*if (inputString.indexOf("1") == 0) {
          if (level[0] < 100) level[0]++;
          EEPROM.write(0, level[0]);
          if (level[1] < 100) level[1]++;
          EEPROM.write(1, level[1]);
        } else if (inputString.indexOf("2") == 0) {
          if (level[0] > 0) level[0]--;
          EEPROM.write(0, level[0]);
          if (level[1] > 0) level[1]--;
          EEPROM.write(1, level[1]);
        }

        if (inputString.indexOf("3") == 0) {
          if (level[2] < 100) level[2]++;
          EEPROM.write(2, level[2]);
          if (level[3] < 100) level[3]++;
          EEPROM.write(3, level[3]);
        } else if (inputString.indexOf("4") == 0) {
          if (level[2] > 0) level[2]--;
          EEPROM.write(2, level[2]);
          if (level[3] > 0) level[03]--;
          EEPROM.write(3, level[3]);
        }*/


       
        Serial.println(inputString);
        inputString = "";
        stringComplete = false;
      }
     
     

    }

    void serialEvent() {
      if (Serial.available()) {
      while (Serial.available()) {
        char inChar = (char)Serial.read();
        inputString += inChar;
        if (inChar == '\n') {
          stringComplete = true;
        }
      }
      } else if (Serial.available()) {
      while (Serial.available()) {
        char inChar = (char)Serial.read();
        inputString += inChar;
        if (inChar == '\n') {
          stringComplete = true;
        }
      }
      }
    }
     
  2. ZNN28

    ZNN28 Нуб

    1)Зачем 2 раза написана команда Serial.begin(9600);?
    2)Питайте через пин VIN или гнездо питание, скорее всего проблема исчезнет.
     
  3. parovoZZ

    parovoZZ Гуру

    для надежности. Вдруг на первый раз не отработает))