Добрый день, не как не могу решить проблему с коннектом блютуза и ардуино. Проблема в следующем: Если подключить ардуино к ПК то через терминал команды принимает и меняет значения как надо, но если я отключаю от ПК и подключаю к повербанку и пытаюсь подключиться через блютуз то только работает чтение а запись нет. Заливал другой скетч, все нормально модуль рабочий принимает и отправляет а в этом нет. Скетч не мой а взят с 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; } } } }
1)Зачем 2 раза написана команда Serial.begin(9600);? 2)Питайте через пин VIN или гнездо питание, скорее всего проблема исчезнет.