Неверные данные при изменении частоты передачи

Natt_Nei
Offline
Зарегистрирован: 28.10.2016

В скетче каждые N миллисекунд отправляются данные с датчика в приложени на android.

При изменении частоты передачи расстояния датчика эти значения в самом приложении отображаются по-разному. Так, например, с частотой в 10 мс данные приходят более правдоподобные, чем с частотой в 500 мс. Под более правдоподобными данными я подразумеваю верное расстояние, чередующееся с неверным.
Пример данных с частотой отправки 10 мс - 0, 0, 0, 0, 130, 131, 130, 0, 0, 0.
Нули - неверные данные - частный случай. Бывает, что приходят 1, 2, 3 ,4 и так далее.

500 мс - сплошные неверные данные.
В принципе, можно подобрать наиболее удачную частоту. Но я не понимаю, каким образом она влияет на отображение данных в приложении. Приложение на писано на C# в Xamarin.
К слову, в BluetoothTerminal данные приходят почти всегда реальные, независимо от частоты.
Если потребуется код скетча или приложения - пишите.

a5021
Offline
Зарегистрирован: 07.07.2013

Слишком много текста и ненужных подробностей. Стоило просто описать вашу проблему так: "Я хочу одно, а получаю совсем другое." Один фиг, никаких ответов в обоих случаях вы бы не получили, но писать пришлось бы меньше.

nik182
Offline
Зарегистрирован: 04.05.2015

Да нет, не потребуются. У меня данные расстояния приходят всегда правильные. Код с ошибками не нужен.

Natt_Nei
Offline
Зарегистрирован: 28.10.2016

В том и дело, я ошибок не вижу.

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

Natt_Nei пишет:

В том и дело, я ошибок не вижу.

А почему тогда решили, что они есть?

Natt_Nei
Offline
Зарегистрирован: 28.10.2016

andriano пишет:

Natt_Nei пишет:

В том и дело, я ошибок не вижу.

А почему тогда решили, что они есть?


Я перебрал возможные варианты. Возможно, не все. Я могу чего-то и не знать. Приём данных в приложении осуществлен аналогично проекту блютуз-чата, который находится в открытом доступе на сайте xamarin.

Natt_Nei
Offline
Зарегистрирован: 28.10.2016

При частоте 500 мс  приходят нули.
При частоте 250 мс приходят двойки.
При частоте 100 мс приходят тройки.
При частоте 50 мс приходят нули и верные значения. Помимо этого в зависимости от реального расстояния встречаются отличные от нуля значения: при расстоянии в 15 см это единицы, при 27 см это двойки.

При частоте 10 мс приходит много верных значений, иногда появляются нули и первые цифры этих значений, как при частоте 50 мс. НО: данные приходят очень уж медленно, буквально раз в секунду, иногда вообще прерывается иничего не приходит пару секунд.

a5021
Offline
Зарегистрирован: 07.07.2013

А может ну его нафиг?

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

Natt_Nei пишет:

При частоте 500 мс  приходят нули.
При частоте 250 мс приходят двойки.
При частоте 100 мс приходят тройки.
При частоте 50 мс приходят нули и верные значения. Помимо этого в зависимости от реального расстояния встречаются отличные от нуля значения: при расстоянии в 15 см это единицы, при 27 см это двойки.

При частоте 10 мс приходит много верных значений, иногда появляются нули и первые цифры этих значений, как при частоте 50 мс. НО: данные приходят очень уж медленно, буквально раз в секунду, иногда вообще прерывается иничего не приходит пару секунд.

1. Частота измеряется в Гц. В мс изеряется время. Напримеро, период.

2. Перечитайте выделенное мною и подумайте, как это вообще возможно.

Natt_Nei
Offline
Зарегистрирован: 28.10.2016

andriano пишет:

Natt_Nei пишет:

При частоте 500 мс  приходят нули.
При частоте 250 мс приходят двойки.
При частоте 100 мс приходят тройки.
При частоте 50 мс приходят нули и верные значения. Помимо этого в зависимости от реального расстояния встречаются отличные от нуля значения: при расстоянии в 15 см это единицы, при 27 см это двойки.

При частоте 10 мс приходит много верных значений, иногда появляются нули и первые цифры этих значений, как при частоте 50 мс. НО: данные приходят очень уж медленно, буквально раз в секунду, иногда вообще прерывается иничего не приходит пару секунд.

1. Частота измеряется в Гц. В мс изеряется время. Напримеро, период.

2. Перечитайте выделенное мною и подумайте, как это вообще возможно.


Я всё понимаю. Но я написал так, как оно есть на самом деле.

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

Так, как Вы написали, не может быть в принципе.

Потому что:

1. Частота измеряется в Гц. В мс измерять частоту нельзя.

2. 10 мс никак не могут быть 1 секундой.

Natt_Nei
Offline
Зарегистрирован: 28.10.2016

andriano пишет:

Так, как Вы написали, не может быть в принципе.

Потому что:

1. Частота измеряется в Гц. В мс измерять частоту нельзя.

2. 10 мс никак не могут быть 1 секундой.


Код скетча:

#include "Ultrasonic.h"
int val;
int LED9 = 9;
int LED10 = 10;
int LED11 = 11;
int LED12 = 3;
long previousMillis = 0;  
const unsigned long periodicMessageFrequency = 10;
unsigned long time = 0;
// храним время последнего переключения светодиода
 
long interval = 1000; 
Ultrasonic ultrasonic(5, 6);
void setup()
{
  Serial.begin(9600);
  pinMode(LED9, OUTPUT);
   pinMode(LED10, OUTPUT);
    pinMode(LED11, OUTPUT);
    pinMode(LED12, OUTPUT);
  digitalWrite(LED10, HIGH);
  digitalWrite(LED11, HIGH);
  digitalWrite(LED9, HIGH);
  digitalWrite(LED12, HIGH);
}
void loop()
{
  unsigned long currentMillis = millis();
 //проверяем не прошел ли нужный интервал, если прошел то
  if(currentMillis - previousMillis > interval) 
  {
    // сохраняем время последнего переключения
    previousMillis = currentMillis; 
  }
  if (Serial.available())
  {
    val = Serial.read();
   
    if (val == '1')
    {
      digitalWrite(LED9, LOW);
      digitalWrite(LED10, HIGH);
      digitalWrite(LED11, LOW);
      digitalWrite(LED12, HIGH);
      
    }
        
    if ( val == '2')
    {
       digitalWrite(LED12, LOW);
      digitalWrite(LED11, HIGH);
      digitalWrite(LED9, HIGH);
      digitalWrite(LED10, LOW);
    
    }
  
    if ( val == '3')
    {
       digitalWrite(LED12, LOW);
      digitalWrite(LED11, LOW);
      digitalWrite(LED10, LOW);
      digitalWrite(LED9, LOW);
        
    }
 
     if ( val == '4')
    {
       digitalWrite(LED12, HIGH);
      digitalWrite(LED11, LOW);
      digitalWrite(LED10, LOW);
      digitalWrite(LED9, LOW);
              
    }
    if ( val == '5')
    {
       digitalWrite(LED12, LOW);
      digitalWrite(LED11, LOW);
      digitalWrite(LED10, HIGH);
      digitalWrite(LED9, LOW);
              
    }
 
     if ( val == '6')
    {
       
      digitalWrite(LED11, LOW);
      digitalWrite(LED10, HIGH);
      analogWrite(LED12, 100);
      digitalWrite(LED9, LOW);
              
    }
     if ( val == '7')
    {
       digitalWrite(LED12, HIGH);
      digitalWrite(LED11, LOW);
      analogWrite(LED10, 100);
      digitalWrite(LED9, LOW);
              
    }
        if ( val == '8')
    {
       digitalWrite(LED12, LOW);
      digitalWrite(LED11, HIGH);
      digitalWrite(LED10, LOW);
       analogWrite(LED9, 100);
              
    }
 
        if ( val == '9')
    {
       digitalWrite(LED12, LOW);
      analogWrite(LED11, 100);
      digitalWrite(LED10, LOW);
      digitalWrite(LED9, HIGH);
              
    }
  }
  {
  unsigned long currentTime = millis();
  if ((currentTime - time) > periodicMessageFrequency)
  {
    float dist_cm = ultrasonic.Ranging(CM);       // get distance
  Serial.println(dist_cm);    // print the distance   
     time = currentTime;
      }  }             
 
  }

periodcMessageFrequency - та самая переменная с мс, временной интервал между отправкой данных.

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

Особенно, конечно, впечатляют строки с 28 по 34.

Natt_Nei, если у Вас возникают какие-либо проблемы, в первую очередь следует их локализовать. Т.е. выяснить, то ли датчик выдает что-то невразумительно, то ли происходит потеря информации при передаче.

Увы, ни по коду, ни по Вашему описанию проблемы сделать какие-то выводы невозможно.

Natt_Nei
Offline
Зарегистрирован: 28.10.2016

andriano пишет:

Особенно, конечно, впечатляют строки с 28 по 34.

Natt_Nei, если у Вас возникают какие-либо проблемы, в первую очередь следует их локализовать. Т.е. выяснить, то ли датчик выдает что-то невразумительно, то ли происходит потеря информации при передаче.

Увы, ни по коду, ни по Вашему описанию проблемы сделать какие-то выводы невозможно.


Выше писал. В bluetooth терминал данные приходят всегда реальные.