Skocz do zawartości

Funkcja millis i pomiar z czujnika - ile trwa?


bieri13

Pomocna odpowiedź

Dobrze jest też przepisać sobie stan licznika do zmiennej roboczej i  odwoływać się do niej w zamiast wywoływać funkcję millis() wielokrotnie w jednej linijce.

Link do komentarza
Share on other sites

  

12 minut temu, atMegaTona napisał:

Wyrażenia pomiędzy operatorami logicznymi && powinny być zawarte w nawiasach


Dlaczego? Poza tym jeśli już to po obu stronach operatora a nie pomiędzy operatorami...

10 minut temu, atMegaTona napisał:

Dobrze jest też przepisać sobie stan licznika do zmiennej roboczej i  odwoływać się do niej w zamiast wywoływać funkcję millis()

A to na odmianę jest bezwzględnie konieczne (funkcja millis() może w jednej linijce zwrócić dwie różne wartości).

 

  • Pomogłeś! 1
Link do komentarza
Share on other sites

Dnia 18.03.2020 o 07:41, ethanak napisał:

Albo pokażesz cały kod, albo

Ot i cały tajny kod.... 

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,16,2);

// numery PIN
int grzalka = 5;        //wyjscie grzałki
int set_temp = A2;      //ustawienie temp
int temp_grzalki = A3;     //odczyt temp

// zmienne dotyczace ustawianie i odczytu temperatury
int odczyt = 0;
int ustaw = 0;

//zmienne do formatowania łańcucha znaków
int napiecie = 0;
String napiecie_lcd_odczyt;
String napiecie_lcd_ustaw;
String moc_lcd;

unsigned long aktualnyCzas = 0;
unsigned long zapamietanyCzas1 = 0;
unsigned long zapamietanyCzas2 = 0;
unsigned long zapamietanyCzas3 = 0;

//*************************************************************

void setup() {
    Serial.begin(9600);
    lcd.init();
    lcd.backlight();
    lcd.clear();    
  }
//*************************************************************
void loop() {
   aktualnyCzas = millis();

// odczyt danych z potencjometru nastawy temperatury  
     ustaw = analogRead(set_temp);
     Serial.print("A = ");
     Serial.println(aktualnyCzas - zapamietanyCzas3);
     
 //*******************************************************************************
 // cykliczny odczyt i wyświetlenie danych z termopary
      if (aktualnyCzas - zapamietanyCzas1 >= 100UL )  
      {
      digitalWrite(grzalka, LOW);
      odczyt = analogRead(temp_grzalki)+23;
      zapamietanyCzas1 = aktualnyCzas;

      Serial.print("B = ");
      Serial.println(aktualnyCzas - zapamietanyCzas1);
      }
//*******************************************************************************   
   
      if (aktualnyCzas - zapamietanyCzas2 >= 150UL)
      {
      if(odczyt <= ustaw)
        {
        lcd.setCursor(12,0);
        lcd.print("*");
        analogWrite(grzalka, 255);
        Serial.print("C = ");
        Serial.println(aktualnyCzas - zapamietanyCzas2);
        }
        else
        {
        lcd.setCursor(12,0);
        lcd.print(" ");
        digitalWrite(grzalka, LOW);
        Serial.print("D = ");
        Serial.println(aktualnyCzas - zapamietanyCzas2);
        }
        zapamietanyCzas2 = aktualnyCzas;
      }         
//*******************************************************

// Wyswietlacz LCD
      lcd.setCursor(0,0);
      lcd.print("TMP= ");
      lcd.setCursor(5,0);      
      lcd.print(odczyt);
      

      lcd.setCursor(0,1);
      lcd.print("SET= ");
      lcd.setCursor(5,1);
      lcd.print(ustaw);
}

 

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

Z takim programem jak wcześniej odczyty czasu z funkcji mam takie:
 

B = 0
C = 1072
A = 1093
A = 1113
A = 1132
A = 1152
A = 1171
A = 1189
B = 0
A = 1209
A = 1228
C = 156
A = 1250
A = 1269
A = 1289
B = 0

Gdy wpiszę warunek podwójny:
 

if ((aktualnyCzas - zapamietanyCzas1 >= 100UL)&&(aktualnyCzas - zapamietanyCzas1 <= 140UL))

Program do tego if-a w ogóle nie wchodzi

A = 1230
C = 158
A = 1250
A = 1267
A = 1285
A = 1302
A = 1319
A = 1337
A = 1354
A = 1372
A = 1389
C = 159
A = 1409

Więc ewidentnie coś tu nie gra...
Program powinien działać tak, że każda z funkcji powinna się wykonać po przekroczeniu zadanego czasu.
Czyli: odczyt temperatury, przerwa, wysterowanie grzałki, przerwa, odczyt temperatury, itd.
Idąc za poradą Belferek zrobiłem jeszcze taki test:

if ((aktualnyCzas - zapamietanyCzas1 >= 100UL)&&(aktualnyCzas - zapamietanyCzas1 <= 140UL))
      {
      digitalWrite(grzalka, LOW);
      odczyt = analogRead(temp_grzalki)+23;
      zapamietanyCzas1 = aktualnyCzas; 

      Serial.print("B = ");
      Serial.println(aktualnyCzas - zapamietanyCzas1);
      }else 
      {
      Serial.print("Roznica = ");
      Serial.println(aktualnyCzas - zapamietanyCzas1);
      }
A = 1127
Roznica = 1127
A = 1144
Roznica = 1144
A = 1167
Roznica = 1167
A = 1195
Roznica = 1195

 

Link do komentarza
Share on other sites

Którego z trzech słów w zdaniu "pokaż cały kod" nie rozumiesz?

Nikt tu nie będzie składał po kawałku żeby Ci pokazać co spaprałeś. To Ty chcesz wiedzieć gdzie robisz błąd.

Ostatni raz: cały kod w wersji niedziałającej.

Link do komentarza
Share on other sites

12 minut temu, ethanak napisał:

Ostatni raz: cały kod w wersji niedziałającej.

Przecież cały kod jest wyżej (post z "czwartek o 16:18")
Tak trudno przewinąć wątek wyżej?
Wrzucam tylko zmiany jakie testuje - za każdym razem wstawiać cały kod? - w ostatniej wypowiedzi musiałbym go wstawić 2x

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

10 godzin temu, bieri13 napisał:

Tak trudno przewinąć wątek wyżej?

A tak trudno wkleić?

Chciałem Ci pokazać dlaczego wyniki są takie, a nie inne, ale nie mogę robić tego na zasadzie "w trzeciej linijce z wczoraj masz to, a w piątej z czwartku masz tamto, co w połączeniu z siódmą linijką z niedzieli daje wyniki z soboty".

A wklejenie całego kodu trwa nawet krócej niż kawałka - kawałek musisz zaznaczyć żeby skopiować, a całość to Ctrl-A.

Link do komentarza
Share on other sites

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...

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.