Skocz do zawartości

Wykorzystanie millis do sterowania wielu przekaźników


damiant

Pomocna odpowiedź

Wtitam serdecznie.

Jestem zielony w programowaniu Arduino lecz próbuje swoich sił aby się nauczyć czegoś nowego. 

po przeczytaniu tego kuru mam pytanie. jak wykonać sterowanie kilkoma przekaźnikami z użyciem millis() ponieważ w moim programie po próbie wysterowanie przekaźników zapalają się wszystkie naraz. Na delay wszystko pracuje poprawnie (poza wyłącznikiem czasowym) lecz jak wiadomo delay mrozi mi  program i moje założenia umierają w zalążku. 

Może ktoś podpowiedzieć co robię źle?? 

cały program ma wyglądać jakoś tak tylko tu zrobiłem na delay i coś wyłączenie po czasie szwankuje. pierwsze wyłączenie po załączeniu sterownika jest ok, kolejne razy juz nie. 


int przekaznik1 = 2;                //przekaznik1 podłączamy do pinu 2
int przekaznik2 = 3;                //przekaznik2 podłączamy do pinu 3
int przekaznik3 = 4;                //przekaznik1 podłączamy do pinu 4
int przekaznik4 = 5;                //przekaznik1 podłączamy do pinu 5
int przekaznik5 = 6;                //przekaznik2 podłączamy do pinu 6
int przekaznik6 = 7;                //przekaznik1 podłączamy do pinu 7
int przekaznik7 = 8;                //przekaznik1 podłączamy do pinu 8
int przekaznik8 = 9;                //przekaznik2 podłączamy do pinu 9
int przekaznik9 = 10;               //przekaznik1 podłączamy do pinu 10
int przekaznik10 = 11;              //przekaznik1 podłączamy do pinu 11
int przekaznik11 = 12;              //przekaznik2 podłączamy do pinu 12
int przekaznik12 = 13;              //przekaznik1 podłączamy do pinu 13
int przekaznik13 = A0;              //przekaznik1 podłączamy do pinu A0
int przekaznik14 = A1;              //przekaznik2 podłączamy do pinu A1
int przekaznik15 = A2;              //przekaznik2 podłączamy do pinu A2
int przekaznik16 = A3;              //przekaznik2 podłączamy do pinu A3
int przycisk_dol = 0;               //przycisk dol podłączamy do pinu 0
int przycisk_gora = 1;              //przyciskgora podłączamy do pinu 1
bool sp1 = 0;                    //zmienna boolowska sp1 do steowania stanem przekazników
bool sp2 = 1;                    //zmienna boolowska sp2 do steowania stanem przycisków
bool sp3 = 0;
bool sp4 = 0;
unsigned long aktualnyCzas = millis();
unsigned long zapamietanyCzasW = 0;
unsigned long czasSwiecenia = 10000UL;
unsigned long czasPrzejscia = 200UL;
unsigned long ruznicaCzasu = 0;
unsigned long czasWygaszania = 100UL;

void setup()
{
  Serial.begin(9600);
  pinMode(przekaznik1, OUTPUT);       //przekaznik1 jako wyjście
  pinMode(przekaznik2, OUTPUT);       //przekaznik2 jako wyjście
  pinMode(przekaznik3, OUTPUT);       //przekaznik3 jako wyjście
  pinMode(przekaznik4, OUTPUT);       //przekaznik4 jako wyjście
  pinMode(przekaznik5, OUTPUT);       //przekaznik5 jako wyjście
  pinMode(przekaznik6, OUTPUT);       //przekaznik6 jako wyjście
  pinMode(przekaznik7, OUTPUT);       //przekaznik7 jako wyjście
  pinMode(przekaznik8, OUTPUT);       //przekaznik8 jako wyjście
  pinMode(przekaznik9, OUTPUT);       //przekaznik9 jako wyjście
  pinMode(przekaznik10, OUTPUT);      //przekaznik10 jako wyjście
  pinMode(przekaznik11, OUTPUT);      //przekaznik11 jako wyjście
  pinMode(przekaznik12, OUTPUT);      //przekaznik12 jako wyjście
  pinMode(przekaznik13, OUTPUT);      //przekaznik13 jako wyjście
  pinMode(przekaznik14, OUTPUT);      //przekaznik14 jako wyjście
  pinMode(przekaznik15, OUTPUT);      //przekaznik15 jako wyjście
  pinMode(przekaznik16, OUTPUT);      //przekaznik16 jako wyjście


  pinMode(przycisk_dol, INPUT_PULLUP);   //przycisk1 jako wejście z programowym pull-upem
  pinMode(przycisk_gora, INPUT_PULLUP);   //przycisk2 jako wejście z programowym pull-upem


  digitalWrite(przekaznik1, HIGH);     //stan początkowy przekaznika1 wysoki
  digitalWrite(przekaznik2, HIGH);     //stan początkowy przekaznika2 wysoki
  digitalWrite(przekaznik3, HIGH);     //stan początkowy przekaznika3 wysoki
  digitalWrite(przekaznik4, HIGH);     //stan początkowy przekaznika4 wysoki
  digitalWrite(przekaznik5, HIGH);     //stan początkowy przekaznika5 wysoki
  digitalWrite(przekaznik6, HIGH);     //stan początkowy przekaznika6 wysoki
  digitalWrite(przekaznik7, HIGH);     //stan początkowy przekaznika7 wysoki
  digitalWrite(przekaznik8, HIGH);     //stan początkowy przekaznika8 wysoki
  digitalWrite(przekaznik9, HIGH);     //stan początkowy przekaznika9 wysoki
  digitalWrite(przekaznik10, HIGH);    //stan początkowy przekaznika10 wysoki
  digitalWrite(przekaznik11, HIGH);    //stan początkowy przekaznika11 wysoki
  digitalWrite(przekaznik12, HIGH);    //stan początkowy przekaznika12 wysoki
  digitalWrite(przekaznik13, HIGH);    //stan początkowy przekaznika13 wysoki
  digitalWrite(przekaznik14, HIGH);    //stan początkowy przekaznika14 wysoki
  digitalWrite(przekaznik15, HIGH);    //stan początkowy przekaznika15 wysoki
  digitalWrite(przekaznik16, HIGH);    //stan początkowy przekaznika16 wysoki

}

void loop()
{
  aktualnyCzas = millis();
  if (digitalRead(przycisk_gora) == 0 && sp3 == 0) //jezeli przycisk1 zostal wcisniety:
  {
    sp3 = 1 ;
    Serial.println("sp3 = 1");
    digitalWrite(przekaznik16, sp1);    //stan przekaźnika ustaw taki jak jest stan sp1
    Serial.println("przekaznik16 on");
    delay(czasPrzejscia);                   //odczekaj
    digitalWrite(przekaznik15, sp1);   //stan przekaźnika ustaw taki jak jest stan sp1
    Serial.println("przekaznik15 on");
    delay(czasPrzejscia);                       //odczekaj
    digitalWrite(przekaznik14, sp1);   //stan przekaźnika ustaw taki jak jest stan sp1
    Serial.println("przekaznik14 on");
    delay(czasPrzejscia);                      //odczekaj
    digitalWrite(przekaznik13, sp1);   //stan przekaźnika ustaw taki jak jest stan sp1
    Serial.println("przekaznik13 on");
    delay(czasPrzejscia);                       //odczekaj
    digitalWrite(przekaznik12, sp1);   //stan przekaźnika ustaw taki jak jest stan sp1
    Serial.println("przekaznik12 on");
    delay(czasPrzejscia);                      //odczekaj
    digitalWrite(przekaznik11, sp1);   //stan przekaźnika ustaw taki jak jest stan sp1
    Serial.println("przekaznik11 on");
    delay(czasPrzejscia);                       //odczekaj
    digitalWrite(przekaznik10, sp1);   //stan przekaźnika ustaw taki jak jest stan sp1
    Serial.println("przekaznik10on");
    delay(czasPrzejscia);                      //odczekaj
    digitalWrite(przekaznik9, sp1);   //stan przekaźnika ustaw taki jak jest stan sp1
    Serial.println("przekaznik9 on");
    delay(czasPrzejscia);                       //odczekaj
    digitalWrite(przekaznik8, sp1);   //stan przekaźnika ustaw taki jak jest stan sp1
    Serial.println("przekaznik8 on");
    delay(czasPrzejscia);                      //odczekaj
    digitalWrite(przekaznik7, sp1);   //stan przekaźnika ustaw taki jak jest stan sp1
    Serial.println("przekaznik7on");
    delay(czasPrzejscia);                       //odczekaj
    digitalWrite(przekaznik6, sp1);   //stan przekaźnika ustaw taki jak jest stan sp1
    Serial.println("przekaznik6 on");
    delay(czasPrzejscia);                      //odczekaj
    digitalWrite(przekaznik5, sp1);   //stan przekaźnika ustaw taki jak jest stan sp1
    Serial.println("przekaznik5 on");
    delay(czasPrzejscia);                       //odczekaj
    digitalWrite(przekaznik4, sp1);   //stan przekaźnika ustaw taki jak jest stan sp1
    Serial.println("przekaznik4 on");
    delay(czasPrzejscia);                      //odczekaj
    digitalWrite(przekaznik3, sp1);   //stan przekaźnika ustaw taki jak jest stan sp1
    Serial.println("przekaznik3 on");
    delay(czasPrzejscia);                       //odczekaj
    digitalWrite(przekaznik2, sp1);   //stan przekaźnika ustaw taki jak jest stan sp1
    Serial.println("przekaznik2 on");
    delay(czasPrzejscia);                      //odczekaj
    digitalWrite(przekaznik1, sp1);   //stan przekaźnika ustaw taki jak jest stan sp1
    Serial.println("przekaznik1 on");


    aktualnyCzas = zapamietanyCzasW;
    Serial.println(zapamietanyCzasW);
  }

  else if (digitalRead(przycisk_dol) == 0 & sp3 == 1 )  //jezeli przycisk1 zostal wcisniety
  { sp3 = 0;
    Serial.print( "sp3 = 0 ");

    digitalWrite(przekaznik16, sp2);   //stan przekaźnika ustaw taki jak jest stan sp2
    Serial.println("przekaznik16 off");
    delay(czasWygaszania);                      //odczekaj
    digitalWrite(przekaznik15, sp2);   //stan przekaźnika ustaw taki jak jest stan sp2
    Serial.println("przekaznik15 off");
    delay(czasWygaszania);                       //odczekaj
    digitalWrite(przekaznik14, sp2);   //stan przekaźnika ustaw taki jak jest stan sp2
    Serial.println("przekaznik14 off");             //odczekaj
    delay(czasWygaszania);
    digitalWrite(przekaznik13, sp2);   //stan przekaźnika ustaw taki jak jest stan sp2
    Serial.println("przekaznik13 off");
    delay(czasWygaszania);                      //odczekaj
    digitalWrite(przekaznik12, sp2);   //stan przekaźnika ustaw taki jak jest stan sp2
    Serial.println("przekaznik12 off");
    delay(czasWygaszania);                      //odczekaj
    digitalWrite(przekaznik11, sp2);   //stan przekaźnika ustaw taki jak jest stan sp2
    Serial.println("przekaznik11 off");
    delay(czasWygaszania);                       //odczekaj
    digitalWrite(przekaznik10, sp2);   //stan przekaźnika ustaw taki jak jest stan sp2
    Serial.println("przekaznik10 off");
    delay(czasWygaszania);                      //odczekaj
    digitalWrite(przekaznik9, sp2);   //stan przekaźnika ustaw taki jak jest stan sp2
    Serial.println("przekaznik9 off");
    delay(czasWygaszania);                       //odczekaj
    digitalWrite(przekaznik8, sp2);   //stan przekaźnika ustaw taki jak jest stan sp2
    Serial.println("przekaznik8 off");
    delay(czasWygaszania);                      //odczekaj
    digitalWrite(przekaznik7, sp2);   //stan przekaźnika ustaw taki jak jest stan sp2
    Serial.println("przekaznik7 off");
    delay(czasWygaszania);                       //odczekaj
    digitalWrite(przekaznik6, sp2);   //stan przekaźnika ustaw taki jak jest stan sp2
    Serial.println("przekaznik6 off");
    delay(czasWygaszania);                      //odczekaj
    digitalWrite(przekaznik5, sp2);   //stan przekaźnika ustaw taki jak jest stan sp2
    Serial.println("przekaznik5 off");
    delay(czasWygaszania);                       //odczekaj
    digitalWrite(przekaznik4, sp2);   //stan przekaźnika ustaw taki jak jest stan sp2
    Serial.println("przekaznik4 off");
    delay(czasWygaszania);                      //odczekaj
    digitalWrite(przekaznik3, sp2);   //stan przekaźnika ustaw taki jak jest stan sp2
    Serial.println("przekaznik3 off");
    delay(czasWygaszania);                       //odczekaj
    digitalWrite(przekaznik2, sp2);   //stan przekaźnika ustaw taki jak jest stan sp2
    Serial.println("przekaznik2 off");
    delay(czasWygaszania);                      //odczekaj
    digitalWrite(przekaznik1, sp2);   //stan przekaźnika ustaw taki jak jest stan sp2
    Serial.println("przekaznik1 off");
  }

  if (millis() - zapamietanyCzasW >= czasSwiecenia & sp3 == 1 )
  {
    sp3 = 0   ;

    Serial.println(" sp3 = 0 po czasie");
    digitalWrite(przekaznik16, sp2);   //stan przekaźnika ustaw taki jak jest stan sp2
    Serial.println("przekaznik16 off po czasie");
    delay(czasWygaszania);                      //odczekaj
    digitalWrite(przekaznik15, sp2);   //stan przekaźnika ustaw taki jak jest stan sp2
    Serial.println("przekaznik15 off po czasie");
    delay(czasWygaszania);                       //odczekaj
    digitalWrite(przekaznik14, sp2);   //stan przekaźnika ustaw taki jak jest stan sp2
    Serial.println("przekaznik14 off po czasie");
    delay(czasWygaszania);                      //odczekaj
    digitalWrite(przekaznik13, sp2);   //stan przekaźnika ustaw taki jak jest stan sp2
    Serial.println("przekaznik13 off po czasie");
    delay(czasWygaszania);                       //odczekaj
    digitalWrite(przekaznik12, sp2);   //stan przekaźnika ustaw taki jak jest stan sp2
    Serial.println("przekaznik12 off po czasie");
    delay(czasWygaszania);                      //odczekaj
    digitalWrite(przekaznik11, sp2);   //stan przekaźnika ustaw taki jak jest stan sp2
    Serial.println("przekaznik11 off po czasie");
    delay(czasWygaszania);                       //odczekaj
    digitalWrite(przekaznik10, sp2);   //stan przekaźnika ustaw taki jak jest stan sp2
    Serial.println("przekaznik10 off po czasie");
    delay(czasWygaszania);                      //odczekaj
    digitalWrite(przekaznik9, sp2);   //stan przekaźnika ustaw taki jak jest stan sp2
    Serial.println("przekaznik9 off po czasie");
    delay(czasWygaszania);                       //odczekaj
    digitalWrite(przekaznik8, sp2);   //stan przekaźnika ustaw taki jak jest stan sp2
    Serial.println("przekaznik8 off po czasie");
    delay(czasWygaszania);                      //odczekaj
    digitalWrite(przekaznik7, sp2);   //stan przekaźnika ustaw taki jak jest stan sp2
    Serial.println("przekaznik7 off po czasie");
    delay(czasWygaszania);                       //odczekaj
    digitalWrite(przekaznik6, sp2);   //stan przekaźnika ustaw taki jak jest stan sp2
    Serial.println("przekaznik6 off po czasie");
    delay(czasWygaszania);                      //odczekaj
    digitalWrite(przekaznik5, sp2);   //stan przekaźnika ustaw taki jak jest stan sp2
    Serial.println("przekaznik5 off po czasie");
    delay(czasWygaszania);                       //odczekaj
    digitalWrite(przekaznik4, sp2);   //stan przekaźnika ustaw taki jak jest stan sp2
    Serial.println("przekaznik4 off po czasie");
    delay(czasWygaszania);                      //odczekaj
    digitalWrite(przekaznik3, sp2);   //stan przekaźnika ustaw taki jak jest stan sp2
    Serial.println("przekaznik3 off po czasie");
    delay(czasWygaszania);                       //odczekaj
    digitalWrite(przekaznik2, sp2);   //stan przekaźnika ustaw taki jak jest stan sp2
    Serial.println("przekaznik2 off po czasie");
    delay(czasWygaszania);                      //odczekaj
    digitalWrite(przekaznik1, sp2);   //stan przekaźnika ustaw taki jak jest stan sp2
    Serial.println("przekaznik1 off po czasie");

  }

  if (digitalRead(przycisk_dol) == 0 && sp4 == 0) //jezeli przycisk1 zostal wcisniety:
  {
    sp4 = 1 ;
    Serial.println("sp4 = 1 ");
    digitalWrite(przekaznik1, sp1);
    Serial.println("przekaznik1 on");
    delay(czasPrzejscia);
    digitalWrite(przekaznik2, sp1);   //stan przekaźnika ustaw taki jak jest stan sp1
    Serial.println("przekaznik2 on");
    delay(czasPrzejscia);                       //odczekaj
    digitalWrite(przekaznik3, sp1);   //stan przekaźnika ustaw taki jak jest stan sp1
    Serial.println("przekaznik3 on");
    delay(czasPrzejscia);                      //odczekaj
    digitalWrite(przekaznik4, sp1);   //stan przekaźnika ustaw taki jak jest stan sp1
    Serial.println("przekaznik4 on");
    delay(czasPrzejscia);                       //odczekaj
    digitalWrite(przekaznik5, sp1);   //stan przekaźnika ustaw taki jak jest stan sp1
    Serial.println("przekaznik5 on");
    delay(czasPrzejscia);                      //odczekaj
    digitalWrite(przekaznik6, sp1);   //stan przekaźnika ustaw taki jak jest stan sp1
    Serial.println("przekaznik6 on");
    delay(czasPrzejscia);                       //odczekaj
    digitalWrite(przekaznik7, sp1);   //stan przekaźnika ustaw taki jak jest stan sp1
    Serial.println("przekaznik7 on");
    delay(czasPrzejscia);                      //odczekaj
    digitalWrite(przekaznik8, sp1);   //stan przekaźnika ustaw taki jak jest stan sp1
    Serial.println("przekaznik8 on");
    delay(czasPrzejscia);                       //odczekaj
    digitalWrite(przekaznik9, sp1);   //stan przekaźnika ustaw taki jak jest stan sp1
    Serial.println("przekaznik9 on");
    delay(czasPrzejscia);                      //odczekaj
    digitalWrite(przekaznik10, sp1);   //stan przekaźnika ustaw taki jak jest stan sp1
    Serial.println("przekaznik10 on");
    delay(czasPrzejscia);                       //odczekaj
    digitalWrite(przekaznik11, sp1);   //stan przekaźnika ustaw taki jak jest stan sp1
    Serial.println("przekaznik11 on");
    delay(czasPrzejscia);                      //odczekaj
    digitalWrite(przekaznik12, sp1);   //stan przekaźnika ustaw taki jak jest stan sp1
    Serial.println("przekaznik12 on");
    delay(czasPrzejscia);                       //odczekaj
    digitalWrite(przekaznik13, sp1);   //stan przekaźnika ustaw taki jak jest stan sp1
    Serial.println("przekaznik13 on");
    delay(czasPrzejscia);                      //odczekaj
    digitalWrite(przekaznik14, sp1);   //stan przekaźnika ustaw taki jak jest stan sp1
    Serial.println("przekaznik14 on");
    delay(czasPrzejscia);                       //odczekaj
    digitalWrite(przekaznik15, sp1);   //stan przekaźnika ustaw taki jak jest stan sp1
    Serial.println("przekaznik15 on");
    delay(czasPrzejscia);                      //odczekaj
    digitalWrite(przekaznik16, sp1);   //stan przekaźnika ustaw taki jak jest stan sp1
    Serial.println("przekaznik16 on");

    aktualnyCzas = millis();
    aktualnyCzas = zapamietanyCzasW;
    Serial.println(zapamietanyCzasW);
  }

  else if (digitalRead(przycisk_gora) == 0 & sp4 == 1)  //jezeli przycisk1 zostal wcisniety
  { sp4 = 0;
    Serial.print("sp4 = 0");

    digitalWrite(przekaznik1, sp2);   //stan przekaźnika ustaw taki jak jest stan sp2
    Serial.println("przekaznik1 off");
    delay(czasWygaszania);                      //odczekaj
    digitalWrite(przekaznik2, sp2);   //stan przekaźnika ustaw taki jak jest stan sp2
    Serial.println("przekaznik2 off");
    delay(czasWygaszania);                       //odczekaj
    digitalWrite(przekaznik3, sp2);   //stan przekaźnika ustaw taki jak jest stan sp2
    Serial.println("przekaznik3 off");
    delay(czasWygaszania);                        //odczekaj
    digitalWrite(przekaznik4, sp2);   //stan przekaźnika ustaw taki jak jest stan sp2
    Serial.println("przekaznik4 off");
    delay(czasWygaszania);                       //odczekaj
    digitalWrite(przekaznik5, sp2);   //stan przekaźnika ustaw taki jak jest stan sp1
    Serial.println("przekaznik5 off");
    delay(czasWygaszania);                      //odczekaj
    digitalWrite(przekaznik6, sp2);   //stan przekaźnika ustaw taki jak jest stan sp2
    Serial.println("przekaznik6 off");
    delay(czasWygaszania);                       //odczekaj
    digitalWrite(przekaznik7, sp2);   //stan przekaźnika ustaw taki jak jest stan sp2
    Serial.println("przekaznik7 off");
    delay(czasWygaszania);                      //odczekaj
    digitalWrite(przekaznik8, sp2);   //stan przekaźnika ustaw taki jak jest stan sp2
    Serial.println("przekaznik8 off");
    delay(czasWygaszania);                       //odczekaj
    digitalWrite(przekaznik9, sp2);   //stan przekaźnika ustaw taki jak jest stan sp2
    Serial.println("przekaznik9 off");
    delay(czasWygaszania);                      //odczekaj
    digitalWrite(przekaznik10, sp2);   //stan przekaźnika ustaw taki jak jest stan sp2
    Serial.println("przekaznik10 off");
    delay(czasWygaszania);                       //odczekaj
    digitalWrite(przekaznik11, sp2);   //stan przekaźnika ustaw taki jak jest stan sp1
    Serial.println("przekaznik11 off");
    delay(czasWygaszania);                      //odczekaj
    digitalWrite(przekaznik12, sp2);   //stan przekaźnika ustaw taki jak jest stan sp2
    Serial.println("przekaznik12 off");
    delay(czasWygaszania);                       //odczekaj
    digitalWrite(przekaznik13, sp2);   //stan przekaźnika ustaw taki jak jest stan sp2
    Serial.println("przekaznik13 off");
    delay(czasWygaszania);                      //odczekaj
    digitalWrite(przekaznik14, sp2);   //stan przekaźnika ustaw taki jak jest stan sp2
    Serial.println("przekaznik14 off");
    delay(czasWygaszania);                       //odczekaj
    digitalWrite(przekaznik15, sp2);   //stan przekaźnika ustaw taki jak jest stan sp2
    Serial.println("przekaznik15 off");
    delay(czasWygaszania);                      //odczekaj
    digitalWrite(przekaznik16, sp2);   //stan przekaźnika ustaw taki jak jest stan sp2
    Serial.println("przekaznik16 off");

  }
  if (millis() - zapamietanyCzasW >= czasSwiecenia & sp4 == 1) {
    sp4 = 0   ;
    Serial.println("sp4 = 0 po czasie");
    digitalWrite(przekaznik1, sp2);   //stan przekaźnika ustaw taki jak jest stan sp2
    Serial.println("przekaznik1 off po czasie");
    delay(czasWygaszania);                      //odczekaj
    digitalWrite(przekaznik2, sp2);   //stan przekaźnika ustaw taki jak jest stan sp2
    Serial.println("przekaznik2 off po czasie");
    delay(czasWygaszania);                       //odczekaj
    digitalWrite(przekaznik3, sp2);   //stan przekaźnika ustaw taki jak jest stan sp2
    Serial.println("przekaznik3 off po czasie");
    delay(czasWygaszania);                      //odczekaj
    digitalWrite(przekaznik4, sp2);   //stan przekaźnika ustaw taki jak jest stan sp2
    Serial.println("przekaznik4 off po czasie");
    delay(czasWygaszania);                       //odczekaj
    digitalWrite(przekaznik5, sp2);   //stan przekaźnika ustaw taki jak jest stan sp2
    Serial.println("przekaznik5 off po czasie");
    delay(czasWygaszania);                      //odczekaj
    digitalWrite(przekaznik6, sp2);   //stan przekaźnika ustaw taki jak jest stan sp2
    Serial.println("przekaznik6 off po czasie");
    delay(czasWygaszania);                       //odczekaj
    digitalWrite(przekaznik7, sp2);   //stan przekaźnika ustaw taki jak jest stan sp2
    Serial.println("przekaznik7 off po czasie");
    delay(czasWygaszania);                      //odczekaj
    digitalWrite(przekaznik8, sp2);   //stan przekaźnika ustaw taki jak jest stan sp2
    Serial.println("przekaznik8 off po czasie");
    delay(czasWygaszania);                       //odczekaj
    digitalWrite(przekaznik9, sp2);   //stan przekaźnika ustaw taki jak jest stan sp2
    Serial.println("przekaznik9 off po czasie");
    delay(czasWygaszania);                      //odczekaj
    digitalWrite(przekaznik10, sp2);   //stan przekaźnika ustaw taki jak jest stan sp2
    Serial.println("przekaznik10 off po czasie");
    delay(czasWygaszania);                       //odczekaj
    digitalWrite(przekaznik11, sp2);   //stan przekaźnika ustaw taki jak jest stan sp1
    Serial.println("przekaznik11 off po czasie");
    delay(czasWygaszania);                      //odczekaj
    digitalWrite(przekaznik12, sp2);   //stan przekaźnika ustaw taki jak jest stan sp2
    Serial.println("przekaznik12 off po czasie");
    delay(czasWygaszania);                       //odczekaj
    digitalWrite(przekaznik13, sp2);   //stan przekaźnika ustaw taki jak jest stan sp2
    Serial.println("przekaznik13 off po czasie");
    delay(czasWygaszania);                      //odczekaj
    digitalWrite(przekaznik14, sp2);   //stan przekaźnika ustaw taki jak jest stan sp2
    Serial.println("przekaznik14 off po czasie");
    delay(czasWygaszania);                       //odczekaj
    digitalWrite(przekaznik15, sp2);   //stan przekaźnika ustaw taki jak jest stan sp2
    Serial.println("przekaznik15 off po czasie");
    delay(czasWygaszania);                      //odczekaj
    digitalWrite(przekaznik16, sp2);   //stan przekaźnika ustaw taki jak jest stan sp2
    Serial.println("przekaznik16 off po czasie");

  }
}

a przy próbie z millis wszystko włącza się na raz.


int przekaznik1 = 2;                //przekaznik1 podłączamy do pinu 2
int przekaznik2 = 3;                //przekaznik2 podłączamy do pinu 3
int przekaznik3 = 4;                //przekaznik1 podłączamy do pinu 4
int przekaznik4 = 5;                //przekaznik1 podłączamy do pinu 5
int przekaznik5 = 6;                //przekaznik2 podłączamy do pinu 6
int przekaznik6 = 7;                //przekaznik1 podłączamy do pinu 7
int przekaznik7 = 8;                //przekaznik1 podłączamy do pinu 8
int przekaznik8 = 9;                //przekaznik2 podłączamy do pinu 9
int przekaznik9 = 10;               //przekaznik1 podłączamy do pinu 10
int przekaznik10 = 11;              //przekaznik1 podłączamy do pinu 11
int przekaznik11 = 12;              //przekaznik2 podłączamy do pinu 12
int przekaznik12 = 13;              //przekaznik1 podłączamy do pinu 13
int przekaznik13 = A0;              //przekaznik1 podłączamy do pinu A0
int przekaznik14 = A1;              //przekaznik2 podłączamy do pinu A1
int przekaznik15 = A2;              //przekaznik2 podłączamy do pinu A2
int przekaznik16 = A3;              //przekaznik2 podłączamy do pinu A3
int przycisk_dol = 0;               //przycisk dol podłączamy do pinu 0
int przycisk_gora = 1;              //przyciskgora podłączamy do pinu 1
bool sp1 = 0;                    //zmienna boolowska sp1 do steowania stanem przekazników
bool sp2 = 1;                    //zmienna boolowska sp2 do steowania stanem przycisków
bool sp3 = 0;
bool sp4 = 0;
unsigned long aktualnyCzas = 0;
unsigned long czasPrzejscia = 100UL;
unsigned long roznicaCzasu = 0;
unsigned long zapamietanyCzas = 0;
unsigned long czekaj = 200UL;


void setup()
{

  Serial.begin(9600);
  pinMode(przekaznik1, OUTPUT);       //przekaznik1 jako wyjście
  pinMode(przekaznik2, OUTPUT);       //przekaznik2 jako wyjście
  pinMode(przekaznik3, OUTPUT);       //przekaznik3 jako wyjście
  pinMode(przekaznik4, OUTPUT);       //przekaznik4 jako wyjście
  pinMode(przekaznik5, OUTPUT);       //przekaznik5 jako wyjście
  pinMode(przekaznik6, OUTPUT);       //przekaznik6 jako wyjście
  pinMode(przekaznik7, OUTPUT);       //przekaznik7 jako wyjście
  pinMode(przekaznik8, OUTPUT);       //przekaznik8 jako wyjście
  pinMode(przekaznik9, OUTPUT);       //przekaznik9 jako wyjście
  pinMode(przekaznik10, OUTPUT);      //przekaznik10 jako wyjście
  pinMode(przekaznik11, OUTPUT);      //przekaznik11 jako wyjście
  pinMode(przekaznik12, OUTPUT);      //przekaznik12 jako wyjście
  pinMode(przekaznik13, OUTPUT);      //przekaznik13 jako wyjście
  pinMode(przekaznik14, OUTPUT);      //przekaznik14 jako wyjście
  pinMode(przekaznik15, OUTPUT);      //przekaznik15 jako wyjście
  pinMode(przekaznik16, OUTPUT);      //przekaznik16 jako wyjście


  pinMode(przycisk_dol, INPUT_PULLUP);   //przycisk1 jako wejście z programowym pull-upem
  pinMode(przycisk_gora, INPUT_PULLUP);   //przycisk2 jako wejście z programowym pull-upem


  digitalWrite(przekaznik1, HIGH);     //stan początkowy przekaznika1 wysoki
  digitalWrite(przekaznik2, HIGH);     //stan początkowy przekaznika2 wysoki
  digitalWrite(przekaznik3, HIGH);     //stan początkowy przekaznika3 wysoki
  digitalWrite(przekaznik4, HIGH);     //stan początkowy przekaznika4 wysoki
  digitalWrite(przekaznik5, HIGH);     //stan początkowy przekaznika5 wysoki
  digitalWrite(przekaznik6, HIGH);     //stan początkowy przekaznika6 wysoki
  digitalWrite(przekaznik7, HIGH);     //stan początkowy przekaznika7 wysoki
  digitalWrite(przekaznik8, HIGH);     //stan początkowy przekaznika8 wysoki
  digitalWrite(przekaznik9, HIGH);     //stan początkowy przekaznika9 wysoki
  digitalWrite(przekaznik10, HIGH);    //stan początkowy przekaznika10 wysoki
  digitalWrite(przekaznik11, HIGH);    //stan początkowy przekaznika11 wysoki
  digitalWrite(przekaznik12, HIGH);    //stan początkowy przekaznika12 wysoki
  digitalWrite(przekaznik13, HIGH);    //stan początkowy przekaznika13 wysoki
  digitalWrite(przekaznik14, HIGH);    //stan początkowy przekaznika14 wysoki
  digitalWrite(przekaznik15, HIGH);    //stan początkowy przekaznika15 wysoki
  digitalWrite(przekaznik16, HIGH);    //stan początkowy przekaznika16 wysoki

}

void loop()
{
  { aktualnyCzas = millis();

    if (digitalRead(przycisk_gora) == 0 & sp3 == 0)  //jezeli przycisk1 zostal wcisniety:
    {
      sp3 = 1 ;
      Serial.println("sp3 = 1 ");

      digitalWrite(przekaznik16, sp1);
      Serial.println("przekaznik16 on");
      if (czekaj <= millis() - zapamietanyCzas & przekaznik16 == 0); {
        digitalWrite(przekaznik15, sp1);   //stan przekaźnika ustaw taki jak jest stan sp1
        Serial.println("przekaznik15 on");
        zapamietanyCzas = aktualnyCzas;
        if (czekaj <= millis() - zapamietanyCzas & przekaznik15 == 0); {
          digitalWrite(przekaznik14, sp1);   //stan przekaźnika ustaw taki jak jest stan sp1
          Serial.println("przekaznik14 on");
          zapamietanyCzas = aktualnyCzas;
          if (czekaj <= millis() - zapamietanyCzas & przekaznik14 == 0); {
            digitalWrite(przekaznik13, sp1);   //stan przekaźnika ustaw taki jak jest stan sp1
            Serial.println("przekaznik13 on");
            zapamietanyCzas = aktualnyCzas;
            if (czekaj <= millis() - zapamietanyCzas & przekaznik13 == 0); {                //odczekaj 
              digitalWrite(przekaznik12, sp1);   //stan przekaźnika ustaw taki jak jest stan sp1
              Serial.println("przekaznik12 on");
              zapamietanyCzas = aktualnyCzas;
              if (czekaj <= millis() - zapamietanyCzas & przekaznik12 == 0); {                //odczekaj 
                digitalWrite(przekaznik11, sp1);   //stan przekaźnika ustaw taki jak jest stan sp1
                Serial.println("przekaznik11 on");
                zapamietanyCzas = aktualnyCzas;
                if (czekaj <= millis() - zapamietanyCzas & przekaznik11 == 0); {                 //odczekaj 
                  digitalWrite(przekaznik10, sp1);   //stan przekaźnika ustaw taki jak jest stan sp1
                  Serial.println("przekaznik10on");
                  zapamietanyCzas = aktualnyCzas;
                  if (czekaj <= millis() - zapamietanyCzas & przekaznik10 == 0); {               //odczekaj 
                    digitalWrite(przekaznik9, sp1);   //stan przekaźnika ustaw taki jak jest stan sp1
                    Serial.println("przekaznik9 on");
                    zapamietanyCzas = aktualnyCzas;
                    if (czekaj <= millis() - zapamietanyCzas & przekaznik9 == 0); {                 //odczekaj 
                      digitalWrite(przekaznik8, sp1);   //stan przekaźnika ustaw taki jak jest stan sp1
                      Serial.println("przekaznik8 on");
                      zapamietanyCzas = aktualnyCzas;
                      if (czekaj <= millis() - zapamietanyCzas & przekaznik8 == 0); {             //odczekaj 
                        digitalWrite(przekaznik7, sp1);   //stan przekaźnika ustaw taki jak jest stan sp1
                        Serial.println("przekaznik7on");
                        zapamietanyCzas = aktualnyCzas;
                        if (czekaj <= millis() - zapamietanyCzas & przekaznik7 == 0); {                 //odczekaj 
                          digitalWrite(przekaznik6, sp1);   //stan przekaźnika ustaw taki jak jest stan sp1
                          Serial.println("przekaznik6 on");
                          zapamietanyCzas = aktualnyCzas;
                          if (czekaj <= millis() - zapamietanyCzas & przekaznik6 == 0); {               //odczekaj 
                            digitalWrite(przekaznik5, sp1);   //stan przekaźnika ustaw taki jak jest stan sp1
                            Serial.println("przekaznik5 on");
                            zapamietanyCzas = aktualnyCzas;
                            if (czekaj <= millis() - zapamietanyCzas & przekaznik5 == 0); {                 //odczekaj 
                              digitalWrite(przekaznik4, sp1);   //stan przekaźnika ustaw taki jak jest stan sp1
                              Serial.println("przekaznik4 on");
                              zapamietanyCzas = aktualnyCzas;
                              if (czekaj <= millis() - zapamietanyCzas & przekaznik4 == 0); {               //odczekaj 
                                digitalWrite(przekaznik3, sp1);   //stan przekaźnika ustaw taki jak jest stan sp1
                                Serial.println("przekaznik3 on");
                                zapamietanyCzas = aktualnyCzas;
                                if (czekaj <= millis() - zapamietanyCzas & przekaznik3 == 0); {                 //odczekaj 
                                  digitalWrite(przekaznik2, sp1);   //stan przekaźnika ustaw taki jak jest stan sp1
                                  Serial.println("przekaznik2 on");
                                  zapamietanyCzas = aktualnyCzas;
                                  if (czekaj <= millis() - zapamietanyCzas & przekaznik2 == 0); {                //odczekaj 
                                    digitalWrite(przekaznik1, sp1);   //stan przekaźnika ustaw taki jak jest stan sp1
                                    Serial.println("przekaznik1 on");
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

proszę o podpowiedź. 

Link do komentarza
Share on other sites

@damiant witam na forum 🙂

Dla większego porządku pytanie wydzieliłem z kursu, ponieważ nie dotyczy ono bezpośrednio omawianych tam ćwiczeń. Tutaj będzie łatwiej utrzymać porządek w dyskusji i nie będziemy mylić osób szukających informacji o programach z kursu. Źródło pytania: https://forbot.pl/forum/topic/10449-kurs-arduino-ii-9-wielozadaniowosc-opoznienia-z-millis/

15 godzin temu, damiant napisał:

po przeczytaniu tego kuru mam pytanie. jak wykonać sterowanie kilkoma przekaźnikami z użyciem millis() ponieważ w moim programie po próbie wysterowanie przekaźników zapalają się wszystkie naraz. Na delay wszystko pracuje poprawnie (poza wyłącznikiem czasowym) lecz jak wiadomo delay mrozi mi  program i moje założenia umierają w zalążku. 

Czy próbowałeś najpierw na spokojnie wykonać sterowanie np. 2-3 przekaźnikami? Chyba najwięcej trudności sprawia fakt, że od razu rzuciłeś się na głęboką wodę. Do tego np. poniższy fragment już sugeruje, że mogłeś coś pomieszać podczas samego kopiowania programu (zbędna klamerka):

void loop()
{
  { aktualnyCzas = millis();

Spróbuj może zrobić na początku od nowa wersja dla 2 przekaźników i pokaż co udało Ci się napisać 🙂

Link do komentarza
Share on other sites

Operator '&' to operator bitowy, chciałeś pewnie użyć operatora '&&' (logiczne AND).

Druga sprawa: w zmiennych przekaznik1 (i tak dalej) trzymasz numer pinu, a nie stan przekaźnika. Jeśli na początku podstawiłeś tam 2, to nie ma szans aby się samoczynnie zrobiło zero. Albo zapamiętaj stan przekaźnika w jakiejś innej zmiennej, albo użyj digitalRead.

Zrób tak jak radził @Treker czyli zrób to dla dwóch przekaźników, ale tak żeby działało. Bo na razie błędów jest dużo więcej, ale następne wynikają z poprzednich.
 

 

  • Lubię! 1
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

witam ogarnąłem temat.

#include <passive_timer.h>

int przekaznik1 = 0;                //przekaznik1 podłączamy do pinu 0
int przekaznik2 = 1;                //przekaznik2 podłączamy do pinu 1
int przekaznik3 = 2;                //przekaznik1 podłączamy do pinu 2
int przekaznik4 = 3;                //przekaznik1 podłączamy do pinu 3
int przekaznik5 = 4;                //przekaznik2 podłączamy do pinu 4
int przekaznik6 = 5;                //przekaznik1 podłączamy do pinu 5
int przekaznik7 = 6;                //przekaznik1 podłączamy do pinu 6
int przekaznik8 = 7;                //przekaznik2 podłączamy do pinu 7
int przekaznik9 = 8;               //przekaznik1 podłączamy do pinu 8
int przekaznik10 = 9;              //przekaznik1 podłączamy do pinu 9
int przekaznik11 = 10;              //przekaznik2 podłączamy do pinu 10
int przekaznik12 = 11;              //przekaznik1 podłączamy do pinu 11
int przekaznik13 = 12;              //przekaznik1 podłączamy do pinu 12
int przekaznik14 = 13;              //przekaznik2 podłączamy do pinu 13
int przekaznik15 = A0;              //przekaznik2 podłączamy do pinu A0
int przekaznik16 = A1;              //przekaznik2 podłączamy do pinu A1
int przycisk_dol = A2;               //przycisk dol podłączamy do pinu A2
int przycisk_gora = A3;              //przyciskgora podłączamy do pinu A3

PassiveTimer  led_timer_ON;
PassiveTimer  led_timer_OFF;
PassiveTimer  ledd_timer_ON;
PassiveTimer  ledd_timer_OFF;
bool s1 = 0;                    //zmienna boolowska s1 do steowania stanem
bool s2 = 0;                    //zmienna boolowska s2 do steowania stanem
bool PD = 0;                    //zmienna boolowska PD do steowania stanem
bool PG = 0;                    //zmienna boolowska PG do steowania stanem
bool PM = 0; 
bool Pd = 0;                    //zmienna boolowska Pd do steowania stanem
bool Pg = 0;                    //zmienna boolowska Pg do steowania stanem
bool Pm = 0; 

void setup() {


  pinMode(przekaznik1, OUTPUT);       //przekaznik1 jako wyjście
  pinMode(przekaznik2, OUTPUT);       //przekaznik2 jako wyjście
  pinMode(przekaznik3, OUTPUT);       //przekaznik3 jako wyjście
  pinMode(przekaznik4, OUTPUT);       //przekaznik4 jako wyjście
  pinMode(przekaznik5, OUTPUT);       //przekaznik5 jako wyjście
  pinMode(przekaznik6, OUTPUT);       //przekaznik6 jako wyjście
  pinMode(przekaznik7, OUTPUT);       //przekaznik7 jako wyjście
  pinMode(przekaznik8, OUTPUT);       //przekaznik8 jako wyjście
  pinMode(przekaznik9, OUTPUT);       //przekaznik9 jako wyjście
  pinMode(przekaznik10, OUTPUT);      //przekaznik10 jako wyjście
  pinMode(przekaznik11, OUTPUT);      //przekaznik11 jako wyjście
  pinMode(przekaznik12, OUTPUT);      //przekaznik12 jako wyjście
  pinMode(przekaznik13, OUTPUT);      //przekaznik13 jako wyjście
  pinMode(przekaznik14, OUTPUT);      //przekaznik14 jako wyjście
  pinMode(przekaznik15, OUTPUT);      //przekaznik15 jako wyjście
  pinMode(przekaznik16, OUTPUT);      //przekaznik16 jako wyjście


  pinMode(przycisk_dol, INPUT_PULLUP);
  pinMode(przycisk_gora, INPUT_PULLUP);

  digitalWrite(przekaznik1, HIGH);     //stan początkowy przekaznika1 wysoki
  digitalWrite(przekaznik2, HIGH);     //stan początkowy przekaznika2 wysoki
  digitalWrite(przekaznik3, HIGH);     //stan początkowy przekaznika3 wysoki
  digitalWrite(przekaznik4, HIGH);     //stan początkowy przekaznika4 wysoki
  digitalWrite(przekaznik5, HIGH);     //stan początkowy przekaznika5 wysoki
  digitalWrite(przekaznik6, HIGH);     //stan początkowy przekaznika6 wysoki
  digitalWrite(przekaznik7, HIGH);     //stan początkowy przekaznika7 wysoki
  digitalWrite(przekaznik8, HIGH);     //stan początkowy przekaznika8 wysoki
  digitalWrite(przekaznik9, HIGH);     //stan początkowy przekaznika9 wysoki
  digitalWrite(przekaznik10, HIGH);    //stan początkowy przekaznika10 wysoki
  digitalWrite(przekaznik11, HIGH);    //stan początkowy przekaznika11 wysoki
  digitalWrite(przekaznik12, HIGH);    //stan początkowy przekaznika12 wysoki
  digitalWrite(przekaznik13, HIGH);    //stan początkowy przekaznika13 wysoki
  digitalWrite(przekaznik14, HIGH);    //stan początkowy przekaznika14 wysoki
  digitalWrite(przekaznik15, HIGH);    //stan początkowy przekaznika15 wysoki
  digitalWrite(przekaznik16, HIGH);    //stan początkowy przekaznika16 wysoki    //stan początkowy przekaznika5 wysoki

}




void loop() {

  if (digitalRead (przycisk_dol) == LOW ) {
    led_timer_ON.restart();
    s1 = 0;
    PD=1;
    
    Serial.println("przycisk-dol");}
    if ( PD==1) {
      digitalWrite(przekaznik1, s1);
      Serial.println("JEST WYJSCIE_1");
      if (led_timer_ON.time_millis() >= 500) {
        digitalWrite(przekaznik2, s1);
        Serial.println("JEST WYJSCIE_2");
        if (led_timer_ON.time_millis() >= 1000) {
          digitalWrite(przekaznik3, s1);
          Serial.println("JEST WYJSCIE_3");
          if (led_timer_ON.time_millis() >= 1500) {
            digitalWrite(przekaznik4, s1);
            Serial.println("JEST WYJSCIE_4");
            if (led_timer_ON.time_millis() >= 2000) {
              digitalWrite(przekaznik5, s1);
              Serial.println("JEST WYJSCIE_5");
              if (led_timer_ON.time_millis() >= 2500) {
                digitalWrite(przekaznik6, s1);
                Serial.println("JEST WYJSCIE_6");
                if (led_timer_ON.time_millis() >= 3000) {
                  digitalWrite(przekaznik7, s1);
                  Serial.println("JEST WYJSCIE_7");
                  if (led_timer_ON.time_millis() >= 3500) {
                    digitalWrite(przekaznik8, s1);
                    Serial.println("JEST WYJSCIE_8");
                    if (led_timer_ON.time_millis() >= 4000) {
                      digitalWrite(przekaznik9, s1);
                      Serial.println("JEST WYJSCIE_9");
                      if (led_timer_ON.time_millis() >= 4500) {
                        digitalWrite(przekaznik10, s1);
                        Serial.println("JEST WYJSCIE_10");
                        if (led_timer_ON.time_millis() >= 5000) {
                          digitalWrite(przekaznik11, s1);
                          Serial.println("JEST WYJSCIE_11");
                          if (led_timer_ON.time_millis() >= 5500) {
                            digitalWrite(przekaznik12, s1);
                            Serial.println("JEST WYJSCIE_12");
                            if (led_timer_ON.time_millis() >= 6000) {
                              digitalWrite(przekaznik13, s1);
                              Serial.println("JEST WYJSCIE_13");
                              if (led_timer_ON.time_millis() >= 6500) {
                                digitalWrite(przekaznik14, s1);
                                Serial.println("JEST WYJSCIE_14");
                                if (led_timer_ON.time_millis() >= 7000) {
                                  digitalWrite(przekaznik15, s1);
                                  Serial.println("JEST WYJSCIE_15");
                                  if (led_timer_ON.time_millis() >= 7500) {
                                    digitalWrite(przekaznik16, s1);
                                    Serial.println("JEST WYJSCIE_16");

                                    
                                    PD=0;
                                    PG=HIGH;
                                    led_timer_ON.restart();
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }}
    
 if( PG==HIGH){

  Serial.println ( "wyłącz");
  if (led_timer_ON.time_millis() >= 15000  ) {
    
      Serial.println ( "odliczam wylaczenie");
      PM=1;
     PG=LOW;
     led_timer_OFF.restart();
      }
     }
  if(PM==1){
    
    s1 = 1;
   Serial.println ( "wyłączam");
   
      if (led_timer_OFF.time_millis() >= 500) {
        digitalWrite(przekaznik1, s1);
        Serial.println("BRAK WYJSCIE_1");
        if (led_timer_OFF.time_millis() >= 1000) {
          digitalWrite(przekaznik2, s1);
          Serial.println("BRAK WYJSCIE_2");
          if (led_timer_OFF.time_millis() >= 1500) {
            digitalWrite(przekaznik3, s1);
            Serial.println("BRAK WYJSCIE_3");
            if (led_timer_OFF.time_millis() >= 2000) {
              digitalWrite(przekaznik4, s1);
              Serial.println("BRAK WYJSCIE_4");
              if (led_timer_OFF.time_millis() >= 2500) {
                digitalWrite(przekaznik5, s1);
                Serial.println("BRAK WYJSCIE_5");
                if (led_timer_OFF.time_millis() >= 3000) {
                  digitalWrite(przekaznik6, s1);
                  Serial.println("BRAK WYJSCIE_6");
                  if (led_timer_OFF.time_millis() >= 3500) {
                    digitalWrite(przekaznik7, s1);
                    Serial.println("BRAK WYJSCIE_7");
                    if (led_timer_OFF.time_millis() >= 4000) {
                      digitalWrite(przekaznik8, s1);
                      Serial.println("BRAK WYJSCIE_8");
                      if (led_timer_OFF.time_millis() >= 4500) {
                        digitalWrite(przekaznik9, s1);
                        Serial.println("BRAK WYJSCIE_9");
                        if (led_timer_OFF.time_millis() >= 5000) {
                          digitalWrite(przekaznik10, s1);
                          Serial.println("BRAK WYJSCIE_10");
                          if (led_timer_OFF.time_millis() >= 5500) {
                            digitalWrite(przekaznik11, s1);
                            Serial.println("BRAK WYJSCIE_11");
                            if (led_timer_OFF.time_millis() >= 6000) {
                              digitalWrite(przekaznik12, s1);
                              Serial.println("BRAK WYJSCIE_12");
                              if (led_timer_OFF.time_millis() >= 6500) {
                                digitalWrite(przekaznik13, s1);
                                Serial.println("BRAK WYJSCIE_13");
                                if (led_timer_OFF.time_millis() >= 7000) {
                                  digitalWrite(przekaznik14, s1);
                                  Serial.println("BRAK WYJSCIE_14");
                                  if (led_timer_OFF.time_millis() >= 7500) {
                                    digitalWrite(przekaznik15, s1);
                                    Serial.println("BRAK WYJSCIE_15");
                                    if (led_timer_OFF.time_millis() >= 8000) {
                                      digitalWrite(przekaznik16, s1);
                                      Serial.println("BRAK WYJSCIE_16");
                                      PM=0;
                                      
                                    }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    if (digitalRead (przycisk_gora) == LOW ) {
    ledd_timer_ON.restart();
    s2 = 0;
    Pd=1;
    
    Serial.println("przycisk-gora");}
    if ( Pd==1) {
      digitalWrite(przekaznik16, s2);
      Serial.println("JEST WYJSCIE_16");
      if (ledd_timer_ON.time_millis() >= 500) {
        digitalWrite(przekaznik15, s2);
        Serial.println("JEST WYJSCIE_15");
        if (ledd_timer_ON.time_millis() >= 1500) {
          digitalWrite(przekaznik14, s2);
          Serial.println("JEST WYJSCIE_14");
          if (ledd_timer_ON.time_millis() >= 2000) {
            digitalWrite(przekaznik13, s2);
            Serial.println("JEST WYJSCIE_13");
            if (ledd_timer_ON.time_millis() >= 2500) {
              digitalWrite(przekaznik12, s2);
              Serial.println("JEST WYJSCIE_12");
              if (ledd_timer_ON.time_millis() >= 3000) {
                digitalWrite(przekaznik11, s2);
                Serial.println("JEST WYJSCIE_11");
                if (ledd_timer_ON.time_millis() >= 3500) {
                  digitalWrite(przekaznik10, s2);
                  Serial.println("JEST WYJSCIE_10");
                  if (ledd_timer_ON.time_millis() >= 4000) {
                    digitalWrite(przekaznik9, s2);
                    Serial.println("JEST WYJSCIE_9");
                    if (ledd_timer_ON.time_millis() >= 4500) {
                      digitalWrite(przekaznik8, s2);
                      Serial.println("JEST WYJSCIE_8");
                      if (ledd_timer_ON.time_millis() >= 5000) {
                        digitalWrite(przekaznik7, s2);
                        Serial.println("JEST WYJSCIE_7");
                        if (ledd_timer_ON.time_millis() >= 5500) {
                          digitalWrite(przekaznik6, s2);
                          Serial.println("JEST WYJSCIE_6");
                          if (ledd_timer_ON.time_millis() >= 6000) {
                            digitalWrite(przekaznik5, s2);
                            Serial.println("JEST WYJSCIE_5");
                            if (ledd_timer_ON.time_millis() >= 6500) {
                              digitalWrite(przekaznik4, s2);
                              Serial.println("JEST WYJSCIE_4");
                              if (ledd_timer_ON.time_millis() >= 7000) {
                                digitalWrite(przekaznik3, s2);
                                Serial.println("JEST WYJSCIE_3");
                                if (ledd_timer_ON.time_millis() >= 7500) {
                                  digitalWrite(przekaznik2, s2);
                                  Serial.println("JEST WYJSCIE_2");
                                  if (ledd_timer_ON.time_millis() >= 8000) {
                                    digitalWrite(przekaznik1, s2);
                                    Serial.println("JEST WYJSCIE_1");

                                    
                                    Pd=0;
                                    Pg=HIGH;
                                    ledd_timer_ON.restart();
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }}
    
 if( Pg==HIGH){

  Serial.println ( "wyłącz");
  if (ledd_timer_ON.time_millis() >= 15000  ) {
    
      Serial.println ( "odliczam wylaczenie");
      Pm=1;
     Pg=LOW;
     ledd_timer_OFF.restart();
      }
      }
  if(Pm==1){
    
    s2 = 1;
   Serial.println ( "wyłączam");
   
      if (ledd_timer_OFF.time_millis() >= 500) {
        digitalWrite(przekaznik16, s2);
        Serial.println("BRAK WYJSCIE_16");
        if (ledd_timer_OFF.time_millis() >= 1000) {
          digitalWrite(przekaznik15, s2);
          Serial.println("BRAK WYJSCIE_15");
          if (ledd_timer_OFF.time_millis() >= 1500) {
            digitalWrite(przekaznik14, s2);
            Serial.println("BRAK WYJSCIE_14");
            if (ledd_timer_OFF.time_millis() >= 2000) {
              digitalWrite(przekaznik13, s2);
              Serial.println("BRAK WYJSCIE_13");
              if (ledd_timer_OFF.time_millis() >= 2500) {
                digitalWrite(przekaznik12, s2);
                Serial.println("BRAK WYJSCIE_12");
                if (ledd_timer_OFF.time_millis() >= 3000) {
                  digitalWrite(przekaznik11, s2);
                  Serial.println("BRAK WYJSCIE_11");
                  if (ledd_timer_OFF.time_millis() >= 3500) {
                    digitalWrite(przekaznik10, s2);
                    Serial.println("BRAK WYJSCIE_10");
                    if (ledd_timer_OFF.time_millis() >= 4000) {
                      digitalWrite(przekaznik9, s2);
                      Serial.println("BRAK WYJSCIE_9");
                      if (ledd_timer_OFF.time_millis() >= 4500) {
                        digitalWrite(przekaznik8, s2);
                        Serial.println("BRAK WYJSCIE_8");
                        if (ledd_timer_OFF.time_millis() >= 5000) {
                          digitalWrite(przekaznik7, s2);
                          Serial.println("BRAK WYJSCIE_7");
                          if (ledd_timer_OFF.time_millis() >= 5500) {
                            digitalWrite(przekaznik6, s2);
                            Serial.println("BRAK WYJSCIE_6");
                            if (ledd_timer_OFF.time_millis() >= 6000) {
                              digitalWrite(przekaznik5, s2);
                              Serial.println("BRAK WYJSCIE_5");
                              if (ledd_timer_OFF.time_millis() >= 6500) {
                                digitalWrite(przekaznik4, s2);
                                Serial.println("BRAK WYJSCIE_4");
                                if (ledd_timer_OFF.time_millis() >= 7000) {
                                  digitalWrite(przekaznik3, s2);
                                  Serial.println("BRAK WYJSCIE_3");
                                  if (ledd_timer_OFF.time_millis() >= 7500) {
                                    digitalWrite(przekaznik2, s2);
                                    Serial.println("BRAK WYJSCIE_2");
                                    if (ledd_timer_OFF.time_millis() >= 8000) {
                                      digitalWrite(przekaznik1, s2);
                                      Serial.println("BRAK WYJSCIE_1");
                                      Pm=0;
                                      
                                    }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  
  

tylko mam jeden problem.

po wejściu na schody oświetlenie się zapala ale z chodząc z nich cykl w druga stronę się rozpoczyna. czy ktoś ma pomysł jak to wyeliminować??

Link do komentarza
Share on other sites

Jak ogarniesz jeszcze co to jest tablica i do czego służą pętle to wtedy pogadamy o konkretach. Na razie poczytaj sobie coś w tym temacie, bo bez tego to Ci się za chwilę kod źródłowy na dysku nie zmieści 🙂 A forum to nie miejsce na tłumaczenie podstaw, które można znaleźć w każdym kursie.

Link do komentarza
Share on other sites

@damiant, tak jak napisałem wyżej @ethanak, jak wykorzystasz pętle i tablice to znacznie, znacznie skrócisz ten wielki kod z warunkami, który tylko utrudnia analizę całego programu. Próbowałeś działać coś w tym kierunku? Rozumiem, że aktualna wersja działa, ale nie jest to zbyt eleganckie podejście - w przyszłości będzie ono generowało tylko więcej problemów. Pokaż jakąś swoją próbę przerobienia tego na wersję z pętlami to podpowiemy co jeszcze trzeba zmienić 😉

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.