Skocz do zawartości

Problem z millis()


Pomocna odpowiedź

Napisano

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 .

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...