Skocz do zawartości

ciemo12

Użytkownicy
  • Zawartość

    4
  • Rejestracja

  • Ostatnio

Wszystko napisane przez ciemo12

  1. Temat do zamknięcia udało mi się rozwiązać problem funkcja resetującą czas od startu programu . Niestety zrobiłem kilka głupich błędów przez co rozwiązanie było ale nie działało prawidłowo
  2. 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 }
  3. Witam wszystkich od niedawna zajmuje sie zgłębianiem wiedzy w arduino, orange pi
×
×
  • Utwórz nowe...