Хай.
Дело не сложное вроде)
Если простыми словами, то нужно так:
раз в минуту опрашиваем датчик, и
if(temperatureC > 29) {
digitalWrite(13, 1);
Но нужно не просто Включить, а НА 10сек.
Придумал такую тему -
Опрашивать по таймеру на millis
Тут проблем не возникло.
Потом решил в этом таймере, в условии if развернуть еще один таймер для работы диода.
Но что то не канает)
Подскажите как правильно
Или может знаешь другие варианты опрашивать раз в период и включать диод на определённое время?
Дело не сложное вроде)
Если простыми словами, то нужно так:
раз в минуту опрашиваем датчик, и
if(temperatureC > 29) {
digitalWrite(13, 1);
Но нужно не просто Включить, а НА 10сек.
Придумал такую тему -
Опрашивать по таймеру на millis
Тут проблем не возникло.
Потом решил в этом таймере, в условии if развернуть еще один таймер для работы диода.
Но что то не канает)
Подскажите как правильно
C++:
int sensorPin = 0; //аналоговый ввод для выхода датчика TMP36
//разрешение 10 мВ / градус цельсия со смещением на 500 мВ
//для отрицательной температуры
#define PERIOD 5*1000
#define PERIODB 10*1000
uint32_t timerA = 0;
uint32_t timerB = 0;
unsigned long currentTime;
void setup()
{
Serial.begin(9600);
pinMode(13, OUTPUT);
}
void ttt2() {
if (millis() - timerB >= PERIODB) {
//считываем напряжение датчика
int reading = analogRead(sensorPin);
// преобразуем показания в напряжение, для 3.3v используйте значение 3.3
float voltage = reading * 5.0;
voltage /= 1024.0;
// выводим напряжение
Serial.print(voltage); Serial.println(" volts");
// теперь выводим температуру
float temperatureC = (voltage - 0.5) * 100 ; //исходя из 10 мВ на градус со смещением 500 мВ
Serial.print(temperatureC); Serial.println(" degrees C");
// в фаренгейтах
float temperatureF = (temperatureC * 9.0 / 5.0) + 32.0;
Serial.print(temperatureF); Serial.println(" degrees F");
if(temperatureC > 29){
digitalWrite(13, 1);
Serial.println(" ON ");
currentTime = millis();
//////////////////////// таймер Ц
// Таймер опроса и выполнения (Период настраиваем вверху - #define PERIOD)
if (millis() - timerA >= PERIOD) {
digitalWrite(13, 0);
Serial.println(" Off ");
// currentTime = millis();
do {
timerA += PERIOD;
if (timerA < PERIOD) break; // переполнение uint32_t
}
while (timerA < millis() - PERIOD); // защита от пропуска шага
}
}
do {
timerB += PERIODB;
if (timerB < PERIODB) break; // переполнение uint32_t
}
while (timerB < millis() - PERIODB); // защита от пропуска шага
}
}
/////////////////////////////////////////////////////////
void loop()
{
ttt2();
}