• 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
włączanie programu drugiem programem
#1
Witam

Chciałbym sobie opracować dość uniwersalny kod, który z czasem potrzebuje użyć w kilku projektach.

Chodzi konkretnie o napisanie kodu, w którym za pomocą przycisku, który przyciskając na ok 4 sekundy, włączamy główny kod (program), który to dopiero w dość mocno skomplikowanym kodzie będzie zarządzał wyjściami i wejściami.

A w sytuacji ponownego naciśniecia przycisku na 4 sekundy wyłączamy działanie głównego kodu.

Co istotne ważne jest to, że już po włączeniu głównego programu, przycisk którym wcześniej włączymy główny program, ma być jednym z przycisków, któtym po chwilowym naciśnięciu (poniżej 4 sekund), będzie się włączać np. przekaźnik.

No i pierwsze pytanie czy tak się w ogóle da?
A jeśli tak to jak podejść do funkcji loop, która powinna chyba występować dwukrotnie na zasadzie jednej, która zawiera drugą... 
Czy cały kod powinien być oparty na funkcji if czy while?
proszę o jakieś sugestie w rozpisaniu kodu na czynniki lub ewentualnie przykład podobnego takiego rozwiązania.
 
Odpowiedź
#2
Co rozumiesz przez jeden program, drugi program itd? jeśli dobrze rozumiem logikę, to można by to było załatwić przeskakując z pętli głównej do funkcji, pełniącej rolę podprogramu.
 
Odpowiedź
#3
zrub to tak
Kod:
bool stan
const int button =2;
if (button==1){
delay(4000);
if (button==1){
if (stan=0){stan=1;}
if(stan=1){stan=0;}

}
}
if(stan==1){
//program główny}
else{
//program 2}
to taki sposób dla laika oczywiście można to inaczej rozwiązać (przykład poglądowy nie testowany posiada kilka uproszczeń)
[Obrazek: banerelektronika.jpg]



Jeśli pomogłem podziękuj punktem reputacji Wink
 
Odpowiedź
#4
Dzięki za przykład. A odpowiadając Szafie, to myślę, że dobrze mnie zrozumiałeś. Chodzi o to by z pętli głównej, gdzie ma być tylko funkcja obsługi przycisku, którzy włączałby podprogram, przejść właśnie do podprogramu, w którym tak na prawdę, będzie cały główny program, zarządzający wszystkimi czujnikami, ledami i przyciskami.

Przy okazji mam pytanie czy tak jak w przypadku 'void setup ()',można umieścić funkcje które będą tylko raz uruchamiane zaraz po uruchomieniu arduino, to można też w takim podprogramie umieścić określoną funkcję, która również będzie się tylko raz uruchamiać zaraz po uruchomieniu tego podprogramu ?
 
Odpowiedź
#5
(22-06-2016, 01:31)mavi napisał(a): Dzięki za przykład. A odpowiadając Szafie, to myślę, że dobrze mnie zrozumiałeś. Chodzi o to by z pętli głównej, gdzie ma być tylko funkcja obsługi przycisku, którzy włączałby podprogram, przejść właśnie do podprogramu, w którym tak na prawdę, będzie cały główny program, zarządzający wszystkimi czujnikami, ledami i przyciskami.

Przy okazji mam pytanie czy tak jak w przypadku 'void setup ()',można umieścić funkcje które będą tylko raz uruchamiane zaraz po uruchomieniu arduino, to można też w takim podprogramie umieścić określoną funkcję, która również będzie się tylko raz uruchamiać  zaraz po uruchomieniu tego podprogramu ?

Jasne, że tak, kwestia użycia np. flagi i odpowiedniego warunku logicznego. Flaga powinna być zerowana przed pętlą podprogramu przy uruchomieniu podprogramu i ustawiana zaraz po jego wykonaniu.

fl = 0;

pętla podprogramu{
if(!fl)
{
podprogram
fl = 1;
}
}

Albo jeszcze prościej, po prostu wykonanie po prostu przed pętlą. Wtedy wykona się tylko raz.
 
Odpowiedź
#6
(22-06-2016, 10:44)Szafa napisał(a): Jasne, że tak, kwestia użycia np. flagi i odpowiedniego warunku logicznego. Flaga powinna być zerowana przed pętlą podprogramu przy uruchomieniu podprogramu i ustawiana zaraz po jego wykonaniu.

fl = 0;

pętla podprogramu{
if(!fl)
{
podprogram
fl = 1;
}
}

Albo jeszcze prościej, po prostu wykonanie po prostu przed pętlą. Wtedy wykona się tylko raz.

A ja powiem, że bez sensu to napisałeś bo Void setup jest wykonywana tylko raz sama nazwa wskazuje setup czyli konfiguracja jasne, że można wrzucić while i zapętlić . A wiec piszesz co chcesz i tylko ras się wykona to znaczy do następnego resetu.
[Obrazek: banerelektronika.jpg]



Jeśli pomogłem podziękuj punktem reputacji Wink
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości