Skocz do zawartości

Problem z millis()


marek48maly

Pomocna odpowiedź

Mam problem z millis() a mianowicie podczas stanu niskiego diody zielona i czerwona migają na przemian gdy jest stan wysoki zapala się zielona dioda i po 10 sekundach gaśnie i tu jest mój problem ponieważ nie za każdym razem a po 20 sekundach stanu niskiego to rzadko się zapala.

#define czerwona 11      // node mcu 16 pin  arduino 9
#define zielona 10        //5                         10
#define niebieska 9     // 4                        11
const int brama = 5;
const int lampa_ost = 2;      //lampa ostrzegawcza
const int furtka = 4;


int stan, stan1, stan2, bb;
char zmiana1;
unsigned long czas3, czas2, czas1, czas;

boolean d1;

boolean d2 ;

int zmiana = 0;
int odliczanie = 10000;
int odliczanie1 = 3000;
int odliczanie2 = 10000;




void setup()
{


 Serial.begin(9600);

 pinMode(czerwona, OUTPUT);
 pinMode(zielona, OUTPUT);
 pinMode(niebieska, OUTPUT);
 analogWrite(czerwona, 0);
 analogWrite(zielona, 0);
 analogWrite(niebieska, 0);


 czas = millis();
}

void loop()
{


 stan = digitalRead(lampa_ost);
 stan1 = digitalRead(brama);
 stan2 = digitalRead(furtka);
 //------------------------------otwieranie/zamykanie bramy---------------------------------------------
 if (stan == LOW ) {
   bb = 3;

   brama1();

 }


 else if ((bb == 3) && ( stan1 == HIGH)) {


   digitalWrite(czerwona, 0);
   digitalWrite(zielona, 0);
   digitalWrite(niebieska, 0);

   bb = 4;
 }
 if ((bb == 4) && (stan == HIGH) && (stan1 == HIGH)) {
   delay(50);
   digitalWrite(zielona, HIGH);
   bb = 2;
   czas = millis();
 }

//----------------------------------brama otwarta ------------------------------------------
 if ((bb == 2) && (czas - czas2 > odliczanie2)) {

   digitalWrite(zielona, LOW);
   czas2 = czas;
   bb = 5;



 }



 //----------------------------------------------------------------------------------------------------------------------------------------

 czas = millis();
}


void brama1() {
 int i;

 if (millis() - czas1 > 500)
 {
   d1 = !d1;//czerwona
   czas1 = millis();
   i = 1;
   //Serial.println(czas);
 }


 if (d1) digitalWrite(czerwona, 255);
 else {
   digitalWrite(czerwona, 0);
   i = 0;
 }
 if (i == 0) digitalWrite(zielona, 255);
 else digitalWrite(zielona, 0);

 czas = millis();
 //------------------------------------------------------------------------------------------------------
}



Jestem początkującym wiec prosił bym o pomoc albo linka do rozwiązania problemu .

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.