• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Arduino sterowanie dioda za pomocą przycisku

Object Storage Arubacloud
0 głosów
1,497 wizyt
pytanie zadane 3 lutego 2020 w Mikrokontrolery przez Marak123 Stary wyjadacz (11,190 p.)
zamknięte 5 lutego 2020 przez Marak123
Chce zrobić skrypt który wyłączy diodę po przytrzymaniu przycisku przez 5 sekund tylko nie wiem jak to zrobić znalazłem funkcje millis() tylko ze nie wiem jak ją wykorzystać. Wie ktoś może jak zrobić coś takiego że po przytrzymaniu przycisku dioda się wyłączy?
komentarz zamknięcia: Rozwiązałem Nelson89 pomógł
komentarz 4 lutego 2020 przez profesorek96 Szeryf (91,420 p.)
Czyli czekaj, dioda normalnie się świeci jednak jak przytrzymasz przycisk dłużej niż 5 sekund ona zgaśnie ? Czy ponowne naciśnięcie przycisku przez 5 sekund ma ją włączyć ?
komentarz 4 lutego 2020 przez Marak123 Stary wyjadacz (11,190 p.)
Tak

2 odpowiedzi

0 głosów
odpowiedź 4 lutego 2020 przez Nelson89 Dyskutant (7,720 p.)

Cześć,

W najprostszej wersji możesz stworzyć funkcję, która będzie uruchamiać się przy każdym wykonaniu głównej pętli loop i ta dodatkowa funkcja będzie sprawdzać czy przycisk ma określony stan i czy spełniony jest warunek wyłączenia diody.

Poniżej znajdziesz kod. Za każdym razem gdy przycisk jest wciśnięty na dłużej niż 5 sekund to wyjście zmienia swój stan na przeciwny do poprzedniego stanu.

int in_pin = 2;
int out_pin = 13;

void setup() {
  pinMode(out_pin, OUTPUT);
  pinMode(in_pin, INPUT);
  digitalWrite(out_pin, HIGH);
}

void loop() {
  sprawdz_stan_wejscia();
}

void sprawdz_stan_wejscia(){
  static double start = 0;
  double koniec = millis();
  int stan_wejscia; 
  int stan_wyjscia;

  stan_wejscia = digitalRead(inPin);
  if (stan_wejscia == 1){
    if (koniec - start > 5000){
      stan_wyjscia = !digitalRead(outPin);
      digitalWrite(outPin, stan_wyjscia); 
      start = koniec;
    }
  }
  else{
    start = koniec;
  }
}

 

W tym rozwiązaniu wyjście zmieni swój stan tylko wtedy gdy przycisk będzie wciśnięty na dłużej niż 5 sekund. Dokładność czasowa tego rozwiązania jest zależna od tego, ile kodu, ile poleceń będziesz mieć w pętli głównej loop.

Pozdrawiam

komentarz 4 lutego 2020 przez Marak123 Stary wyjadacz (11,190 p.)
nie za bardzo działa trzymam przycisk i nic
komentarz 5 lutego 2020 przez Nelson89 Dyskutant (7,720 p.)

Jesteś pewien, że układ został poprawnie podłączony? Przy wgrywaniu kodu pojawia się jakiś komunikat? - W kodzie który podałem znalazło się kilka błędów w nazewnictwie zmiennych:

linia 20 zamiast inPin to in_pin

linia 23 zamiast outPin to out_pin

linia 24 zamiast outPin to out_pin

Poniżej przesyłam schemat połączenia jaki na moim arduino utworzyłem aby sprawdzić czy to rozwiązanie działa.

komentarz 5 lutego 2020 przez Marak123 Stary wyjadacz (11,190 p.)
Dobra działa inaczej miałem podłączone
0 głosów
odpowiedź 5 lutego 2020 przez XxPPDKxX Obywatel (1,400 p.)

Kolega podał ci dobry kod z drobnymi błędami. Między innymi przy guzikach musi być pinMode(in_pin, INPUT_PULLUP);

Tu ci daję kod poprawiony: 

int in_pin = 2;
int out_pin = 13;
 
void setup() {
  pinMode(out_pin, OUTPUT);
  pinMode(in_pin, INPUT_PULLUP);
  digitalWrite(out_pin, HIGH);
}
 
void loop() {
  sprawdz_stan_wejscia();
}
 
void sprawdz_stan_wejscia(){
  static double start = 0;
  double koniec = millis();
  int stan_wejscia; 
  int stan_wyjscia;
 
  stan_wejscia = digitalRead(in_pin);
  if (stan_wejscia == 1){
    if (koniec - start > 5000){
      stan_wyjscia = !digitalRead(out_pin);
      digitalWrite(out_pin, stan_wyjscia); 
      start = koniec;
    }
  }
  else{
    start = koniec;
  }
}

 

komentarz 5 lutego 2020 przez Marak123 Stary wyjadacz (11,190 p.)
Ten kod tez nie za bardzo działa bo zamiast wyłączanie diody się po przytrzymaniu przycisku to dioda mruga
komentarz 5 lutego 2020 przez XxPPDKxX Obywatel (1,400 p.)
edycja 5 lutego 2020 przez XxPPDKxX
Testowałem u siebie na płytce i dział poprawnie. Jak wrócę do domu to sprawdzę to jeszcze raz.
komentarz 5 lutego 2020 przez Marak123 Stary wyjadacz (11,190 p.)

@XxPPDKxX, Dobra działa ale mi nadal mruga

Podobne pytania

0 głosów
1 odpowiedź 1,464 wizyt
pytanie zadane 6 grudnia 2019 w Sprzęt komputerowy przez Gabel88 Początkujący (430 p.)
0 głosów
1 odpowiedź 2,083 wizyt
pytanie zadane 25 grudnia 2016 w Mikrokontrolery przez szerwi Użytkownik (620 p.)
0 głosów
1 odpowiedź 263 wizyt

92,551 zapytań

141,395 odpowiedzi

319,526 komentarzy

61,936 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...