• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
delay i millis
#1
Witam.
Prosiłbym o pomoc w przerobieniu w moim kodzie funkji delay na millis, walczę z tym juz któryś dzień i nie mogę sobie poradzić.

switch ((digitalRead(przycisk1) == LOW))
  {
  case 1:
    //instrukcje dla var=1
    lcd.clear();
    lcd.backlight();
    lcd.setCursor(0,0);
    lcd.print("TEMP");
    lcd.setCursor(0,1);
    lcd.print("WILG");
    lcd.setCursor(8,0);
    lcd.print(temperatura);
    lcd.print("*C");
    lcd.setCursor(8,1);
    lcd.print(wilgotnosc);
    lcd.print("%");
    delay(d);
    lcd.clear();
    break;
  default:
    lcd.noBacklight();
    lcd.setCursor(0,0);
    lcd.print("Godz:   ");
    lcd.setCursor(0,1);
    lcd.print("Data:   ");
    lcd.setCursor(6,0);
    lcd.print(rtc.getTimeStr());
    lcd.setCursor(6,1);
    lcd.print(rtc.getDateStr());

  }
  if ((digitalRead(przycisk2) == LOW))
  {
    lcd.backlight();
    delay(d);
 
Odpowiedź
#2
Bo wszystko Ci wisi, kodu też nie chce Ci się wkleić zgodnie z instrukcją jako KOD, choćby całego.
Otwórz sobie przykład z miganiem led bez delay, zamień sobie sekundę na 10ms (1000 na 10), zamiast zmieniać stan led inkrementuj jakąś zmienną, jak przycisk jest wciśnięty zeruj zmienną i włączaj podświetlenie. Jak zmienna przekroczy 1000 to wyłączaj podświetlenie. Będzie świeciło 10s bez delay. W tym czasie możesz jednak odczytać stan innego przycisku i natychmiast podświetlenie wyłączyć. Takich zmiennych możesz mieć dużo, albo ustawiać sobie jakieś zmienne jako flagi i kontrolować różne części programu wraz z upływającym czasem.
Np. chcesz sprawdzić czy przycisk jest wciśnięty to zliczaj sobie coś co 1ms jak wciśnięty i zeruj jak puszczony. Jak przekroczy 20 to znaczy że wciśnięty i nie musisz sobie robić delay(20) by eliminować drgania styków. Można też sprawdzić jak długo jest wciśnięty, jak np. wciśnięty jest 500ms to można założyć że jest wciśnięty długo i zmieniać jakąś zmienną 10x szybciej, po 5s 100x szybciej. Można też reagować dopiero wtedy gdy przycisk puścisz.
Nie da się przerobić tego czegoś co tu wrzuciłeś, kod trzeba sobie ułożyć inaczej. A kodu nie ma. Jak nie zrozumiesz jak sobie to układać to będziesz przychodził z każdym programem do przeróbki.
Zrób sobie kurs Arduino z Forbota, jak dojdziesz do millis zrób wszystko od początku wywalając w poprzednich zadaniach delay.
Arduino to nie jest magiczne pudełko na stanie się programistą, też się trzeba pouczyć, niestety to nie wierszyk, bez zrozumienia będzie trudno.
 
Odpowiedź
#3
Po pierwsze, tego
Kod:
switch ((digitalRead(przycisk1) == LOW))
się tak nie zapisuje.
Warunek wielokrotnego wyboru switch...case nie do tego służy.
Po drugie, w tym warunku jest tylko jeden wybór plus default, czyli tak naprawdę dwa stany przycisku, co można zrobić w prostszy sposób.
Po trzecie, (domyśliłem się w końcu Smile) chodzi Ci o to, żeby program w momencie przyciśnięcia przycisku, włączał podświetlenie lcd na jakiś czas, określony zmienną 'd'. (Huraaa, brawo Robson!!!)
Jak już jesteśmy przy ogólnej pomroczności jasnej, jaką jest niewiedza w wykorzystywaniu gotowców, bo nie oszukujmy się, tym w zdecydowanej większości jest projektowanie w Adruino, to proponuję zainteresować się biblioteką Timers, która to rozwiązuje takie problemy w sposób szybki, łatwy i przyjemny.
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.

[Obrazek: SsIndaG.jpg]
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości