Заголовок сообщения: Arduino функция tone (некорректная работа)
Добавлено: Ср июн 10, 2020 19:28:33
Прорезались зубы
Зарегистрирован: Вт мар 31, 2009 09:14:47 Сообщений: 204
Рейтинг сообщения:0
Бьюсь безуспешно второй день с функцией tone в ардуинке. Задача алгоритма, вычислить частоту входного сигнала. Затем умножить ее или разделить, и выдать на другой пин ардуино конвертированную частоту. Генерация реализована через tone И вроде все OK, когда на вход подается реальная частота. Но если от входа отключить сигнал, то на выходе появляется меандр 30Гц(вижу его осциллографом). Хотя в исходнике прописано условие, если частота меньше 40ГЦ, то noTone.
Код:
int Htime; // целочисленная переменная для хранения времени высокого логического уровня int Ltime; // целочисленная переменная для хранения времени низкого логического уровня float Ttime; // переменная для хранения общей длительности периода float frequency_in_raw; // переменная для хранения частоты входной float frequency_in_avg; // переменная для хранения частоты входной float frequency_in_avg_rez; // переменная для хранения частоты входной float frequency_out; // переменная для хранения частоты int i=0;
void setup() { // устанавливаем скорость передачи данных последовательного соединения. Serial.begin(9600); pinMode(2,INPUT); }
void loop() { for(i=0;i<3;i++) { Htime=pulseIn(2,HIGH); // прочитать время высокого логического уровня Ltime=pulseIn(2,LOW); // прочитать время низкого логического уровня Ttime = Htime+Ltime; frequency_in_raw=1000000/Ttime; // получение частоты из Ttime в микросекундах frequency_in_avg+=frequency_in_raw; Serial.println(frequency_in_raw); } if (i=4) { frequency_in_avg_rez= frequency_in_avg/3; frequency_in_avg=0;
Нормальная среда разработки предупредила бы нерадивого кодера, что, например, возможна ситуация, когда frequency_in_avg_rez ничего не присвоится. А поскольку оно (да и не только оно) ни разу не проинициализированно (кто ваще придумал эту инициализацию?), то его значение в этом случает известно лишь богу (или богам, если их более одного).
Заголовок сообщения: Re: Arduino функция tone (некорректная работа)
Добавлено: Ср июн 10, 2020 20:13:06
Прорезались зубы
Зарегистрирован: Вт мар 31, 2009 09:14:47 Сообщений: 204
Рейтинг сообщения:0
BlackKilkennyCat, а как будет правильно? кодер из меня такой себе, даже и не спорю. просто условие if (frequency_in_avg_rez<40 & frequency_in_avg_rez>4000) по моему мнению подразумевает, что функция tone срабатывает при заданном диапазоне этого самого frequency_in_avg_rez
frequency_in_avg_rez принимает значение единственный раз, если выполняется какое-то условие if (i=4) если оно не выполнится (а оно не выполнится, так как в цикле i<3), чему будет равно значение?
Использование модульных источников питания открытого типа широко распространено в современных устройствах. Присущие им компактность, гибкость в интеграции и высокая эффективность делают их отличным решением для систем промышленной автоматизации, телекоммуникационного оборудования, медицинской техники, устройств «умного дома» и прочих приложений. Рассмотрим подробнее характеристики и особенности трех самых популярных вариантов AC/DC-преобразователей MW открытого типа, подходящих для применения в промышленных устройствах - серий EPS, EPP и RPS представленных на Meanwell.market.
Заголовок сообщения: Re: Arduino функция tone (некорректная работа)
Добавлено: Ср июн 10, 2020 23:37:45
Прорезались зубы
Зарегистрирован: Вт мар 31, 2009 09:14:47 Сообщений: 204
Рейтинг сообщения:0
0-1-2
ps. самое интересное, что работает) но пока реальный сигнал на входе.
Добавлено after 3 hours 41 second: Разобрался . Но появился другой вопрос. С помощью tone нельзя генерировать меандр ниже 31ГЦ. Как правильнее реализовать генерацию 10гц. Нужен диапазон от 10 до 200гц.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения