Использовать кнопку на экране, чтобы приостановить ввод кода.
Я создаю устройство регистрации температуры с термопарой K и разъемом для SD-карты, а также комплектом ЖК-экрана RGB с символьным дисплеем 16x2 (с кнопками).
Все работает нормально: отображение температуры на ЖК-дисплее и запись в текстовый файл на карте micro SD работают хорошо
Теперь я пытаюсь настроить кнопку на щите
- кнопка ВВЕРХ для сброса измерений и таймера, работает Кнопка
Вниз позволяет приостановить измерения, затем при повторном нажатии продолжить измерения. Я не знаю, как это сделать (как выйти из условия while).
if (buttons) { if (buttons & BUTTON_UP) { lcd.clear(); lcd.print("RESET "); if (SD.exists("datalog.txt")) { SD.remove("datalog.txt"); File dataFile = SD.open("datalog.txt", FILE_WRITE); } else { // открываем файл. обратите внимание, что одновременно может быть открыт только один файл, // поэтому вам придется закрыть этот файл, прежде чем открывать другой. File dataFile = SD.open("datalog.txt", FILE_WRITE); // если файл доступен, пишем в него: } StartTime = millis(); delay(500); } if (buttons & BUTTON_DOWN) { lcd.clear(); lcd.print("STOP"); while (buttons & BUTTON_DOWN){ ; }
Я уже благодарю вас за помощь
Винсент
@Vincent, 👍0
Обсуждение1 ответ
Лучший ответ:
Вы не говорите много о том, как оценивается значение buttons
или его тип данных, но предполагается, что это числовая переменная, которая каким-то образом устанавливается, скажем, с помощью readButtons()
, а затем рассмотрите следующий фрагмент, заменяющий ваш while-loop:
do {
delay(10);
// переоцениваем все, что устанавливает переменную кнопок
buttons = readButtons();
while(!(buttons & BUTTON_DOWN));
Приведенный выше цикл будет продолжаться до тех пор, пока не будет нажата кнопка вниз, и он немного устойчив к отскоку контактов, но не на 100% надежен, поэтому я предполагаю, что readButtons()
также выполняет некоторое устранение дребезга.
Спасибо, Роберто, ты все правильно понял. Я использую библиотеку LCD Shield с функцией lcd.readButtons., @Vincent
@Винсент, если это решит вашу проблему, пожалуйста, примите ответ, чтобы другие могли использовать его в качестве справочного материала., @Roberto Lo Giacco
- Печать string and integer LCD
- Как отобразить символ º на ЖК-дисплее?
- Отправка значения с одного Arduino на другой
- Черные квадраты дисплея Arduino 16x2
- NodeMCU с RFID RC522 и LCD-модулем интерфейса I2C вместе
- ЖК-дисплей I2C отображает странные символы
- Экран LCD 16*02 I2C показывает только первый напечатанный символ
- Потенциометр 10 кОм против резистора 10 кОм на ЖК-дисплее
подумайте о своих первых двух операторах «если»... почему вы тестируете «кнопки» во втором операторе «если»? .... вы уже протестировали его в первом операторе
if
.... то же самое с последним операторомif
..... также проверьте операторwhile (buttons & BUTTON_DOWN){
внизу. .... думаете ли вы, что значенияbuttons
иBUTTON_DOWN
когда-нибудь изменятся? ....если вы думаете, что они изменятся, то что их меняет?, @jsotolaЭтот способ тестирования кнопок взят из примера, приведенного с библиотекой экранов RGB LCD от adafruit. Я старался не тестировать повторно «кнопки» в операторе IF после первого if(buttons), но на ЖК-дисплее отображаются все операторы следующего if(BUTTON_DIRECTION), как будто все тесты if дают TRUE. Извините, сложно внести ясность., @Vincent