Форум программистов, компьютерный форум, киберфорум
Arduino
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
28 / 13 / 1
Регистрация: 20.01.2013
Сообщений: 145
Записей в блоге: 8
1

Частотомер с использованием ButtonStateChange в секунду

19.01.2016, 15:23. Показов 1609. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
в наборе примеров для цифрового сигнала есть пример для определения изменения состояния кнопки (определение фронта)/ButtonStateChange. если отсчитывать количество нажатий в 1 секунду-получится частотомер, т.е. отсчитываем 1 секунду (1000 миллисекунд). Пока секунда не прошла, ведем счетчик нажатий buttonPushCounter++, когда секунда прошла-обнуляем счетчик.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
int pushButton;
int counter=0;
int buttonPushCounter = 0;   // counter for the number of button presses
int buttonState = 0;         // current state of the button
int lastButtonState = 0;     // previous state of the button
long interval = 1000;          
void setup() {
    Serial.begin(9600);
}
void loop() {
  unsigned long currentMillis = millis();
  if (currentMillis >= interval) {
    interval=interval+1000;
    buttonPushCounter=0;
    Serial.println(interval/1000);
    Serial.println(' '); 
  }else 
  {
    buttonState = digitalRead(pushButton);
if (buttonState != lastButtonState) {
    if (buttonState == HIGH) {
      buttonPushCounter++;
      Serial.print("number of button pushes:  ");
      Serial.println(buttonPushCounter);
    } 
      }
  lastButtonState = buttonState;
    }
}
Проблема в том, что при большой частоте частотомер не успевает вывести все "нажатия".
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.01.2016, 15:23
Ответы с готовыми решениями:

Перевод с кадров в секунду в мегабиты в секунду
Подскажите пожалуйста как переводить гугл не хочет)

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

Частотомер
Всем привет. Решил обзавестись сим девайсом, погуглив в инете и просмотрев несколько вариантов схем...

Частотомер
Помогите разобраться в схеме: http://i025.***********/1108/36/f927493416ca.jpg Вопросы: ...

Частотомер
Привет всем, есть программа таймера ( частотомера) написана на ассемблере, в протеусе проверил сам...

3
363 / 346 / 74
Регистрация: 18.03.2015
Сообщений: 1,292
23.01.2016, 18:44 2
Serial.print не очень "быстрая". Она и может тормозить.
buttonPushCounter накапливайте в цикле, а выводите на экран после цикла.
2
28 / 13 / 1
Регистрация: 20.01.2013
Сообщений: 145
Записей в блоге: 8
24.01.2016, 17:24  [ТС] 3
т.е. выводить не в void loop()? а как выводить, не подскажите? спасибо.
0
363 / 346 / 74
Регистрация: 18.03.2015
Сообщений: 1,292
24.01.2016, 18:54 4
За пределами void loop() ничего не исполняется. Там Вы располагаете свои функции, к которым можно обратиться.
У Вас строки 18-28 выполняются в течении секунды. Т е Вы организовали «секундный цикл». Хотя явных операторов цикла (for или do) у Вас нет.
Теперь посчитайте: внутри этого «секундного цикла» Вам нужно накопить переменную и вывести ее на экран. Причем, строка "number of button pushes: " будет выводиться много раз + еще сама переменная.
строка "number of button pushes: " это 26 байт + переменная 3 байта + байт или два на перевод строки и служебные байты. Больше 30 байт.
Со скоростью Serial.begin(9600) Вы сможете этот «цикл» выполнить 9600/30=320 раз. Это только время для ВЫВОДА НА ЭКРАН.

Т.е. переменную накапливайте в течении секунды. А когда эта секунда закончится, только тогда ОДИН раз выводите ее на экран.
0
24.01.2016, 18:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.01.2016, 18:54
Помогаю со студенческими работами здесь

Частотомер.
Делаю частотомер для струнного датчика с автогенератором, сигнал на выходе 0,3 В прямоугольный от 2...

Сбоит частотомер
Доброго времени суток! Проблема: считаю период входного прямоугольного импульса с помощью захвата...

частотомер на atmega8
всем доброго времени. Ох... вот и я пришел со своей проблемой. Обычно помощи просят у меня, но...

Сделал частотомер
Сделал частотомер на ATmega8 и EPM3064A. Всю информацию для повторения выложил здесь:...

Частотомер на Tiny12L
Всем привет! Не могу побороть программу-частотомер, прошу помощи. Код перепроверил вдоль и поперёк,...

Частотомер и atmega16
Собираюсь сделать тахометр для мотоцикла на индукционном датчике(катушке собственного изготовления)...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru