• 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
Sterowanie ośmioma przekaźnikami
#11
Kod:
int stan = 0;
void setup() {
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(11, INPUT_PULLUP); //Przycisk jako wejście
// digitalWrite(11, INPUT_PULLUP); //Włączenie przekaźnika nie wiem po co to jest pytanie do autora
  digitalWrite(2, HIGH);
  digitalWrite(3, HIGH);
  digitalWrite(4, HIGH);
  digitalWrite(5, HIGH);
  digitalWrite(6, HIGH);
  digitalWrite(7, HIGH);
  digitalWrite(8, HIGH);
  digitalWrite(9, HIGH);
}

void loop()
{
  if (digitalRead(11) == LOW && stan ==0 ) { //Jeśli przycisk wciśnięty i zmienna stan jest równa 0
    digitalWrite(2, LOW); //Włącz przekaźnik
    delay(1000); //Czekamy 1 sekund
    digitalWrite(3, LOW); //Włącz
    delay(1000); //Czekamy 1 sekund
    digitalWrite(4, LOW); //Włącz
    delay(1000); //Czekamy 1 sekund
    digitalWrite(5, LOW); //Włącz
    delay(1000); //Czekamy 1 sekund
    digitalWrite(6, LOW); //Włącz
    delay(1000); //Czekamy 1 sekund
    digitalWrite(7, LOW); //Włącz
    delay(1000); //Czekamy 1 sekund
    digitalWrite(8, LOW); //Włącz
    delay(1000); //Czekamy 1 sekund
    digitalWrite(9, LOW); //Włącz
    stan = 1;
  }
    if (digitalRead(11) == LOW && stan ==1 ) { //Jeśli przycisk wciśnięty i zmienna stan jest równa 1
    digitalWrite(9, HIGH); //Włącz przekaźnik
    delay(2000); //Czekamy 2 sekundy
    digitalWrite(8, HIGH); //Wyłącz
    delay(2000); //Czekamy 2 sekundy
    digitalWrite(7, HIGH); //Wyłącz
    delay(2000); //Czekamy 2 sekundy
    digitalWrite(6, HIGH); //Wyłącz
    delay(2000); //Czekamy 2 sekundy
    digitalWrite(5, HIGH); //Wyłącz
    delay(2000); //Czekamy 2 sekundy
    digitalWrite(4, HIGH); //Wyłącz
    delay(2000); //Czekamy 2 sekundy
    digitalWrite(2, HIGH); //Wyłącz
    delay(2000); //Czekamy 2 sekundy
    digitalWrite(2, HIGH); //Wyłącz
    stan = 0;
  }

 
  }
Może to zadziała.
Wiem, że można zrobić inaczej bardziej elegancko, ale chciałem pokazać, że tak też można. 
Procesor z tym kodem oczywiście oprócz włączania i wyłączania przekaźników już nic więcej nie potrafi robić, no chyba, że nie będzie się w tym czasie naciskać przycisku.
 
Odpowiedź
#12
Thumbs Up 
[quote pid='13892' dateline='1569249738']
Agregacik  - Program działa tego właśnie potrzebowałem ( prosto zwięźle i na temat ) dzięki
ale widzę że muszę bardzo dużo się nauczyć

Jarewa0606 - https://forbot.pl/blog/kurs-arduino-srod...owac-id936 
na pewno skorzystam z kursu wszystkiego mnie nie nauczy ale podstawy jakieś złapię dzięki za link
[/quote]
 
Odpowiedź
#13
(23-09-2019, 16:42)Agregacik napisał(a):
Kod:
int stan = 0;
void setup() {
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(11, INPUT_PULLUP); //Przycisk jako wejście
// digitalWrite(11, INPUT_PULLUP); //Włączenie przekaźnika nie wiem po co to jest pytanie do autora
  digitalWrite(2, HIGH);
  digitalWrite(3, HIGH);
  digitalWrite(4, HIGH);
  digitalWrite(5, HIGH);
  digitalWrite(6, HIGH);
  digitalWrite(7, HIGH);
  digitalWrite(8, HIGH);
  digitalWrite(9, HIGH);
}

void loop()
{
  if (digitalRead(11) == LOW && stan ==0 ) { //Jeśli przycisk wciśnięty i zmienna stan jest równa 0
    digitalWrite(2, LOW); //Włącz przekaźnik
    delay(1000); //Czekamy 1 sekund
    digitalWrite(3, LOW); //Włącz
    delay(1000); //Czekamy 1 sekund
    digitalWrite(4, LOW); //Włącz
    delay(1000); //Czekamy 1 sekund
    digitalWrite(5, LOW); //Włącz
    delay(1000); //Czekamy 1 sekund
    digitalWrite(6, LOW); //Włącz
    delay(1000); //Czekamy 1 sekund
    digitalWrite(7, LOW); //Włącz
    delay(1000); //Czekamy 1 sekund
    digitalWrite(8, LOW); //Włącz
    delay(1000); //Czekamy 1 sekund
    digitalWrite(9, LOW); //Włącz
    stan = 1;
  }
    if (digitalRead(11) == LOW && stan ==1 ) { //Jeśli przycisk wciśnięty i zmienna stan jest równa 1
    digitalWrite(9, HIGH); //Włącz przekaźnik
    delay(2000); //Czekamy 2 sekundy
    digitalWrite(8, HIGH); //Wyłącz
    delay(2000); //Czekamy 2 sekundy
    digitalWrite(7, HIGH); //Wyłącz
    delay(2000); //Czekamy 2 sekundy
    digitalWrite(6, HIGH); //Wyłącz
    delay(2000); //Czekamy 2 sekundy
    digitalWrite(5, HIGH); //Wyłącz
    delay(2000); //Czekamy 2 sekundy
    digitalWrite(4, HIGH); //Wyłącz
    delay(2000); //Czekamy 2 sekundy
    digitalWrite(2, HIGH); //Wyłącz
    delay(2000); //Czekamy 2 sekundy
    digitalWrite(2, HIGH); //Wyłącz
    stan = 0;
  }

 
  }
Może to zadziała.
W tym programie trzeba mieć dużo cierpliwości lub dużo szczęścia lub cierpliwości. Stan przycisku jest badany w czasie us a cały cykl trwa nawet 14 sekund. Osobiście nie chciałbym czekać 14 sekund na reakcje programu, to nie u$oft Gwindows, gdzie i 30 sekund a nawet więcej za menu czy innymi reakcjami się czeka.
 
Odpowiedź
#14
@semi.
I tak trzeba poczekać aż wszystkie przekaźniki się załączą lub wyłączą, więc w czym rzecz. Przecież nie nawtykasz programowi "naduszeń" skolko godno. Tego potrzebował autor a, że w ten sposób zaproponowałem to tylko dlatego, że inni pisali, że się nie da.
 
Odpowiedź
#15
Tylko gorzej jak będzie chciał coś dodać inną funkcje to czeka go niespodzianka... Bo w tej chwili jest funkcja blokująca i dopiero po 14sek można przyciskiem włączyć nie szybciej...
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
#16
O tym pisałem w moim poście. Takie rozwiązanie właściwie tylko do załączania i wyłączania przekaźników. Jak coś więcej chciałby robić to trzeba inaczej rozwiązać sprawy opóźnień. Sekunda czy dwie to "wieki" dla mikroprocesora.
 
Odpowiedź
#17
(23-09-2019, 23:00)Agregacik napisał(a): @semi.
I tak trzeba poczekać aż wszystkie przekaźniki się załączą lub wyłączą, więc w czym rzecz.
W tym, że muszę trzymać przycisk nie wiadomo jak długo? Może akurat trafię i będzie to 10ms, a może mam pecha i 14 sekund.
Reakcja na zdarzenie wywołane przez człowieka powinna byc w max 100..200ms, 500ms już jest zauważalne i denerwujące, dłuższe czasy to zemsta programisty nad użytkownikiem. Tu mamy jeszcze problem hazardu. Jak długo trzymać przycisk?

Jeśli program ma zawsze wykonać sekwencję do końca to niech robi ale na przycisk powinien reagować natychmiastowo a kierunek sygnalizować np diodą LED.


W praktyce, program z delay to nie program to demo.
Blokowanie pętli głównej na dłużej niż kilkadziesiąt ms to "wykroczenie" ponad 100ms to "przestępstwo", gdy sa to sekundy to "przestępstwo zagrożone karą dożywotniego zakazu pisania programów". Pętla powinna wykonać się średnio w kilka ms, dopuszczalne chwilowe dłuższe czasy.
 
Odpowiedź
#18
(24-09-2019, 12:53)semi napisał(a):
(23-09-2019, 23:00)Agregacik napisał(a): @semi.
I tak trzeba poczekać aż wszystkie przekaźniki się załączą lub wyłączą, więc w czym rzecz.
W tym, że muszę trzymać przycisk nie wiadomo jak długo? Może akurat trafię i będzie to 10ms, a może mam pecha i 14 sekund.
Reakcja na zdarzenie wywołane przez człowieka powinna byc w max 100..200ms, 500ms już jest zauważalne i denerwujące, dłuższe czasy to zemsta programisty nad użytkownikiem. Tu mamy jeszcze problem hazardu. Jak długo trzymać przycisk?

Jeśli program ma zawsze wykonać sekwencję do końca to niech robi ale na przycisk powinien reagować natychmiastowo a kierunek sygnalizować np diodą LED.


W praktyce, program z delay to nie program to demo.
Blokowanie pętli głównej na dłużej niż kilkadziesiąt ms to "wykroczenie" ponad 100ms to "przestępstwo", gdy sa to sekundy to "przestępstwo zagrożone karą dożywotniego zakazu pisania programów". Pętla powinna wykonać się średnio w kilka ms, dopuszczalne chwilowe dłuższe czasy.
To jest właśnie program DEMO co napisałem.
Po co chcesz przyciskać przycisk jak wszystkie przekaźniki czy lampki się jeszcze nie zaświeciły czy zgasiły. Autorowi właśnie się rozchodzi o to, aby można je było zgasić dopiero jak się zapalą wszystkie i będzie je miał ochotę zgasić naciskając przycisk i ewentualnie po zgaszeniu nacisnąć przycisk, aby się znowu zapalały. 
Po co chcesz mieć reakcję przycisku w trakcie sekwencji zapalania czy gaszenia. Nieważne czy będzie z delay czy bez i tak przycisk nie będzie reagował na Twoje przyciskanie w trakcie sekwencji zapalania czy gaszenia, taki jest wymóg autora.
Jak potrzebujesz zmiany kierunku sekwencji na każde Twoje naciśnięcie przycisku to napisz. Pomogę Ci napisać taki program Smile.
 
Odpowiedź
#19
Tak jak Agregacik napisał chodziło mi o to żeby to ruszyło i taki program mi napisał a czy to demo czy inne coś jest mało ważne jak dla mnie miało to działać a nie wyglądać
Przeliczyłem siły nad zamiary że samemu coś wykonam,niestety przyznaje z bólem że czekałem na tzw. gotowca ( czas mnie już gonił) gdyby nikt nie pomógł miałem zamiar kupić przekaźnik programowalny rel... i napisać program w systemie drabinkowym
Arduino jest tanie ma sporo możliwości ale trzeba mieć łeb jak szafę żeby to wszystko ogarniać
 
Odpowiedź
#20
(24-09-2019, 19:28)Piotr82 napisał(a): Arduino jest tanie ma sporo możliwości ale trzeba mieć łeb jak szafę żeby to wszystko ogarniać
Tu się zgodzę, choć założenia były inne - prosto, łatwo i przyjemnie a wyszło jak zwykle.

Początkowo wydaje się, że Arduino jest super, niestety, ze względu na źle napisane biblioteki, kiepskie programy dostępne w sieci, małe możliwości AVR po czasie okazuje się, że jak działa jedna funkcja to nie działa inna a mogłoby być inaczej. Niestety, programiści od Arduino to amatorscy amatorzy, dlaczego nie ma profesjonalistów? Bo jeśli ktoś potrafi pisać soft to widzi ograniczenia Arduino i pisze na inne platformy.

Spróbowałem się z konieczności z pisaniem biblioteki na Arduino i to było tak złe doświadczenie jak z Bascom. Wszystko po kolei ma ograniczenia. Jak zmodyfikowałem jakieś funkcje (nie zawsze się daje, bo autorzy bibliotek nie zostawiają furtek) to okazało się, że coś innego przeszkadza. W konsekwencji z biblioteki SPI i I2C została tylko inicjalizacja (ile to w C? dwie linijki?). W praktyce wygląda to tak, że prościej wszystko napisać od nowa zamiast reanimować trupa. To co dobija Arduino na AVR to C++ zamiast C. nawet na procesory 32 bit z setkami kb RAM bardzo ale to bardzo rzadko pisze się w C++. Co za oszołom wybrał C++ dla AVR? Trzeba być dobrym programistom aby dobrze używać C++ na małych mikrokontrolerach, z śladową ilością RAM, bez MMU. Ilu arduinowców wie co to jest i jak działa? Właściwie po co MMU gdy dostępne jest 2kB RAM? Kółko się zamyka.

Kończę drugi projekt dla Arduino, zostały jeszcze dwa i na tym koniec. Nawet stawka x 4 mnie nie przekona. Szkoda życia dla AVR tym bardziej dla Arduino.
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości