Vytvoř si sekundovou smyčku (viz můj příspěvek výše - delay) a do té vlož tento kód:
Kód: Vybrat vše
if(min % 5 == 0 && sec==0){
//toto se provede jednou za 5 minut, vždy nultou sekundu
}
Kód: Vybrat vše
if(min % 5 == 0 && sec==0){
//toto se provede jednou za 5 minut, vždy nultou sekundu
}
Kód: Vybrat vše
#include <DS3231.h>
DS3231 rtc(SDA, SCL); // Inicializace portů
#include "DHT.h"
#define DHTPIN 2 // PIN
#define DHTTYPE DHT22 // DHTtyp
DHT dht(DHTPIN, DHTTYPE);
#include <config.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
// *****************************************************************************************************
const int okamzita = 4;
int buttonOkamzita =0;
const int ctvrt = 5;
int buttonCtvrt =0;
const int pul = 6;
int buttonPul =0;
const int prumctvrt = 8;
int buttonPrumctvrt =0;
const int prumpul = 9;
int buttonPrumpul =0;
int max15min[5]; // musím uložit do do EEPROM --> nevím jak
int min15min[5];
int max30min[10];
int min30min[10];
int mode = 0;
unsigned long lastTime1;
unsigned long presentTime;
void setup() {
Serial.begin(9600); // Rychlost kominukace
dht.begin();
lcd.begin(); //16 by 2 character display
rtc.begin(); // Nastavení dnu, času, data
rtc.setDOW(MONDAY); // Den
rtc.setTime(17, 39, 00); // Čas 12:00:00 (24h)
rtc.setDate(14, 10,2018); // Datum den/měsíc/rok
pinMode(ctvrt, INPUT);
pinMode(pul, INPUT);
lastTime1 = millis(); //ulož čas provedení podprogramu 1
}
void loop() {
float h = dht.readHumidity(); // Čtení Vlhkosti
float t = dht.readTemperature(); // Čtení teploty
if(digitalRead(ctvrt)) mode = 0;
if(digitalRead(pul)) mode = 1;
if(digitalRead(okamzita)) mode = 2;
if(digitalRead(prumctvrt)) mode = 3;
if(digitalRead(prumpul)) mode = 4;
presentTime = millis(); //uložení aktuálního času do proměnné
if (presentTime - lastTime1 >= 180000) {
//pokud je čas od poslední změny větší, nebo roven 1000 ms, proveď příkazy
lastTime1 = presentTime; //ulož čas provedení podprogramu 1
Podprogram1(); //spusť funkci Podprogram1
}
switch (mode) {
case 0:
//aktuální teplota
break;
case 1:
//15 minut čtení max a min hodnot z datového pole
break;
case 2:
//30 minut čtení max a min hodnot z datového pole
break;
case 3:
//prumer 15 minut
break;
case 4:
//prumer 30 minut
break;
}
}
void Podprogram1() {
// zápis naměřených hodnot a času do datových polí
}
Kód: Vybrat vše
#include <DS3231.h>
DS3231 rtc(SDA, SCL); // Inicializace portů
#include "DHT.h"
#define DHTPIN 2 // PIN
#define DHTTYPE DHT22 // DHTtyp
DHT dht(DHTPIN, DHTTYPE);
#include <config.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
// *****************************************************************************************************
const int okamzita = 4;
int buttonOkamzita =0;
const int ctvrt = 5;
int buttonCtvrt =0;
const int pul = 6;
int buttonPul =0;
const int prumctvrt = 8;
int buttonPrumctvrt =0;
const int prumpul = 9;
int buttonPrumpul =0;
int max15min[5]; // musím uložit do do EEPROM --> nevím jak
int min15min[5];
int max30min[10];
int min30min[10];
int mode = 0;
unsigned long lastTime1;
unsigned long presentTime;
void setup() {
Serial.begin(9600); // Rychlost kominukace
dht.begin();
lcd.begin(); //16 by 2 character display
rtc.begin(); // Nastavení dnu, času, data
rtc.setDOW(MONDAY); // Den
rtc.setTime(17, 39, 00); // Čas 12:00:00 (24h)
rtc.setDate(14, 10,2018); // Datum den/měsíc/rok
pinMode(ctvrt, INPUT);
pinMode(pul, INPUT);
lastTime1 = millis(); //ulož čas provedení podprogramu 1
}
void loop() {
float h = dht.readHumidity(); // Čtení Vlhkosti
float t = dht.readTemperature(); // Čtení teploty
if(digitalRead(ctvrt)) mode = 0;
if(digitalRead(pul)) mode = 1;
if(digitalRead(okamzita)) mode = 2;
if(digitalRead(prumctvrt)) mode = 3;
if(digitalRead(prumpul)) mode = 4;
presentTime = millis(); //uložení aktuálního času do proměnné
if (presentTime - lastTime1 >= 180000) {
//pokud je čas od poslední změny větší, nebo roven 1000 ms, proveď příkazy
lastTime1 = presentTime; //ulož čas provedení podprogramu 1
Podprogram1(); //spusť funkci Podprogram1
}
switch (mode) {
case 0:
//aktuální teplota
break;
case 1:
//15 minut čtení max a min hodnot z datového pole
break;
case 2:
//30 minut čtení max a min hodnot z datového pole
break;
case 3:
//prumer 15 minut
break;
case 4:
//prumer 30 minut
break;
}
}
void Podprogram1() {
// zápis naměřených hodnot a času do datových polí
}
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 3 hosti