Skocz do zawartości

Arduino przełącznik on/off


dominik.andreck

Pomocna odpowiedź

49 minut temu, ethanak napisał:

A przede wszystkim mówisz o on-off czy on-off-on?

Tu muszę sprostować bo mówiąc o dwupozycyjnym miałem na myśli trzypozycyjny czyli on-off-on, ale to nic nie zmienia bo dalej mogę tu użyć jednego pinu😁hehe

Link do komentarza
Share on other sites

Przed chwilą, ethanak napisał:

 Jeśli tak to schemat i kod poproszę.

Kod to akurat latwizna, ale fakt..jeśli chce odczytywać dwa stany na tym pinie to mogę zapomnieć o podciąganiu rezystorów, a wiadomo co się może stać na takim pinie😢

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

4 minuty temu, dominik.andreck napisał:

Chodzi o przelacznik 2 pozycyjny albo on albo off (2 Piny) 

Ok więc się wyjaśniło 😉 a powiedz jeszcze łaskawie, czy gdy sekwencja kodu1 się wykona to ma się wykonać po przerwie kod2?? Bo tak zrozumiałem z twojego opisu..("po upływie 1s.......")

Edytowano przez farmaceuta
Link do komentarza
Share on other sites

7 minut temu, dominik.andreck napisał:

Przycisk on - ma wykonać kod1

Czekać na zmianę stanu

I drugą wersję kodu

E to latwizna..😉 napewno sobie poradzisz 👍😁

 

Edit...świrowałem😜 wiem jak to jest jak człowiek chce coś zrobić a nie potrafi..na spokojnie coś się napiszę, cierpliwości😉

Edytowano przez farmaceuta
Link do komentarza
Share on other sites

23 godziny temu, farmaceuta napisał:

Kod to akurat latwizna, ale fakt..jeśli chce odczytywać dwa stany na tym pinie to mogę zapomnieć o podciąganiu rezystorów, a wiadomo co się może stać na takim pinie😢

A jak zachowa się pin bez wewnętrznych podciągnięć i zewnętrznym dzielnikiem na wartość "zakazaną" - wyższe od GND, niższe od VCC? Nie wiem, pytam się, może głupio, może mądrze. Można spróbować taką implementację dwóch stanów na jednym pinie. Zarówno wejście, jak i wyjście, tylko wtedy jak układ odbierający taki sygnał się zachowa 😄

Edytowano przez matsobdev
Link do komentarza
Share on other sites

A po co tak, jeśli wystarczy pull* i podłączenie pinu do gnd/vcc?

A w stanie "zakazanym" na pinie będzie stan CWJ 1)

Takie numery mozna robić z pinami analogowymi.

Oczywiście można wykryć kilka różmych napięć na pinie cyfrowym robiąc najprostszą namiastkę adc, ale chyba nie o to chodziło

---

1) Czort Wie Jaki

Link do komentarza
Share on other sites

#define PRZEKAZNIK1_PIN 2 // pin przekaznika 1
#define PRZEKAZNIK2_PIN 3 // pin przekaznika 2
#define LED_PIN 4 // pin leda
#define INTERWAL 500 // czas "mrygania" led w ms
#define INTERWAL_2 5000 // czas dlugiego wlaczenia led w ms
#define SW_PIN 5   //pin przelacznika 
#define ILOSC_MIGNIEC 10   // ilosc migniec led * 2 (5 migniec = 10)

bool flaga_s1 = 1;
bool flaga_s2 = 1;
bool stan_led = 0;

void setup() {
   pinMode(PRZEKAZNIK1_PIN, OUTPUT);
   pinMode(PRZEKAZNIK2_PIN, OUTPUT);
   pinMode(LED_PIN, OUTPUT);
   pinMode(SW_PIN, INPUT_PULLUP);

}

void loop() {
    if (digitalRead(SW_PIN) == HIGH && flaga_s1 == true) {
      fun(PRZEKAZNIK1_PIN, LED_PIN,INTERWAL,INTERWAL_2);
      flaga_s1 = false;
      flaga_s2 = true;
   }
    if (digitalRead(SW_PIN) == LOW && flaga_s2 == true) {
      fun(PRZEKAZNIK2_PIN, LED_PIN, INTERWAL, INTERWAL_2);
      flaga_s2 = false;
      flaga_s1 = true;
   }

    
}

void fun(byte relay, byte led_pin, int interwal, int interwal_2) {

    digitalWrite(relay, HIGH);
   
  for (byte i = 0; i < ILOSC_MIGNIEC; i++) {
    digitalWrite(led_pin, !stan_led);
    delay(interwal);
  
}
     digitalWrite(relay, LOW);
     digitalWrite(LED_PIN, HIGH);
     delay(interwal_2);
     digitalWrite(LED_PIN, LOW);

}

Tylko tak..podczas uruchomienia wykona się sekwencja 1 lub 2 w zależności od pozycji SW..druga sprawa to to że jak zacznie się wykonywać sekwencja to nie można jej przerwać (musi się skończyć)...sprawdź czy o to Ci chodziło

Edytowano przez farmaceuta
Link do komentarza
Share on other sites

16 godzin temu, farmaceuta napisał:
#define PRZEKAZNIK1_PIN 2 // pin przekaznika 1
#define PRZEKAZNIK2_PIN 3 // pin przekaznika 2
#define LED_PIN 4 // pin leda
#define INTERWAL 500 // czas "mrygania" led w ms
#define INTERWAL_2 5000 // czas dlugiego wlaczenia led w ms
#define SW_PIN 5   //pin przelacznika 
#define ILOSC_MIGNIEC 10   // ilosc migniec led * 2 (5 migniec = 10)

bool flaga_s1 = 1;
bool flaga_s2 = 1;
bool stan_led = 0;

void setup() {
   pinMode(PRZEKAZNIK1_PIN, OUTPUT);
   pinMode(PRZEKAZNIK2_PIN, OUTPUT);
   pinMode(LED_PIN, OUTPUT);
   pinMode(SW_PIN, INPUT_PULLUP);

}

void loop() {
    if (digitalRead(SW_PIN) == HIGH && flaga_s1 == true) {
      fun(PRZEKAZNIK1_PIN, LED_PIN,INTERWAL,INTERWAL_2);
      flaga_s1 = false;
      flaga_s2 = true;
   }
    if (digitalRead(SW_PIN) == LOW && flaga_s2 == true) {
      fun(PRZEKAZNIK2_PIN, LED_PIN, INTERWAL, INTERWAL_2);
      flaga_s2 = false;
      flaga_s1 = true;
   }

    
}

void fun(byte relay, byte led_pin, int interwal, int interwal_2) {

    digitalWrite(relay, HIGH);
   
  for (byte i = 0; i < ILOSC_MIGNIEC; i++) {
    digitalWrite(led_pin, !stan_led);
    delay(interwal);
  
}
     digitalWrite(relay, LOW);
     digitalWrite(LED_PIN, HIGH);
     delay(interwal_2);
     digitalWrite(LED_PIN, LOW);

}

Tylko tak..podczas uruchomienia wykona się sekwencja 1 lub 2 w zależności od pozycji SW..druga sprawa to to że jak zacznie się wykonywać sekwencja to nie można jej przerwać (musi się skończyć)...sprawdź czy o to Ci chodziło

Dziękuje za niego, tylko nie do końca działa
Musiałem dodać 
stan_led = !stan_led; - i dopiero mruga (co prawda na czas kiedy "coś" dzieje się z przekaźnikiem ale okej 😄 )

Tylko nie mogę sobie poradzić z przekaźnikiem oraz dioda
- W stanie wysokim potrzebowałbym aby ona została włączona (a gaśnie)
- A w przekaźniki cały czas są "włączone", jak już zauważyłem działają one przez GND (nie wiem czy są różne rodzaje)
 Raczej słabo aby były cały czas włączone?

 

#define PRZEKAZNIK1_PIN 6 // pin przekaznika 1  - 2
#define PRZEKAZNIK2_PIN 3 // pin przekaznika 2  - 3
#define LED_PIN 13 // pin leda - był 4
#define INTERWAL 250 // czas "mrygania" led w ms
#define INTERWAL_2 1000 // czas dlugiego wlaczenia led w ms
#define SW_PIN 7   //pin przelacznika //5
#define ILOSC_MIGNIEC 15   // ilosc migniec led * 2 (5 migniec = 10)


bool flaga_s1 = 1;
bool flaga_s2 = 1;
bool stan_led = 0;

void setup() {
   pinMode(PRZEKAZNIK1_PIN, OUTPUT);
   pinMode(PRZEKAZNIK2_PIN, OUTPUT);
   pinMode(LED_PIN, OUTPUT);
   pinMode(SW_PIN, INPUT_PULLUP);

}

void loop() {
    if (digitalRead(SW_PIN) == HIGH && flaga_s1 == true) {
      fun(PRZEKAZNIK1_PIN, LED_PIN,INTERWAL,INTERWAL_2);
      flaga_s1 = false;
      flaga_s2 = true;
   }
    if (digitalRead(SW_PIN) == LOW && flaga_s2 == true) {
      fun(PRZEKAZNIK2_PIN, LED_PIN, INTERWAL, INTERWAL_2);
      flaga_s2 = false;
      flaga_s1 = true;
   }

    
}

void fun(byte relay, byte led_pin, int interwal, int interwal_2) {

    digitalWrite(relay, HIGH);
   
  for (byte i = 0; i < ILOSC_MIGNIEC; i++) {
    stan_led = !stan_led; //nie było - nie "mruga" wtedy
    digitalWrite(led_pin, !stan_led);
    delay(interwal); // interwal
    

  
}
     digitalWrite(relay, LOW); //LOW
     digitalWrite(LED_PIN, HIGH);
     delay(interwal); //interwal_2
     digitalWrite(LED_PIN, LOW); //bez tej linijki dioda cały czas jest włączona niezależnie od stanu

}

 

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.