• 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
Sterownik 2 diodami za pomocą drabinki rezystorowej
#1
Witam 
Chce zrobić proste urządzenie sterujące 
Ma to być pilot z dwoma przyciskami i 2 rezystorami w środku. Połączone do masy i do wejścia A0( + rezystor podciągający) . Przycisk 1 ma zapalać diodę nr 1 na 3 sekundy, przycisk 2 ma zapalać diodę nr 2 na 3 sekundy. Potem dioda ma zgasnąć. 
I do tego punktu sobie poradziłem.
Dalej proszę Was o pomoc.
Kolejnym warunkiem jest to ze jeśli dioda nr 1 sie świeci(te 3 sekundy), a w pilocie wciśnięty zostanie drugi przycisk od diody 2 to ta pierwsza ma natychmiast zgasnąć, a druga zapalić się na 3 sekundy 
A druga sprawa to jeśli któryś z przycisków jest wciśnięty dłużej niż 3 sekundy np 10 to dana dioda ma zgasnąć jak tylko przycisk zostanie puszczony, czyli po 10 sekundach a nie 13
Jak to zrobić?

moj kod:

int RED=10;
int GREEN=11;


void setup()
{
pinMode(RED, OUTPUT);
pinMode(GREEN, OUTPUT);

Serial.begin(
9600); 
};

void loop()
{
int a=analogRead(A0);
Serial.println(a);
delay(
100);

if(a>200 && a<300)
// PRZYCISK 1
digitalWrite(RED, HIGH);
delay(
3000);


}

if(a>500 && a<600)
// przycisk 2

digitalWrite(GREEN, HIGH);
delay(
3000);
else { 
digitalWrite(GREEN, LOW);
digitalWrite(RED, LOW);




}
};


 
 
Odpowiedź
#2
jesli ma dzialac tak jak zakladasz to zapomnij o DELAY, w czasie 3s swiecenia diody delay(3000) zatrzymuje wykonywanie innych polecen w tym rowniez sprawdzanie czy zostal wcisniety przycisk2, zrobisz to na funkcji millis, znajdziesz bez problemu na forum

Wysłane z mojego ALE-L21 przy użyciu Tapatalka
 
Odpowiedź
#3
Moja przygoda z arduina zaczęła sie kilka dni temu i jeszcze nie wiem o czym piszesz, dlatego jak byś mógł cos więcej o tej funkcji millis napisać albo wstawić ja w ten mój kod - jak to powinno wygladac
 
Odpowiedź
#4
http://forum.arduinopolska.com/showthread.php?tid=353


zobacz sobie to, tego szukasz wlasciwie

Wysłane z mojego ALE-L21 przy użyciu Tapatalka
 
Odpowiedź
#5
Dzięki za link. Przeczytałem ten artykuł ale mimo to dalej nie wiem jak zastosować ta wiedzę w praktyce. Wiem ze może trochę proszę o "przeprowadzenie za reki" ale to mój pierwszy "samodzielny" projekt i jeszcze potrzebuje pomocy.
Czy mógłbyś mi to wkleic w mój kod, ewentualnie łapotologicznie wytłumaczyć jak to zrobic
 
Odpowiedź
#6
Działanie millis() jest wytłumaczone praktycznie w każdym kursie arduino. Przerób dowolny a życie od razu stanie się prostsze. Np: http://forbot.pl/blog/artykuly/programow...klu-id5290
Pomagam za darmo więc szanuj mój czas.
Wklejaj tekst a nie jego zdjęcie.
Nie pisz następnego postu jak nie odpowiedziałeś na poprzedni.
Jak mądrze zadawać pytania
 
Odpowiedź
#7
Witam,
Moim skromnym zdaniem to biblioteka Timers nie będzie za bardzo przydatna w tym projekcie. Jakbym miał zrealizować zamierzenia projektu to z pewnością program oparłbym o przerwania i funkcję millis(). UNO obsługuje przerwania na dwóch pinach, czyli w tym przypadku, dokładnie na tylu ile potrzeba (dwa przyciski). W przypadku zmiany stanu na którymkolwiek z tych pinów, odczytałbym czas za pomocą millis(), a następnie w każdym wykonaniu pętli loop, ponownie odczytywałbym czas wspomnianą funkcją. Na podstawie różnicy czasu oraz obecnego stanu układu podejmował odpowiednie działania: nie robię nic lub zmieniam stan układy.
Pozdrawiam.
 
Odpowiedź
#8
(30-01-2017, 12:21)Smaczek napisał(a): Witam,
Moim skromnym zdaniem to biblioteka Timers nie będzie za bardzo przydatna w tym projekcie. 
A moim skromnym zdaniem nadaję się tyle że początkujący mogą mieć problemy z jej wykorzystaniem bo jest zbyt słabo opisana.

Cytat:Jakbym miał zrealizować zamierzenia projektu to z pewnością program oparłbym o przerwania i funkcję millis(). UNO obsługuje przerwania na dwóch pinach, czyli w tym przypadku, dokładnie na tylu ile potrzeba (dwa przyciski). W przypadku zmiany stanu na którymkolwiek z tych pinów, odczytałbym czas za pomocą millis(), a następnie w każdym wykonaniu pętli  loop, ponownie odczytywałbym czas wspomnianą funkcją. Na podstawie różnicy czasu oraz obecnego stanu układu podejmował odpowiednie działania: nie robię nic lub zmieniam stan układy.
Przyciski obsługuje się w przerwaniu timera a nie wejścia(z wiadomych względów). Dlatego millis() bez przerwań dobrze sobie z tym poradzi. Oczywiście cykl programu nie może być zbyt duży.
Pomagam za darmo więc szanuj mój czas.
Wklejaj tekst a nie jego zdjęcie.
Nie pisz następnego postu jak nie odpowiedziałeś na poprzedni.
Jak mądrze zadawać pytania
 
Odpowiedź
#9
Witam,
@namok, każdy problem można rozwiązywać na co najmniej dwa sposoby. Ty skorzystalbys z Timets, a ja nie. Ja podałem propozycję rozwiązania, Ty napisałeś, że millis () "dobrze sobie z tym poradzi". Pewnie bardzo tym stwierdzeniem koledze pomogles, a przecież o to głównie w Piaskownicy chodzi.
Pozdrawiam.
 
Odpowiedź
#10
(30-01-2017, 19:40)Smaczek napisał(a): Witam,
@namok, każdy problem można rozwiązywać na co najmniej dwa sposoby. 
Oczywiście.

Cytat:Ty skorzystalbys z Timets, a ja nie.
Nigdzie nie napisałem że skorzystałbym lecz że się do tego nadaje.

Cytat:Ja podałem propozycję rozwiązania, Ty napisałeś, że  millis () "dobrze sobie z tym poradzi". Pewnie bardzo tym stwierdzeniem koledze pomogles, a przecież o to głównie w Piaskownicy chodzi.
Mój post to "krytyka" Twojego rozwiązania. To forum techniczne i należy zwracać uwagę na szczegóły.

Obsługa przycisków w przerwaniu od wejścia jest zła i nie należy jej stosować(pomijam sytuacje "podbramkowe").
Po naciśnięciu przycisku początkujący będzie się spodziewał jednego przerwania a otrzyma kilka/kilkanaście przerwań. Oczywiście można sobie z tym poradzić ale po co wyważać otwarte drzwi.

Przyciski obsługuje się przez cykliczne "odpytywanie". W arduino najłatwiej to zrobić z użyciem funkcji millis()(nie potrzeba dodatkowych bibliotek). Biblioteka Timers obsługuje cykliczne wywołanie funkcji więc się do tego nadaje.
Pomagam za darmo więc szanuj mój czas.
Wklejaj tekst a nie jego zdjęcie.
Nie pisz następnego postu jak nie odpowiedziałeś na poprzedni.
Jak mądrze zadawać pytania
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości