Помехи по Bluetooth
- Войдите на сайт для отправки комментариев
Не уверен, правильно ли выбрал ветку, но все же:
Сделал автоматический смазчик цепи мотоцикла и для управления насосом использую ардуино, некоторые параметры нуждаются в корректировках и для этого я использую блютуз модуль, через него же некоторые параметры я вывожу для индикации и контроля работы.
Для указания, какой именно параметр я передаю ардуино, я к каждому прибавляю определенное число (1000, 2000 и тп) и отправляю через блютуз.
Вот функция чтения этих значений:
//----------------------------------------------------------------------
// Функция чтения данных
// с USB или Bluetooth
//----------------------------------------------------------------------
void ReadSerial() {
if (Serial.available()) {
BluetoothAndroid = Serial.parseInt();
if (BluetoothAndroid < 1000) //признак значения REG
{
REG = BluetoothAndroid; //Меняем значение переменной
EEPROM.put(170, REG); //170 номер первой ячейки хранения значения REG
}
if (BluetoothAndroid > 1000 && BluetoothAndroid < 2000) //признак значения MIntervalTown
{
MIntervalTown = (BluetoothAndroid - 1100) * 100 ; //Убираем метку и меняем значение переменной
message_setting_int[0] = MIntervalTown; //Обновляем значение в массиве
EEPROM.put(20, MIntervalTown); //20 номер первой ячейки хранения значения MIntervalTown;
}
if (BluetoothAndroid > 2000 && BluetoothAndroid < 3000) //признак значения MIntervalRoad
{
MIntervalRoad = (BluetoothAndroid - 2100) * 100 ; //Убираем метку и меняем значение переменной
message_setting_int[1] = MIntervalRoad; //Обновляем значение в массиве
EEPROM.put(30, MIntervalRoad); //30 номер первой ячейки хранения значения MIntervalRoad
}
if (BluetoothAndroid > 3000 && BluetoothAndroid < 4000) //признак значения MCoefRain
{
MCoefRain = (BluetoothAndroid - 3100) * 10 ; //Убираем метку и меняем значение переменной
message_setting_int[2] = MCoefRain; //Обновляем значение в массиве
EEPROM.put(40, MCoefRain); //40 номер первой ячейки хранения значения MCoefRain
}
if (BluetoothAndroid > 4000 && BluetoothAndroid < 5000) //признак значения MMinSpeed
{
MMinSpeed = (BluetoothAndroid - 4100) ; //Убираем метку и меняем значение переменной
message_setting_int[3] = MMinSpeed; //Обновляем значение в массиве
EEPROM.put(50, MMinSpeed); //50 номер первой ячейки хранения значения MMinSpeed
}
if (BluetoothAndroid > 5000 && BluetoothAndroid < 6000) //признак значения MRoadSpeed
{
MRoadSpeed = (BluetoothAndroid - 5100) * 10 ; //Убираем метку и меняем значение переменной
message_setting_int[4] = MRoadSpeed; //Обновляем значение в массиве
EEPROM.put(60, MRoadSpeed); //60 номер первой ячейки хранения значения MRoadSpeed
}
//ну и так далее.....
}
}
Проблема: кроме передаваемых в serial данных, периодически появляются помехи, видимо из-за близкого расположения двигателя мотоцикла, и часто на входе появляется какое либо число, которое я не отправлял (чаще всего почемуто от 10 до 30)....
Вижу несколько решений:
1. Не использовать значения от 10 до 30, начать например с 1000 и все что ниже не принимать - пока что больших я не видел, но не факт что не появятся.
1. Как то фильтровать входящие значения, на предмет их корректности - но не знаю как...
2. Тк настройки нужно передавать редко, то как вариант вижу вообще отключить блютуз, когда он не нужен. Но тк я через него и получаю данные, то можно ли как то отключить в ардуино только прием, а передачу оставить? Может выключателем разрывать Rx или Tx (если возможно, то что именно отключать, Rx или Tx для отключения приема)? Если один из пинов данных отключить не поможет, то как вообще лучше отключить блютуз для устранения помех, достаточно ли будет отключить питание блютуз модуля, или пины данных нужно отключать тоже?
1. (который второй) Использовать контрольный код (контрольную сумму).
1. (который второй) Использовать контрольный код (контрольную сумму).
А можете ссылку на пример?
Могу дать ссылку на Википедию:
https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BD%D1%82%D1%80%D0%BE%D0%BB...