Помехи по Bluetooth

alexnf
Offline
Зарегистрирован: 13.03.2015

Не уверен, правильно ли выбрал ветку, но все же:

Сделал автоматический смазчик цепи мотоцикла и для управления насосом использую ардуино, некоторые параметры нуждаются в корректировках и для этого я использую блютуз модуль, через него же некоторые параметры я вывожу для индикации и контроля работы.

Для указания, какой именно параметр я передаю ардуино, я к каждому прибавляю определенное число (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 для отключения приема)?  Если один из пинов данных отключить не поможет, то как вообще лучше отключить блютуз для устранения помех, достаточно ли будет отключить питание блютуз модуля, или пины данных нужно отключать тоже?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

1. (который второй) Использовать контрольный код (контрольную сумму).

alexnf
Offline
Зарегистрирован: 13.03.2015

andriano пишет:

1. (который второй) Использовать контрольный код (контрольную сумму).

А можете ссылку на пример?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Могу дать ссылку на Википедию: 

https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BD%D1%82%D1%80%D0%BE%D0%BB...