• 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
Jednokrotne wykonanie poleceń
#1
Witam.
Dopiero zaczynam przygodę z Arduino i jeszcze wiele muszę się nauczyć ale stworzyłem program do sterowania solarnym podgrzewaczem wody.
Pokrótce program działa w następujący sposób:
- w sposób ciągły dokonywany jest pomiar temperatury wody i wyświetlany na wyświetlaczu LCD
- program może pracować w dwóch trybach:
1. Tryb auto gdzie w momencie przekroczenia zadanej temperatury (np. 85 st) automatycznie włącza się pompa chłodząca podgrzewacz a w momencie zbyt niskiej temperatury (np. 35 st) włącza się grzałka podgrzewająca wodę
2. Tryb manual w tym trybie nie włącza się nic automatycznie ale za pomocą przycisków można uruchomić zarówno pompę jak i grzałkę
Przełączanie pomiędzy trybami zrobiłem za pomocą przełącznika bistabilnego - nie przycisku (stale włączony jest tryb auto lub manual w zależności od pozycji przełącznika), Takie rozwiązanie pozwala uruchomić ostatnio używany tryb pracy np. po zaniku prądu, ponownym włączeniu urządzenia.
Problem w tym że po przełączeniu z trybu auto na manual program nadal trzyma wartości z trybu auto a chcę żeby zostały one jak gdyby "wyzerowane" np. jeśli w tym momencie jesteśmy w trybie auto Auto i grzałka jest załączona to po przełączeniu w tryb Manual powinna ona zostać automatyczny wyłączona i program powinien "czekać" na ewentualne uruchomienie grzałki za pomocą przycisku.
Potrzebuje jakąś komendę, funkcję lub pętlę która "wyzeruje" wszystkie ustawienia, czyli taka która zadziała (wykona się) tylko jeden raz i nie będzie się wykonywać za każdym kolejnym razem pomimo tego że zagnieżdżona jest w pętli.

Czyli krótko - potrzebuję aby np. komenda:

digitalWrite(pin, LOW);

wykonała się tylko raz pomimo tego że znajduje się w pętli.
Nie mam pojęcia jak to zrobić.
Bardzo proszę o pomoc.
 
Odpowiedź
#2
Użyj flagi. przed pętla ustaw ją np na true, w pętli
Kod:
if( flaga ){
flaga = false;
digitalWrite(pin, LOW);
}
 
Odpowiedź
#3
(20-11-2019, 14:10)semi napisał(a): Użyj flagi. przed pętla ustaw ją np na true, w pętli

Kod:
if( flaga ){
flaga = false;
digitalWrite(pin, LOW);
}
Ok - tak spróbuję i dam znać jak poszło
Dzięki za odpowiedź
 
Odpowiedź
#4
Zrobiłem tak jak radziłeś:
Zadeklarowałem zmienną jako boolean, z wartością true; a w pętli "Manual" po jej uruchomieniu następuje zmiana stanu na false. Dodatkowo w pętli obsługującej tryb "AUTO" dopisałem komendę ponownie zmieniającą wartość tej zmiennej na true aby przy kolejnej zmianie trybu pracy na MANUAL nastąpiło ponownie jednorazowe zadziałanie tej funkcji "zerującej".
Wszystko działa jak należy.
Bardzo dziękuję za pomoc
 
Odpowiedź
#5
(21-11-2019, 08:55)JurasM_PL napisał(a): Zrobiłem tak jak radziłeś:
Zadeklarowałem zmienną jako boolean, z wartością true; a w pętli "Manual" po jej uruchomieniu następuje zmiana stanu na false. Dodatkowo w pętli obsługującej tryb "AUTO" dopisałem komendę ponownie zmieniającą wartość tej zmiennej na true aby przy kolejnej zmianie trybu pracy na MANUAL nastąpiło ponownie jednorazowe zadziałanie tej funkcji "zerującej".
Zadeklaruj zmienną lokalną przed pętlą (pewnie deklarujesz globalnie) ustawiając jednocześnie na false.
 
Odpowiedź
#6
Panie JurasM_PL, jeśli kolega semi pomógł, to wypadało by kliknąć tego kciuka w górę i przyznać punkt reputacji.
Takie działanie sporo pomoże naszej społeczności.
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ź
#7
(21-11-2019, 20:22)Robson Kerman napisał(a): Panie JurasM_PL, jeśli kolega semi pomógł, to wypadało by kliknąć tego kciuka w górę i przyznać punkt reputacji.
Takie działanie sporo pomoże naszej społeczności.
Nie ma sensu!
Jestem banitą!
 
Odpowiedź
#8
(21-11-2019, 23:30)semi napisał(a):
(21-11-2019, 20:22)Robson Kerman napisał(a): Panie JurasM_PL, jeśli kolega semi pomógł, to wypadało by kliknąć tego kciuka w górę i przyznać punkt reputacji.
Takie działanie sporo pomoże naszej społeczności.
Nie ma sensu!
Jestem banitą!
Sorry - już naprawiłem swój błąd. Nie doczytałem zasad forum bo jestem tutaj nowy ale to mnie nie tłumaczy.
Jeszcze raz sorry
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości