Вот код:
Вообще, думаю может длительное нажатие кнопки включало режим Авто, ну от датчика, а просто быстрое нажатие включить, отключить .. такое можно реализовать кодом?
One Button библиотека может поможет, если есть у кого пример кода на ней с длительным и коротким нажатием?
C++:
#include <LCD_1602_RUS.h>
#include <LiquidCrystal_I2C.h>
//#include <LiquidCrystal.h>
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>
#include <SoftwareSerial.h>
#include <Wire.h>
unsigned long last_read=millis(), period_read=8000; //Это параметры организации цикла
LCD_1602_RUS lcd(0x27, 16, 2);
int knopka1=0;
const int maxMoisture=50; //максимальная влажность
#define DHTPIN 6 //пин для получения сигнала от датчика DHT11
// Раскомментировать тип датчика, который используется
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
DHT dht(DHTPIN, DHTTYPE);
void setup()
{
//pinMode(9,INPUT);
//pinMode(8,OUTPUT);
//mySerial.begin(9600);
pinMode(7, OUTPUT);
Serial.begin(9600);
Serial.println("Hello");
dht.begin();
lcd.init(); // Инициализируем экран, включаем подсветку
lcd.backlight();
//Устанавливаем положение курсора для первой строки.
lcd.home();
//выводим строку 1
lcd.print("Welcome!");
//выводим строку 2
lcd.setCursor(0, 1);
lcd.print("AO Sam. Transf.");
}
void loop()
{
{
// Задержка перед измерениями
// delay(2000); //Это завешиват всю программу, но измерять нужно все же с интервалом, как?
if(millis()-last_read>period_read)
{ last_read=millis(); //Если работа модуля очень длительная, то тип last_read надо изменить!
float h = dht.readHumidity(); //Измеряем влажность
float t = dht.readTemperature(); //Измеряем температуру
if (isnan(h) || isnan(t)) // Проверка. Если не удается считать показания, выводится «Ошибка считывания», и программа завершает работу
{
Serial.println("Ошибка считывания");
return;
}
Serial.println("");
Serial.print("Влажность: ");
Serial.print(h);
Serial.println(" %\t");
Serial.print("Температура: ");
Serial.print(t);
Serial.print(" *C ");
//Вывод показателей на экран
//Устанавливаем положение курсора для первой строки.
lcd.home();
//выводим строку 1
lcd.print("Темп.: ");
lcd.print(t);
lcd.print(" *C ");
//выводим строку 2
lcd.setCursor(0, 1);
lcd.print("Влажн.: ");
lcd.print(h);
lcd.print(" %");
}
}
if(digitalRead(14)==HIGH&&knopka1==0)//если кнопка нажата
// и перемення knopka1 равна 0 , то ...
{
digitalWrite(7,!digitalRead(7));
knopka1=1;
//это нужно для того что бы с каждым нажатием кнопки
//происходило только одно действие
// плюс защита от "дребезга" 100%
}
if(digitalRead(14)==LOW&&knopka1==1)//если кнопка НЕ нажата
//и переменная knopka1 равна - 1 ,то ...
{
knopka1=0;//обнуляем переменную knopka1
}
// if(millis()-last_read>period_read)
// { last_read=millis(); //Если работа модуля очень длительная, то тип last_read надо изменить!
// if(dht.readHumidity()>maxMoisture)
// {
// digitalWrite(7,!digitalRead(7));
// knopka1=1;//включаем кнопку1
// }
// }
}
One Button библиотека может поможет, если есть у кого пример кода на ней с длительным и коротким нажатием?
Изменено: