Ви не увійшли.
Сторінки 1
Есть Arduino проект бегущей строки, я пытаюсь реализовать для него программу для Android. Есть часть основного кода скетча. Код подключения Bluetooth. Но я не знаю какой код нужно написать, чтобы он считывал данные и вносил в настройки приложения на Android и на оборот отправлял настройки на Arduino.
Код Arduino
#define PARSE_AMOUNT 8 // максимальное количество значений в массиве, который хотим получить
#define header '$' // стартовый символ
#define divider ',' // разделительный символ
#define ending ';' // завершающий символ
int intData[PARSE_AMOUNT]; // массив численных значений после парсинга
boolean recievedFlag;
String request = "1234567891011121314151617181920";
boolean getStarted;
byte index;
String string_convert = "";
boolean parseString, getString;
void bluetoothTick() {
parsing(); // функция парсинга
if (recievedFlag) { // если получены данные
recievedFlag = false;
if (getString) {
getString = false;
loadingFlag = true;
thisLength = runningText.length();
showText = true;
updateSettings();
return;
}
switch (intData[0]) {
case 0: // запрос онлайна
request = "OK ";
request += String(random(0, 100));
btSerial.print(request);
break;
case 1: // вкл/выкл
toggleText(intData[1]);
break;
case 2: // скорость
thisSpeed = 110 - intData[1];
scrollTimer.setInterval(thisSpeed);
break;
case 3: // яркость
thisBright = intData[1];
matrix.setIntensity(thisBright);
break;
case 4: // режим
thisMode = intData[1];
break;
case 5: // цвет
thisColor = intData[1];
break;
case 6: // авто
autoFlag = intData[1];
if (autoFlag) showText = true;
break;
}
if (intData[0] > 0) updateSettings();
}
}
void parsing() {
if (btSerial.available() > 0) {
char incomingByte;
if (parseString) {
runningText = "";
runningText = btSerial.readString(); // принимаем всю
incomingByte = ending; // сразу завершаем парс
} else {
incomingByte = btSerial.read(); // обязательно ЧИТАЕМ входящий символ
}
if (getStarted) { // если приняли начальный символ (парсинг разрешён)
if (incomingByte != divider && incomingByte != ending) { // если это не пробел И не конец
string_convert += incomingByte; // складываем в строку
} else { // если это пробел или ; конец пакета
intData[index] = string_convert.toInt(); // преобразуем строку в int и кладём в массив
string_convert = ""; // очищаем строку
index++; // переходим к парсингу следующего элемента массива
}
}
if (incomingByte == header) { // если это $
getStarted = true; // поднимаем флаг, что можно парсить
index = 0; // сбрасываем индекс
string_convert = ""; // очищаем строку
parseString = false;
}
if (incomingByte == '#') { // если это #
getStarted = true; // поднимаем флаг, что можно парсить
index = 0; // сбрасываем индекс
string_convert = ""; // очищаем строку
parseString = true;
getString = true;
}
if (incomingByte == ending) { // если таки приняли ; - конец парсинга
getStarted = false; // сброс
recievedFlag = true; // флаг на принятие
parseString = false;
}
}
}
Код Android
private class ConnectThread extends Thread {
private BluetoothSocket bluetoothSocket = null;
private BluetoothDevice device;
public ConnectThread(BluetoothDevice device) {
try {
Method method = device.getClass().getMethod("createRfcommSocket", new Class[]{int.class});
bluetoothSocket = (BluetoothSocket) method.invoke(device, 1);
this.device = device;
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void run() {
try {
bluetoothSocket.connect();
success = true;
} catch (IOException e) {
e.printStackTrace();
runOnUiThread(new Runnable() {
@Override
public void run() {
mProgressDialog.dismiss();
Toast.makeText(MainActivity.this, "Не могу соединиться!", Toast.LENGTH_SHORT).show();
}
});
cancel();
}
if (success) {
connectedThread = new ConnectedThread(bluetoothSocket);
connectedThread.start();
runOnUiThread(new Runnable() {
@Override
public void run() {
showFrameDeviceControls();
txtDeviceConnectedName.setText(device.getName());
txtDeviceConnectedName.setTextColor(getResources().getColor(R.color.colorGreen));
}
});
}
}
public boolean isConnect() {
return bluetoothSocket.isConnected();
}
public void cancel() {
try {
bluetoothSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
private class ConnectedThread extends Thread {
private final InputStream inputStream;
private final OutputStream outputStream;
public ConnectedThread(BluetoothSocket bluetoothSocket) {
InputStream inputStream = null;
OutputStream outputStream = null;
try {
inputStream = bluetoothSocket.getInputStream();
outputStream = bluetoothSocket.getOutputStream();
} catch (IOException e) {
e.printStackTrace();
}
this.inputStream = inputStream;
this.outputStream = outputStream;
}
@Override
public void run() {
}
public void write(String command) {
byte[] bytes = command.getBytes();
if (outputStream != null) {
try {
outputStream.write(bytes);
outputStream.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public void cancel() {
try {
inputStream.close();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Вид приложения
Также есть основной код программы для Arduino
/*
Скетч к проекту "Бегущая строка"
Страница проекта (схемы, описания): https://alexgyver.ru/GyverString/
Исходники на GitHub: https://github.com/AlexGyver/GyverString/
Нравится, как написан код? Поддержи автора! https://alexgyver.ru/support_alex/
Автор: AlexGyver, AlexGyver Technologies, 2019
https://AlexGyver.ru/
*/
// Версия 1.2 - исправлена ошибка с количеством матриц
// Версия 1.3 - исправлена скорость
// ================ НАСТРОЙКИ ================
#define MATR_NUM 8 // количество матриц последовательно
// ============ ДЛЯ РАЗРАБОТЧИКОВ ============
// ПИНЫ
#define BT_RX 3
#define BT_TX 2
// БИБЛИОТЕКИ
#include <SoftwareSerial.h>
#include <avr/eeprom.h>
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Max72xxPanel.h>
#include "fonts.h"
#include "timerMinim.h"
#define WIDTH MATR_NUM*8 // ширина матрицы
#define HEIGHT 8 // высота матрицы
Max72xxPanel matrix = Max72xxPanel(10, MATR_NUM, 1);
SoftwareSerial btSerial(BT_TX, BT_RX); // RX, TX
timerMinim scrollTimer(100);
timerMinim eepromTimer(5000);
String runningText = "";
boolean loadingFlag, fullTextFlag, runningState = true, eepromFlag = false, autoFlag = true, showText = true;
byte thisSpeed, thisBright, thisMode, thisColor, thisLength;
void setup() {
//Serial.begin(9600);
btSerial.begin(9600);
btSerial.setTimeout(100);
randomSeed(analogRead(0));
if (eeprom_read_byte((uint8_t*)1023) != 123) {
eeprom_write_byte((uint8_t*)1023, 123);
for (int i = 10; i < 300; i++) eeprom_write_byte((uint8_t*)i, 0);
eeprom_write_byte((uint8_t*)0, 60);
eeprom_write_byte((uint8_t*)1, 60);
eeprom_write_byte((uint8_t*)2, 0);
eeprom_write_byte((uint8_t*)3, 0);
eeprom_write_byte((uint8_t*)4, 0);
}
thisSpeed = eeprom_read_byte((uint8_t*)0);
thisBright = eeprom_read_byte((uint8_t*)1);
thisMode = eeprom_read_byte((uint8_t*)2);
thisColor = eeprom_read_byte((uint8_t*)3);
thisLength = eeprom_read_byte((uint8_t*)4);
for (byte i = 10; i < thisLength + 10; i++) {
runningText += (char)eeprom_read_byte((uint8_t*)i);
}
matrix.setIntensity(50);
for (byte i = 0; i < MATR_NUM; i++) {
// матрицы расположены криво, здесь поворачиваем
matrix.setRotation(i, 1);
}
matrix.fillScreen(LOW);
matrix.write();
scrollTimer.setInterval(thisSpeed);
}
void loop() {
bluetoothTick(); // парсинг блютус
if (runningState) fillString(runningText, thisMode);
eepromTick();
}
void toggleText(boolean state) {
if (state) {
runningState = true;
loadingFlag = true;
} else {
runningState = false;
matrix.fillScreen(LOW);
matrix.write();
}
}
Файл с EEPROM
// --------------- РАБОТА С EEPROM --------------
// EEPROM MAP
// 0 - скорость
// 1 - яркость
// 2 - режим
// 3 - цвет
// 4 - длина строки
// 10-300 - строка
void eeprom_update_byte(int addr, byte value) {
byte buf = eeprom_read_byte((uint8_t*)addr);
if (value != buf) eeprom_write_byte((uint8_t*)addr, value);
}
void updateSettings() {
eepromFlag = true; // ставим галочку, что данные изменились
eepromTimer.reset();
}
void eepromTick() {
eepromFlag = false;
eeprom_update_byte(0, thisSpeed);
eeprom_update_byte(1, thisBright);
eeprom_update_byte(2, thisMode);
eeprom_update_byte(3, thisColor);
eeprom_update_byte(4, thisLength);
for (byte i = 10; i < thisLength + 10; i++) {
eeprom_update_byte(i, runningText[i - 10]);
}
}
1. softSerial.begin поставь 9600
2. попробуй поменять Rx Tx местами
Не помогает
Я где то писал про пины D2 D3? Что не понятного в
подключаете к пинам Rx и Tx Arduino.
https://a.radikal.ru/a22/2004/0e/b015198a7307.png
https://youtu.be/f0IwiJ2D9qM
HC-06 - Arduino
RST - GND
RXD - D2
TXD - D3
Так подключил так, ну плюс RST - GND которое подключил потом
MSerega пише:Додаю перед D2 - GND і RST замыкаю между собою і тогда подключаю?
Нет, не так. RST перемычкой соединяете с GND. HC-06 подключаете к пинам Rx и Tx Arduino.
renoshnik пише:А мне кажется, что нужно на оборот подключать ...
int gRxPin = 10; подключить Tx_ВТ
int gTxPin = 11; подключить Rx_ВТВозможно.
Никто же не мешает ТС попробовать разные варианты
Как не так? Я же взял кабель мама-мама и соеденил RST и GND после них идут уже D2 и D3 подключенные
MSerega пише:У меня нету никаких переходников. Чисто ардуино нано и модуль
Указанную мной статью https://wiki.iarduino.ru/page/Arduino_as_a_USB_UART_converter/ внимательно читали? В самом начале написано как из ардуины сделать обычный переходник. И не нужно никаких скетчей, достаточно простой терминальной программы ...
Пробую! что то ни так не так не получаеться
MSerega пише:У меня нету никаких переходников. Чисто ардуино нано и модуль
Указанную мной статью https://wiki.iarduino.ru/page/Arduino_as_a_USB_UART_converter/ внимательно читали? В самом начале написано как из ардуины сделать обычный переходник. И не нужно никаких скетчей, достаточно простой терминальной программы ...
Тоесть я к этому подключению
Додаю перед D2 - GND і RST замыкаю между собою і тогда подключаю?
MSerega пише:г0сть пише:Да.
Если отдельного usb-uart модуля нет, то можно сделать так https://wiki.iarduino.ru/page/Arduino_as_a_USB_UART_converter/Мне нужно поменять имя HC-06
Так меняйте...
Вам уже столько способов предложили ...
У меня нету никаких переходников. Чисто ардуино нано и модуль
#include <SoftwareSerial.h>
SoftwareSerial BTSerial(2, 3);
void setup() {
BTSerial.begin(9600);
Serial.begin(9600);
delay(500);
Serial.println("Enter AT commands");
}
void loop() {
if (BTSerial.available()) {
Serial.write(BTSerial.read());
}
if (Serial.available()) {
BTSerial.write(Serial.read());
}
}
После отправки команды ответа не приходит
MSerega пише:Я RXD подключаю на D10 ардуино а TXD на D11 верно?
Да.
Если отдельного usb-uart модуля нет, то можно сделать так https://wiki.iarduino.ru/page/Arduino_as_a_USB_UART_converter/
Мне нужно поменять имя HC-06
MSerega пише:Но причем тут вверху include? Нужно подключать какую то библиотеку?
Автор статьи скорее всего взял какой-то скетч и не все лишнее удалил
Я RXD подключаю на D10 ардуино а TXD на D11 верно?
MSerega пише:Скажите что я сделал не так?
Не научился пользоваться гуглом http://drach.pro/blog/hi-tech/item/149-bluetooth-hc-06
// Ретранслятор
// У НАШЕГО модуля адрес +ADDR:98D3:31:F6102B
#include
#include
int gLedPin = 13;
int gRxPin = 10;
int gTxPin = 11;
SoftwareSerial BTSerial(gRxPin, gTxPin);
void setup() {
// # 38400 - для метода №1, 9600 - для метода №2
BTSerial.begin(9600);
Serial.begin(9600);
delay(500);
Serial.writeln("uno READY");
}
void loop() {
if (BTSerial.available()) {
Serial.write(BTSerial.read());
}
if (Serial.available()) {
BTSerial.write(Serial.read());
}
}
Но причем тут вверху include? Нужно подключать какую то библиотеку?
Здравствуйте! Купил себе Arduino Nano и HC-06 решил попробывать что и как. Подключал таким методом
Телефон видет его. Сопражение есть. А вот через Arduino IDE я не могу в мониторе портов ввести AT команду для смены имени. Я ввожу АТ, на что результат должен быть "ОК", а у меня пустота. Скажите что я сделал не так?
Сторінки 1