Skocz do zawartości

ciemo12

Użytkownicy
  • Zawartość

    4
  • Rejestracja

  • Ostatnio

Posty napisane przez ciemo12


  1. Witam wszystkich mam mały problem i siedzę nad tym już kilka dni po zajęciach a mianowicie chciałem zrobić prosty przełącznik czasowy,  4 przyciski 2 podłączone pod wyjścia analogowe 2 pod cyfrowe do tego wyświetlacz LCD 2x16 ze standardowym sterownikiem do tego przekaźnik sterowany tranzystorem stanem wysokim  4 przyciskami zwiększa sie 2 zmienne a i b które sa odzwierciedleniem czasu w sekundach  zmienna a jest czasem pracy a b czasem przerwy . Mam jednak kłopot z oprogramowaniem w funkcji delay wszystko chodzi jednak ona odpada ze względu na długi czas oczekiwania (cała pętla loop musi przejść aby zwiększyć wartość na zmiennych a i b ) z funkcja millis mam problem taki ze przy większej ilości sekund np 50 w zmiennej b czas jest nie adekwatny do wartości co mnie trochę zdziwiło ale mało dokładne . Znajomy polecił mi zrobić to na jakimś liczniku twierdząc ze to najlepszy pomysł niestety jeszcze z nimi sie nie bawiłem na tyle żeby mi to wyszło tak jak należny dlatego proszę o pomoc  oto kod programu . Po nizej całego kodu dodam fragment który jest problematyczny  PROSZE O POMOC SZANOWNYCH KOLEGÓW FORUMOWICZÓW

    Dodam ze pierwotna wersja programu z prawidłową funkcja millis została zformatowana i zapisana dlatego dodałem fragment który posiadam

    #include <LiquidCrystal.h>
    
    const int rs = 6, en = 7, d4 = 8, d5 = 9, d6 = 10, d7 = 11;
    LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
    
    float h = 1000 ; // szas wyswietlania nazwy sterownika
    int C=0;            // zmienne potrzebne przy wejsciu analogowym
    int D=0;  // -||-
    
    unsigned long  aktualnyczas = 0;
    unsigned long  zapamietany = 0;
    
    volatile int a=3;
    volatile int b=1;
    
    void wyswietl(){
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("czas pracy:");
      lcd.setCursor(13, 0);
      lcd.print(a);
      lcd.setCursor(15, 0);
      lcd.print("s");
      lcd.setCursor(0, 1);
      lcd.print("czas przer:");
      lcd.setCursor(13, 1);
      lcd.print(b);
      lcd.setCursor(15, 1);
      lcd.print("s");
         Serial.print(C);
         Serial.print(D);
    }
    
    void setup() {
      Serial.begin(9600);
      lcd.begin(16, 2);
      lcd.clear();
      pinMode(2, OUTPUT); //diada wylaczenia czerwona
      pinMode(3, OUTPUT ); //dioda  wlaczenia zielona
      pinMode(5, OUTPUT);  // przekaznik wyjscie
      pinMode(4, INPUT);    // przycisk  digital
      pinMode(A0 , INPUT_PULLUP);   //pin analogowy 2 przyciski
      pinMode(A1 , INPUT_PULLUP);   //pin analogowy 1 przyciski
      pinMode(12,INPUT);      // przycisk  digital
      digitalWrite(2, LOW);
      digitalWrite(3, LOW);
      digitalWrite(4, HIGH);
      digitalWrite(12,HIGH);
      digitalWrite(5,LOW);
     
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("Sytem sterowania");
      lcd.setCursor(5, 1);
      lcd.print("Pompy");  
      lcd.clear();
      delay(h);
       
    }
    void loop()
    {  
      aktualnyczas=millis();
          int wl=a*1000;
          int wy=b*1000;
          
      if(aktualnyczas - zapamietany >= wl ){
      zapamietany = aktualnyczas;
               digitalWrite(2, LOW);    // stan niski na diodzie czerwone j
                digitalWrite(5, HIGH);   //wlączamy przekaznik
                digitalWrite(3, HIGH); //zapalamy diode zielona}
                     }
                    
     if(aktualnyczas - zapamietany >= wy )
      zapamietany = aktualnyczas;{
            digitalWrite(5, LOW);  //wyłanczamy przekaznik
           digitalWrite(3, LOW);   //gasimy zielona
           digitalWrite(2, HIGH);  // zapalamy czerwona diode
             }
             
          if ( digitalRead(4) == LOW)
         {   a= a+1;
                               delay(100);
                               }
       
            if ( digitalRead(12) == LOW)
         {  a= a-1;
                if( a< 0 || a > 7000 )
                      a=0;
                                  delay(100);
         }
                   
                            C = analogRead(A1);
                            D = analogRead(A0);
         if (D >= 0 && D <= 50 ){
                                b= b-1;
                                  if(b <0|| b> 7000 )
                                  b =0;
                                delay(100);
                                }
         if ( C>= 0 && C <= 50 ){
                                b= b+1;
                                delay(100);
                                
         }
             wyswietl();
     }
    
    ------------------------------------------------------------------------------------------------------------------------------------------
    
      if(aktualnyczas - zapamietany >= wl ){
      zapamietany = aktualnyczas;
               digitalWrite(2, LOW);    // stan niski na diodzie czerwone j
                digitalWrite(5, HIGH);   //wlączamy przekaznik
                digitalWrite(3, HIGH); //zapalamy diode zielona}
                     }
                    
     if(aktualnyczas - zapamietany >= wy )
      zapamietany = aktualnyczas;{
            digitalWrite(5, LOW);  //wyłanczamy przekaznik
           digitalWrite(3, LOW);   //gasimy zielona
           digitalWrite(2, HIGH);  // zapalamy czerwona diode
             }
    
    

     

×
×
  • Utwórz nowe...