DHT11 и энкодер
- Войдите на сайт для отправки комментариев
Сб, 02/12/2017 - 18:48
Здравствуйте, собрал схему DHT11 с вывом информации на 1602 экран. Всё работает нормально, но решил добавить энкодер для регулировки подсветки дисплея и не получилось. Т.e отдельно - без кода датчика, регулировать можно, но если добавлю код для считывания показаний с датчика - не работает.
#include <LiquidCrystal.h> #include <Encoder.h> #include <dht11.h> dht11 DHT11; #define DHT11PIN 8// датчик темп и влаж // LCD пин управления яркостью #define PWM_LED_PIN 9 // LCD другие пины #define PIN_LCD_RS 7 #define PIN_LCD_E 6 #define PIN_LCD_D4 5 #define PIN_LCD_D5 4 #define PIN_LCD_D6 3 #define PIN_LCD_D7 2 // Энкодер #define PIN_ENCODER_CLK 10 #define PIN_ENCODER_DT 11 #define PIN_ENCODER_SW 12 byte PE_lit[8] = {B11111, B10001, B10001, B10001, B10001, B10001, B10001, B00000,}; byte EL_lit[8] = {B00111, B01001, B10001, B10001, B10001, B10001, B10001, B00000,}; byte ZH_lit[8] = {B10001, B10101, B10101, B01110, B10101, B10101, B10001, B00000,}; byte MZ_lit[8] = {B10000, B10000, B10000, B11110, B10001, B10001, B11110, B00000,}; byte U_lit[8] = {B10001, B10001, B10001, B01111, B00001, B00001, B11110, B00000,}; LiquidCrystal lcd(PIN_LCD_RS, PIN_LCD_E, PIN_LCD_D4, PIN_LCD_D5, PIN_LCD_D6, PIN_LCD_D7); // LCD Encoder myEnc( PIN_ENCODER_DT, PIN_ENCODER_CLK ); // Энкодер int Bright = 100; int accel = 1; long oldPosition = 0; int i = 0; void setup() { lcd.createChar(1, PE_lit); lcd.createChar(2, U_lit); lcd.createChar(3, EL_lit); lcd.createChar(4, ZH_lit); lcd.createChar(5, MZ_lit); lcd.begin(16, 2); lcd.setCursor(0, 0); lcd.print("TEM\1EPAT\2PA"); lcd.setCursor(1, 1); lcd.print("B\3A\4HOCT\5"); analogWrite(PWM_LED_PIN, Bright); } void loop() { long newPosition = myEnc.read() / accel; if (newPosition > oldPosition) { analogWrite(PWM_LED_PIN, newPosition); Bright += 5; if ( Bright > 255 ) Bright = 255; } else if (newPosition < oldPosition) { analogWrite(PWM_LED_PIN, newPosition); Bright -= 5; if ( Bright < 0 ) Bright = 0; } if ( newPosition != oldPosition) { i = (i + 1)%16; oldPosition = newPosition; analogWrite( PWM_LED_PIN, Bright ); } //== закоментировав данный код - регулировка работае т== int chk = DHT11.read(DHT11PIN); lcd.setCursor(12, 0); lcd.print((float)DHT11.temperature, 1); lcd.setCursor(12, 1); lcd.print((float)DHT11.humidity, 1); delay(2000); //================================================ }
Изучайте Мигаем светодиодом без delay()
Изучайте Мигаем светодиодом без delay()
Благодарю, получилось, только верно или нет я наколхозил? И ещё ни как не смог найти - как сделать действие нажатие на энкодер (шток) и длительное нажатие.
О коротком и длинном нажатии смотрите в темах про кнопки - это же обычная кнопка. В начале раздела закрепленные темы о кнопках есть, или в строке поиска справа вверху наберите что-нибудь типа "долгое нажатие" - выдаст кучу тем
О коротком и длинном нажатии смотрите в темах про кнопки - это же обычная кнопка. В начале раздела закрепленные темы о кнопках есть, или в строке поиска справа вверху наберите что-нибудь типа "долгое нажатие" - выдаст кучу тем
Да нашёл класс титановый велосипед для тактовой кнопки. Но что то не очень в нём разобрался. Допустим мне на одну кнопку нужно сделать 2 действия:
1. На короткое - написать в порт "1"
2. Если отпущено и нективно - написать в порт "2"
Но если отпущено и нективно в порт пишет: сначала 1, а потом 2
Да нашёл класс титановый велосипед для тактовой кнопки. Но что то не очень в нём разобрался. Допустим мне на одну кнопку нужно сделать 2 действия:
1. На короткое - написать в порт "1"
2. Если отпущено и нективно - написать в порт "2"
Но если отпущено и нективно в порт пишет: сначала 1, а потом 2
А шо не так? Кнопка нажата и отпущена? Да, выводим 1. Кнопка отпущена и неактивна? Да, выводим 2. Всё верно работает. Да и по вашим вводным - именно так и должно работать, перечитайте условия свои.
Если отпущено и нективно - написать в порт "2"
Но если отпущено и нективно в порт пишет: сначала 1, а потом 2
А можно узнать, почему при одном и том же условии - выполняются разные действя
Если отпущено и нективно - написать в порт "2"
Но если отпущено и нективно в порт пишет: сначала 1, а потом 2
А можно узнать, почему при одном и том же условии - выполняются разные действя
А с чего вы взяли что выполняются разные действия?
А Вы считаетет что "написать в порт "2"" и "в порт пишет: сначала 1, а потом 2" - это одно и то же?
А с чего вы взяли что выполняются разные действия?
Да потому что "короткое нажатие" всегда заканчивается состоянием "отпущено и неактивно". Так что проблема не в классе "титанового", а неправильной формулировке задачи.
Настряпал некий код. Вроде работает. Знающие люди, посмотрите пожалуйста, чего у меня получилось.
При включении аппарата подсветка не горит
При нажатии на энкодер-кнопку - загорается на 5 сек (хотелось бы что бы медленно угасал)
При повороте ручки - увеличении/уменьшении подсветки
Настряпал некий код. Вроде работает. Знающие люди, посмотрите пожалуйста, чего у меня получилось.
Посмотрел, неинтересно. Работает - значит хорошо.
При включении аппарата подсветка не горит - мне так и нужно.
Уменьшайте подсветку на каждом вызове loop() - слишком быстро получается
При включении аппарата подсветка не горит - мне так и нужно.
Уменьшайте подсветку на каждом вызове loop() - слишком быстро получается
Значит уменьшайте каждые 500мс, к примеру: http://alxarduino.blogspot.ru/2013/09/BlinkAndPrintWithoutDelay.html
Спасибо - дельная статья - помогла