DHT11 + LCD 1602 + KY-040

Дим M
Автор темы, Администратор
Администратор
Аватара
Дим M
Автор темы, Администратор
Администратор
Сообщения: 1608
Зарегистрирован: 5 апреля 2013
С нами: 10 лет 11 месяцев

#1 Дим » 5 декабря 2017, 16:24

DHT11 + LCD 1602 + KY-040.jpg
DHT11 + LCD 1602 + KY-040
DHT11 + LCD 1602 + KY-040.jpg (259.5 КБ) 980 просмотров

Код: Выделить всё

//=============================================================================================================
#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

#define  TEMP_INTERVAL  5000UL  // интервал обновления данных тем (2 сек)
#define LCD_INTERVAL 20UL  // скорость угасания подсветки LCD

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 = 0;
int value = 0;
int accel = 1;
int i = 0;
int clic = 0;
int val=0;

long oldPosition = 0;
long interval = 2000; 
long previousMillis 
= 0;
 
void setup
()
{
  Serial.begin(9600);
  pinMode(12, INPUT_PULLUP);
  pinMode(13,OUTPUT);
  digitalWrite(13,HIGH);
  
  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");
}

void loop()
{
  temp(TEMP_INTERVAL);  // обновления данных тем
  if (clic == 1)
  {
    lcdl(LCD_INTERVAL); // угасания подсветки LCD
  }
//=== если нажата кнопка 100% подсветка ==
  value = digitalRead(PIN_ENCODER_SW);
  if (value == LOW)
  {
     Serial.println("wibor++");
     analogWrite( PWM_LED_PIN, 255 );
     Bright = 255;
     clic = 1;
  }
//=== ручка энкодера/регулироака
  long newPosition = myEnc.read() / accel;    
  if 
(newPosition > oldPosition) 
  
{   
    Serial
.println(">>>");    
    analogWrite
(PWM_LED_PIN, newPosition);
    Bright += 5;
    if ( Bright > 255 )
    Bright = 255;
  }
  else
  if 
(newPosition < oldPosition)
  {
    Serial.println("<<<");
    analogWrite(PWM_LED_PIN, newPosition);        
    Bright 
-= 5;
    if ( Bright < 0 )
    Bright = 0;
  } 
  if 
( newPosition != oldPosition)
  {
    i = (+ 1)%16;
    oldPosition = newPosition;
    analogWrite( PWM_LED_PIN, Bright );
    Serial.println(Bright);
  } 
}

void temp(unsigned long interval )
{
  static unsigned long prevTime = 0; // время когда последний раз обновляли датчик
  if(millis() - prevTime > interval) 
  
{
    prevTime = millis();  //  
    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); 
    Serial
.println("TEMP");
  }
}
 
void lcdl
(unsigned long interval)
{
  static unsigned long prevTime=0;
  if(millis()-prevTime>interval)
  {
    prevTime=millis();
    Bright--;  
    analogWrite
( PWM_LED_PIN, Bright );
    if ( Bright <= 0 )
    {
      clic = 0;
      Bright = 0;
    }
  }
[center]i love you [s]mxIni[/s] Mysql[/center]


  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Программирование»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 6 гостей