Automaticke dvirka na cas

Odpovědět
pesek13
Příspěvky: 1
Registrován: 01 říj 2017, 14:18
Reputation: 0

Automaticke dvirka na cas

Příspěvek od pesek13 » 01 říj 2017, 15:18

Dobry den.pokousim se sestavit dvirka ktere se budou otvirat a zavirat ve stanoveny cas.pouzivam desku mega2560, RTC DS3231,Teplotní senzor DS18B20 a rele modul.Rele ovlada motorek na 12V.Musim mit nekde v kodu chybu,prochazel jsem to x krat ale nevidim to , rele se zapnou ale nevypnou ve stanoveny cas. Je to muj prvni projekt temer cely kod jsem seskladal z prikladu. dekuji za pomoc

Kód: Vybrat vše

#include <OneWire.h>           // TEPLOTNI SENZOR
#include <DallasTemperature.h> // TEPLOTNI SENZOR
#include "Wire.h"
#define DS3231_I2C_ADDRESS 0x68


// Convert normal decimal numbers to binary coded decimal
byte decToBcd(byte val){
    return( (val/10*16) + (val%10) );
}
// Convert binary coded decimal to normal decimal numbers
byte bcdToDec(byte val){
    return( (val/16*10) + (val%16) );
}
const int pinCidlaDS = 30;     // nastavení čísla vstupního pinu

int TEPLO = 1;                 // NASTAVENI PROMENE 
int MRAZ = 10 ;                // DIODA MRAZU CISLO PINU

OneWire oneWireDS(pinCidlaDS); // vytvoření instance oneWireDS z knihovny OneWire
DallasTemperature senzoryDS(&oneWireDS); // vytvoření instance senzoryDS z knihovny DallasTemperature

void setup(){
 
 
senzoryDS.begin();            // zapnutí komunikace knihovny s teplotním čidlem
OneWire oneWireDS(pinCidlaDS); // vytvoření instance oneWireDS z knihovny OneWire
DallasTemperature senzoryDS(&oneWireDS); // vytvoření instance senzoryDS z knihovny DallasTemperature

    Wire.begin();
    Serial.begin(9600);
    // NASTAVENI RTC 3231:
    // DS3231 seconds, minutes, hours, day, date, month, year
    //  setDS3231time(00,30,0,1,17,9,17);
}
void setDS3231time(byte second, byte minute, byte hour, byte dayOfWeek, byte dayOfMonth, byte month, byte year){
    // sets time and date data to DS3231
    Wire.beginTransmission(DS3231_I2C_ADDRESS);
    Wire.write(0); // set next input to start at the seconds register
    Wire.write(decToBcd(second)); // set seconds
    Wire.write(decToBcd(minute)); // set minutes
    Wire.write(decToBcd(hour)); // set hours
    Wire.write(decToBcd(dayOfWeek)); // set day of week (1=Sunday, 7=Saturday)
    Wire.write(decToBcd(dayOfMonth)); // set date (1 to 31)
    Wire.write(decToBcd(month)); // set month
    Wire.write(decToBcd(year)); // set year (0 to 99)
    Wire.endTransmission();
}
void readDS3231time(byte *second, byte *minute, byte *hour, byte *dayOfWeek, byte *dayOfMonth, byte *month, byte *year){
    Wire.beginTransmission(DS3231_I2C_ADDRESS);
    Wire.write(0); // set DS3231 register pointer to 00h
    Wire.endTransmission();
    Wire.requestFrom(DS3231_I2C_ADDRESS, 7);
    // request seven bytes of data from DS3231 starting from register 00h
    *second = bcdToDec(Wire.read() & 0x7f);
    *minute = bcdToDec(Wire.read());
    *hour = bcdToDec(Wire.read() & 0x3f);
    *dayOfWeek = bcdToDec(Wire.read());
    *dayOfMonth = bcdToDec(Wire.read());
    *month = bcdToDec(Wire.read());
    *year = bcdToDec(Wire.read());
}
void displayTime(){
    byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
    // retrieve data from DS3231
    readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
    // send it to the serial monitor
    Serial.print(hour, DEC);
    // convert the byte variable to a decimal number when displayed
    Serial.print(":");
    if (minute<10){
        Serial.print("0");
    }
    Serial.print(minute, DEC);
    Serial.print(":");
    if (second<10){
        Serial.print("0");
    }
    Serial.print(second, DEC);
    Serial.print(" ");
    Serial.print(dayOfMonth, DEC);
    Serial.print("/");
    Serial.print(month, DEC);
    Serial.print("/");
    Serial.print(year, DEC);
    Serial.print(" Day of week: ");
    switch(dayOfWeek){
        case 1:
            Serial.println("Nedele");
            break;
        case 2:
            Serial.println("Pondeli");
            break;
        case 3:
            Serial.println("Utery");
            break;
        case 4:
            Serial.println("Streda");
            break;
        case 5:
            Serial.println("Ctvrtek");
            break;
        case 6:
            Serial.println("Patek");
            break;
        case 7:
            Serial.println("Sobota");
            break;
    }
}

 
void loop() {

senzoryDS.requestTemperatures();

if (senzoryDS.getTempCByIndex(0)<= -5) {
   TEPLO = 0;                 //MRZNE
   digitalWrite(MRAZ, HIGH);  //DIODA
  }
  
if (senzoryDS.getTempCByIndex(0)>= -4) {
   TEPLO = 1 ;                 //NEMRZNE
   digitalWrite(MRAZ, LOW);   //DIODA
  }

  Serial.print("Teplota: ");
  Serial.print(senzoryDS.getTempCByIndex(0));
  Serial.println(" stupnu Celsia");



displayTime(); // display the real-time clock data on the Serial Monitor,

byte s, m, h, dvt, dvm, mesic, r;
readDS3231time(&s, &m, &h, &dvt, &dvm, &mesic, &r);


//LEDEN

if (mesic==1 && dvm<=15 && h == 7 &&  m==10 && TEPLO == 1){
  Serial.println("OTVIRAM");
  digitalWrite(5, HIGH);
  digitalWrite(6, HIGH);
}
if (mesic==1 && dvm>=16 && h == 6 &&  m==45 && TEPLO == 1){
  Serial.println("OTVIRAM");
  digitalWrite(5, HIGH);
  digitalWrite(6, HIGH);
}
if (mesic==1 && dvm<=15 && h == 16 &&  m==45){
  Serial.println("ZAVIRAM");
  digitalWrite(5, LOW);
  digitalWrite(6, LOW);
}  
if (mesic==1 && dvm>=16 && h == 17 &&  m==15){
  Serial.println("ZAVIRAM");
  digitalWrite(5, LOW);
  digitalWrite(6, LOW);
}  

//UNOR

if (mesic==2 && dvm<=15 && h == 6 &&  m==30 && TEPLO == 1){
  Serial.println("OTVIRAM");
  digitalWrite(5, HIGH);
  digitalWrite(6, HIGH);
}  
if (mesic==2 && dvm>=16 && h == 6 &&  m==10 && TEPLO == 1){
  Serial.println("OTVIRAM");
  digitalWrite(5, HIGH);
  digitalWrite(6, HIGH);
}  
if (mesic==2 && dvm<=15 && h == 17 &&  m==35){
  Serial.println("ZAVIRAM");
  digitalWrite(5, LOW);
  digitalWrite(6, LOW);
}  
if (mesic==2 && dvm>=16 && h == 18 &&  m==5) {
  Serial.println("ZAVIRAM");
  digitalWrite(5, LOW);
  digitalWrite(6, LOW);
}  

//BREZEN

if (mesic==3 && dvm<=15 && h == 6 &&  m==30 && TEPLO == 1){
  Serial.println("OTVIRAM");
  digitalWrite(5, HIGH);
  digitalWrite(6, HIGH);
}  
if (mesic==3 && dvm>=16 && h == 6 &&  m==10 && TEPLO == 1){
  Serial.println("OTVIRAM");
  digitalWrite(5, HIGH);
  digitalWrite(6, HIGH);
}  
if (mesic==3 && dvm<=15 && h == 17 &&  m==35){
  Serial.println("ZAVIRAM");
  digitalWrite(5, LOW);
  digitalWrite(6, LOW);
}  
if (mesic==3 && dvm>=16 && h == 18 &&  m==5) {
  Serial.println("ZAVIRAM");
  digitalWrite(5, LOW);
  digitalWrite(6, LOW);
}  

//DUBEN

if (mesic==4 && dvm<=15 && h == 5 &&  m==30 && TEPLO == 1){
  Serial.println("OTVIRAM");
  digitalWrite(5, HIGH);
  digitalWrite(6, HIGH);
}  
if (mesic==4 && dvm>=16 && h == 5 &&  m==10 && TEPLO == 1){
  Serial.println("OTVIRAM");
  digitalWrite(5, HIGH);
  digitalWrite(6, HIGH);
}  
if (mesic==4 && dvm<=15 && h == 20 &&  m==10){
  Serial.println("ZAVIRAM");
  digitalWrite(5, LOW);
  digitalWrite(6, LOW);
}  
if (mesic==4 && dvm>=16 && h == 20 &&  m==40){
  Serial.println("ZAVIRAM");
  digitalWrite(5, LOW);
  digitalWrite(6, LOW);
}  

//KVETEN

if (mesic==5 && dvm<=15 && h == 5 &&  m==10 && TEPLO == 1){
  Serial.println("OTVIRAM");
  digitalWrite(5, HIGH);
  digitalWrite(6, HIGH);
}  
if (mesic==5 && dvm>=16 && h == 5 &&  m==10 && TEPLO == 1){
  Serial.println("OTVIRAM");
  digitalWrite(5, HIGH);
  digitalWrite(6, HIGH);
}  
if (mesic==5 && dvm<=15 && h == 20 &&  m==50) {
  Serial.println("ZAVIRAM");
  digitalWrite(5, LOW);
  digitalWrite(6, LOW);
}  
if (mesic==5 && dvm>=16 && h == 21 &&  m==2)  {
  Serial.println("ZAVIRAM");
  digitalWrite(5, LOW);
  digitalWrite(6, LOW);
}  

//CERVEN

if (mesic==6 && dvm<=15 && h == 5 &&  m==10 && TEPLO == 1){
  Serial.println("OTVIRAM");
  digitalWrite(5, HIGH);
  digitalWrite(6, HIGH);
}  
if (mesic==6 && dvm>=16 && h == 5 &&  m==10 && TEPLO == 1){
  Serial.println("OTVIRAM");
  digitalWrite(5, HIGH);
  digitalWrite(6, HIGH);
}  
if (mesic==6 && dvm<=15 && h == 21 &&  m==25)  {
  Serial.println("ZAVIRAM");
  digitalWrite(5, LOW);
  digitalWrite(6, LOW);
}  
if (mesic==6 && dvm>=16 && h == 21 &&  m==25) {
  Serial.println("ZAVIRAM");
  digitalWrite(5, LOW);
  digitalWrite(6, LOW);
}  

//CERVENEC

if (mesic==7 && dvm<=15 && h == 5 &&  m==10 && TEPLO == 1){
  Serial.println("OTVIRAM");
  digitalWrite(5, HIGH);
  digitalWrite(6, HIGH);
}  
if (mesic==7 && dvm>=16 && h == 5 &&  m==10 && TEPLO == 1){
  Serial.println("OTVIRAM");
  digitalWrite(5, HIGH);
  digitalWrite(6, HIGH);
}  
if (mesic==7 && dvm<=15 && h == 21 &&  m==25)  {
  Serial.println("ZAVIRAM");
  digitalWrite(5, LOW);
  digitalWrite(6, LOW);
}  
if (mesic==7 && dvm>=16 && h == 21 &&  m==25){
  Serial.println("ZAVIRAM");
  digitalWrite(5, LOW);
  digitalWrite(6, LOW);
}  

//SRPEN

if (mesic==8 && dvm<=15 && h == 5 &&  m==5 && TEPLO == 1){
  Serial.println("OTVIRAM");
  digitalWrite(5, HIGH);
  digitalWrite(6, HIGH);
}  
if (mesic==8 && dvm>=16 && h == 5 &&  m==20 && TEPLO == 1){
  Serial.println("OTVIRAM");
  digitalWrite(5, HIGH);
  digitalWrite(6, HIGH);
}  
if (mesic==8 && dvm<=15 && h == 21 &&  m==5) {
  Serial.println("ZAVIRAM");
  digitalWrite(5, LOW);
  digitalWrite(6, LOW);
}  
if (mesic==8 && dvm>=16 && h == 20 &&  m==45){
  Serial.println("ZAVIRAM");
  digitalWrite(5, LOW);
  digitalWrite(6, LOW);
}  

//ZARI

if (mesic==9 && dvm<=15 && h == 5 &&  m==40 && TEPLO == 1){
  Serial.println("OTVIRAM");
  digitalWrite(5, HIGH);
  digitalWrite(6, HIGH);
}  
if (mesic==9 && dvm>=16 && h == 5 &&  m==50 && TEPLO == 1) {
  Serial.println("OTVIRAM");
  digitalWrite(5, HIGH);
  digitalWrite(6, HIGH);
}  
if (mesic==9 && dvm<=15 && h == 20 &&  m==5) {
  Serial.println("ZAVIRAM");
  digitalWrite(5, LOW);
  digitalWrite(6, LOW);
}  
if (mesic==9 && dvm>=16 && h == 8 &&  m==58)  {
  Serial.println("ZAVIRAM");
  digitalWrite(5, LOW);
  digitalWrite(6, LOW);
}

//RIJEN

if (mesic==10 && dvm<=15 && h == 6 &&  m==15 && TEPLO == 1) {
  Serial.println("OTVIRAM");
  digitalWrite(5, HIGH);
  digitalWrite(6, HIGH);
}  
if (mesic==10 && dvm>=16 && h == 6 &&  m==30 && TEPLO == 1){
  Serial.println("OTVIRAM");
  digitalWrite(5, HIGH);
  digitalWrite(6, HIGH);
}  
if (mesic==10 && dvm>=1 && h == 14 &&  m==50){
  digitalWrite(6, LOW);    // rozepneme
   digitalWrite(5, LOW);    // rozepneme
   Serial.println("ZAVIRAM");
}  
if (mesic==10 && dvm>=16 && h == 18 &&  m==35) {
  Serial.println("ZAVIRAM");
  digitalWrite(5, LOW);
  digitalWrite(6, LOW);
}  

//LISTOPAD

if (mesic==11 && dvm<=15 && h == 6 &&  m==1 && TEPLO == 1){
  Serial.println("OTVIRAM");
  digitalWrite(5, HIGH);
  digitalWrite(6, HIGH);
}  
if (mesic==11 && dvm>=16 && h == 6 &&  m==30 && TEPLO == 1){
  Serial.println("OTVIRAM");
  digitalWrite(5, HIGH);
  digitalWrite(6, HIGH);
}  
if (mesic==11 && dvm<=15 && h == 17 &&  m==5) {
  Serial.println("ZAVIRAM");
  digitalWrite(5, LOW);
  digitalWrite(6, LOW);
}  
if (mesic==11 && dvm>=16 && h == 16 &&  m==45){
  Serial.println("ZAVIRAM");
  digitalWrite(5, LOW);
  digitalWrite(6, LOW);
}  
//PROSINEC

if (mesic==12 && dvm<=15 && h == 6 &&  m==45 && TEPLO == 1){
  Serial.println("OTVIRAM");
  digitalWrite(5, HIGH);
  digitalWrite(6, HIGH);
}  
if (mesic==12 && dvm>=16 && h == 7 &&  m==10 && TEPLO == 1){
  Serial.println("OTVIRAM");
  digitalWrite(5, HIGH);
  digitalWrite(6, HIGH);
}  
if (mesic==12 && dvm<=15 && h == 16 &&  m==35) {
  Serial.println("ZAVIRAM");
  digitalWrite(5, LOW);
  digitalWrite(6, LOW);
}  
if (mesic==12 && dvm>=16 && h == 16 &&  m==35) {
  Serial.println("ZAVIRAM");
  digitalWrite(5, LOW);
  digitalWrite(6, LOW);
}  

 


delay(29000);


    
 }

seta1J
Příspěvky: 29
Registrován: 02 říj 2017, 04:32
Reputation: 0

Re: Automaticke dvirka na cas

Příspěvek od seta1J » 04 říj 2017, 06:28

Ahoj,
myslím, že vhodné by bylo např. časy otvírání (zavírání) dát do 2 polí float (na 0 pozici=leden, ...) , čas psát třeba jako 7,15 (7hodin 15 minut), otvírání (zavírání) volat jako void otvírání, ... .
Bylo by to přehlednější.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 10 hostů