Arduino Polska Forum
millis nie działa - Wersja do druku

+- Arduino Polska Forum (https://forum.arduinopolska.pl)
+-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino)
+--- Dział: Piaskownica (https://forum.arduinopolska.pl/dzial-piaskownica)
+--- Wątek: millis nie działa (/watek-millis-nie-dzia%C5%82a)



millis nie działa - mateusz - 05-05-2019

w tym przykładzie funkcja millis nie działa, jak to naprawić?

Kod:
unsigned long aktualnyCzas = 0;
unsigned long pompa7dl = 0;
unsigned long pompa7kr = 0;
unsigned long pompa8dl = 0;
unsigned long pompa8kr = 0;

void setup() {
 Serial.begin(9600);
 pinMode(8, OUTPUT);
 pinMode(7, OUTPUT);
 pinMode(53, OUTPUT);
 pinMode(51, OUTPUT);
 pinMode(22, OUTPUT);
 digitalWrite(22, LOW);
 digitalWrite(53, LOW); //grzałka p   0
 digitalWrite(51, LOW); //grzałka l   1
 digitalWrite(8, LOW); // pompa p
 digitalWrite(7, LOW); // pompa l
 pinMode(3, INPUT_PULLUP); // kawa p
 pinMode(6, INPUT_PULLUP); // kawa l
 pinMode(5, INPUT_PULLUP); // kawy p
 pinMode(4, INPUT_PULLUP); // kawy l
 pinMode(2, INPUT_PULLUP); // spieniacz l
 pinMode(9, INPUT_PULLUP); // +p
 pinMode(10, INPUT_PULLUP); // + l
 pinMode(11, INPUT_PULLUP); // spieniacz p
 pinMode(12, INPUT_PULLUP); //dźwignia p
 pinMode(13, INPUT_PULLUP); //dźwignia l
}




void loop() {
 aktualnyCzas = millis();



 if (aktualnyCzas - pompa7kr >= 28000UL) {
   digitalWrite(7, LOW);
   }
 if (aktualnyCzas - pompa8kr >= 28000UL) {
   digitalWrite(8, LOW);
   }
 if (aktualnyCzas - pompa7dl >= 56000UL) {
   digitalWrite(7, LOW);
   }
 if (aktualnyCzas - pompa8dl >= 56000UL) {
   digitalWrite(8, LOW);
   }
//==================================================================================
if (digitalRead(12) == LOW and digitalRead(13) == LOW){
 if (digitalRead(10) == LOW) {
   digitalWrite(7, HIGH); //manual
 } else {
   digitalWrite(7, LOW);
   
}
if (digitalRead(9) == LOW) {
   digitalWrite(8, HIGH); //manual prawa
 } else {
   digitalWrite(8, LOW);
   
}
if (digitalRead(3) == LOW and digitalRead(6) == LOW) {
 pompa8kr = aktualnyCzas;
 pompa7kr = aktualnyCzas;
 digitalWrite(8, HIGH);
 digitalWrite(7, HIGH);  // 2X jedna kawa prawa strona    
}
if (digitalRead(5) == LOW and digitalRead(4) == LOW) {
 pompa8dl = aktualnyCzas;
 pompa7dl = aktualnyCzas;
 digitalWrite(7, HIGH);
 digitalWrite(8, HIGH); // 2X dwie kawY prawa strona
}

if (digitalRead(3) == LOW and digitalRead(4) == LOW) {
 pompa8kr = aktualnyCzas;
 pompa7dl = aktualnyCzas;
 digitalWrite(7, HIGH);
 digitalWrite(8, HIGH); // 2X dwie kawY prawa strona
 }

if (digitalRead(5) == LOW and digitalRead(6) == LOW) {
 pompa8dl = aktualnyCzas;
 pompa7kr = aktualnyCzas;
 digitalWrite(7, HIGH);
 digitalWrite(8, HIGH); // 2X dwie kawY prawa strona
 }
}
   
   
//====================================================================  
if (digitalRead(12) == LOW and digitalRead(13) == HIGH) {

   if (digitalRead(3) == LOW) {
     pompa8kr = aktualnyCzas;
   digitalWrite(8, HIGH);  // jedna kawa prawa strona
}

 if (digitalRead(5) == LOW) {
   pompa8dl = aktualnyCzas;
   digitalWrite(8, HIGH);  // dwie kawy prawa strona
}

 if (digitalRead(9) == LOW) {
   digitalWrite(8, HIGH); //manual prawa
 } else {
   digitalWrite(8, LOW);
   
}
}

//=======================================================================
if (digitalRead(13) == LOW and digitalRead(12) == HIGH) {

if (digitalRead(6) == LOW) {
 pompa7kr = aktualnyCzas;
   digitalWrite(7, HIGH);  // jedna kawa lewa strona
}

 if (digitalRead(4) == LOW) {
   pompa7dl = aktualnyCzas;
   digitalWrite(7, HIGH);  // dwie kawy lewa strona
}

if (digitalRead(10) == LOW) {
   digitalWrite(7, HIGH); //manual
 } else {
   digitalWrite(7, LOW);
   
}  
}

//====================================================================  

 if (digitalRead(2) == LOW) {
   if (digitalRead(10) == LOW) {
   digitalWrite(7, HIGH); //manual
 } else {
   digitalWrite(7, LOW);
   
}
if (digitalRead(10) == HIGH) {
   digitalWrite(7, HIGH);
   delay(25);
   digitalWrite(7, LOW);
   delay(700);
}
   
 }
//=======================================================================
 if (digitalRead(11) == LOW) {
   if (digitalRead(9) == LOW) {
   digitalWrite(8, HIGH); //manual prawa
 } else {
   digitalWrite(8, LOW);
 }
 if (digitalRead (9) == HIGH) {
   digitalWrite(8, HIGH);
   delay(25);
   digitalWrite(8, LOW);
   delay(700);
 }
   

}
//=======================================================================
}



RE: millis nie działa - kaczakat - 05-05-2019

Wgrałem to do NANO i oczywiście działa, tylko uciąłem program po ostatnim porównaniu z millis. Zapewne sobie zerujesz w dalszej części programu zmienne, skoro warunek się nie spełnia.
if (aktualnyCzas - pompa7kr >= 28000UL) lepiej zapisać if ((uint32_t)(aktualnyCzas - pompa7kr) >= 28000UL) , tak by program nie miał wątpliwości jak traktować wynik tego odejmowania, a przy okazji zapobiega to problemom po przepełnieniu licznika, tu uint32_t to to samo co Twoje ulong.


RE: millis nie działa - mateusz - 06-05-2019

(05-05-2019, 22:44)kaczakat napisał(a): Wgrałem to do NANO i oczywiście działa, tylko uciąłem program po ostatnim porównaniu z millis. Zapewne sobie zerujesz w dalszej części programu zmienne, skoro warunek się nie spełnia.
if (aktualnyCzas - pompa7kr >= 28000UL)  lepiej zapisać if ((uint32_t)(aktualnyCzas - pompa7kr) >= 28000UL) , tak by program nie miał wątpliwości jak traktować wynik tego odejmowania, a przy okazji zapobiega to problemom po przepełnieniu licznika, tu uint32_t to to samo co Twoje ulong.

Mimo wszystko led dalej gaśnie zaraz po puszczeniu przycisku a nie po 28 sekundach, może coś jeszcze mam źle


RE: millis nie działa - kaczakat - 06-05-2019

No ale millis działa, a przecież to opisałeś jako problem. Przestałby działać bo wyłączyłeś przerwania, czy akurat uC tego nie obsługuje. Napisałeś program, który chciałbyś by jakoś tam działał to opisz jak chcesz by działał, opisz jak zamiast tego działa.


RE: millis nie działa - mateusz - 06-05-2019

już rozwiązałem ten problem, miałem; else {
digitalWrite(7, LOW);
które wyłączało zaraz po włączeniu


RE: millis nie działa - es2 - 10-05-2019

(05-05-2019, 20:30)mateusz napisał(a): w tym przykładzie funkcja millis nie działa, jak to naprawić?
To ciekawe, że początkujący, swoją niewiedzę upatrują w błędach kompilatora, komputera, mikrokontrolera. Wszystko działa źle tylko nie "programista". Fakt, że błędy w sprzęcie czy sofcie czasem si ę pojawiają ale początkujący raczej na takie niuanse nie napotykają się i 99,99% "problemów" to niewiedza!