Arduino+LCD+тензодатчик+клава
- Войдите на сайт для отправки комментариев
Втр, 28/02/2017 - 06:11
Здравствуйте. Подскажите, если не трудно. У меня lcd1602+тензодатчик+клавиатура. На первую строку экрана выводится вес, на вторую значение с клавиатуры. С весом проблем нет, а с клавиатуры считываются не все нажатия, примерно 1 из 10. Если поменять scale.get_units() на 1, то считывается лучше, но все равно не все нажатия. В чем дело?
void loop() { scale.power_up(); // Отключаем энергосберегающий режим hx711 if (round(scale.get_units(10)) != myScale) { // Условие выполняется, если округленный до граммов вес отличается от последнего myScale = scale.get_units(10); // Запоминаем текущий вес if (myScale > 0.5) // Если вес не ничтожно мал { lcd.setCursor(0,0); // то выводим его lcd.print(myScale/1000); } else { lcd.setCursor(0,0); lcd.print("0.00 "); } myScale = round(myScale); // Запоминаем округленный текущий вес (для сравнения) scale.power_down(); // Включаем энергосберегающий режим hx711 delay(500); } char key = keypad.getKey(); if (key=='A') // Если пользователь хочет сбросить набор первого числа { num1=0; lcd.createChar(0,cl); for (int i=0; i<8; i++) {lcd.setCursor(i,1); lcd.print(' '); } lcd.setCursor(0,1); lcd.print('0'); } if (key >='0' && key <='9') { num1 = num1*10 + (key -'0'); lcd.setCursor(0,1); lcd.print(num1); } }
т.е. я объединил два скетча. по отдельности работают. вместе - только вес корректно работает
Я клавиатуру подключаю так . Здесь полный скетч https://yadi.sk/d/qeTjJlF83Em8U4
Головной выкладываю
Похоже что измерения отнимают много времени. Чтобы это определеть надо нафаршировать скетч измерениями времени, или хотя бы определить как
часто программа пробегает опрос клавы. Для этого есть функции миллисек() и микросек() , ну и гугл естественно
Скорее всего придётся разводить на прерываниях, или искать неблокирующую библиотеку для весов, или искать библиотеку клавы использующую прерывания. Кто-то должен был их написать
Ну я так и понял, что придется использовать прерывания. Пока ждал ответов, погуглил. Нашел инфу про потоки (типа потоки). Попробовал. Результат конечно лучше чем был, но все равно не очень корректно работает. Так что прерывания последняя надежда))