Попытка прочитать кнопку нажатия

Efftek
Солнце 19 марта 2017 г. 8:28 вечера
Привет,

У меня есть две кнопки, подключенные к моей синей таблетке на PB10 и PB11. В конечном счете, мне нужно шесть кнопок, я просто возится с кодом, чтобы получить две работы. Таким образом, я инициалирую обе контакты с помощью input_pullup, чтобы он обнаружил, когда штифт нажимает на кнопку, и он хорошо работал с одной кнопкой. Теперь я добавил вторую кнопку, она обнаруживает только по одному нажатию за раз, то есть я не могу нажать ту же кнопку дважды дважды. Если обнаружено нажатие, у меня есть задержка дебайта на 100 мс, тогда цикл while ожидает, пока кнопка не будет выпущена, так что удерживание кнопки не дает нескольких обнаружений. Один из них включает ведущий досок, другой выключает ее, поэтому у меня есть визуальное представление, что она работает. Есть также последовательный вывод, чтобы показать, какая кнопка была нажата, когда у меня подключено более двух кнопок. Я не могу на всю жизнь понимать, почему он не обнаруживает ту же нажатую кнопку повторного времени. Любые идеи?
USBComposite.setVendorId(0x040B); USBComposite.setProductId(0x6533); USBComposite.setProductString("Speed-Link Competition Pro");

Беннебой
Солнце 19 марта 2017 г. 8:50 вечера
Я использую небольшую библиотеку, чтобы прочитать их внутри государственной машины, она хорошо работает.

Наверное, лучше посмотреть на код -> https: // github.com/bennehboy/lrduinotd5

Efftek
Солнце 19 марта 2017 г. 9:06 вечера
Спасибо. Я скачал файлы, но буду смотреть на них позже, моя голова становится тяжелой, и мои глаза становятся тусклыми, мне нужно остановиться на сегодняшний день!

Извините, это то, что происходит, когда вы проектируете доску, используя орла в течение всего дня!

Стив.

Эниф
Пн 20 марта 2017 г. 8:55 утра
Разве ваши кнопки не нажаты, когда DigitalRead (PIN) является ЛОЖЬ? Но ваш код, кажется, проверяет это на истинный. Таким образом, до тех пор, пока кнопка PB11 не нажата, она не возвращается из Isbuttonpressed (PB11).

Но в любом случае, я сомневаюсь, что то, как вы пытаетесь отклониться, работает хорошо, так что, на самом деле, вам, вероятно, будет лучше использовать библиотеку...

Efftek
Пн 20 марта 2017 г. 14:09
Эниф написал:Но в любом случае, я сомневаюсь, что то, как вы пытаетесь отклониться, работает хорошо, так что, на самом деле, вам, вероятно, будет лучше использовать библиотеку...

Ореховый
Вт 21 марта 2017 г. 10:49
Как насчет использования прерываний?

Беннебой
Вт 21 марта 2017 г. 11:05
Черная писала:Как насчет использования прерываний?

Ореховый
Вт 21 марта 2017 г. 16:04
справедливо... Может показаться излишним, но в моем проекте, чтобы получить нажатие кнопки для правильной работы, я использую встроенные прерывания кнопки библиотеки Nextion. (на кнопках экрана) Ну, смесь этого и некоторые из моих собственных серийных проверок... Библиотека действительно полная беспорядок... Медвежьи функции тоже спроектированы.

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

Аппаратное прерывание может работать таким же образом. Небольшая функция для установки логического, которое позже проверило.

Или в зависимости от простоты кодирования... Вызов прерывания может сделать все, что требуется позже... Хотя я не уверен, что функция, вызванная вызовом прерывания, блокирует другие прерывания...

Беннебой
Вторник 21 марта 2017 г. 18:37
Да лучше провести как можно меньше времени в прерывании.

Efftek
Вторник 21 марта 2017 г. 20:27
Черная писала:Как насчет использования прерываний?

Efftek
Вторник 21 марта 2017 г. 20:32
Черная писала:Медвежьи функции тоже спроектированы.

Efftek
Вторник 21 марта 2017 г. 20:34
Эффтек написал:Один из них включает доску

Дэйвид.Прентис
Вторник 21 марта 2017 г. 22:43
Вы обычно читаете кнопку нажатия в обычном прерывании таймера. Xor Новое чтение с предыдущим чтением, чтобы определить изменение. Счетчик увеличения для устойчивого состояния. Кнопка эффективно дезантируется, когда имела устойчивое значение на 20 мс. «Длинная пресса» может быть обнаружена большим количеством подсчета.

Сканирование кнопки требует очень мало циклов обработки. У большинства приложений есть регулярное прерывание таймера в любом случае E.глин. Sysclock.

Ваш АЦП будет работать на заднем плане. Флаг прерывания устанавливается, когда ADC завершается.

Дэйвид.

Ореховый
Ср 22 марта 2017 г. 11:14
Я думаю, что если бы неверно оказалось, это будет улучшением: P

Efftek
Ср 22 марта 2017 г. 9:29 вечера
Дэйвид.Прентис написал:Ваш АЦП будет работать на заднем плане.

Ореховый
Солнце 26 марта 2017 г. 12:46
Эффтек написал:Дэйвид.Прентис написал:Ваш АЦП будет работать на заднем плане.

Efftek
Пн 27 марта 2017 г. 9:45 утра
Черная писала: Я не знаю, потому что я так устал... Но я едва могу понять, что делает эта линия: P

Пито
Пн 27 марта 2017 г., 11:51
Какова причина умножения Reala (b) на 16?? xa [a] = (((uint16_t) (reela*16)) | ((uint32_t) (Imag<<16))); Разве это не это хотите? #include HardWire HWire(1, 0); // I2C1, normal speed void setup() { HWire.begin(); } loop() { for (address = 1; address < 127; address++) { HWire.beginTransmission(address); status = HWire.endTransmission(); } }

Efftek
Пн 27 марта 2017 г., 19:14
[QUOTE = "PITO"] Какова причина умножения Reala (b) на 16??
цитировать]

АЦП составляет 12 бит, максимальное значение 4096. FFT использует 16 -битный int, максимальное значение 65536, которое, разделенное на 4096, составляет 16, следовательно, реальное значение умножается на 16 для «правильного масштабирования».

Кажется, это то, что люди разделены. Я знаю, что вы сказали, что не думаете, что масштабирование имело значение, когда вы делаете БПФ, и вы определенно знаете гораздо больше о FFT, чем я, поэтому я принял это. Спасибо, что указали, что я забыл удалить *16

Стив.

Управляемый Таймер ЦАП

ВХОД & ВЫХОД