Код: Выделить всё
//=============================================================================================================
#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 = (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;
}
}
}