Неверные данные при изменении частоты передачи
- Войдите на сайт для отправки комментариев
В скетче каждые N миллисекунд отправляются данные с датчика в приложени на android.
При изменении частоты передачи расстояния датчика эти значения в самом приложении отображаются по-разному. Так, например, с частотой в 10 мс данные приходят более правдоподобные, чем с частотой в 500 мс. Под более правдоподобными данными я подразумеваю верное расстояние, чередующееся с неверным.
Пример данных с частотой отправки 10 мс - 0, 0, 0, 0, 130, 131, 130, 0, 0, 0.
Нули - неверные данные - частный случай. Бывает, что приходят 1, 2, 3 ,4 и так далее.
500 мс - сплошные неверные данные.
В принципе, можно подобрать наиболее удачную частоту. Но я не понимаю, каким образом она влияет на отображение данных в приложении. Приложение на писано на C# в Xamarin.
К слову, в BluetoothTerminal данные приходят почти всегда реальные, независимо от частоты.
Если потребуется код скетча или приложения - пишите.
Слишком много текста и ненужных подробностей. Стоило просто описать вашу проблему так: "Я хочу одно, а получаю совсем другое." Один фиг, никаких ответов в обоих случаях вы бы не получили, но писать пришлось бы меньше.
Да нет, не потребуются. У меня данные расстояния приходят всегда правильные. Код с ошибками не нужен.
В том и дело, я ошибок не вижу.
В том и дело, я ошибок не вижу.
А почему тогда решили, что они есть?
В том и дело, я ошибок не вижу.
А почему тогда решили, что они есть?
Я перебрал возможные варианты. Возможно, не все. Я могу чего-то и не знать. Приём данных в приложении осуществлен аналогично проекту блютуз-чата, который находится в открытом доступе на сайте xamarin.
При частоте 500 мс приходят нули.
При частоте 250 мс приходят двойки.
При частоте 100 мс приходят тройки.
При частоте 50 мс приходят нули и верные значения. Помимо этого в зависимости от реального расстояния встречаются отличные от нуля значения: при расстоянии в 15 см это единицы, при 27 см это двойки.
При частоте 10 мс приходит много верных значений, иногда появляются нули и первые цифры этих значений, как при частоте 50 мс. НО: данные приходят очень уж медленно, буквально раз в секунду, иногда вообще прерывается иничего не приходит пару секунд.
А может ну его нафиг?
При частоте 500 мс приходят нули.
При частоте 250 мс приходят двойки.
При частоте 100 мс приходят тройки.
При частоте 50 мс приходят нули и верные значения. Помимо этого в зависимости от реального расстояния встречаются отличные от нуля значения: при расстоянии в 15 см это единицы, при 27 см это двойки.
При частоте 10 мс приходит много верных значений, иногда появляются нули и первые цифры этих значений, как при частоте 50 мс. НО: данные приходят очень уж медленно, буквально раз в секунду, иногда вообще прерывается иничего не приходит пару секунд.
1. Частота измеряется в Гц. В мс изеряется время. Напримеро, период.
2. Перечитайте выделенное мною и подумайте, как это вообще возможно.
При частоте 500 мс приходят нули.
При частоте 250 мс приходят двойки.
При частоте 100 мс приходят тройки.
При частоте 50 мс приходят нули и верные значения. Помимо этого в зависимости от реального расстояния встречаются отличные от нуля значения: при расстоянии в 15 см это единицы, при 27 см это двойки.
При частоте 10 мс приходит много верных значений, иногда появляются нули и первые цифры этих значений, как при частоте 50 мс. НО: данные приходят очень уж медленно, буквально раз в секунду, иногда вообще прерывается иничего не приходит пару секунд.
1. Частота измеряется в Гц. В мс изеряется время. Напримеро, период.
2. Перечитайте выделенное мною и подумайте, как это вообще возможно.
Я всё понимаю. Но я написал так, как оно есть на самом деле.
Так, как Вы написали, не может быть в принципе.
Потому что:
1. Частота измеряется в Гц. В мс измерять частоту нельзя.
2. 10 мс никак не могут быть 1 секундой.
Так, как Вы написали, не может быть в принципе.
Потому что:
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 - та самая переменная с мс, временной интервал между отправкой данных.
Особенно, конечно, впечатляют строки с 28 по 34.
Natt_Nei, если у Вас возникают какие-либо проблемы, в первую очередь следует их локализовать. Т.е. выяснить, то ли датчик выдает что-то невразумительно, то ли происходит потеря информации при передаче.
Увы, ни по коду, ни по Вашему описанию проблемы сделать какие-то выводы невозможно.
Особенно, конечно, впечатляют строки с 28 по 34.
Natt_Nei, если у Вас возникают какие-либо проблемы, в первую очередь следует их локализовать. Т.е. выяснить, то ли датчик выдает что-то невразумительно, то ли происходит потеря информации при передаче.
Увы, ни по коду, ни по Вашему описанию проблемы сделать какие-то выводы невозможно.
Выше писал. В bluetooth терминал данные приходят всегда реальные.